diff --git a/DEPS b/DEPS
index a1ae48ec..bc31061 100644
--- a/DEPS
+++ b/DEPS
@@ -228,11 +228,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': '14a9b089b6bf119e207b827700c4f20bac97b2ed',
+  'skia_revision': 'edc6740a130fcd14e3305ff17a4de657e8c5e531',
   # 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': '6eda84172c2b6944bfde640c0337a4ce80582650',
+  'v8_revision': '23ed6699dd2f1e5730b67d1755b202ca1e7b8a6c',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
@@ -303,7 +303,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling devtools-frontend
   # and whatever else without interference from each other.
-  'devtools_frontend_revision': '04d4b64221e472bcbd5d1de16bef59c2cb9f8d02',
+  'devtools_frontend_revision': 'cbbc88e1528bd80fbe102d85bf82706adc5dc87a',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libprotobuf-mutator
   # and whatever else without interference from each other.
@@ -343,7 +343,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': '1a965ab7f8ba4f3a1e52a99a6ad53e15457f1fea',
+  'dawn_revision': '92d6e53e6def5b995dc67a3a15a7021bd0e19be8',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -773,7 +773,7 @@
     'packages': [
       {
           'package': 'chromium/third_party/androidx',
-          'version': 'jagpxzoq8SusfDjtewx558yIOnyvOSm2eGzxQc7-n7EC',
+          'version': '-p7HUEhWbHNpHzWMFxgf5JMct4Dp0DHUeY6Ybtni3IwC',
       },
     ],
     'condition': 'checkout_android',
@@ -1012,7 +1012,7 @@
   },
 
   'src/third_party/depot_tools':
-    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'c1fd44b01a571e82dea1aa16d9174c7c73f30118',
+    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '9a76798c9eecc5d229e5c64ac7cfe8f2d3ce0e5e',
 
   'src/third_party/devtools-frontend/src':
     Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'),
@@ -1476,7 +1476,7 @@
       'packages': [
           {
               'package': 'fuchsia/third_party/aemu/linux-amd64',
-              'version': '17S2VQDv3RUfAsW4s0c53HyKMVsd-i_1DocJS0aHWu4C'
+              'version': 'bOp0PE8R9VUQxsHclvuA10P4iOaWjRRpsK8ZQKtAZCAC'
           },
       ],
       'condition': 'host_os == "linux" and checkout_fuchsia',
@@ -1619,7 +1619,7 @@
     Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + 'cd2e35814071e2732f1cb13db8387ebf41bfe98f',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + 'ef4d0b6c7a4ab2ac4b460c79af3cf858cd6acbb5',
+    Var('webrtc_git') + '/src.git' + '@' + 'ba995a98a52553c965188d9a5a4c212a5f26ba0e',
 
   'src/third_party/libgifcodec':
      Var('skia_git') + '/libgifcodec' + '@'+  Var('libgifcodec_revision'),
@@ -1677,7 +1677,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@b0ca9bbf75018ccb82c70aeb1fd47766eb5bd179',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@179c1be03a269b574ecf451f34bf1beb4a5257da',
     'condition': 'checkout_src_internal',
   },
 
diff --git a/ash/components/quick_answers/BUILD.gn b/ash/components/quick_answers/BUILD.gn
index 08d66351..ef2c1d3 100644
--- a/ash/components/quick_answers/BUILD.gn
+++ b/ash/components/quick_answers/BUILD.gn
@@ -22,8 +22,6 @@
     "search_result_parsers/result_parser.h",
     "search_result_parsers/search_response_parser.cc",
     "search_result_parsers/search_response_parser.h",
-    "search_result_parsers/translation_result_parser.cc",
-    "search_result_parsers/translation_result_parser.h",
     "search_result_parsers/unit_conversion_result_parser.cc",
     "search_result_parsers/unit_conversion_result_parser.h",
     "translation_response_parser.cc",
@@ -73,7 +71,6 @@
     "search_result_parsers/kp_entity_result_parser_unittest.cc",
     "search_result_parsers/result_parser_unittest.cc",
     "search_result_parsers/search_response_parser_unittest.cc",
-    "search_result_parsers/translation_result_parser_unittest.cc",
     "search_result_parsers/unit_conversion_result_parser_unittest.cc",
     "test/test_helpers.cc",
     "test/test_helpers.h",
diff --git a/ash/components/quick_answers/quick_answers_client_unittest.cc b/ash/components/quick_answers/quick_answers_client_unittest.cc
index a333f3e3..71046f6 100644
--- a/ash/components/quick_answers/quick_answers_client_unittest.cc
+++ b/ash/components/quick_answers/quick_answers_client_unittest.cc
@@ -232,32 +232,6 @@
       IntentInfo("unfathomable", IntentType::kDictionary));
 }
 
-TEST_F(QuickAnswersClientTest, PreprocessTranslationIntent) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndDisableFeature(
-      features::kQuickAnswersTranslationCloudAPI);
-  std::unique_ptr<QuickAnswersRequest> quick_answers_request =
-      std::make_unique<QuickAnswersRequest>();
-  quick_answers_request->selected_text = "sel";
-
-  // Verify that |OnRequestPreprocessFinished| is called.
-  std::unique_ptr<QuickAnswersRequest> processed_request =
-      std::make_unique<QuickAnswersRequest>();
-  processed_request->selected_text = "sel";
-  PreprocessedOutput expected_processed_output;
-  expected_processed_output.intent_info.intent_text = "intent text";
-  expected_processed_output.query = "Translate:intent text";
-  expected_processed_output.intent_info.intent_type = IntentType::kTranslation;
-  processed_request->preprocessed_output = expected_processed_output;
-  EXPECT_CALL(*mock_delegate_,
-              OnRequestPreprocessFinished(
-                  QuickAnswersRequestWithOutputEqual(*processed_request)));
-
-  client_->IntentGeneratorCallback(
-      *quick_answers_request, /*skip_fetch=*/false,
-      IntentInfo("intent text", IntentType::kTranslation));
-}
-
 TEST_F(QuickAnswersClientTest, PreprocessUnitConversionIntent) {
   std::unique_ptr<QuickAnswersRequest> quick_answers_request =
       std::make_unique<QuickAnswersRequest>();
diff --git a/ash/components/quick_answers/result_loader.cc b/ash/components/quick_answers/result_loader.cc
index 17aac07..48506a1 100644
--- a/ash/components/quick_answers/result_loader.cc
+++ b/ash/components/quick_answers/result_loader.cc
@@ -7,7 +7,6 @@
 #include "ash/components/quick_answers/search_result_loader.h"
 #include "ash/components/quick_answers/translation_result_loader.h"
 #include "ash/components/quick_answers/utils/quick_answers_metrics.h"
-#include "ash/constants/ash_features.h"
 #include "base/bind.h"
 #include "services/network/public/cpp/resource_request.h"
 #include "services/network/public/cpp/simple_url_loader.h"
@@ -53,8 +52,7 @@
     IntentType intent_type,
     URLLoaderFactory* url_loader_factory,
     ResultLoader::ResultLoaderDelegate* delegate) {
-  if (features::IsQuickAnswersTranslationCloudAPIEnabled() &&
-      intent_type == IntentType::kTranslation)
+  if (intent_type == IntentType::kTranslation)
     return std::make_unique<TranslationResultLoader>(url_loader_factory,
                                                      delegate);
   return std::make_unique<SearchResultLoader>(url_loader_factory, delegate);
diff --git a/ash/components/quick_answers/search_result_parsers/result_parser.cc b/ash/components/quick_answers/search_result_parsers/result_parser.cc
index a9fb1035..9193da2a 100644
--- a/ash/components/quick_answers/search_result_parsers/result_parser.cc
+++ b/ash/components/quick_answers/search_result_parsers/result_parser.cc
@@ -6,7 +6,6 @@
 
 #include "ash/components/quick_answers/search_result_parsers/definition_result_parser.h"
 #include "ash/components/quick_answers/search_result_parsers/kp_entity_result_parser.h"
-#include "ash/components/quick_answers/search_result_parsers/translation_result_parser.h"
 #include "ash/components/quick_answers/search_result_parsers/unit_conversion_result_parser.h"
 #include "base/notreached.h"
 #include "base/values.h"
@@ -42,12 +41,13 @@
       return std::make_unique<KpEntityResultParser>();
     case ResultType::kDefinitionResult:
       return std::make_unique<DefinitionResultParser>();
-    case ResultType::kTranslationResult:
-      return std::make_unique<TranslationResultParser>();
     case ResultType::kUnitConversionResult:
       return std::make_unique<UnitConversionResultParser>();
       // TODO(llin): Add other result parsers.
 
+    // Translation responses are from the Clound server and parsed
+    // separately.
+    case ResultType::kTranslationResult:
     case ResultType::kNoResult:
       NOTREACHED();
       break;
diff --git a/ash/components/quick_answers/search_result_parsers/translation_result_parser.cc b/ash/components/quick_answers/search_result_parsers/translation_result_parser.cc
deleted file mode 100644
index 707a5bae..0000000
--- a/ash/components/quick_answers/search_result_parsers/translation_result_parser.cc
+++ /dev/null
@@ -1,58 +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.
-
-#include "ash/components/quick_answers/search_result_parsers/translation_result_parser.h"
-
-#include <string>
-
-#include "ash/components/quick_answers/utils/quick_answers_utils.h"
-#include "base/logging.h"
-#include "base/values.h"
-
-namespace ash {
-namespace quick_answers {
-namespace {
-using base::Value;
-
-constexpr char kSourceTextPath[] = "translateResult.sourceText";
-constexpr char kSourceLanguageLocalizedNamePath[] =
-    "translateResult.sourceTextLanguageLocalizedName";
-constexpr char kTranslatedTextPath[] = "translateResult.translatedText";
-
-}  // namespace
-
-// Extract |quick_answer| from translation result.
-bool TranslationResultParser::Parse(const Value* result,
-                                    QuickAnswer* quick_answer) {
-  const std::string* source_text = result->FindStringPath(kSourceTextPath);
-  if (!source_text) {
-    LOG(ERROR) << "Can't find source text.";
-    return false;
-  }
-
-  const std::string* source_text_language_localized_name =
-      result->FindStringPath(kSourceLanguageLocalizedNamePath);
-  if (!source_text_language_localized_name) {
-    LOG(ERROR) << "Can't find a source text language localized name.";
-    return false;
-  }
-
-  const std::string* translated_text =
-      result->FindStringPath(kTranslatedTextPath);
-  if (!translated_text) {
-    LOG(ERROR) << "Can't find a translated text.";
-    return false;
-  }
-  const std::string& secondary_answer = BuildTranslationTitleText(
-      source_text->c_str(), source_text_language_localized_name->c_str());
-  quick_answer->result_type = ResultType::kTranslationResult;
-  quick_answer->title.push_back(
-      std::make_unique<QuickAnswerText>(secondary_answer));
-  quick_answer->first_answer_row.push_back(
-      std::make_unique<QuickAnswerResultText>(*translated_text));
-  return true;
-}
-
-}  // namespace quick_answers
-}  // namespace ash
diff --git a/ash/components/quick_answers/search_result_parsers/translation_result_parser.h b/ash/components/quick_answers/search_result_parsers/translation_result_parser.h
deleted file mode 100644
index 040c70e0..0000000
--- a/ash/components/quick_answers/search_result_parsers/translation_result_parser.h
+++ /dev/null
@@ -1,26 +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.
-
-#ifndef ASH_COMPONENTS_QUICK_ANSWERS_SEARCH_RESULT_PARSERS_TRANSLATION_RESULT_PARSER_H_
-#define ASH_COMPONENTS_QUICK_ANSWERS_SEARCH_RESULT_PARSERS_TRANSLATION_RESULT_PARSER_H_
-
-#include "ash/components/quick_answers/search_result_parsers/result_parser.h"
-
-namespace base {
-class Value;
-}  // namespace base
-
-namespace ash {
-namespace quick_answers {
-
-class TranslationResultParser : public ResultParser {
- public:
-  // ResultParser:
-  bool Parse(const base::Value* result, QuickAnswer* quick_answer) override;
-};
-
-}  // namespace quick_answers
-}  // namespace ash
-
-#endif  // ASH_COMPONENTS_QUICK_ANSWERS_SEARCH_RESULT_PARSERS_TRANSLATION_RESULT_PARSER_H_
diff --git a/ash/components/quick_answers/search_result_parsers/translation_result_parser_unittest.cc b/ash/components/quick_answers/search_result_parsers/translation_result_parser_unittest.cc
deleted file mode 100644
index a2514863..0000000
--- a/ash/components/quick_answers/search_result_parsers/translation_result_parser_unittest.cc
+++ /dev/null
@@ -1,112 +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.
-
-#include "ash/components/quick_answers/search_result_parsers/translation_result_parser.h"
-
-#include <memory>
-#include <string>
-
-#include "ash/components/quick_answers/test/test_helpers.h"
-#include "base/strings/utf_string_conversions.h"
-#include "base/values.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace ash {
-namespace quick_answers {
-namespace {
-using base::Value;
-}  // namespace
-
-class TranslationResultParserTest : public testing::Test {
- public:
-  TranslationResultParserTest()
-      : parser_(std::make_unique<TranslationResultParser>()) {}
-
-  TranslationResultParserTest(const TranslationResultParserTest&) = delete;
-  TranslationResultParserTest& operator=(const TranslationResultParserTest&) =
-      delete;
-
- protected:
-  std::unique_ptr<TranslationResultParser> parser_;
-};
-
-TEST_F(TranslationResultParserTest, Success) {
-  Value result(Value::Type::DICTIONARY);
-  result.SetStringPath("translateResult.sourceText", "oxygen");
-  result.SetStringPath("translateResult.sourceTextLanguageLocalizedName",
-                       "English");
-  result.SetStringPath("translateResult.translatedText", "ox\\xC3\\xADgeno");
-
-  QuickAnswer quick_answer;
-
-  EXPECT_TRUE(parser_->Parse(&result, &quick_answer));
-  EXPECT_EQ(ResultType::kTranslationResult, quick_answer.result_type);
-
-  EXPECT_EQ(1u, quick_answer.title.size());
-  EXPECT_EQ(1u, quick_answer.first_answer_row.size());
-  auto* title = static_cast<QuickAnswerText*>(quick_answer.title[0].get());
-  EXPECT_EQ("oxygen · English",
-            GetQuickAnswerTextForTesting(quick_answer.title));
-  EXPECT_EQ(gfx::kGoogleGrey900, title->color);
-  auto* answer =
-      static_cast<QuickAnswerText*>(quick_answer.first_answer_row[0].get());
-  EXPECT_EQ("ox\\xC3\\xADgeno",
-            GetQuickAnswerTextForTesting(quick_answer.first_answer_row));
-  EXPECT_EQ(gfx::kGoogleGrey700, answer->color);
-}
-
-TEST_F(TranslationResultParserTest, MissingSourceText) {
-  Value result(Value::Type::DICTIONARY);
-  result.SetStringPath("translateResult.sourceTextLanguageLocalizedName",
-                       "English");
-  result.SetStringPath("translateResult.translatedText", "ox\\xC3\\xADgeno");
-  QuickAnswer quick_answer;
-  EXPECT_FALSE(parser_->Parse(&result, &quick_answer));
-}
-
-TEST_F(TranslationResultParserTest, MissingTranslatedText) {
-  Value result(Value::Type::DICTIONARY);
-  result.SetStringPath("translateResult.sourceText", "oxygen");
-  result.SetStringPath("translateResult.sourceTextLanguageLocalizedName",
-                       "English");
-  QuickAnswer quick_answer;
-  EXPECT_FALSE(parser_->Parse(&result, &quick_answer));
-}
-
-TEST_F(TranslationResultParserTest, MissingSourceTextLanguageLocalizedName) {
-  Value result(Value::Type::DICTIONARY);
-  result.SetStringPath("translateResult.sourceText", "oxygen");
-  result.SetStringPath("translateResult.translatedText", "ox\\xC3\\xADgeno");
-  QuickAnswer quick_answer;
-  EXPECT_FALSE(parser_->Parse(&result, &quick_answer));
-}
-
-TEST_F(TranslationResultParserTest, EmptyValue) {
-  Value result(Value::Type::DICTIONARY);
-  QuickAnswer quick_answer;
-  EXPECT_FALSE(parser_->Parse(&result, &quick_answer));
-}
-
-TEST_F(TranslationResultParserTest, IncorrectType) {
-  Value result(Value::Type::DICTIONARY);
-  result.SetIntPath("translateResult.sourceText", 1);
-  result.SetStringPath("translateResult.sourceTextLanguageLocalizedName",
-                       "English");
-  result.SetStringPath("translateResult.translatedText", "ox\\xC3\\xADgeno");
-  QuickAnswer quick_answer;
-  EXPECT_FALSE(parser_->Parse(&result, &quick_answer));
-}
-
-TEST_F(TranslationResultParserTest, IncorrectPath) {
-  Value result(Value::Type::DICTIONARY);
-  result.SetStringPath("translateResults.sourceText", "oxygen");
-  result.SetStringPath("translateResult.sourceTextLanguageLocalizedName",
-                       "English");
-  result.SetStringPath("translateResult.translatedText", "ox\\xC3\\xADgeno");
-  QuickAnswer quick_answer;
-  EXPECT_FALSE(parser_->Parse(&result, &quick_answer));
-}
-
-}  // namespace quick_answers
-}  // namespace ash
diff --git a/ash/constants/ash_features.cc b/ash/constants/ash_features.cc
index 92e6c5b..1899009 100644
--- a/ash/constants/ash_features.cc
+++ b/ash/constants/ash_features.cc
@@ -509,7 +509,7 @@
 // Enable the updated banner framework.
 // https://crbug.com/1228128
 const base::Feature kFilesBannerFramework{"FilesBannerFramework",
-                                          base::FEATURE_DISABLED_BY_DEFAULT};
+                                          base::FEATURE_ENABLED_BY_DEFAULT};
 
 // Enables the System Web App (SWA) version of file manager.
 const base::Feature kFilesSWA{"FilesSWA", base::FEATURE_DISABLED_BY_DEFAULT};
@@ -882,10 +882,6 @@
 const base::Feature kQuickAnswersTextAnnotator{
     "QuickAnswersTextAnnotator", base::FEATURE_ENABLED_BY_DEFAULT};
 
-// Controls whether to enable quick answers translation using Cloud API.
-const base::Feature kQuickAnswersTranslationCloudAPI{
-    "QuickAnswersTranslationCloudAPI", base::FEATURE_ENABLED_BY_DEFAULT};
-
 // Controls whether to enable quick answers V2 features.
 const base::Feature kQuickAnswersV2{"QuickAnswersV2",
                                     base::FEATURE_DISABLED_BY_DEFAULT};
@@ -1575,10 +1571,6 @@
   return base::FeatureList::IsEnabled(kQuickAnswersOnEditableText);
 }
 
-bool IsQuickAnswersTranslationCloudAPIEnabled() {
-  return base::FeatureList::IsEnabled(kQuickAnswersTranslationCloudAPI);
-}
-
 bool IsQuickAnswersV2Enabled() {
   return base::FeatureList::IsEnabled(kQuickAnswersV2);
 }
diff --git a/ash/constants/ash_features.h b/ash/constants/ash_features.h
index ad1a8b1..f66f20e 100644
--- a/ash/constants/ash_features.h
+++ b/ash/constants/ash_features.h
@@ -335,8 +335,6 @@
 extern const base::Feature kQuickAnswersTextAnnotator;
 COMPONENT_EXPORT(ASH_CONSTANTS)
 extern const base::Feature kQuickAnswersTranslation;
-COMPONENT_EXPORT(ASH_CONSTANTS)
-extern const base::Feature kQuickAnswersTranslationCloudAPI;
 COMPONENT_EXPORT(ASH_CONSTANTS) extern const base::Feature kQuickAnswersV2;
 COMPONENT_EXPORT(ASH_CONSTANTS)
 extern const base::Feature kDisableQuickAnswersV2Translation;
@@ -553,7 +551,6 @@
 COMPONENT_EXPORT(ASH_CONSTANTS) bool IsProjectorFeaturePodEnabled();
 COMPONENT_EXPORT(ASH_CONSTANTS) bool IsQuickAnswersEnabled();
 COMPONENT_EXPORT(ASH_CONSTANTS) bool IsQuickAnswersOnEditableTextEnabled();
-COMPONENT_EXPORT(ASH_CONSTANTS) bool IsQuickAnswersTranslationCloudAPIEnabled();
 COMPONENT_EXPORT(ASH_CONSTANTS) bool IsQuickAnswersV2Enabled();
 COMPONENT_EXPORT(ASH_CONSTANTS) bool IsQuickAnswersV2TranslationDisabled();
 COMPONENT_EXPORT(ASH_CONSTANTS) bool IsQuickAnswersV2SettingsSubToggleEnabled();
diff --git a/ash/public/cpp/app_list/app_list_features.h b/ash/public/cpp/app_list/app_list_features.h
index 5d084aa..3f72399 100644
--- a/ash/public/cpp/app_list/app_list_features.h
+++ b/ash/public/cpp/app_list/app_list_features.h
@@ -88,6 +88,7 @@
 bool ASH_PUBLIC_EXPORT IsZeroStateMixedTypesRankerEnabled();
 bool ASH_PUBLIC_EXPORT IsAppReinstallZeroStateEnabled();
 bool ASH_PUBLIC_EXPORT IsSuggestedFilesEnabled();
+bool ASH_PUBLIC_EXPORT IsSuggestedDriveFilesEnabled();
 bool ASH_PUBLIC_EXPORT IsAssistantSearchEnabled();
 bool ASH_PUBLIC_EXPORT IsAppGridGhostEnabled();
 bool ASH_PUBLIC_EXPORT IsAppListLaunchRecordingEnabled();
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1
index f52a51f..9ec5151 100644
--- a/build/fuchsia/linux.sdk.sha1
+++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@
-6.20210920.2.1
+6.20210920.3.1
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1
index f52a51f..9ec5151 100644
--- a/build/fuchsia/mac.sdk.sha1
+++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@
-6.20210920.2.1
+6.20210920.3.1
diff --git a/chrome/VERSION b/chrome/VERSION
index 0c59571..1dd0593 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=96
 MINOR=0
-BUILD=4649
+BUILD=4650
 PATCH=0
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManager.java b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManager.java
index 7402c43..a6f02e0 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManager.java
@@ -1006,12 +1006,15 @@
 
     /**
      * Notifies that the preference state has changed.
-     * @param isEnabled Whether the feature is enabled.
      */
-    public void onContextualSearchPrefChanged(boolean isEnabled) {
+    public void onContextualSearchPrefChanged() {
         // The pref may be automatically changed during application startup due to enterprise
         // configuration settings, so we may not have a panel yet.
-        if (mSearchPanel != null) mSearchPanel.onContextualSearchPrefChanged(isEnabled);
+        if (mSearchPanel != null) {
+            // Nitifies panel that if the user opted in or not.
+            boolean userOptedIn = ContextualSearchPolicy.isContextualSearchPrefFullyOptedIn();
+            mSearchPanel.onContextualSearchPrefChanged(userOptedIn);
+        }
     }
 
     @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchPolicy.java b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchPolicy.java
index 2dd47d6..bf54645 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchPolicy.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchPolicy.java
@@ -572,9 +572,14 @@
     }
 
     /**
-     * @return Whether the Contextual Search feature was opted in by the user explicitly.
+     * @return Whether the Contextual Search feature was fully opted in based on the preference
+     *         itself.
      */
-    static boolean isContextualSearchFullyOptedIn() {
+    static boolean isContextualSearchPrefFullyOptedIn() {
+        if (ChromeFeatureList.isEnabled(ChromeFeatureList.CONTEXTUAL_SEARCH_NEW_SETTINGS)
+                && !isContextualSearchOptInUninitialized()) {
+            return isContextualSearchOptInEnabled();
+        }
         return isContextualSearchEnabled();
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchPreferenceFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchPreferenceFragment.java
index c6d1a1f..27f7461 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchPreferenceFragment.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchPreferenceFragment.java
@@ -59,7 +59,8 @@
                 (ChromeManagedPreferenceDelegate)
                         preference -> ContextualSearchPolicy.isContextualSearchDisabledByPolicy());
 
-        seeBetterResultsSwitch.setChecked(ContextualSearchPolicy.isContextualSearchFullyOptedIn());
+        seeBetterResultsSwitch.setChecked(
+                ContextualSearchPolicy.isContextualSearchPrefFullyOptedIn());
         seeBetterResultsSwitch.setOnPreferenceChangeListener((preference, newValue) -> {
             ContextualSearchUma.logPrivacyOptInPreferenceChange((boolean) newValue);
             ContextualSearchPolicy.setContextualSearchFullyOptedIn((boolean) newValue);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchTabHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchTabHelper.java
index dc9b77b..eb2e1e2 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchTabHelper.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchTabHelper.java
@@ -342,9 +342,7 @@
 
         ContextualSearchManager manager = getContextualSearchManager(mTab);
         if (manager != null) {
-            boolean isEnabled = !ContextualSearchPolicy.isContextualSearchDisabled()
-                    && !ContextualSearchPolicy.isContextualSearchUninitialized();
-            manager.onContextualSearchPrefChanged(isEnabled);
+            manager.onContextualSearchPrefChanged();
         }
     }
 
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchPolicyTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchPolicyTest.java
index 4547c868..47debb96 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchPolicyTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchPolicyTest.java
@@ -246,5 +246,69 @@
         });
     }
 
+    @Test
+    @SmallTest
+    @Feature({"ContextualSearch"})
+    @DisableFeatures(ChromeFeatureList.CONTEXTUAL_SEARCH_NEW_SETTINGS)
+    public void testIsContextualSearchFullyOptedIn_NoMultilevelSettingsUI() {
+        TestThreadUtils.runOnUiThreadBlocking(() -> {
+            // Default is not fully opted in.
+            Assert.assertFalse(ContextualSearchPolicy.isContextualSearchPrefFullyOptedIn());
+
+            // Choose not to opt in.
+            ContextualSearchPolicy.setContextualSearchPromoCardSelection(false);
+            Assert.assertFalse(ContextualSearchPolicy.isContextualSearchPrefFullyOptedIn());
+
+            // Choose to opt in.
+            ContextualSearchPolicy.setContextualSearchPromoCardSelection(true);
+            Assert.assertTrue(ContextualSearchPolicy.isContextualSearchPrefFullyOptedIn());
+        });
+    }
+
+    @Test
+    @SmallTest
+    @Feature({"ContextualSearch"})
+    @EnableFeatures(ChromeFeatureList.CONTEXTUAL_SEARCH_NEW_SETTINGS)
+    public void testIsContextualSearchFullyOptedIn_MultilevelSettingsUI() {
+        TestThreadUtils.runOnUiThreadBlocking(() -> {
+            // Default is not fully opted in.
+            Assert.assertFalse(ContextualSearchPolicy.isContextualSearchPrefFullyOptedIn());
+
+            // Choose not to opt in.
+            ContextualSearchPolicy.setContextualSearchPromoCardSelection(false);
+            Assert.assertFalse(ContextualSearchPolicy.isContextualSearchPrefFullyOptedIn());
+
+            // Choose to opt in.
+            ContextualSearchPolicy.setContextualSearchPromoCardSelection(true);
+            Assert.assertTrue(ContextualSearchPolicy.isContextualSearchPrefFullyOptedIn());
+        });
+    }
+
+    @Test
+    @SmallTest
+    @Feature({"ContextualSearch"})
+    @EnableFeatures(ChromeFeatureList.CONTEXTUAL_SEARCH_NEW_SETTINGS)
+    public void testSetContextualSearchFullyOptedIn() {
+        TestThreadUtils.runOnUiThreadBlocking(() -> {
+            // Default is not fully opted in.
+            Assert.assertFalse(ContextualSearchPolicy.isContextualSearchPrefFullyOptedIn());
+
+            // Choose to fully opt in.
+            ContextualSearchPolicy.setContextualSearchFullyOptedIn(true);
+            Assert.assertTrue(ContextualSearchPolicy.isContextualSearchPrefFullyOptedIn());
+
+            // Choose to disable Contextual Search.
+            ContextualSearchPolicy.setContextualSearchState(false);
+            // The Contextual Search pref is disabled, but opt-in pref should still be enabled since
+            // it is not disabled explicitly.
+            Assert.assertTrue(ContextualSearchPolicy.isContextualSearchDisabled());
+            Assert.assertTrue(ContextualSearchPolicy.isContextualSearchPrefFullyOptedIn());
+
+            // Enable the Contextual Search again.
+            ContextualSearchPolicy.setContextualSearchState(true);
+            Assert.assertTrue(ContextualSearchPolicy.isContextualSearchPrefFullyOptedIn());
+        });
+    }
+
     // TODO(donnd): This set of tests is not complete, add more tests.
 }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchPreferenceFragmentTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchPreferenceFragmentTest.java
index 1c497508e..8fdde3e 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchPreferenceFragmentTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchPreferenceFragmentTest.java
@@ -111,13 +111,13 @@
         Assert.assertFalse("See Better Results Switch default value should be off.",
                 mSeeBetterResultsSwitchPreference.isChecked());
         Assert.assertFalse("The Contextual Search default value should not be fully opted in.",
-                ContextualSearchPolicy.isContextualSearchFullyOptedIn());
+                ContextualSearchPolicy.isContextualSearchPrefFullyOptedIn());
 
         mSeeBetterResultsSwitchPreference.performClick();
         Assert.assertTrue("See Better Results Switch should be on.",
                 mSeeBetterResultsSwitchPreference.isChecked());
         Assert.assertTrue("The Contextual Search default value should be fully opted in.",
-                ContextualSearchPolicy.isContextualSearchFullyOptedIn());
+                ContextualSearchPolicy.isContextualSearchPrefFullyOptedIn());
 
         mContextualSearchSwitchPreference.performClick();
         //"See Better Results" Switch is not visible when Contextual Search Switch is off.
@@ -139,13 +139,13 @@
         Assert.assertFalse("See Better Results Switch default value should be off.",
                 mSeeBetterResultsSwitchPreference.isChecked());
         Assert.assertFalse("The Contextual Search default value should not be fully opted in.",
-                ContextualSearchPolicy.isContextualSearchFullyOptedIn());
+                ContextualSearchPolicy.isContextualSearchPrefFullyOptedIn());
 
         mSeeBetterResultsSwitchPreference.performClick();
         Assert.assertTrue("See Better Results Switch should be on.",
                 mSeeBetterResultsSwitchPreference.isChecked());
         Assert.assertTrue("The Contextual Search state should be fully opted in.",
-                ContextualSearchPolicy.isContextualSearchFullyOptedIn());
+                ContextualSearchPolicy.isContextualSearchPrefFullyOptedIn());
 
         mContextualSearchSwitchPreference.performClick();
         //"See Better Results" Switch is not visible when Contextual Search Switch is off.
@@ -159,6 +159,6 @@
         Assert.assertTrue("See Better Results Switch should be on since previously is on.",
                 mSeeBetterResultsSwitchPreference.isChecked());
         Assert.assertTrue("The Contextual Search state should be fully opted in.",
-                ContextualSearchPolicy.isContextualSearchFullyOptedIn());
+                ContextualSearchPolicy.isContextualSearchPrefFullyOptedIn());
     }
 }
\ No newline at end of file
diff --git a/chrome/app/chromeos_strings.grdp b/chrome/app/chromeos_strings.grdp
index 5bcc7084..bc7d2d69 100644
--- a/chrome/app/chromeos_strings.grdp
+++ b/chrome/app/chromeos_strings.grdp
@@ -672,6 +672,9 @@
   <message name="IDS_LANGUAGE_SECTION_TITLE" desc="Title of language selection screen" meaning="A title of the dialog where user should select Chrome OS UI language and default keyboard layout during initial device setup.">
     Choose your language &amp; keyboard
   </message>
+  <message name="IDS_LANGUAGE_SECTION_HINT" desc="Under-title line on the language selection screen" meaning="A hint to the user that language files are shared among users.">
+    Language files are shared among users to save disk space.
+  </message>
   <message name="IDS_ACCESSIBILITY_SECTION_TITLE" desc="Title of accessibility options screen" meaning="A title of the dialog where user can control Chrome OS UI accessibility (like large cursor or screen reader) options during initial device setup.">
     Accessibility settings
   </message>
diff --git a/chrome/app/chromeos_strings_grdp/IDS_LANGUAGE_SECTION_HINT.png.sha1 b/chrome/app/chromeos_strings_grdp/IDS_LANGUAGE_SECTION_HINT.png.sha1
new file mode 100644
index 0000000..da503f9d
--- /dev/null
+++ b/chrome/app/chromeos_strings_grdp/IDS_LANGUAGE_SECTION_HINT.png.sha1
@@ -0,0 +1 @@
+9509164f6a600066aeeb8b65bab11e6aaafd4952
\ No newline at end of file
diff --git a/chrome/app/os_settings_search_tag_strings.grdp b/chrome/app/os_settings_search_tag_strings.grdp
index e4a6c6e8..eb89bd0 100644
--- a/chrome/app/os_settings_search_tag_strings.grdp
+++ b/chrome/app/os_settings_search_tag_strings.grdp
@@ -279,6 +279,9 @@
   <message name="IDS_OS_SETTINGS_TAG_MULTIDEVICE_PHONE_HUB" translateable="false" desc="Text for search result item which, when clicked, navigates the user to Phone Hub settings, with a toggle to enable/disable the feature. Phone hub provides the user with information about their Android phone and allows the user to perform phone-side actions directly in the Chrome OS UI.">
     Phone Hub
   </message>
+  <message name="IDS_OS_SETTINGS_TAG_MULTIDEVICE_PHONE_HUB_CAMERA_ROLL" desc="Text for search result item which, when clicked, navigates the user to Phone Hub photo settings, with a toggle to enable/disable the feature. Phone hub populates the 4 most recently updated photos/videos thumbnail in connected phone's camera roll on Chromebook, and give options to intereact with them.">
+    Recent Photos
+  </message>
   <message name="IDS_OS_SETTINGS_TAG_MULTIDEVICE_PHONE_HUB_NOTIFICATIONS" translateable="false" desc="Text for search result item which, when clicked, navigates the user to Phone Hub Notifications settings, with a toggle to enable/disable the feature. Phone Hub Notifications mirrors all standard notifications currently being shown on connected phone device.">
     Phone Hub notifications
   </message>
diff --git a/chrome/app/os_settings_search_tag_strings_grdp/IDS_OS_SETTINGS_TAG_MULTIDEVICE_PHONE_HUB_CAMERA_ROLL.png.sha1 b/chrome/app/os_settings_search_tag_strings_grdp/IDS_OS_SETTINGS_TAG_MULTIDEVICE_PHONE_HUB_CAMERA_ROLL.png.sha1
new file mode 100644
index 0000000..f33e1e8
--- /dev/null
+++ b/chrome/app/os_settings_search_tag_strings_grdp/IDS_OS_SETTINGS_TAG_MULTIDEVICE_PHONE_HUB_CAMERA_ROLL.png.sha1
@@ -0,0 +1 @@
+18a3f4f04368ef676c62c81694cb07be39b63872
\ No newline at end of file
diff --git a/chrome/app/os_settings_strings.grdp b/chrome/app/os_settings_strings.grdp
index cd2ee542..3ce68e6 100644
--- a/chrome/app/os_settings_strings.grdp
+++ b/chrome/app/os_settings_strings.grdp
@@ -147,8 +147,8 @@
   <message name="IDS_SETTINGS_ABOUT_PAGE_CURRENT_CHANNEL_STABLE" desc="The stable label in the message about current channel.">
     stable
   </message>
-  <message name="IDS_SETTINGS_ABOUT_PAGE_CURRENT_CHANNEL_STABLE_TT" desc="The stable (trusted tester) label in the message about current channel.">
-    stable (trusted tester)
+  <message name="IDS_SETTINGS_ABOUT_PAGE_CURRENT_CHANNEL_LTS" desc="The LTS (long-term support) label in the message about current channel.">
+    LTS
   </message>
   <message name="IDS_SETTINGS_ABOUT_PAGE_CHECK_FOR_UPDATES" desc="The button label to check for updates and apply (download and install) if found">
     Check for updates
@@ -3030,6 +3030,9 @@
   <message name="IDS_SETTINGS_MULTIDEVICE_PHONE_HUB_LEARN_MORE_LABEL" desc="Accessibility label (used by screen readers, not shown in UI) for a link that leads to a page with more information about the 'Phone Hub' feature.">
     Phone Hub, Learn More
   </message>
+  <message name="IDS_SETTINGS_MULTIDEVICE_PHONE_HUB_CAMERA_ROLL_SECTION_TITLE" desc="The title of the Phone Hub Recent Photo section on the settings page.">
+    Recent Photos
+  </message>
   <message name="IDS_SETTINGS_MULTIDEVICE_PHONE_HUB_NOTIFICATIONS_SECTION_TITLE" desc="The title of the Phone Hub Notifications section on the settings page.">
     Notifications
   </message>
@@ -3045,6 +3048,9 @@
   <message name="IDS_SETTINGS_MULTIDEVICE_PHONE_HUB_SUMMARY" desc="Description of for the 'Phone Hub' setting. This feature lets the user stay productive on Chrome OS by ensuring that their phones' apps, content, and connectivity are available on their Chrome OS device.">
     Access your phone's capabilities from your <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph>
   </message>
+  <message name="IDS_SETTINGS_MULTIDEVICE_PHONE_HUB_CAMERA_ROLL_SUMMARY" desc="Description of for the 'Phone Hub Camera Roll' setting. This feature populates most recent photos from a connected Android phone to Chrome OS devices.">
+    View photos from your phone's camera roll on your <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph>
+  </message>
   <message name="IDS_SETTINGS_MULTIDEVICE_PHONE_HUB_NOTIFICATIONS_SUMMARY" desc="Description of for the 'Phone Hub Notifications' setting. This feature mirrors notifications from a connected Android phone to Chrome OS devices.">
     View notifications from your chat apps on your <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph>
   </message>
diff --git a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_ABOUT_PAGE_CURRENT_CHANNEL_LTS.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_ABOUT_PAGE_CURRENT_CHANNEL_LTS.png.sha1
new file mode 100644
index 0000000..1d304d63
--- /dev/null
+++ b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_ABOUT_PAGE_CURRENT_CHANNEL_LTS.png.sha1
@@ -0,0 +1 @@
+e142c57e7e5f5097f0a634b2bf261d541cabec94
\ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_ABOUT_PAGE_CURRENT_CHANNEL_STABLE_TT.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_ABOUT_PAGE_CURRENT_CHANNEL_STABLE_TT.png.sha1
deleted file mode 100644
index 8a4e84e2..0000000
--- a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_ABOUT_PAGE_CURRENT_CHANNEL_STABLE_TT.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5b752193cea0bfbf9256a2e238f92f9569e4f6ff
\ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_MULTIDEVICE_PHONE_HUB_CAMERA_ROLL_SECTION_TITLE.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_MULTIDEVICE_PHONE_HUB_CAMERA_ROLL_SECTION_TITLE.png.sha1
new file mode 100644
index 0000000..991ae48b
--- /dev/null
+++ b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_MULTIDEVICE_PHONE_HUB_CAMERA_ROLL_SECTION_TITLE.png.sha1
@@ -0,0 +1 @@
+3e08cb7e167af38b182ca6dc0119d2e5bf068ca2
\ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_MULTIDEVICE_PHONE_HUB_CAMERA_ROLL_SUMMARY.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_MULTIDEVICE_PHONE_HUB_CAMERA_ROLL_SUMMARY.png.sha1
new file mode 100644
index 0000000..991ae48b
--- /dev/null
+++ b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_MULTIDEVICE_PHONE_HUB_CAMERA_ROLL_SUMMARY.png.sha1
@@ -0,0 +1 @@
+3e08cb7e167af38b182ca6dc0119d2e5bf068ca2
\ No newline at end of file
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index d229567..58d98f7 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -4120,6 +4120,8 @@
       "sessions/closed_tab_cache_service.h",
       "sessions/closed_tab_cache_service_factory.cc",
       "sessions/closed_tab_cache_service_factory.h",
+      "share/share_submenu_model.cc",
+      "share/share_submenu_model.h",
       "sharesheet/sharesheet_controller.h",
       "sharesheet/sharesheet_metrics.cc",
       "sharesheet/sharesheet_metrics.h",
@@ -4136,8 +4138,6 @@
       "sharing/click_to_call/click_to_call_metrics.h",
       "sharing/click_to_call/click_to_call_ui_controller.cc",
       "sharing/click_to_call/click_to_call_ui_controller.h",
-      "sharing/share_submenu_model.cc",
-      "sharing/share_submenu_model.h",
       "sharing/shared_clipboard/remote_copy_message_handler.cc",
       "sharing/shared_clipboard/remote_copy_message_handler.h",
       "sharing/shared_clipboard/shared_clipboard_context_menu_observer.cc",
@@ -5029,6 +5029,10 @@
       "apps/app_service/media_requests.cc",
       "apps/app_service/media_requests.h",
       "apps/app_service/menu_item_constants.h",
+      "apps/intent_helper/chromeos_intent_picker_helpers.cc",
+      "apps/intent_helper/chromeos_intent_picker_helpers.h",
+      "apps/intent_helper/metrics/intent_handling_metrics.cc",
+      "apps/intent_helper/metrics/intent_handling_metrics.h",
       "media/platform_verification_chromeos.cc",
       "media/platform_verification_chromeos.h",
       "platform_keys/extension_key_permissions_service.cc",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index d2e008761..72696249 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -55,6 +55,7 @@
 #include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_params.h"
 #include "chrome/browser/prefetch/search_prefetch/field_trial_settings.h"
 #include "chrome/browser/resource_coordinator/tab_manager_features.h"
+#include "chrome/browser/share/share_submenu_model.h"
 #include "chrome/browser/sharing/features.h"
 #include "chrome/browser/sharing/shared_clipboard/feature_flags.h"
 #include "chrome/browser/sharing/sms/sms_flags.h"
@@ -3024,6 +3025,9 @@
     {"dark-light-mode", flag_descriptions::kDarkLightTestName,
      flag_descriptions::kDarkLightTestDescription, kOsCrOS,
      FEATURE_VALUE_TYPE(ash::features::kDarkLightMode)},
+    {"vertical-snap", flag_descriptions::kVerticalSnapName,
+     flag_descriptions::kVerticalSnapDescription, kOsCrOS,
+     FEATURE_VALUE_TYPE(ash::features::kVerticalSnapState)},
     {"ash-bento-bar", flag_descriptions::kBentoBarName,
      flag_descriptions::kBentoBarDescription, kOsCrOS,
      FEATURE_VALUE_TYPE(ash::features::kBentoBar)},
@@ -5316,13 +5320,6 @@
      flag_descriptions::kEnableSignedExchangeSubresourcePrefetchDescription,
      kOsAll, FEATURE_VALUE_TYPE(features::kSignedExchangeSubresourcePrefetch)},
 
-    {"enable-sxg-prefetch-cache-for-navigations",
-     flag_descriptions::kEnableSignedExchangePrefetchCacheForNavigationsName,
-     flag_descriptions::
-         kEnableSignedExchangePrefetchCacheForNavigationsDescription,
-     kOsAll,
-     FEATURE_VALUE_TYPE(features::kSignedExchangePrefetchCacheForNavigations)},
-
     {"enable-autofill-account-wallet-storage",
      flag_descriptions::kEnableAutofillAccountWalletStorageName,
      flag_descriptions::kEnableAutofillAccountWalletStorageDescription, kOsAll,
@@ -5450,12 +5447,6 @@
      flag_descriptions::kEnableQuickAnswersTextAnnotatorDescription, kOsCrOS,
      FEATURE_VALUE_TYPE(chromeos::features::kQuickAnswersTextAnnotator)},
 
-    {"enable-quick-answers-translation-cloud-api",
-     flag_descriptions::kEnableQuickAnswersTranslationCloudAPIName,
-     flag_descriptions::kEnableQuickAnswersTranslationCloudAPIDescription,
-     kOsCrOS,
-     FEATURE_VALUE_TYPE(chromeos::features::kQuickAnswersTranslationCloudAPI)},
-
     {"enable-quick-answers-v2", flag_descriptions::kEnableQuickAnswersV2Name,
      flag_descriptions::kEnableQuickAnswersV2Description, kOsCrOS,
      FEATURE_VALUE_TYPE(chromeos::features::kQuickAnswersV2)},
@@ -6814,12 +6805,6 @@
      FEATURE_VALUE_TYPE(features::kAImageReader)},
 #endif  // OS_ANDROID
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
-    {"enable-auto-select", flag_descriptions::kEnableAutoSelectName,
-     flag_descriptions::kEnableAutoSelectDescription, kOsCrOS,
-     FEATURE_VALUE_TYPE(blink::features::kCrOSAutoSelect)},
-#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
-
 #if defined(OS_ANDROID)
     {"smart-suggestion-for-large-downloads",
      flag_descriptions::kSmartSuggestionForLargeDownloadsName,
@@ -7646,9 +7631,11 @@
      FEATURE_VALUE_TYPE(features::kShareUsageRankingFixedMore)},
 #endif
 
+#if !defined(OS_ANDROID)
     {"share-context-menu", flag_descriptions::kShareContextMenuName,
      flag_descriptions::kShareContextMenuDescription, kOsAll,
-     FEATURE_VALUE_TYPE(sharing::kShareMenu)},
+     FEATURE_VALUE_TYPE(share::kShareMenu)},
+#endif
 
     {"enable-safe-browsing-per-profile-network-contexts",
      flag_descriptions::kSafeBrowsingPerProfileNetworkContextsName,
diff --git a/chrome/browser/android/omnibox/autocomplete_controller_android.cc b/chrome/browser/android/omnibox/autocomplete_controller_android.cc
index 52e83ea5..ad09c27 100644
--- a/chrome/browser/android/omnibox/autocomplete_controller_android.cc
+++ b/chrome/browser/android/omnibox/autocomplete_controller_android.cc
@@ -374,7 +374,7 @@
 }
 
 ScopedJavaLocalRef<jobject> AutocompleteControllerAndroid::
-    UpdateMatchDestinationURLWithQueryFormulationTime(
+    UpdateMatchDestinationURLWithAdditionalAssistedQueryStats(
         JNIEnv* env,
         jint selected_index,
         jlong elapsed_time_since_input_change,
@@ -415,9 +415,10 @@
     match.search_terms_args->additional_query_params =
         base::JoinString(params, "&");
   }
-  autocomplete_controller_->UpdateMatchDestinationURLWithQueryFormulationTime(
-      base::TimeDelta::FromMilliseconds(elapsed_time_since_input_change),
-      &match);
+  autocomplete_controller_
+      ->UpdateMatchDestinationURLWithAdditionalAssistedQueryStats(
+          base::TimeDelta::FromMilliseconds(elapsed_time_since_input_change),
+          &match);
   return url::GURLAndroid::FromNativeGURL(env, match.destination_url);
 }
 
diff --git a/chrome/browser/android/omnibox/autocomplete_controller_android.h b/chrome/browser/android/omnibox/autocomplete_controller_android.h
index 04a5858..a76f5843 100644
--- a/chrome/browser/android/omnibox/autocomplete_controller_android.h
+++ b/chrome/browser/android/omnibox/autocomplete_controller_android.h
@@ -70,7 +70,7 @@
       const base::android::JavaParamRef<jobject>& j_web_contents);
   void DeleteSuggestion(JNIEnv* env, jint selected_index);
   base::android::ScopedJavaLocalRef<jobject>
-  UpdateMatchDestinationURLWithQueryFormulationTime(
+  UpdateMatchDestinationURLWithAdditionalAssistedQueryStats(
       JNIEnv* env,
       jint selected_index,
       jlong elapsed_time_since_input_change,
diff --git a/chrome/browser/apps/app_service/app_service_proxy_base.cc b/chrome/browser/apps/app_service/app_service_proxy_base.cc
index 1afdbd1b..6ffe1c9 100644
--- a/chrome/browser/apps/app_service/app_service_proxy_base.cc
+++ b/chrome/browser/apps/app_service/app_service_proxy_base.cc
@@ -18,6 +18,7 @@
 #include "chrome/browser/apps/app_service/app_service_metrics.h"
 #include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
 #include "chrome/browser/apps/app_service/launch_utils.h"
+#include "chrome/browser/ash/file_manager/app_id.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/web_applications/web_app_id_constants.h"
 #include "components/services/app_service/app_service_impl.h"
@@ -376,6 +377,31 @@
   return app_ids;
 }
 
+bool ShouldIgnoreApp(const apps::AppUpdate& update) {
+  bool is_ready = apps_util::IsInstalled(update.Readiness());
+  bool show_in_launcher =
+      update.ShowInLauncher() == apps::mojom::OptionalBool::kTrue;
+  // TODO(1240906): Find a way to properly filter in/out apps that should
+  // participate in intent handling.
+  bool is_exempt = web_app::IsSystemAppIdWithFileHandlers(update.AppId()) ||
+                   update.AppId() == file_manager::kAudioPlayerAppId;
+  return !is_ready || (!show_in_launcher && !is_exempt);
+}
+
+std::string GetActivityLabel(const apps::mojom::IntentFilterPtr& filter,
+                             const apps::AppUpdate& update) {
+  if (filter->activity_label && !filter->activity_label->empty()) {
+    return filter->activity_label.value();
+  } else {
+    return update.Name();
+  }
+}
+
+struct IndexAndGeneric {
+  size_t index;
+  bool is_generic;
+};
+
 std::vector<IntentLaunchInfo> AppServiceProxyBase::GetAppsForIntent(
     const apps::mojom::IntentPtr& intent,
     bool exclude_browsers,
@@ -391,42 +417,53 @@
                                     &exclude_browsers,
                                     &exclude_browser_tab_apps](
                                        const apps::AppUpdate& update) {
-      // TODO(1240906): Find a way to properly filter in/out apps that should
-      // participate in intent handling.
-      if (!apps_util::IsInstalled(update.Readiness()) ||
-          (update.ShowInLauncher() != apps::mojom::OptionalBool::kTrue &&
-           !web_app::IsSystemAppIdWithFileHandlers(update.AppId()))) {
+      if (ShouldIgnoreApp(update)) {
         return;
       }
       if (exclude_browser_tab_apps &&
           update.WindowMode() == mojom::WindowMode::kBrowser) {
         return;
       }
-      std::set<std::string> existing_activities;
+      // |activity_label| -> {index, is_generic}
+      std::map<std::string, IndexAndGeneric> best_handler_map;
+      bool is_file_handling_intent =
+          intent->files.has_value() && intent->files->size() > 0;
+      size_t index = 0;
       for (const auto& filter : update.IntentFilters()) {
         if (exclude_browsers && apps_util::IsBrowserFilter(filter)) {
           continue;
         }
         if (apps_util::IntentMatchesFilter(intent, filter)) {
-          IntentLaunchInfo entry;
-          entry.app_id = update.AppId();
-          std::string activity_label;
-          if (filter->activity_label &&
-              !filter->activity_label.value().empty()) {
-            activity_label = filter->activity_label.value();
-          } else {
-            activity_label = update.Name();
+          // Return the first non-generic match if it exists, otherwise the
+          // first generic match.
+          bool generic = false;
+          if (is_file_handling_intent) {
+            generic = apps_util::IsGenericFileHandler(intent, filter);
           }
-          if (base::Contains(existing_activities, activity_label)) {
-            continue;
+          std::string activity_label = GetActivityLabel(filter, update);
+          // Replace the best handler if it is generic and we have a non-generic
+          // one.
+          auto it = best_handler_map.find(activity_label);
+          if (it == best_handler_map.end() ||
+              (it->second.is_generic && !generic)) {
+            best_handler_map[activity_label] = IndexAndGeneric{index, generic};
           }
-          existing_activities.insert(activity_label);
-          entry.activity_label = activity_label;
-          entry.activity_name = filter->activity_name.value_or("");
-          entry.is_file_extension_match =
-              apps_util::FilterIsForFileExtensions(filter);
-          intent_launch_info.push_back(entry);
         }
+        index++;
+      }
+      const auto& filters = update.IntentFilters();
+      for (const auto& handler_entry : best_handler_map) {
+        const mojom::IntentFilterPtr& filter =
+            filters[handler_entry.second.index];
+        IntentLaunchInfo entry;
+        entry.app_id = update.AppId();
+        entry.activity_label = GetActivityLabel(filter, update);
+        entry.activity_name = filter->activity_name.value_or("");
+        entry.is_generic_file_handler =
+            apps_util::IsGenericFileHandler(intent, filter);
+        entry.is_file_extension_match =
+            apps_util::FilterIsForFileExtensions(filter);
+        intent_launch_info.push_back(entry);
       }
     });
   }
@@ -434,11 +471,9 @@
 }
 
 std::vector<IntentLaunchInfo> AppServiceProxyBase::GetAppsForFiles(
-    const std::vector<GURL>& filesystem_urls,
-    const std::vector<std::string>& mime_types) {
+    std::vector<apps::mojom::IntentFilePtr> files) {
   return GetAppsForIntent(
-      apps_util::CreateViewIntentFromFiles(filesystem_urls, mime_types), false,
-      false);
+      apps_util::CreateViewIntentFromFiles(std::move(files)), false, false);
 }
 
 void AppServiceProxyBase::AddPreferredApp(const std::string& app_id,
diff --git a/chrome/browser/apps/app_service/app_service_proxy_base.h b/chrome/browser/apps/app_service/app_service_proxy_base.h
index 66df3a4ea..b430fbe8 100644
--- a/chrome/browser/apps/app_service/app_service_proxy_base.h
+++ b/chrome/browser/apps/app_service/app_service_proxy_base.h
@@ -41,6 +41,7 @@
   std::string app_id;
   std::string activity_name;
   std::string activity_label;
+  bool is_generic_file_handler;
   bool is_file_extension_match;
 };
 
@@ -205,10 +206,9 @@
       bool exclude_browser_tab_apps = true);
 
   // Returns a list of apps (represented by their ids) and activities (if
-  // applied) which can handle |filesystem_urls| and |mime_types|.
+  // applied) which can handle |files|.
   std::vector<IntentLaunchInfo> GetAppsForFiles(
-      const std::vector<GURL>& filesystem_urls,
-      const std::vector<std::string>& mime_types);
+      std::vector<apps::mojom::IntentFilePtr> files);
 
   // Adds a preferred app for |url|.
   void AddPreferredApp(const std::string& app_id, const GURL& url);
diff --git a/chrome/browser/apps/app_service/browser_app_instance_map.h b/chrome/browser/apps/app_service/browser_app_instance_map.h
index fbe11866..61e18c3 100644
--- a/chrome/browser/apps/app_service/browser_app_instance_map.h
+++ b/chrome/browser/apps/app_service/browser_app_instance_map.h
@@ -49,10 +49,10 @@
   return (it == instances.end()) ? nullptr : it->second.get();
 }
 
-template <typename KeyT, typename ValueT, typename PredicateT = base::identity>
+template <typename KeyT, typename ValueT, typename PredicateT>
 std::set<const ValueT*> SelectInstances(
     const BrowserAppInstanceMap<KeyT, ValueT>& instances,
-    PredicateT predicate = {}) {
+    PredicateT predicate) {
   std::set<const ValueT*> result;
   for (const auto& pair : instances) {
     const ValueT& instance = *pair.second;
diff --git a/chrome/browser/apps/app_service/browser_app_instance_registry.cc b/chrome/browser/apps/app_service/browser_app_instance_registry.cc
index f6c29a2..6b12e15b 100644
--- a/chrome/browser/apps/app_service/browser_app_instance_registry.cc
+++ b/chrome/browser/apps/app_service/browser_app_instance_registry.cc
@@ -5,10 +5,8 @@
 #include "chrome/browser/apps/app_service/browser_app_instance_registry.h"
 
 #include <utility>
-#include <vector>
 
 #include "base/debug/dump_without_crashing.h"
-#include "base/scoped_multi_source_observation.h"
 #include "chrome/browser/apps/app_service/browser_app_instance.h"
 #include "chrome/browser/apps/app_service/browser_app_instance_map.h"
 #include "chrome/browser/ash/crosapi/browser_util.h"
@@ -16,84 +14,19 @@
 #include "chrome/common/chrome_features.h"
 #include "components/exo/shell_surface_util.h"
 #include "extensions/common/constants.h"
-#include "ui/aura/env.h"
-#include "ui/aura/env_observer.h"
 
 namespace apps {
 
-// Helper class to track all Aura windows belonging to Lacros. This is necessary
-// to synchronise crosapi events and Aura windows matching these events being
-// available.
-class BrowserAppInstanceRegistry::LacrosWindowObserver
-    : public aura::EnvObserver,
-      public aura::WindowObserver {
- public:
-  LacrosWindowObserver() {
-    aura_env_observation_.Observe(aura::Env::GetInstance());
-  }
-
-  // Run the action immediately if the window matching |window_id| is
-  // available, otherwise buffer the event until it is.
-  void RunOrEnqueueEventForWindow(
-      const std::string& window_id,
-      base::OnceCallback<void(aura::Window*)> event) {
-    auto& event_list = window_id_to_event_list_[window_id];
-    if (event_list.window) {
-      std::move(event).Run(event_list.window);
-    } else {
-      event_list.events.push_back(std::move(event));
-    }
-  }
-
-  // aura::EnvObserver overrides:
-  void OnWindowInitialized(aura::Window* window) override {
-    if (!crosapi::browser_util::IsLacrosWindow(window)) {
-      return;
-    }
-    lacros_window_observations_.AddObservation(window);
-    const std::string* id = exo::GetShellApplicationId(window);
-    DCHECK(id);
-    auto& event_list = window_id_to_event_list_[*id];
-    event_list.window = window;
-    // Flush any pending events for the new window.
-    for (auto& callback : event_list.events) {
-      std::move(callback).Run(window);
-    }
-    event_list.events.clear();
-  }
-
-  // aura::WindowObserver overrides:
-  void OnWindowDestroying(aura::Window* window) override {
-    if (!crosapi::browser_util::IsLacrosWindow(window)) {
-      return;
-    }
-    lacros_window_observations_.RemoveObservation(window);
-    const std::string* id = exo::GetShellApplicationId(window);
-    DCHECK(id);
-    DCHECK(base::Contains(window_id_to_event_list_, *id));
-    window_id_to_event_list_.erase(*id);
-  }
-
- private:
-  // Buffered Lacros instance events for windows that weren't available yet
-  // when events arrived.
-  struct WindowEventList {
-    aura::Window* window{nullptr};
-    std::vector<base::OnceCallback<void(aura::Window*)>> events;
-  };
-  std::map<std::string, WindowEventList> window_id_to_event_list_;
-
-  base::ScopedObservation<aura::Env, aura::EnvObserver> aura_env_observation_{
-      this};
-  base::ScopedMultiSourceObservation<aura::Window, aura::WindowObserver>
-      lacros_window_observations_{this};
+struct BrowserAppInstanceRegistry::WindowEventList {
+  aura::Window* window{nullptr};
+  std::vector<base::OnceCallback<void(aura::Window*)>> events;
 };
 
 BrowserAppInstanceRegistry::BrowserAppInstanceRegistry(
     BrowserAppInstanceTracker& ash_instance_tracker)
-    : ash_instance_tracker_(ash_instance_tracker),
-      lacros_window_observer_(std::make_unique<LacrosWindowObserver>()) {
+    : ash_instance_tracker_(ash_instance_tracker) {
   tracker_observation_.Observe(&ash_instance_tracker_);
+  aura_env_observation_.Observe(aura::Env::GetInstance());
 }
 
 BrowserAppInstanceRegistry::~BrowserAppInstanceRegistry() = default;
@@ -193,7 +126,7 @@
 void BrowserAppInstanceRegistry::OnBrowserWindowAdded(
     apps::BrowserWindowInstanceUpdate update) {
   auto window_id = update.window_id;
-  lacros_window_observer_->RunOrEnqueueEventForWindow(
+  RunOrEnqueueEventForWindow(
       window_id,
       base::BindOnce(&BrowserAppInstanceRegistry::LacrosWindowInstanceAdded,
                      weak_ptr_factory_.GetWeakPtr(), std::move(update)));
@@ -202,7 +135,7 @@
 void BrowserAppInstanceRegistry::OnBrowserWindowUpdated(
     apps::BrowserWindowInstanceUpdate update) {
   auto window_id = update.window_id;
-  lacros_window_observer_->RunOrEnqueueEventForWindow(
+  RunOrEnqueueEventForWindow(
       window_id,
       base::BindOnce(&BrowserAppInstanceRegistry::LacrosWindowInstanceUpdated,
                      weak_ptr_factory_.GetWeakPtr(), std::move(update)));
@@ -211,7 +144,7 @@
 void BrowserAppInstanceRegistry::OnBrowserWindowRemoved(
     apps::BrowserWindowInstanceUpdate update) {
   auto window_id = update.window_id;
-  lacros_window_observer_->RunOrEnqueueEventForWindow(
+  RunOrEnqueueEventForWindow(
       window_id,
       base::BindOnce(&BrowserAppInstanceRegistry::LacrosWindowInstanceRemoved,
                      weak_ptr_factory_.GetWeakPtr(), std::move(update)));
@@ -220,7 +153,7 @@
 void BrowserAppInstanceRegistry::OnBrowserAppAdded(
     apps::BrowserAppInstanceUpdate update) {
   auto window_id = update.window_id;
-  lacros_window_observer_->RunOrEnqueueEventForWindow(
+  RunOrEnqueueEventForWindow(
       window_id,
       base::BindOnce(&BrowserAppInstanceRegistry::LacrosAppInstanceAdded,
                      weak_ptr_factory_.GetWeakPtr(), std::move(update)));
@@ -229,7 +162,7 @@
 void BrowserAppInstanceRegistry::OnBrowserAppUpdated(
     apps::BrowserAppInstanceUpdate update) {
   auto window_id = update.window_id;
-  lacros_window_observer_->RunOrEnqueueEventForWindow(
+  RunOrEnqueueEventForWindow(
       window_id,
       base::BindOnce(&BrowserAppInstanceRegistry::LacrosAppInstanceUpdated,
                      weak_ptr_factory_.GetWeakPtr(), std::move(update)));
@@ -238,12 +171,74 @@
 void BrowserAppInstanceRegistry::OnBrowserAppRemoved(
     apps::BrowserAppInstanceUpdate update) {
   auto window_id = update.window_id;
-  lacros_window_observer_->RunOrEnqueueEventForWindow(
+  RunOrEnqueueEventForWindow(
       window_id,
       base::BindOnce(&BrowserAppInstanceRegistry::LacrosAppInstanceRemoved,
                      weak_ptr_factory_.GetWeakPtr(), std::move(update)));
 }
 
+void BrowserAppInstanceRegistry::OnWindowInitialized(aura::Window* window) {
+  if (!crosapi::browser_util::IsLacrosWindow(window)) {
+    return;
+  }
+  lacros_window_observations_.AddObservation(window);
+  const std::string* id = exo::GetShellApplicationId(window);
+  DCHECK(id);
+  auto& event_list = window_id_to_event_list_[*id];
+  event_list.window = window;
+  // Flush any pending events for the new window.
+  for (auto& callback : event_list.events) {
+    std::move(callback).Run(window);
+  }
+  event_list.events.clear();
+}
+
+void BrowserAppInstanceRegistry::OnWindowDestroying(aura::Window* window) {
+  lacros_window_observations_.RemoveObservation(window);
+  const std::string* id = exo::GetShellApplicationId(window);
+  DCHECK(id);
+  DCHECK(base::Contains(window_id_to_event_list_, *id));
+  window_id_to_event_list_.erase(*id);
+
+  for (auto it = std::begin(lacros_app_instances_);
+       it != std::end(lacros_app_instances_);) {
+    if (it->second->window == window) {
+      auto instance = std::move(it->second);
+      it = lacros_app_instances_.erase(it);
+      for (auto& observer : observers_) {
+        observer.OnBrowserAppRemoved(*instance);
+      }
+    } else {
+      it++;
+    }
+  }
+  for (auto it = std::begin(lacros_window_instances_);
+       it != std::end(lacros_window_instances_);) {
+    if (it->second->window == window) {
+      auto instance = std::move(it->second);
+      it = lacros_window_instances_.erase(it);
+      for (auto& observer : observers_) {
+        observer.OnBrowserWindowRemoved(*instance);
+      }
+    } else {
+      it++;
+    }
+  }
+}
+
+// Run the action immediately if the window matching |window_id| is
+// available, otherwise buffer the event until it is.
+void BrowserAppInstanceRegistry::RunOrEnqueueEventForWindow(
+    const std::string& window_id,
+    base::OnceCallback<void(aura::Window*)> event) {
+  auto& event_list = window_id_to_event_list_[window_id];
+  if (event_list.window) {
+    std::move(event).Run(event_list.window);
+  } else {
+    event_list.events.push_back(std::move(event));
+  }
+}
+
 void BrowserAppInstanceRegistry::LacrosWindowInstanceAdded(
     apps::BrowserWindowInstanceUpdate update,
     aura::Window* window) {
diff --git a/chrome/browser/apps/app_service/browser_app_instance_registry.h b/chrome/browser/apps/app_service/browser_app_instance_registry.h
index 07029370..4637f6c 100644
--- a/chrome/browser/apps/app_service/browser_app_instance_registry.h
+++ b/chrome/browser/apps/app_service/browser_app_instance_registry.h
@@ -9,11 +9,13 @@
 #include <memory>
 #include <set>
 #include <string>
+#include <vector>
 
 #include "base/callback.h"
 #include "base/callback_list.h"
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
+#include "base/scoped_multi_source_observation.h"
 #include "base/scoped_observation.h"
 #include "chrome/browser/apps/app_service/browser_app_instance.h"
 #include "chrome/browser/apps/app_service/browser_app_instance_map.h"
@@ -23,6 +25,8 @@
 #include "chromeos/crosapi/mojom/browser_app_instance_registry.mojom.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/receiver_set.h"
+#include "ui/aura/env.h"
+#include "ui/aura/env_observer.h"
 #include "ui/aura/window.h"
 #include "ui/aura/window_observer.h"
 
@@ -37,7 +41,9 @@
 // lacros-chrome for PWAs (via |BrowserAppInstanceForwarder|).
 class BrowserAppInstanceRegistry
     : public BrowserAppInstanceObserver,
-      public crosapi::mojom::BrowserAppInstanceRegistry {
+      public crosapi::mojom::BrowserAppInstanceRegistry,
+      public aura::EnvObserver,
+      public aura::WindowObserver {
  public:
   explicit BrowserAppInstanceRegistry(
       BrowserAppInstanceTracker& ash_instance_tracker);
@@ -104,8 +110,22 @@
   void OnBrowserAppUpdated(apps::BrowserAppInstanceUpdate update) override;
   void OnBrowserAppRemoved(apps::BrowserAppInstanceUpdate update) override;
 
+  // aura::EnvObserver overrides:
+  void OnWindowInitialized(aura::Window* window) override;
+
+  // aura::WindowObserver overrides:
+  void OnWindowDestroying(aura::Window* window) override;
+
  private:
-  class LacrosWindowObserver;
+  // Buffered Lacros instance events for windows that weren't available yet
+  // when events arrived.
+  struct WindowEventList;
+
+  // Run the action immediately if the window matching |window_id| is
+  // available, otherwise buffer the event until it is.
+  void RunOrEnqueueEventForWindow(
+      const std::string& window_id,
+      base::OnceCallback<void(aura::Window*)> event);
 
   // Helpers processing of buffered lacros instance events.
   void LacrosWindowInstanceAdded(apps::BrowserWindowInstanceUpdate update,
@@ -131,7 +151,10 @@
   BrowserAppInstanceMap<base::UnguessableToken, BrowserWindowInstance>
       lacros_window_instances_;
 
-  std::unique_ptr<LacrosWindowObserver> lacros_window_observer_;
+  // Track all Aura windows belonging to Lacros. This is necessary to
+  // synchronise crosapi events and Aura windows matching these events being
+  // available.
+  std::map<std::string, WindowEventList> window_id_to_event_list_;
 
   mojo::ReceiverSet<crosapi::mojom::BrowserAppInstanceRegistry,
                     crosapi::CrosapiId>
@@ -141,6 +164,10 @@
 
   base::ScopedObservation<BrowserAppInstanceTracker, BrowserAppInstanceObserver>
       tracker_observation_{this};
+  base::ScopedObservation<aura::Env, aura::EnvObserver> aura_env_observation_{
+      this};
+  base::ScopedMultiSourceObservation<aura::Window, aura::WindowObserver>
+      lacros_window_observations_{this};
 
   base::WeakPtrFactory<BrowserAppInstanceRegistry> weak_ptr_factory_{this};
 };
diff --git a/chrome/browser/apps/app_service/intent_util.cc b/chrome/browser/apps/app_service/intent_util.cc
index 6f441c47..fa9374ad 100644
--- a/chrome/browser/apps/app_service/intent_util.cc
+++ b/chrome/browser/apps/app_service/intent_util.cc
@@ -12,10 +12,13 @@
 #include "base/feature_list.h"
 #include "base/strings/stringprintf.h"
 #include "chrome/browser/apps/app_service/file_utils.h"
+#include "chrome/browser/ui/extensions/application_launch.h"
 #include "chrome/browser/web_applications/web_app.h"
+#include "components/services/app_service/public/cpp/file_handler_info.h"
 #include "components/services/app_service/public/cpp/intent_filter_util.h"
 #include "components/services/app_service/public/cpp/intent_util.h"
 #include "components/services/app_service/public/mojom/types.mojom.h"
+#include "extensions/common/manifest_handlers/file_handler_info.h"
 #include "third_party/blink/public/common/features.h"
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
@@ -34,7 +37,8 @@
     const std::vector<std::string>& intent_actions,
     const std::vector<std::string>& mime_types,
     const std::vector<std::string>& file_extensions,
-    const std::string& activity_name = "") {
+    const std::string& activity_name = "",
+    bool include_directories = false) {
   DCHECK(!mime_types.empty() || !file_extensions.empty());
   auto intent_filter = apps::mojom::IntentFilter::New();
 
@@ -62,6 +66,10 @@
     condition_values.push_back(apps_util::MakeConditionValue(
         extension, apps::mojom::PatternMatchType::kFileExtension));
   }
+  if (include_directories) {
+    condition_values.push_back(apps_util::MakeConditionValue(
+        "", apps::mojom::PatternMatchType::kIsDirectory));
+  }
 
   DCHECK(!condition_values.empty());
   if (!condition_values.empty()) {
@@ -234,6 +242,38 @@
   return filters;
 }
 
+std::vector<apps::mojom::IntentFilterPtr> CreateChromeAppIntentFilters(
+    const extensions::Extension* extension) {
+  const extensions::FileHandlersInfo* file_handlers =
+      extensions::FileHandlers::GetFileHandlers(extension);
+  if (!file_handlers)
+    return {};
+  // Check that the extension can be launched with files. This includes all
+  // platform apps and allowlisted extensions.
+  if (!CanLaunchViaEvent(extension))
+    return {};
+  if (extension->from_bookmark())
+    return {};
+
+  std::vector<apps::mojom::IntentFilterPtr> filters;
+  for (const apps::FileHandlerInfo& handler : *file_handlers) {
+    // "share_with", "add_to" and "pack_with" are ignored in the Files app
+    // frontend.
+    if (handler.verb != apps::file_handler_verbs::kOpenWith)
+      continue;
+    std::vector<std::string> mime_types(handler.types.begin(),
+                                        handler.types.end());
+    std::vector<std::string> file_extensions(handler.extensions.begin(),
+                                             handler.extensions.end());
+    filters.push_back(CreateFileFilter({apps_util::kIntentActionView},
+                                       mime_types, file_extensions, handler.id,
+                                       handler.include_directories));
+    filters.back()->activity_label = extension->name();
+  }
+
+  return filters;
+}
+
 #if BUILDFLAG(IS_CHROMEOS_ASH)
 // TODO(crbug.com/853604): Make this not link to file manager extension if
 // possible. Added support to not link with file manager extension but still
@@ -465,6 +505,7 @@
             case apps::mojom::PatternMatchType::kNone:
             case apps::mojom::PatternMatchType::kMimeType:
             case apps::mojom::PatternMatchType::kFileExtension:
+            case apps::mojom::PatternMatchType::kIsDirectory:
               NOTREACHED();
               return arc::IntentFilter();
           }
diff --git a/chrome/browser/apps/app_service/intent_util.h b/chrome/browser/apps/app_service/intent_util.h
index 1db1132..47835fc1 100644
--- a/chrome/browser/apps/app_service/intent_util.h
+++ b/chrome/browser/apps/app_service/intent_util.h
@@ -10,6 +10,7 @@
 #include "base/containers/flat_map.h"
 #include "build/chromeos_buildflags.h"
 #include "components/services/app_service/public/mojom/types.mojom.h"
+#include "extensions/common/extension.h"
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
 #include "components/arc/mojom/intent_common.mojom.h"
@@ -38,6 +39,11 @@
     const web_app::WebApp& web_app,
     const GURL& scope);
 
+// Create intent filters for a Chrome app (extension-based) e.g. for
+// file_handlers.
+std::vector<apps::mojom::IntentFilterPtr> CreateChromeAppIntentFilters(
+    const extensions::Extension* extension);
+
 #if BUILDFLAG(IS_CHROMEOS_ASH)
 // Create an intent struct with filesystem:// or file:// type URLs from the
 // file paths and mime types of a list of files.
diff --git a/chrome/browser/apps/app_service/intent_util_unittest.cc b/chrome/browser/apps/app_service/intent_util_unittest.cc
index acf0359..9da9caf 100644
--- a/chrome/browser/apps/app_service/intent_util_unittest.cc
+++ b/chrome/browser/apps/app_service/intent_util_unittest.cc
@@ -17,6 +17,8 @@
 #include "components/arc/intent_helper/intent_constants.h"
 #include "components/arc/mojom/intent_helper.mojom.h"
 #include "components/services/app_service/public/cpp/intent_util.h"
+#include "extensions/common/extension_builder.h"
+#include "extensions/common/value_builder.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/public/common/features.h"
 
@@ -334,3 +336,86 @@
             apps_util::CreateLaunchIntent("com.android.vending",
                                           intent_with_text_and_title));
 }
+
+TEST_F(IntentUtilsTest, CreateChromeAppIntentFilters_FileHandlers) {
+  // Foo app provides file handler for text/plain and all file types.
+  extensions::ExtensionBuilder foo_app;
+  foo_app.SetManifest(
+      extensions::DictionaryBuilder()
+          .Set("name", "Foo")
+          .Set("version", "1.0.0")
+          .Set("manifest_version", 2)
+          .Set("app", extensions::DictionaryBuilder()
+                          .Set("background",
+                               extensions::DictionaryBuilder()
+                                   .Set("scripts", extensions::ListBuilder()
+                                                       .Append("background.js")
+                                                       .Build())
+                                   .Build())
+                          .Build())
+          .Set(
+              "file_handlers",
+              extensions::DictionaryBuilder()
+                  .Set("any",
+                       extensions::DictionaryBuilder()
+                           .Set("types",
+                                extensions::ListBuilder().Append("*/*").Build())
+                           .Build())
+                  .Set("text",
+                       extensions::DictionaryBuilder()
+                           .Set("types", extensions::ListBuilder()
+                                             .Append("text/plain")
+                                             .Build())
+                           .Set("extensions",
+                                extensions::ListBuilder().Append("txt").Build())
+                           .Set("verb", "open_with")
+                           .Build())
+                  .Build())
+          .Build());
+  foo_app.SetID("abcdzxcv");
+  scoped_refptr<const extensions::Extension> foo = foo_app.Build();
+
+  std::vector<IntentFilterPtr> filters =
+      apps_util::CreateChromeAppIntentFilters(foo.get());
+
+  ASSERT_EQ(filters.size(), 2);
+
+  // "any" filter - View action
+  const IntentFilterPtr& mime_filter = filters[0];
+  ASSERT_EQ(mime_filter->conditions.size(), 2);
+  const Condition& view_cond = *mime_filter->conditions[0];
+  EXPECT_EQ(view_cond.condition_type, ConditionType::kAction);
+  ASSERT_EQ(view_cond.condition_values.size(), 1);
+  EXPECT_EQ(view_cond.condition_values[0]->value, apps_util::kIntentActionView);
+
+  // "any" filter - mime type match
+  const Condition& file_cond = *mime_filter->conditions[1];
+  EXPECT_EQ(file_cond.condition_type, ConditionType::kFile);
+  ASSERT_EQ(file_cond.condition_values.size(), 1);
+  EXPECT_EQ(file_cond.condition_values[0]->match_type,
+            PatternMatchType::kMimeType);
+  EXPECT_EQ(file_cond.condition_values[0]->value, "*/*");
+
+  // Text filter - View action
+  const IntentFilterPtr& mime_filter2 = filters[1];
+  ASSERT_EQ(mime_filter2->conditions.size(), 2);
+  const Condition& view_cond2 = *mime_filter2->conditions[0];
+  EXPECT_EQ(view_cond2.condition_type, ConditionType::kAction);
+  ASSERT_EQ(view_cond2.condition_values.size(), 1);
+  EXPECT_EQ(view_cond2.condition_values[0]->value,
+            apps_util::kIntentActionView);
+
+  // Text filter - mime type match
+  const Condition& file_cond2 = *mime_filter2->conditions[1];
+  EXPECT_EQ(file_cond2.condition_type, ConditionType::kFile);
+  ASSERT_EQ(file_cond2.condition_values.size(), 2);
+  EXPECT_EQ(file_cond2.condition_values[0]->match_type,
+            PatternMatchType::kMimeType);
+  EXPECT_EQ(file_cond2.condition_values[0]->value, "text/plain");
+  // Text filter - file extension match
+  EXPECT_EQ(file_cond2.condition_values[1]->match_type,
+            PatternMatchType::kFileExtension);
+  EXPECT_EQ(file_cond2.condition_values[1]->value, "txt");
+}
+
+// TODO test verbs, generic.
diff --git a/chrome/browser/apps/app_service/publishers/arc_apps.cc b/chrome/browser/apps/app_service/publishers/arc_apps.cc
index 9f49ffd7..5c549c55 100644
--- a/chrome/browser/apps/app_service/publishers/arc_apps.cc
+++ b/chrome/browser/apps/app_service/publishers/arc_apps.cc
@@ -33,6 +33,7 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/app_list/arc/arc_app_icon.h"
 #include "chrome/browser/ui/app_list/arc/arc_app_utils.h"
+#include "chrome/browser/web_applications/web_app_utils.h"
 #include "chrome/common/chrome_features.h"
 #include "chrome/grit/component_extension_resources.h"
 #include "chrome/grit/generated_resources.h"
@@ -522,7 +523,8 @@
     instance_registry_observation_.Observe(instance_registry);
   }
 
-  if (base::FeatureList::IsEnabled(ash::features::kWebApkGenerator)) {
+  if (base::FeatureList::IsEnabled(ash::features::kWebApkGenerator) &&
+      web_app::AreWebAppsEnabled(profile_)) {
     web_apk_manager_ = std::make_unique<apps::WebApkManager>(profile_);
   }
 
diff --git a/chrome/browser/apps/app_service/publishers/extension_apps_chromeos.cc b/chrome/browser/apps/app_service/publishers/extension_apps_chromeos.cc
index 88bcfc9..2b43d44 100644
--- a/chrome/browser/apps/app_service/publishers/extension_apps_chromeos.cc
+++ b/chrome/browser/apps/app_service/publishers/extension_apps_chromeos.cc
@@ -17,6 +17,7 @@
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/containers/contains.h"
+#include "base/containers/extend.h"
 #include "base/feature_list.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/scoped_observation.h"
@@ -24,6 +25,7 @@
 #include "base/values.h"
 #include "chrome/browser/apps/app_service/app_icon_factory.h"
 #include "chrome/browser/apps/app_service/app_service_metrics.h"
+#include "chrome/browser/apps/app_service/intent_util.h"
 #include "chrome/browser/apps/app_service/launch_utils.h"
 #include "chrome/browser/apps/app_service/menu_util.h"
 #include "chrome/browser/ash/arc/arc_util.h"
@@ -671,6 +673,10 @@
     app->show_in_shelf = apps::mojom::OptionalBool::kFalse;
   }
 
+  // Add file_handlers.
+  base::Extend(app->intent_filters,
+               apps_util::CreateChromeAppIntentFilters(extension));
+
   return app;
 }
 
diff --git a/chrome/browser/apps/app_service/publishers/web_apps_crosapi.cc b/chrome/browser/apps/app_service/publishers/web_apps_crosapi.cc
index 50bef980..e5cee2b 100644
--- a/chrome/browser/apps/app_service/publishers/web_apps_crosapi.cc
+++ b/chrome/browser/apps/app_service/publishers/web_apps_crosapi.cc
@@ -10,6 +10,8 @@
 #include "ash/public/cpp/app_menu_constants.h"
 #include "base/bind.h"
 #include "base/callback_helpers.h"
+#include "base/location.h"
+#include "base/logging.h"
 #include "chrome/browser/apps/app_service/app_icon_factory.h"
 #include "chrome/browser/apps/app_service/app_service_proxy.h"
 #include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
@@ -67,6 +69,11 @@
                               int32_t size_hint_in_dip,
                               bool allow_placeholder_icon,
                               LoadIconCallback callback) {
+  if (!LogIfNotConnected(FROM_HERE)) {
+    std::move(callback).Run(apps::mojom::IconValue::New());
+    return;
+  }
+
   controller_->LoadIcon(app_id, std::move(icon_key), icon_type,
                         size_hint_in_dip, std::move(callback));
 }
@@ -75,6 +82,10 @@
                             int32_t event_flags,
                             apps::mojom::LaunchSource launch_source,
                             apps::mojom::WindowInfoPtr window_info) {
+  if (!LogIfNotConnected(FROM_HERE)) {
+    return;
+  }
+
   auto launch_params = crosapi::mojom::LaunchParams::New();
   launch_params->app_id = app_id;
   launch_params->launch_source = launch_source;
@@ -87,6 +98,10 @@
     apps::mojom::IntentPtr intent,
     apps::mojom::LaunchSource launch_source,
     apps::mojom::WindowInfoPtr window_info) {
+  if (!LogIfNotConnected(FROM_HERE)) {
+    return;
+  }
+
   auto launch_params = crosapi::mojom::LaunchParams::New();
   launch_params->app_id = app_id;
   launch_params->launch_source = launch_source;
@@ -98,6 +113,10 @@
                                apps::mojom::UninstallSource uninstall_source,
                                bool clear_site_data,
                                bool report_abuse) {
+  if (!LogIfNotConnected(FROM_HERE)) {
+    return;
+  }
+
   controller_->Uninstall(app_id, uninstall_source, clear_site_data,
                          report_abuse);
 }
@@ -151,6 +170,11 @@
   }
   if (base::FeatureList::IsEnabled(
           features::kDesktopPWAsAppIconShortcutsMenuUI)) {
+    if (!LogIfNotConnected(FROM_HERE)) {
+      std::move(callback).Run(std::move(menu_items));
+      return;
+    }
+
     controller_->GetMenuModel(
         app_id, base::BindOnce(&WebAppsCrosapi::OnGetMenuModelFromCrosapi,
                                weak_factory_.GetWeakPtr(), app_id, menu_type,
@@ -195,23 +219,43 @@
 }
 
 void WebAppsCrosapi::PauseApp(const std::string& app_id) {
+  if (!LogIfNotConnected(FROM_HERE)) {
+    return;
+  }
+
   controller_->PauseApp(app_id);
 }
 
 void WebAppsCrosapi::UnpauseApp(const std::string& app_id) {
+  if (!LogIfNotConnected(FROM_HERE)) {
+    return;
+  }
+
   controller_->UnpauseApp(app_id);
 }
 
 void WebAppsCrosapi::StopApp(const std::string& app_id) {
+  if (!LogIfNotConnected(FROM_HERE)) {
+    return;
+  }
+
   controller_->StopApp(app_id);
 }
 
 void WebAppsCrosapi::OpenNativeSettings(const std::string& app_id) {
+  if (!LogIfNotConnected(FROM_HERE)) {
+    return;
+  }
+
   controller_->OpenNativeSettings(app_id);
 }
 
 void WebAppsCrosapi::SetWindowMode(const std::string& app_id,
                                    apps::mojom::WindowMode window_mode) {
+  if (!LogIfNotConnected(FROM_HERE)) {
+    return;
+  }
+
   controller_->SetWindowMode(app_id, window_mode);
 }
 
@@ -219,6 +263,10 @@
                                                int command_id,
                                                const std::string& shortcut_id,
                                                int64_t display_id) {
+  if (!LogIfNotConnected(FROM_HERE)) {
+    return;
+  }
+
   controller_->ExecuteContextMenuCommand(app_id, shortcut_id,
                                          base::DoNothing());
 }
@@ -252,6 +300,17 @@
   }
 }
 
+bool WebAppsCrosapi::LogIfNotConnected(const base::Location& from_here) {
+  // It is possible that Lacros is briefly unavailable, for example if it shuts
+  // down for an update.
+
+  if (controller_.is_bound()) {
+    return true;
+  }
+  LOG(WARNING) << "Controller not connected: " << from_here.ToString();
+  return false;
+}
+
 void WebAppsCrosapi::OnCrosapiDisconnected() {
   receiver_.reset();
   controller_.reset();
diff --git a/chrome/browser/apps/app_service/publishers/web_apps_crosapi.h b/chrome/browser/apps/app_service/publishers/web_apps_crosapi.h
index afa3dd1..d56214f 100644
--- a/chrome/browser/apps/app_service/publishers/web_apps_crosapi.h
+++ b/chrome/browser/apps/app_service/publishers/web_apps_crosapi.h
@@ -21,6 +21,10 @@
 
 class Profile;
 
+namespace base {
+class Location;
+}  // namespace base
+
 namespace apps {
 
 // An app publisher for crosapi web apps. This is a proxy publisher that lives
@@ -88,6 +92,8 @@
   void OnCapabilityAccesses(
       std::vector<apps::mojom::CapabilityAccessPtr> deltas) override;
 
+  bool LogIfNotConnected(const base::Location& from_here);
+
   void OnCrosapiDisconnected();
   void OnControllerDisconnected();
 
diff --git a/chrome/browser/apps/app_service/webapk/webapk_manager.cc b/chrome/browser/apps/app_service/webapk/webapk_manager.cc
index eade2d4..8111b48e1 100644
--- a/chrome/browser/apps/app_service/webapk/webapk_manager.cc
+++ b/chrome/browser/apps/app_service/webapk/webapk_manager.cc
@@ -18,6 +18,7 @@
 #include "chrome/browser/ash/arc/arc_util.h"
 #include "chrome/browser/ash/arc/session/arc_session_manager.h"
 #include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/web_applications/web_app_utils.h"
 #include "components/arc/mojom/app.mojom.h"
 #include "components/arc/session/connection_holder.h"
 #include "components/prefs/pref_change_registrar.h"
@@ -51,6 +52,7 @@
       initialized_(false),
       install_queue_(std::make_unique<WebApkInstallQueue>(profile_)),
       pref_change_registrar_(std::make_unique<PrefChangeRegistrar>()) {
+  DCHECK(web_app::AreWebAppsEnabled(profile_));
   proxy_ = AppServiceProxyFactory::GetForProfile(profile_);
   apk_service_ = ash::ApkWebAppService::Get(profile_);
   DCHECK(apk_service_);
diff --git a/chrome/browser/ash/apps/intent_helper/ash_intent_picker_helpers.cc b/chrome/browser/apps/intent_helper/chromeos_intent_picker_helpers.cc
similarity index 91%
rename from chrome/browser/ash/apps/intent_helper/ash_intent_picker_helpers.cc
rename to chrome/browser/apps/intent_helper/chromeos_intent_picker_helpers.cc
index 6d9ca466f..0c9d4dc8 100644
--- a/chrome/browser/ash/apps/intent_helper/ash_intent_picker_helpers.cc
+++ b/chrome/browser/apps/intent_helper/chromeos_intent_picker_helpers.cc
@@ -2,12 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/ash/apps/intent_helper/ash_intent_picker_helpers.h"
+#include "chrome/browser/apps/intent_helper/chromeos_intent_picker_helpers.h"
 
 #include <algorithm>
 #include <utility>
 
-#include "ash/constants/ash_switches.h"
 #include "base/bind.h"
 #include "base/debug/dump_without_crashing.h"
 #include "chrome/browser/apps/app_service/app_service_proxy.h"
@@ -17,7 +16,7 @@
 #include "chrome/browser/apps/intent_helper/intent_picker_auto_display_service.h"
 #include "chrome/browser/apps/intent_helper/intent_picker_constants.h"
 #include "chrome/browser/apps/intent_helper/intent_picker_internal.h"
-#include "chrome/browser/ash/apps/metrics/intent_handling_metrics.h"
+#include "chrome/browser/apps/intent_helper/metrics/intent_handling_metrics.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/intent_picker_tab_helper.h"
 #include "chrome/browser/ui/web_applications/web_app_launch_utils.h"
@@ -29,6 +28,10 @@
 #include "ui/base/models/image_model.h"
 #include "ui/display/types/display_constants.h"
 
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+#include "ash/constants/ash_switches.h"
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
+
 namespace apps {
 
 namespace {
@@ -59,13 +62,15 @@
 
   // On devices with tablet form factor we should not pop out the intent
   // picker if Chrome has been chosen by the user as the platform for this URL.
+  // TODO(crbug.com/1225828): Handle this for lacros-chrome as well.
+#if BUILDFLAG(IS_CHROMEOS_ASH)
   if (chromeos::switches::IsTabletFormFactor()) {
     if (ui_auto_display_service->GetLastUsedPlatformForTablets(url) ==
         IntentPickerAutoDisplayPref::Platform::kChrome) {
       return false;
     }
   }
-
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
   // If we only have PWAs in the app list, do not show the intent picker.
   // Instead just show the omnibox icon. This is to reduce annoyance to users
   // until "Remember my choice" is available for desktop PWAs.
@@ -80,8 +85,7 @@
   Profile* profile =
       Profile::FromBrowserContext(web_contents->GetBrowserContext());
 
-  AppServiceProxyChromeOs* proxy =
-      AppServiceProxyFactory::GetForProfile(profile);
+  auto* proxy = AppServiceProxyFactory::GetForProfile(profile);
 
   if (proxy) {
     auto preferred_app_id = proxy->PreferredApps().FindPreferredAppForUrl(url);
@@ -111,7 +115,7 @@
       web_contents, std::move(apps),
       /*show_stay_in_chrome=*/true,
       /*show_remember_selection=*/true,
-      base::BindOnce(&OnIntentPickerClosedAsh, web_contents,
+      base::BindOnce(&OnIntentPickerClosedChromeOs, web_contents,
                      ui_auto_display_service, url));
 }
 
@@ -143,7 +147,7 @@
                      });
 }
 
-void OnIntentPickerClosedAsh(
+void OnIntentPickerClosedChromeOs(
     content::WebContents* web_contents,
     IntentPickerAutoDisplayService* ui_auto_display_service,
     const GURL& url,
@@ -151,6 +155,8 @@
     PickerEntryType entry_type,
     IntentPickerCloseReason close_reason,
     bool should_persist) {
+// TODO(crbug.com/1225828): Handle this for lacros-chrome as well.
+#if BUILDFLAG(IS_CHROMEOS_ASH)
   if (chromeos::switches::IsTabletFormFactor() && should_persist) {
     // On devices of tablet form factor, until the user has decided to persist
     // the setting, the browser-side intent picker should always be seen.
@@ -165,6 +171,7 @@
         Profile::FromBrowserContext(web_contents->GetBrowserContext()))
         ->UpdatePlatformForTablets(url, platform);
   }
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
   const bool should_launch_app =
       close_reason == IntentPickerCloseReason::OPEN_APP;
@@ -172,8 +179,7 @@
   Profile* profile =
       Profile::FromBrowserContext(web_contents->GetBrowserContext());
 
-  AppServiceProxyChromeOs* proxy =
-      AppServiceProxyFactory::GetForProfile(profile);
+  auto* proxy = AppServiceProxyFactory::GetForProfile(profile);
 
   // If the picker was closed without an app being chosen,
   // e.g. due to the tab being closed. Keep count of this scenario so we can
diff --git a/chrome/browser/ash/apps/intent_helper/ash_intent_picker_helpers.h b/chrome/browser/apps/intent_helper/chromeos_intent_picker_helpers.h
similarity index 82%
rename from chrome/browser/ash/apps/intent_helper/ash_intent_picker_helpers.h
rename to chrome/browser/apps/intent_helper/chromeos_intent_picker_helpers.h
index 24f216d6..63dc216 100644
--- a/chrome/browser/ash/apps/intent_helper/ash_intent_picker_helpers.h
+++ b/chrome/browser/apps/intent_helper/chromeos_intent_picker_helpers.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_ASH_APPS_INTENT_HELPER_ASH_INTENT_PICKER_HELPERS_H_
-#define CHROME_BROWSER_ASH_APPS_INTENT_HELPER_ASH_INTENT_PICKER_HELPERS_H_
+#ifndef CHROME_BROWSER_APPS_INTENT_HELPER_CHROMEOS_INTENT_PICKER_HELPERS_H_
+#define CHROME_BROWSER_APPS_INTENT_HELPER_CHROMEOS_INTENT_PICKER_HELPERS_H_
 
 #include <vector>
 
@@ -32,7 +32,7 @@
   kPopOut = 2,   // show the intent picker icon and pop out bubble
 };
 
-void OnIntentPickerClosedAsh(
+void OnIntentPickerClosedChromeOs(
     content::WebContents* web_contents,
     IntentPickerAutoDisplayService* ui_auto_display_service,
     const GURL& url,
@@ -43,4 +43,4 @@
 
 }  // namespace apps
 
-#endif  // CHROME_BROWSER_ASH_APPS_INTENT_HELPER_ASH_INTENT_PICKER_HELPERS_H_
+#endif  // CHROME_BROWSER_APPS_INTENT_HELPER_CHROMEOS_INTENT_PICKER_HELPERS_H_
diff --git a/chrome/browser/apps/intent_helper/intent_picker_helpers.cc b/chrome/browser/apps/intent_helper/intent_picker_helpers.cc
index 841275f6..5ae9db7 100644
--- a/chrome/browser/apps/intent_helper/intent_picker_helpers.cc
+++ b/chrome/browser/apps/intent_helper/intent_picker_helpers.cc
@@ -19,11 +19,11 @@
 #include "content/public/browser/navigation_handle.h"
 #include "content/public/browser/web_contents.h"
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
-#include "chrome/browser/ash/apps/intent_helper/ash_intent_picker_helpers.h"
+#if defined(OS_CHROMEOS)
+#include "chrome/browser/apps/intent_helper/chromeos_intent_picker_helpers.h"
 #elif defined(OS_MAC)
 #include "chrome/browser/apps/intent_helper/mac_intent_picker_helpers.h"
-#endif
+#endif  // defined(OS_CHROMEOS)
 
 namespace apps {
 
@@ -37,7 +37,7 @@
   // On the Mac, if there is a Universal Link, it goes first.
   if (absl::optional<IntentPickerAppInfo> mac_app = FindMacAppForUrl(url))
     apps.push_back(std::move(mac_app.value()));
-#endif
+#endif  // defined(OS_MAC)
 
   Profile* profile =
       Profile::FromBrowserContext(web_contents->GetBrowserContext());
@@ -65,10 +65,10 @@
     PickerEntryType entry_type,
     IntentPickerCloseReason close_reason,
     bool should_persist) {
-#if BUILDFLAG(IS_CHROMEOS_ASH)
-  OnIntentPickerClosedAsh(web_contents, ui_auto_display_service, url,
-                          launch_name, entry_type, close_reason,
-                          should_persist);
+#if defined(OS_CHROMEOS)
+  OnIntentPickerClosedChromeOs(web_contents, ui_auto_display_service, url,
+                               launch_name, entry_type, close_reason,
+                               should_persist);
 #else
   const bool should_launch_app =
       close_reason == apps::IntentPickerCloseReason::OPEN_APP;
@@ -92,12 +92,12 @@
         LaunchMacApp(url, launch_name);
       }
       break;
-#endif
+#endif  // defined(OS_MAC)
     case PickerEntryType::kArc:
     case PickerEntryType::kDevice:
       NOTREACHED();
   }
-#endif
+#endif  // defined(OS_CHROMEOS)
 }
 
 void OnAppIconsLoaded(content::WebContents* web_contents,
@@ -106,13 +106,13 @@
                       std::vector<IntentPickerAppInfo> apps) {
   ShowIntentPickerBubbleForApps(
       web_contents, std::move(apps),
-#if BUILDFLAG(IS_CHROMEOS_ASH)
+#if defined(OS_CHROMEOS)
       /*show_stay_in_chrome=*/true,
       /*show_remember_selection=*/true,
 #else
       /*show_stay_in_chrome=*/false,
       /*show_remember_selection=*/false,
-#endif
+#endif  // defined(OS_CHROMEOS)
       base::BindOnce(&OnIntentPickerClosed, web_contents,
                      ui_auto_display_service, url));
 }
@@ -147,9 +147,9 @@
 void MaybeShowIntentPicker(content::NavigationHandle* navigation_handle) {
   content::WebContents* web_contents = navigation_handle->GetWebContents();
   auto apps = MaybeShowIntentPickerImpl(web_contents);
-#if BUILDFLAG(IS_CHROMEOS_ASH)
+#if defined(OS_CHROMEOS)
   MaybeShowIntentPickerBubble(navigation_handle, std::move(apps));
-#endif
+#endif  // defined(OS_CHROMEOS)
 }
 
 void MaybeShowIntentPicker(content::WebContents* web_contents) {
diff --git a/chrome/browser/ash/apps/metrics/intent_handling_metrics.cc b/chrome/browser/apps/intent_helper/metrics/intent_handling_metrics.cc
similarity index 94%
rename from chrome/browser/ash/apps/metrics/intent_handling_metrics.cc
rename to chrome/browser/apps/intent_helper/metrics/intent_handling_metrics.cc
index e64993a..bd6fd8395 100644
--- a/chrome/browser/ash/apps/metrics/intent_handling_metrics.cc
+++ b/chrome/browser/apps/intent_helper/metrics/intent_handling_metrics.cc
@@ -2,12 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/ash/apps/metrics/intent_handling_metrics.h"
+#include "chrome/browser/apps/intent_helper/metrics/intent_handling_metrics.h"
 
 #include "base/metrics/histogram_macros.h"
-#include "chrome/browser/apps/intent_helper/apps_navigation_types.h"
 #include "components/arc/metrics/arc_metrics_constants.h"
+
+#if BUILDFLAG(IS_CHROMEOS_ASH)
 #include "components/arc/metrics/arc_metrics_service.h"
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
 namespace apps {
 
@@ -36,18 +38,22 @@
     IntentPickerCloseReason close_reason,
     Source source,
     bool should_persist) {
+#if BUILDFLAG(IS_CHROMEOS_ASH)
   if (entry_type == PickerEntryType::kArc &&
+      source == Source::kExternalProtocol &&
       (close_reason == IntentPickerCloseReason::PREFERRED_APP_FOUND ||
        close_reason == IntentPickerCloseReason::OPEN_APP)) {
     arc::ArcMetricsService::RecordArcUserInteraction(
         context, arc::UserInteractionType::APP_STARTED_FROM_LINK);
   }
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
   PickerAction action =
       GetPickerAction(entry_type, close_reason, should_persist);
   Platform platform = GetDestinationPlatform(selected_app_package, action);
   RecordIntentPickerMetrics(source, should_persist, action, platform);
 }
 
+#if BUILDFLAG(IS_CHROMEOS_ASH)
 void IntentHandlingMetrics::RecordExternalProtocolMetrics(
     arc::Scheme scheme,
     PickerEntryType entry_type,
@@ -63,6 +69,7 @@
                               action);
   }
 }
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
 void IntentHandlingMetrics::RecordOpenBrowserMetrics(AppType type) {
   UMA_HISTOGRAM_ENUMERATION("ChromeOS.Apps.OpenBrowser", type);
diff --git a/chrome/browser/ash/apps/metrics/intent_handling_metrics.h b/chrome/browser/apps/intent_helper/metrics/intent_handling_metrics.h
similarity index 92%
rename from chrome/browser/ash/apps/metrics/intent_handling_metrics.h
rename to chrome/browser/apps/intent_helper/metrics/intent_handling_metrics.h
index e3a898a..7e55ba2 100644
--- a/chrome/browser/ash/apps/metrics/intent_handling_metrics.h
+++ b/chrome/browser/apps/intent_helper/metrics/intent_handling_metrics.h
@@ -2,16 +2,17 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_ASH_APPS_METRICS_INTENT_HANDLING_METRICS_H_
-#define CHROME_BROWSER_ASH_APPS_METRICS_INTENT_HANDLING_METRICS_H_
+#ifndef CHROME_BROWSER_APPS_INTENT_HELPER_METRICS_INTENT_HANDLING_METRICS_H_
+#define CHROME_BROWSER_APPS_INTENT_HELPER_METRICS_INTENT_HANDLING_METRICS_H_
 
 #include <string>
 #include <utility>
 
-#include "chrome/browser/apps/intent_helper/apps_navigation_throttle.h"
 #include "chrome/browser/apps/intent_helper/apps_navigation_types.h"
+
+#if BUILDFLAG(IS_CHROMEOS_ASH)
 #include "chrome/browser/ash/arc/intent_helper/arc_external_protocol_dialog.h"
-#include "components/arc/metrics/arc_metrics_constants.h"
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
 namespace content {
 class BrowserContext;
@@ -109,14 +110,16 @@
       Source source,
       bool should_persist);
 
+#if BUILDFLAG(IS_CHROMEOS_ASH)
   static void RecordExternalProtocolMetrics(arc::Scheme scheme,
                                             apps::PickerEntryType entry_type,
                                             bool accepted,
                                             bool persisted);
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
   static void RecordOpenBrowserMetrics(AppType type);
 };
 
 }  // namespace apps
 
-#endif  // CHROME_BROWSER_ASH_APPS_METRICS_INTENT_HANDLING_METRICS_H_
+#endif  // CHROME_BROWSER_APPS_INTENT_HELPER_METRICS_INTENT_HANDLING_METRICS_H_
diff --git a/chrome/browser/ash/apps/metrics/intent_handling_metrics_unittest.cc b/chrome/browser/apps/intent_helper/metrics/intent_handling_metrics_unittest.cc
similarity index 98%
rename from chrome/browser/ash/apps/metrics/intent_handling_metrics_unittest.cc
rename to chrome/browser/apps/intent_helper/metrics/intent_handling_metrics_unittest.cc
index 33a21e4..7519641 100644
--- a/chrome/browser/ash/apps/metrics/intent_handling_metrics_unittest.cc
+++ b/chrome/browser/apps/intent_helper/metrics/intent_handling_metrics_unittest.cc
@@ -2,21 +2,24 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/ash/apps/metrics/intent_handling_metrics.h"
+#include "chrome/browser/apps/intent_helper/metrics/intent_handling_metrics.h"
 
 #include "base/metrics/histogram_macros.h"
 #include "base/test/gtest_util.h"
 #include "base/test/metrics/histogram_tester.h"
-#include "chrome/browser/ash/arc/intent_helper/arc_external_protocol_dialog.h"
 #include "chrome/test/base/testing_profile.h"
+#include "components/prefs/testing_pref_service.h"
+#include "content/public/test/browser_task_environment.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+#include "chrome/browser/ash/arc/intent_helper/arc_external_protocol_dialog.h"
 #include "components/arc/arc_prefs.h"
 #include "components/arc/arc_service_manager.h"
 #include "components/arc/intent_helper/arc_intent_helper_bridge.h"
 #include "components/arc/metrics/arc_metrics_service.h"
 #include "components/arc/metrics/stability_metrics_manager.h"
-#include "components/prefs/testing_pref_service.h"
-#include "content/public/test/browser_task_environment.h"
-#include "testing/gtest/include/gtest/gtest.h"
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
 namespace apps {
 
@@ -46,6 +49,8 @@
       IntentHandlingMetrics::Platform::ARC, 1);
 }
 
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+
 // A fixture class that sets up arc::ArcMetricsService.
 class IntentHandlingMetricsTestWithMetricsService : public testing::Test {
  protected:
@@ -100,6 +105,7 @@
       "ChromeOS.Apps.ExternalProtocolDialog.Accepted",
       arc::ProtocolAction::IRC_ACCEPTED_PERSISTED, 1);
 }
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
 TEST(IntentHandlingMetricsTest, TestRecordOpenBrowserMetrics) {
   base::HistogramTester histogram_tester;
diff --git a/chrome/browser/ash/DEPS b/chrome/browser/ash/DEPS
index 0d81be3a..14148cc90 100644
--- a/chrome/browser/ash/DEPS
+++ b/chrome/browser/ash/DEPS
@@ -22,7 +22,8 @@
   "+media/audio/sounds",  # For system sounds
   "+media/base/media_switches.h",  # For media command line switches.
   "+media/mojo/mojom",  # For platform verification mojom interface.
-  "+remoting/host/it2me",  # For CRD host in remote command
+  "+remoting/host/chromeos", # For CRD host in remote command
+  "+remoting/host/mojom", # For CRD host in remote command
   "+remoting/protocol",  # For CRD host in remote command
   "+services/device/public",
   "+services/metrics/public",
diff --git a/chrome/browser/ash/app_restore/full_restore_arc_task_handler.cc b/chrome/browser/ash/app_restore/full_restore_arc_task_handler.cc
index 5373d4b9..1ec6967a 100644
--- a/chrome/browser/ash/app_restore/full_restore_arc_task_handler.cc
+++ b/chrome/browser/ash/app_restore/full_restore_arc_task_handler.cc
@@ -79,6 +79,12 @@
 
   if (arc_app_launch_handler_)
     arc_app_launch_handler_->OnAppConnectionReady();
+
+  ::full_restore::SetArcConnection(/*is_connection_ready=*/true);
+}
+
+void FullRestoreArcTaskHandler::OnAppConnectionClosed() {
+  ::full_restore::SetArcConnection(/*is_connection_ready=*/false);
 }
 
 void FullRestoreArcTaskHandler::OnArcAppListPrefsDestroyed() {
diff --git a/chrome/browser/ash/app_restore/full_restore_arc_task_handler.h b/chrome/browser/ash/app_restore/full_restore_arc_task_handler.h
index e6b50e9..c2f266eb 100644
--- a/chrome/browser/ash/app_restore/full_restore_arc_task_handler.h
+++ b/chrome/browser/ash/app_restore/full_restore_arc_task_handler.h
@@ -61,6 +61,7 @@
                                 uint32_t primary_color,
                                 uint32_t status_bar_color) override;
   void OnAppConnectionReady() override;
+  void OnAppConnectionClosed() override;
   void OnArcAppListPrefsDestroyed() override;
 
   // arc::ArcSessionManagerObserver:
diff --git a/chrome/browser/ash/apps/intent_helper/common_apps_navigation_throttle.cc b/chrome/browser/ash/apps/intent_helper/common_apps_navigation_throttle.cc
index 85903ce..9b058a95 100644
--- a/chrome/browser/ash/apps/intent_helper/common_apps_navigation_throttle.cc
+++ b/chrome/browser/ash/apps/intent_helper/common_apps_navigation_throttle.cc
@@ -12,9 +12,9 @@
 #include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
 #include "chrome/browser/apps/app_service/launch_utils.h"
 #include "chrome/browser/apps/intent_helper/apps_navigation_types.h"
+#include "chrome/browser/apps/intent_helper/chromeos_intent_picker_helpers.h"
 #include "chrome/browser/apps/intent_helper/intent_picker_internal.h"
-#include "chrome/browser/ash/apps/intent_helper/ash_intent_picker_helpers.h"
-#include "chrome/browser/ash/apps/metrics/intent_handling_metrics.h"
+#include "chrome/browser/apps/intent_helper/metrics/intent_handling_metrics.h"
 #include "chrome/browser/ash/policy/handlers/system_features_disable_list_policy_handler.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/profiles/profile.h"
diff --git a/chrome/browser/ash/arc/intent_helper/arc_external_protocol_dialog.cc b/chrome/browser/ash/arc/intent_helper/arc_external_protocol_dialog.cc
index f366096..87bd2bd 100644
--- a/chrome/browser/ash/arc/intent_helper/arc_external_protocol_dialog.cc
+++ b/chrome/browser/ash/arc/intent_helper/arc_external_protocol_dialog.cc
@@ -10,8 +10,8 @@
 #include "base/memory/ref_counted.h"
 #include "base/metrics/histogram_functions.h"
 #include "chrome/app/vector_icons/vector_icons.h"
+#include "chrome/browser/apps/intent_helper/metrics/intent_handling_metrics.h"
 #include "chrome/browser/apps/intent_helper/page_transition_util.h"
-#include "chrome/browser/ash/apps/metrics/intent_handling_metrics.h"
 #include "chrome/browser/ash/arc/arc_web_contents_data.h"
 #include "chrome/browser/chromeos/external_protocol_dialog.h"
 #include "chrome/browser/sharing/click_to_call/click_to_call_metrics.h"
diff --git a/chrome/browser/ash/arc/user_session/arc_user_session_service_browsertest.cc b/chrome/browser/ash/arc/user_session/arc_user_session_service_browsertest.cc
index 8ea7297..63a973b8 100644
--- a/chrome/browser/ash/arc/user_session/arc_user_session_service_browsertest.cc
+++ b/chrome/browser/ash/arc/user_session/arc_user_session_service_browsertest.cc
@@ -47,9 +47,9 @@
 class ArcUserSessionServiceTest : public InProcessBrowserTest {
  public:
   ArcUserSessionServiceTest() {
-    // SplitSettingsSync makes an untitled Play Store icon appear in the shelf
-    // due to app pin syncing code. Sync isn't relevant to this test, so skip
-    // pinned app sync. https://crbug.com/1085597
+    // SyncSettingsCategorization makes an untitled Play Store icon appear in
+    // the shelf due to app pin syncing code. Sync isn't relevant to this test,
+    // so skip pinned app sync. https://crbug.com/1085597
     SkipPinnedAppsFromSyncForTest();
   }
 
diff --git a/chrome/browser/ash/crosapi/remoting_ash.cc b/chrome/browser/ash/crosapi/remoting_ash.cc
index 2009041b..ee67ed09 100644
--- a/chrome/browser/ash/crosapi/remoting_ash.cc
+++ b/chrome/browser/ash/crosapi/remoting_ash.cc
@@ -8,8 +8,10 @@
 
 #include "chromeos/crosapi/mojom/remoting.mojom.h"
 #include "content/public/browser/browser_thread.h"
+#include "remoting/host/chromeos/chromeos_enterprise_params.h"
 #include "remoting/host/chromeos/remote_support_host_ash.h"
 #include "remoting/host/chromeos/remoting_service.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 
 namespace crosapi {
 
@@ -33,7 +35,7 @@
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
 
   remoting::RemotingService::Get().GetSupportHost().StartSession(
-      std::move(params),
+      std::move(params), absl::nullopt,
       base::BindOnce(
           [](StartSupportSessionCallback callback,
              remoting::mojom::StartSupportSessionResponsePtr response) {
diff --git a/chrome/browser/ash/file_manager/app_service_file_tasks.cc b/chrome/browser/ash/file_manager/app_service_file_tasks.cc
index a76067ec..0388394 100644
--- a/chrome/browser/ash/file_manager/app_service_file_tasks.cc
+++ b/chrome/browser/ash/file_manager/app_service_file_tasks.cc
@@ -22,6 +22,7 @@
 #include "chrome/browser/apps/app_service/app_service_proxy.h"
 #include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
 #include "chrome/browser/apps/app_service/launch_utils.h"
+#include "chrome/browser/ash/crostini/crostini_features.h"
 #include "chrome/browser/ash/file_manager/fileapi_util.h"
 #include "chrome/browser/ash/file_manager/filesystem_api_util.h"
 #include "chrome/browser/ash/file_manager/path_util.h"
@@ -34,9 +35,11 @@
 #include "components/arc/mojom/file_system.mojom.h"
 #include "components/arc/mojom/intent_helper.mojom.h"
 #include "components/services/app_service/public/cpp/intent_util.h"
+#include "components/services/app_service/public/mojom/types.mojom-shared.h"
 #include "components/services/app_service/public/mojom/types.mojom.h"
 #include "content/public/browser/browser_thread.h"
 #include "extensions/browser/entry_info.h"
+#include "extensions/browser/extension_util.h"
 #include "storage/browser/file_system/file_system_context.h"
 #include "storage/browser/file_system/file_system_url.h"
 #include "url/gurl.h"
@@ -44,6 +47,8 @@
 namespace file_manager {
 namespace file_tasks {
 
+using extensions::api::file_manager_private::Verb;
+
 namespace {
 // TODO(crbug/1092784): Only going to support ARC app and web app
 // for now.
@@ -54,10 +59,12 @@
     case apps::mojom::AppType::kWeb:
     case apps::mojom::AppType::kSystemWeb:
       return TASK_TYPE_WEB_APP;
+    case apps::mojom::AppType::kExtension:
+      // TODO(petermarshall): Distinguish Chrome apps from Extensions.
+      return TASK_TYPE_FILE_HANDLER;
     case apps::mojom::AppType::kUnknown:
     case apps::mojom::AppType::kCrostini:
     case apps::mojom::AppType::kBuiltIn:
-    case apps::mojom::AppType::kExtension:
     case apps::mojom::AppType::kMacOs:
     case apps::mojom::AppType::kPluginVm:
     case apps::mojom::AppType::kStandaloneBrowser:
@@ -68,8 +75,23 @@
   }
 }
 
+const char kImportCrostiniImageHandlerId[] = "import-crostini-image";
+const char kInstallLinuxPackageHandlerId[] = "install-linux-package";
+
 }  // namespace
 
+bool FileHandlerIsEnabled(Profile* profile,
+                          const std::string& file_handler_id) {
+  // Crostini deb files and backup files can be disabled by policy.
+  if (file_handler_id == kInstallLinuxPackageHandlerId) {
+    return crostini::CrostiniFeatures::Get()->IsRootAccessAllowed(profile);
+  }
+  if (file_handler_id == kImportCrostiniImageHandlerId) {
+    return crostini::CrostiniFeatures::Get()->IsExportImportUIAllowed(profile);
+  }
+  return true;
+}
+
 void FindAppServiceTasks(Profile* profile,
                          const std::vector<extensions::EntryInfo>& entries,
                          const std::vector<GURL>& file_urls,
@@ -101,26 +123,34 @@
   // App Service doesn't exist in Incognito mode but we still want to find
   // handlers to open a download from its notification from Incognito mode. Use
   // the base profile in these cases (see crbug.com/1111695).
+  Profile* maybe_original_profile = profile;
   if (!apps::AppServiceProxyFactory::IsAppServiceAvailableForProfile(profile))
-    profile = profile->GetOriginalProfile();
+    maybe_original_profile = profile->GetOriginalProfile();
 
   apps::AppServiceProxyChromeOs* proxy =
-      apps::AppServiceProxyFactory::GetForProfile(profile);
+      apps::AppServiceProxyFactory::GetForProfile(maybe_original_profile);
 
-  std::vector<std::string> mime_types;
-  for (auto& entry : entries)
-    mime_types.push_back(entry.mime_type);
+  std::vector<apps::mojom::IntentFilePtr> intent_files;
+  intent_files.reserve(entries.size());
+  for (size_t i = 0; i < entries.size(); i++) {
+    auto file = apps::mojom::IntentFile::New();
+    file->url = file_urls.at(i);
+    file->mime_type = entries[i].mime_type;
+    file->is_directory = entries[i].is_directory
+                             ? apps::mojom::OptionalBool::kTrue
+                             : apps::mojom::OptionalBool::kFalse;
+    intent_files.push_back(std::move(file));
+  }
   std::vector<apps::IntentLaunchInfo> intent_launch_info =
-      proxy->GetAppsForFiles(file_urls, mime_types);
+      proxy->GetAppsForFiles(std::move(intent_files));
 
-  using extensions::api::file_manager_private::Verb;
   for (auto& launch_entry : intent_launch_info) {
     apps::mojom::AppType app_type =
         proxy->AppRegistryCache().GetAppType(launch_entry.app_id);
-    // TODO(crbug/1092784): Only going to support ARC app and web apps.
     if (!(app_type == apps::mojom::AppType::kArc ||
           app_type == apps::mojom::AppType::kWeb ||
-          app_type == apps::mojom::AppType::kSystemWeb))
+          app_type == apps::mojom::AppType::kSystemWeb ||
+          app_type == apps::mojom::AppType::kExtension))
       continue;
 
     if (app_type == apps::mojom::AppType::kWeb ||
@@ -142,7 +172,7 @@
       // TODO(1240018): Remove when this feature is fully launched. This check
       // will not work for lacros web apps.
       web_app::WebAppProvider* provider =
-          web_app::WebAppProvider::GetDeprecated(profile);
+          web_app::WebAppProvider::GetDeprecated(maybe_original_profile);
       web_app::OsIntegrationManager& os_integration_manager =
           provider->os_integration_manager();
       if (!os_integration_manager.IsFileHandlingAPIAvailable(
@@ -150,6 +180,15 @@
         continue;
     }
 
+    if (app_type == apps::mojom::AppType::kExtension) {
+      if (profile->IsOffTheRecord() &&
+          !extensions::util::IsIncognitoEnabled(launch_entry.app_id, profile))
+        continue;
+      if (!FileHandlerIsEnabled(maybe_original_profile,
+                                launch_entry.activity_name))
+        continue;
+    }
+
     constexpr int kIconSize = 32;
     GURL icon_url =
         apps::AppIconSource::GetIconURL(launch_entry.app_id, kIconSize);
@@ -159,9 +198,8 @@
         launch_entry.activity_label, Verb::VERB_OPEN_WITH, icon_url,
         /* is_default=*/false,
         // TODO(petermarshall): Handle the rest of the logic from FindWebTasks()
-        // e.g. IsGoodMatchAppsFileHandler().
-        /* is_generic=*/
-        !web_app::IsSystemAppIdWithFileHandlers(launch_entry.app_id),
+        // e.g. prioritise non-generic handlers.
+        /* is_generic=*/launch_entry.is_generic_file_handler,
         /* is_file_extension_match=*/launch_entry.is_file_extension_match));
   }
 }
diff --git a/chrome/browser/ash/file_manager/app_service_file_tasks.h b/chrome/browser/ash/file_manager/app_service_file_tasks.h
index 19efa59..a8c7231 100644
--- a/chrome/browser/ash/file_manager/app_service_file_tasks.h
+++ b/chrome/browser/ash/file_manager/app_service_file_tasks.h
@@ -24,6 +24,10 @@
 namespace file_manager {
 namespace file_tasks {
 
+// Returns true if a file handler is enabled. Some handlers such as
+// import-crostini-image can be disabled at runtime by enterprise policy.
+bool FileHandlerIsEnabled(Profile* profile, const std::string& file_handler_id);
+
 // Finds the app services tasks that can handle |entries|, appends them to
 // |result_list|, and calls back to |callback|.
 // Only support sharing at the moment.
diff --git a/chrome/browser/ash/file_manager/app_service_file_tasks_unittest.cc b/chrome/browser/ash/file_manager/app_service_file_tasks_unittest.cc
index 79ce88ae..fd98b32 100644
--- a/chrome/browser/ash/file_manager/app_service_file_tasks_unittest.cc
+++ b/chrome/browser/ash/file_manager/app_service_file_tasks_unittest.cc
@@ -12,6 +12,7 @@
 #include "chrome/browser/apps/app_service/app_service_proxy.h"
 #include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
 #include "chrome/browser/apps/app_service/app_service_test.h"
+#include "chrome/browser/apps/app_service/intent_util.h"
 #include "chrome/browser/ash/file_manager/file_tasks.h"
 #include "chrome/browser/ash/file_manager/path_util.h"
 #include "chrome/test/base/testing_profile.h"
@@ -19,6 +20,7 @@
 #include "components/services/app_service/public/mojom/types.mojom.h"
 #include "content/public/test/browser_task_environment.h"
 #include "extensions/browser/entry_info.h"
+#include "extensions/common/extension_builder.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/public/common/features.h"
 #include "url/gurl.h"
@@ -29,6 +31,8 @@
 const char kAppIdText[] = "abcdefg";
 const char kAppIdImage[] = "gfedcba";
 const char kAppIdAny[] = "hijklmn";
+const char kChromeAppId[] = "chromeappid";
+const char kChromeAppWithVerbsId[] = "chromeappwithverbsid";
 const char kAppIdTextWild[] = "zxcvbn";
 const char kMimeTypeText[] = "text/plain";
 const char kMimeTypeImage[] = "image/jpeg";
@@ -70,6 +74,7 @@
   struct FakeFile {
     std::string file_name;
     std::string mime_type;
+    bool is_directory = false;
   };
 
   std::vector<FullTaskDescriptor> FindAppServiceTasks(
@@ -80,7 +85,7 @@
       entries.emplace_back(
           util::GetMyFilesFolderForProfile(profile()).AppendASCII(
               fake_file.file_name),
-          fake_file.mime_type, false);
+          fake_file.mime_type, fake_file.is_directory);
       file_urls.push_back(test_url(fake_file.file_name));
     }
 
@@ -142,6 +147,154 @@
                   kActivityLabelAny);
   }
 
+  // Provides file handlers for all extensions and images.
+  void AddChromeApp() {
+    extensions::ExtensionBuilder baz_app;
+    baz_app.SetManifest(
+        extensions::DictionaryBuilder()
+            .Set("name", "Baz")
+            .Set("version", "1.0.0")
+            .Set("manifest_version", 2)
+            .Set("app",
+                 extensions::DictionaryBuilder()
+                     .Set("background",
+                          extensions::DictionaryBuilder()
+                              .Set("scripts", extensions::ListBuilder()
+                                                  .Append("background.js")
+                                                  .Build())
+                              .Build())
+                     .Build())
+            .Set(
+                "file_handlers",
+                extensions::DictionaryBuilder()
+                    .Set("any", extensions::DictionaryBuilder()
+                                    .Set("extensions", extensions::ListBuilder()
+                                                           .Append("*")
+                                                           .Append("bar")
+                                                           .Build())
+                                    .Build())
+                    .Set("image", extensions::DictionaryBuilder()
+                                      .Set("types", extensions::ListBuilder()
+                                                        .Append("image/*")
+                                                        .Build())
+                                      .Build())
+                    .Build())
+            .Build());
+    baz_app.SetID(kChromeAppId);
+    auto filters =
+        apps_util::CreateChromeAppIntentFilters(baz_app.Build().get());
+    AddFakeAppWithIntentFilters(kChromeAppId, std::move(filters),
+                                apps::mojom::AppType::kExtension);
+  }
+
+  void AddChromeAppWithVerbs() {
+    extensions::ExtensionBuilder foo_app;
+    foo_app.SetManifest(
+        extensions::DictionaryBuilder()
+            .Set("name", "Foo")
+            .Set("version", "1.0.0")
+            .Set("manifest_version", 2)
+            .Set("app",
+                 extensions::DictionaryBuilder()
+                     .Set("background",
+                          extensions::DictionaryBuilder()
+                              .Set("scripts", extensions::ListBuilder()
+                                                  .Append("background.js")
+                                                  .Build())
+                              .Build())
+                     .Build())
+            .Set(
+                "file_handlers",
+                extensions::DictionaryBuilder()
+                    .Set("any_with_directories",
+                         extensions::DictionaryBuilder()
+                             .Set("include_directories", true)
+                             .Set("types",
+                                  extensions::ListBuilder().Append("*").Build())
+                             .Set("verb", "open_with")
+                             .Build())
+                    .Set("html_handler",
+                         extensions::DictionaryBuilder()
+                             .Set("title", "Html")
+                             .Set("types", extensions::ListBuilder()
+                                               .Append("text/html")
+                                               .Build())
+                             .Set("verb", "open_with")
+                             .Build())
+                    .Set("plain_text",
+                         extensions::DictionaryBuilder()
+                             .Set("title", "Plain")
+                             .Set("types", extensions::ListBuilder()
+                                               .Append("text/plain")
+                                               .Build())
+                             .Build())
+                    .Set("share_plain_text",
+                         extensions::DictionaryBuilder()
+                             .Set("title", "Share Plain")
+                             .Set("types", extensions::ListBuilder()
+                                               .Append("text/plain")
+                                               .Build())
+                             .Set("verb", "share_with")
+                             .Build())
+                    .Set("any_pack", extensions::DictionaryBuilder()
+                                         .Set("types", extensions::ListBuilder()
+                                                           .Append("*")
+                                                           .Build())
+                                         .Set("verb", "pack_with")
+                                         .Build())
+                    .Set("plain_text_add_to",
+                         extensions::DictionaryBuilder()
+                             .Set("title", "Plain")
+                             .Set("types", extensions::ListBuilder()
+                                               .Append("text/plain")
+                                               .Build())
+                             .Set("verb", "add_to")
+                             .Build())
+                    .Build())
+            .Build());
+    foo_app.SetID(kChromeAppWithVerbsId);
+    auto filters =
+        apps_util::CreateChromeAppIntentFilters(foo_app.Build().get());
+    AddFakeAppWithIntentFilters(kChromeAppWithVerbsId, std::move(filters),
+                                apps::mojom::AppType::kExtension);
+  }
+
+  void AddChromeBookmarkApp() {
+    const char kGraphrId[] = "ppcpljkgngnngojbghcdiojhbneibgdg";
+    extensions::ExtensionBuilder graphr;
+    graphr.SetManifest(
+        extensions::DictionaryBuilder()
+            .Set("name", "Graphr")
+            .Set("version", "1.0.0")
+            .Set("manifest_version", 2)
+            .Set("app",
+                 extensions::DictionaryBuilder()
+                     .Set("launch", extensions::DictionaryBuilder()
+                                        .Set("web_url", "https://graphr.tld")
+                                        .Build())
+                     .Build())
+            .Set("file_handlers",
+                 extensions::DictionaryBuilder()
+                     .Set("https://graphr.tld/open-files/?name=raw",
+                          extensions::DictionaryBuilder()
+                              .Set("title", "Raw")
+                              .Set("types", extensions::ListBuilder()
+                                                .Append("text/csv")
+                                                .Build())
+                              .Set("extensions", extensions::ListBuilder()
+                                                     .Append("csv")
+                                                     .Build())
+                              .Build())
+                     .Build())
+            .Build());
+    graphr.SetID(kGraphrId);
+    graphr.AddFlags(extensions::Extension::InitFromValueFlags::FROM_BOOKMARK);
+    auto filters =
+        apps_util::CreateChromeAppIntentFilters(graphr.Build().get());
+    AddFakeAppWithIntentFilters(kGraphrId, std::move(filters),
+                                apps::mojom::AppType::kExtension);
+  }
+
   base::test::ScopedFeatureList feature_list_;
   content::BrowserTaskEnvironment task_environment_;
   std::unique_ptr<TestingProfile> profile_;
@@ -184,6 +337,7 @@
   ASSERT_EQ(1U, tasks.size());
   EXPECT_EQ(kAppIdText, tasks[0].task_descriptor.app_id);
   EXPECT_EQ(kActivityLabelText, tasks[0].task_title);
+  EXPECT_FALSE(tasks[0].is_generic_file_handler);
 }
 
 // Test that between an image app and text app, the image app can be
@@ -197,6 +351,7 @@
   ASSERT_EQ(1U, tasks.size());
   EXPECT_EQ(kAppIdImage, tasks[0].task_descriptor.app_id);
   EXPECT_EQ(kActivityLabelImage, tasks[0].task_title);
+  EXPECT_FALSE(tasks[0].is_generic_file_handler);
 }
 
 // Test that between an image app, text app and an app that can handle every
@@ -211,6 +366,7 @@
   ASSERT_EQ(1U, tasks.size());
   EXPECT_EQ(kAppIdAny, tasks[0].task_descriptor.app_id);
   EXPECT_EQ(kActivityLabelAny, tasks[0].task_title);
+  EXPECT_TRUE(tasks[0].is_generic_file_handler);
 }
 
 // Don't register any apps and check that we get no matches.
@@ -240,6 +396,7 @@
   ASSERT_EQ(1U, tasks.size());
   EXPECT_EQ(kAppIdText, tasks[0].task_descriptor.app_id);
   EXPECT_EQ(kActivityLabelText, tasks[0].task_title);
+  EXPECT_FALSE(tasks[0].is_generic_file_handler);
 }
 
 // Check that a web app that only handles text does not match when we have both
@@ -302,5 +459,124 @@
   EXPECT_EQ(kActivityLabelText, tasksBoth[0].task_title);
 }
 
+// Check that Baz's ".*" handler, which is generic, is matched.
+TEST_F(AppServiceFileTasksTestEnabled, FindAppServiceChromeAppText) {
+  AddChromeApp();
+  std::vector<FullTaskDescriptor> tasks =
+      FindAppServiceTasks({{"foo.txt", kMimeTypeText}});
+  ASSERT_EQ(1U, tasks.size());
+  EXPECT_EQ(kChromeAppId, tasks[0].task_descriptor.app_id);
+  EXPECT_EQ("any", tasks[0].task_descriptor.action_id);
+  EXPECT_EQ(TASK_TYPE_FILE_HANDLER, tasks[0].task_descriptor.task_type);
+  EXPECT_EQ("Baz", tasks[0].task_title);
+  EXPECT_TRUE(tasks[0].is_generic_file_handler);
+  EXPECT_TRUE(tasks[0].is_file_extension_match);
+  EXPECT_EQ(Verb::VERB_OPEN_WITH, tasks[0].task_verb);
+}
+
+// File extension matches with bar, but there is a generic * type as well,
+// so the overall match should still be generic.
+TEST_F(AppServiceFileTasksTestEnabled, FindAppServiceChromeAppBar) {
+  AddChromeApp();
+  std::vector<FullTaskDescriptor> tasks =
+      FindAppServiceTasks({{"foo.bar", kMimeTypeText}});
+  ASSERT_EQ(1U, tasks.size());
+  EXPECT_EQ(kChromeAppId, tasks[0].task_descriptor.app_id);
+  EXPECT_EQ("any", tasks[0].task_descriptor.action_id);
+  EXPECT_EQ(TASK_TYPE_FILE_HANDLER, tasks[0].task_descriptor.task_type);
+  EXPECT_EQ("Baz", tasks[0].task_title);
+  EXPECT_TRUE(tasks[0].is_generic_file_handler);
+  EXPECT_TRUE(tasks[0].is_file_extension_match);
+  EXPECT_EQ(Verb::VERB_OPEN_WITH, tasks[0].task_verb);
+}
+
+// Check that we can get web apps and Chrome apps in the same call.
+TEST_F(AppServiceFileTasksTestEnabled, FindAppServiceMultiAppType) {
+  AddTextApp();
+  AddChromeApp();
+  std::vector<FullTaskDescriptor> tasks =
+      FindAppServiceTasks({{"foo.txt", kMimeTypeText}});
+  ASSERT_EQ(2U, tasks.size());
+  EXPECT_EQ(kAppIdText, tasks[0].task_descriptor.app_id);
+  EXPECT_EQ(kActivityLabelText, tasks[0].task_title);
+  EXPECT_EQ(TASK_TYPE_WEB_APP, tasks[0].task_descriptor.task_type);
+  EXPECT_EQ(kChromeAppId, tasks[1].task_descriptor.app_id);
+  EXPECT_EQ("Baz", tasks[1].task_title);
+  EXPECT_EQ(TASK_TYPE_FILE_HANDLER, tasks[1].task_descriptor.task_type);
+}
+
+// Check that Baz's "image/*" handler is picked because it is not generic,
+// because it matches the mime type directly, even though there is an earlier
+// generic handler.
+TEST_F(AppServiceFileTasksTestEnabled, FindAppServiceChromeAppImage) {
+  AddChromeApp();
+  std::vector<FullTaskDescriptor> tasks =
+      FindAppServiceTasks({{"bar.jpeg", kMimeTypeImage}});
+  ASSERT_EQ(1U, tasks.size());
+  EXPECT_EQ(kChromeAppId, tasks[0].task_descriptor.app_id);
+  EXPECT_EQ("image", tasks[0].task_descriptor.action_id);
+  EXPECT_EQ(TASK_TYPE_FILE_HANDLER, tasks[0].task_descriptor.task_type);
+  EXPECT_EQ("Baz", tasks[0].task_title);
+  EXPECT_FALSE(tasks[0].is_generic_file_handler);
+  EXPECT_FALSE(tasks[0].is_file_extension_match);
+  EXPECT_EQ(Verb::VERB_OPEN_WITH, tasks[0].task_verb);
+}
+
+TEST_F(AppServiceFileTasksTestEnabled, FindAppServiceChromeAppWithVerbs) {
+  AddChromeAppWithVerbs();
+  std::vector<FullTaskDescriptor> tasks =
+      FindAppServiceTasks({{"foo.txt", kMimeTypeText}});
+
+  // We expect that all non-"open_with" handlers are ignored, and that we
+  // only get one open_with handler.
+  ASSERT_EQ(1U, tasks.size());
+  EXPECT_EQ(kChromeAppWithVerbsId, tasks[0].task_descriptor.app_id);
+  EXPECT_EQ("Foo", tasks[0].task_title);
+  EXPECT_EQ("plain_text", tasks[0].task_descriptor.action_id);
+  EXPECT_FALSE(tasks[0].is_generic_file_handler);
+  EXPECT_FALSE(tasks[0].is_file_extension_match);
+  EXPECT_EQ(Verb::VERB_OPEN_WITH, tasks[0].task_verb);
+}
+
+TEST_F(AppServiceFileTasksTestEnabled, FindAppServiceChromeAppWithVerbs_Html) {
+  AddChromeAppWithVerbs();
+  std::vector<FullTaskDescriptor> tasks =
+      FindAppServiceTasks({{"foo.html", kMimeTypeHtml}});
+
+  // Check that we get the non-generic handler which appears later in the
+  // manifest.
+  EXPECT_EQ(kChromeAppWithVerbsId, tasks[0].task_descriptor.app_id);
+  EXPECT_EQ("Foo", tasks[0].task_title);
+  EXPECT_EQ("html_handler", tasks[0].task_descriptor.action_id);
+  EXPECT_FALSE(tasks[0].is_generic_file_handler);
+  EXPECT_FALSE(tasks[0].is_file_extension_match);
+  EXPECT_EQ(Verb::VERB_OPEN_WITH, tasks[0].task_verb);
+}
+
+TEST_F(AppServiceFileTasksTestEnabled,
+       FindAppServiceChromeAppWithVerbs_Directory) {
+  AddChromeAppWithVerbs();
+  std::vector<FullTaskDescriptor> tasks =
+      FindAppServiceTasks({{"dir", "", true}});
+
+  // Only one handler handles directories.
+  ASSERT_EQ(1U, tasks.size());
+  EXPECT_EQ(kChromeAppWithVerbsId, tasks[0].task_descriptor.app_id);
+  EXPECT_EQ("Foo", tasks[0].task_title);
+  EXPECT_EQ("any_with_directories", tasks[0].task_descriptor.action_id);
+  EXPECT_TRUE(tasks[0].is_generic_file_handler);
+  EXPECT_FALSE(tasks[0].is_file_extension_match);
+  EXPECT_EQ(Verb::VERB_OPEN_WITH, tasks[0].task_verb);
+}
+
+TEST_F(AppServiceFileTasksTestEnabled, FindAppServiceChromeBookmarkApp) {
+  AddChromeBookmarkApp();
+  std::vector<FullTaskDescriptor> tasks =
+      FindAppServiceTasks({{"foo.csv", "text/csv"}});
+
+  // No bookmark apps expected.
+  ASSERT_EQ(0U, tasks.size());
+}
+
 }  // namespace file_tasks
 }  // namespace file_manager.
diff --git a/chrome/browser/ash/file_manager/file_tasks.cc b/chrome/browser/ash/file_manager/file_tasks.cc
index 7e152363..c68f5e8 100644
--- a/chrome/browser/ash/file_manager/file_tasks.cc
+++ b/chrome/browser/ash/file_manager/file_tasks.cc
@@ -25,7 +25,6 @@
 #include "chrome/browser/apps/app_service/app_service_metrics.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/ash/crostini/crostini_features.h"
 #include "chrome/browser/ash/drive/file_system_util.h"
 #include "chrome/browser/ash/file_manager/app_id.h"
 #include "chrome/browser/ash/file_manager/app_service_file_tasks.h"
@@ -42,7 +41,6 @@
 #include "chrome/browser/extensions/extension_tab_util.h"
 #include "chrome/browser/extensions/launch_util.h"
 #include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/ui/extensions/application_launch.h"
 #include "chrome/browser/ui/web_applications/system_web_app_ui_utils.h"
 #include "chrome/browser/ui/webui/extensions/extension_icon_source.h"
 #include "chrome/browser/web_applications/web_app_id_constants.h"
@@ -76,7 +74,6 @@
 
 using extensions::Extension;
 using extensions::api::file_manager_private::Verb;
-using extensions::app_file_handler_util::FindFileHandlerMatchesForEntries;
 using storage::FileSystemURL;
 
 namespace file_manager {
@@ -96,8 +93,6 @@
 const char kCrostiniAppTaskType[] = "crostini";
 const char kPluginVmAppTaskType[] = "pluginvm";
 const char kWebAppTaskType[] = "web";
-const char kImportCrostiniImageHandlerId[] = "import-crostini-image";
-const char kInstallLinuxPackageHandlerId[] = "install-linux-package";
 
 // Returns true if path_mime_set contains a Google document.
 bool ContainsGoogleDocument(const std::vector<extensions::EntryInfo>& entries) {
@@ -629,42 +624,6 @@
   return false;
 }
 
-bool IsFileHandlerEnabled(Profile* profile,
-                          const apps::FileHandlerInfo& file_handler_info) {
-  // Crostini deb files and backup files can be disabled by policy.
-  if (file_handler_info.id == kInstallLinuxPackageHandlerId) {
-    return crostini::CrostiniFeatures::Get()->IsRootAccessAllowed(profile);
-  }
-  if (file_handler_info.id == kImportCrostiniImageHandlerId) {
-    return crostini::CrostiniFeatures::Get()->IsExportImportUIAllowed(profile);
-  }
-  return true;
-}
-
-bool IsGoodMatchFileHandler(const apps::FileHandlerInfo& file_handler_info,
-                            const std::vector<extensions::EntryInfo>& entries) {
-  if (file_handler_info.extensions.count("*") > 0 ||
-      file_handler_info.types.count("*") > 0 ||
-      file_handler_info.types.count("*/*") > 0)
-    return false;
-
-  // If text/* file handler matches with unsupported text mime type, we don't
-  // regard it as good match.
-  if (file_handler_info.types.count("text/*")) {
-    for (const auto& entry : entries) {
-      if (blink::IsUnsupportedTextMimeType(entry.mime_type))
-        return false;
-    }
-  }
-
-  // We consider it a good match if no directories are selected.
-  for (const auto& entry : entries) {
-    if (entry.is_directory)
-      return false;
-  }
-  return true;
-}
-
 bool IsGoodMatchAppsFileHandler(
     const apps::FileHandler& file_handler,
     const std::vector<extensions::EntryInfo>& entries) {
@@ -700,99 +659,6 @@
   return true;
 }
 
-void FindFileHandlerTasks(Profile* profile,
-                          const std::vector<extensions::EntryInfo>& entries,
-                          std::vector<FullTaskDescriptor>* result_list) {
-  DCHECK(!entries.empty());
-  DCHECK(result_list);
-
-  const extensions::ExtensionSet& enabled_extensions =
-      extensions::ExtensionRegistry::Get(profile)->enabled_extensions();
-
-  for (const scoped_refptr<const extensions::Extension> extension :
-       enabled_extensions) {
-    // Check that the extension can be launched with files. This includes all
-    // platform apps and allowlisted extensions.
-    if (!CanLaunchViaEvent(extension.get())) {
-      continue;
-    }
-
-    if (profile->IsOffTheRecord() &&
-        !extensions::util::IsIncognitoEnabled(extension->id(), profile))
-      continue;
-
-    // Video player should no longer install itself or its file handlers
-    // starting in m93.
-    DCHECK_NE(kVideoPlayerAppId, extension->id());
-
-    typedef std::vector<extensions::FileHandlerMatch> FileHandlerMatchList;
-    FileHandlerMatchList file_handlers =
-        FindFileHandlerMatchesForEntries(*extension, entries);
-    if (file_handlers.empty())
-      continue;
-
-    // A map which has as key a handler verb, and as value a pair of the
-    // handler with which to open the given entries and a boolean marking
-    // if the handler is a good match.
-    std::map<std::string, std::pair<const extensions::FileHandlerMatch*, bool>>
-        handlers_for_entries;
-    // Show the first good matching handler of each verb supporting the given
-    // entries that corresponds to the app. If there doesn't exist such handler,
-    // show the first matching handler of the verb.
-    for (const auto& handler_match : file_handlers) {
-      const apps::FileHandlerInfo* handler = handler_match.handler;
-      if (!IsFileHandlerEnabled(profile, *handler)) {
-        continue;
-      }
-      bool good_match = IsGoodMatchFileHandler(*handler, entries);
-      auto it = handlers_for_entries.find(handler->verb);
-      if (it == handlers_for_entries.end() ||
-          (!it->second.second /* existing handler not a good match */ &&
-           good_match)) {
-        handlers_for_entries[handler->verb] =
-            std::make_pair(&handler_match, good_match);
-      }
-    }
-
-    for (const auto& entry : handlers_for_entries) {
-      const extensions::FileHandlerMatch* match = entry.second.first;
-      const apps::FileHandlerInfo* handler = match->handler;
-      std::string task_id = file_tasks::MakeTaskID(
-          extension->id(), file_tasks::TASK_TYPE_FILE_HANDLER, handler->id);
-
-      const GURL best_icon = GetIconURL(profile, *extension);
-
-      // If file handler doesn't match as good match, regards it as generic file
-      // handler.
-      const bool is_generic_file_handler =
-          !IsGoodMatchFileHandler(*handler, entries);
-      Verb verb;
-      if (handler->verb == apps::file_handler_verbs::kAddTo) {
-        verb = Verb::VERB_ADD_TO;
-      } else if (handler->verb == apps::file_handler_verbs::kPackWith) {
-        verb = Verb::VERB_PACK_WITH;
-      } else if (handler->verb == apps::file_handler_verbs::kShareWith) {
-        verb = Verb::VERB_SHARE_WITH;
-      } else {
-        // Only kOpenWith is a valid remaining verb. Invalid verbs should fall
-        // back to it.
-        DCHECK(handler->verb == apps::file_handler_verbs::kOpenWith);
-        verb = Verb::VERB_OPEN_WITH;
-      }
-      // If the handler was matched purely on the file name extension then
-      // the manifest declared its 'file_handler' to match. Used for fallback
-      // selection of the handler when we don't have a default handler set
-      const bool is_file_extension_match = match->matched_file_extension;
-
-      result_list->push_back(FullTaskDescriptor(
-          TaskDescriptor(extension->id(), file_tasks::TASK_TYPE_FILE_HANDLER,
-                         handler->id),
-          extension->name(), verb, best_icon, false /* is_default */,
-          is_generic_file_handler, is_file_extension_match));
-    }
-  }
-}
-
 void FindFileBrowserHandlerTasks(
     Profile* profile,
     const std::vector<GURL>& file_urls,
@@ -833,18 +699,15 @@
     std::unique_ptr<std::vector<FullTaskDescriptor>> result_list) {
   std::vector<FullTaskDescriptor>* result_list_ptr = result_list.get();
 
-  // 2. Continues from FindAllTypesOfTasks. Find and append file handler tasks.
-  FindFileHandlerTasks(profile, entries, result_list_ptr);
-
-  // 3. Find and append file browser handler tasks. We know there aren't
+  // 2. Find and append file browser handler tasks. We know there aren't
   // duplicates because "file_browser_handlers" and "file_handlers" shouldn't
   // be used in the same manifest.json.
   FindFileBrowserHandlerTasks(profile, file_urls, result_list_ptr);
 
-  // 4. Web tasks file_handlers (View/Open With).
+  // 3. Web tasks file_handlers (View/Open With), and Chrome app file_handlers.
   FindAppServiceTasks(profile, entries, file_urls, result_list_ptr);
 
-  // 5. Find and append Guest OS tasks.
+  // 4. Find and append Guest OS tasks.
   FindGuestOsTasks(profile, entries, file_urls, result_list_ptr,
                    // Done. Apply post-filtering and callback.
                    base::BindOnce(PostProcessFoundTasks, profile, entries,
diff --git a/chrome/browser/ash/file_manager/file_tasks.h b/chrome/browser/ash/file_manager/file_tasks.h
index d8c0b2e..1f8bd3a 100644
--- a/chrome/browser/ash/file_manager/file_tasks.h
+++ b/chrome/browser/ash/file_manager/file_tasks.h
@@ -263,19 +263,6 @@
                      const std::vector<storage::FileSystemURL>& file_urls,
                      FileTaskFinishedCallback done);
 
-// Returns true if a file handler is enabled. Some handlers such as
-// import-crostini-image can be disabled at runtime by enterprise policy.
-bool IsFileHandlerEnabled(Profile* profile,
-                          const apps::FileHandlerInfo& file_handler_info);
-
-// Returns true if a file handler matches with entries as good match.
-//
-// TODO(crbug.com/1060026): This can be removed in favour of
-// IsGoodMatchAppsFileHandler once apps::FileHandlerInfo is completely
-// replaced by apps::FileHandler.
-bool IsGoodMatchFileHandler(const apps::FileHandlerInfo& file_handler_info,
-                            const std::vector<extensions::EntryInfo>& entries);
-
 // Returns true if an apps::FileHandler matches with all of |entries|; that is,
 // if it doesn't include a blanket wild-card MIME type or file extension, it
 // doesn't include text/* and match on an unsupported text MIME type, and if
@@ -288,13 +275,6 @@
     const apps::FileHandler& file_Handler,
     const std::vector<extensions::EntryInfo>& entries);
 
-// Finds the file handler tasks (apps declaring "file_handlers" in
-// manifest.json) that can be used with the given entries, appending them to
-// the |result_list|.
-void FindFileHandlerTasks(Profile* profile,
-                          const std::vector<extensions::EntryInfo>& entries,
-                          std::vector<FullTaskDescriptor>* result_list);
-
 // Finds the file browser handler tasks (app/extensions declaring
 // "file_browser_handlers" in manifest.json) that can be used with the
 // given files, appending them to the |result_list|.
diff --git a/chrome/browser/ash/file_manager/file_tasks_browsertest.cc b/chrome/browser/ash/file_manager/file_tasks_browsertest.cc
index b9427ee..260150b 100644
--- a/chrome/browser/ash/file_manager/file_tasks_browsertest.cc
+++ b/chrome/browser/ash/file_manager/file_tasks_browsertest.cc
@@ -360,8 +360,7 @@
       TaskDescriptor(extension->id(), StringToTaskType("app"), "tiffAction"),
       {"tiff"}, {"image/tiff"});
   if (profile_type() == TestProfileType::kIncognito) {
-    // In incognito, the provided file system can exist, but the file handler
-    // preference can't be changed.
+    // In incognito, the installed app is not enabled and we filter it out.
     TestExpectationsAgainstDefaultTasks({{"tiff", kMediaAppId}});
   } else {
     TestExpectationsAgainstDefaultTasks({{"tiff", extension->id().c_str()}});
diff --git a/chrome/browser/ash/file_manager/file_tasks_unittest.cc b/chrome/browser/ash/file_manager/file_tasks_unittest.cc
index 2562494..b8cbb67 100644
--- a/chrome/browser/ash/file_manager/file_tasks_unittest.cc
+++ b/chrome/browser/ash/file_manager/file_tasks_unittest.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "chrome/browser/ash/file_manager/file_tasks.h"
+#include "chrome/browser/ash/file_manager/app_service_file_tasks.h"
 
 #include <algorithm>
 #include <memory>
@@ -351,115 +352,30 @@
   EXPECT_TRUE(tasks[0].is_default);
 }
 
-// Test IsFileHandlerEnabled which returns whether a file handler should be
+// Test FileHandlerIsEnabled which returns whether a file handler should be
 // used.
-TEST(FileManagerFileTasksTest, IsFileHandlerEnabled) {
+TEST(FileManagerFileTasksTest, FileHandlerIsEnabled) {
   content::BrowserTaskEnvironment task_environment;
   TestingProfile test_profile;
   crostini::FakeCrostiniFeatures crostini_features;
 
-  apps::FileHandlerInfo test_handler;
-  test_handler.id = "test";
+  const std::string test_id = "test";
 
-  // Test import-crostini-image.
-  apps::FileHandlerInfo crostini_import_handler;
-  crostini_import_handler.id = "import-crostini-image";
   crostini_features.set_export_import_ui_allowed(true);
-  EXPECT_TRUE(IsFileHandlerEnabled(&test_profile, crostini_import_handler));
-  EXPECT_TRUE(IsFileHandlerEnabled(&test_profile, test_handler));
+  EXPECT_TRUE(FileHandlerIsEnabled(&test_profile, "import-crostini-image"));
+  EXPECT_TRUE(FileHandlerIsEnabled(&test_profile, test_id));
 
   crostini_features.set_export_import_ui_allowed(false);
-  EXPECT_FALSE(IsFileHandlerEnabled(&test_profile, crostini_import_handler));
-  EXPECT_TRUE(IsFileHandlerEnabled(&test_profile, test_handler));
+  EXPECT_FALSE(FileHandlerIsEnabled(&test_profile, "import-crostini-image"));
+  EXPECT_TRUE(FileHandlerIsEnabled(&test_profile, test_id));
 
-  // Test install-linux-package.
-  apps::FileHandlerInfo install_linux_handler;
-  install_linux_handler.id = "install-linux-package";
   crostini_features.set_root_access_allowed(true);
-  EXPECT_TRUE(IsFileHandlerEnabled(&test_profile, install_linux_handler));
-  EXPECT_TRUE(IsFileHandlerEnabled(&test_profile, test_handler));
+  EXPECT_TRUE(FileHandlerIsEnabled(&test_profile, "install-linux-package"));
+  EXPECT_TRUE(FileHandlerIsEnabled(&test_profile, test_id));
 
   crostini_features.set_root_access_allowed(false);
-  EXPECT_FALSE(IsFileHandlerEnabled(&test_profile, install_linux_handler));
-  EXPECT_TRUE(IsFileHandlerEnabled(&test_profile, test_handler));
-}
-
-// Test IsGoodMatchFileHandler which returns whether a file handle info matches
-// with files as good match or not.
-TEST(FileManagerFileTasksTest, IsGoodMatchFileHandler) {
-  using FileHandlerInfo = apps::FileHandlerInfo;
-
-  std::vector<extensions::EntryInfo> entries_1;
-  entries_1.emplace_back(base::FilePath(FILE_PATH_LITERAL("foo.jpg")),
-                         "image/jpeg", false);
-  entries_1.emplace_back(base::FilePath(FILE_PATH_LITERAL("bar.txt")),
-                         "text/plain", false);
-
-  std::vector<extensions::EntryInfo> entries_2;
-  entries_2.emplace_back(base::FilePath(FILE_PATH_LITERAL("foo.ics")),
-                         "text/calendar", false);
-
-  // extensions: ["*"]
-  FileHandlerInfo file_handler_info_1;
-  file_handler_info_1.extensions.insert("*");
-  EXPECT_FALSE(IsGoodMatchFileHandler(file_handler_info_1, entries_1));
-
-  // extensions: ["*", "jpg"]
-  FileHandlerInfo file_handler_info_2;
-  file_handler_info_2.extensions.insert("*");
-  file_handler_info_2.extensions.insert("jpg");
-  EXPECT_FALSE(IsGoodMatchFileHandler(file_handler_info_2, entries_1));
-
-  // extensions: ["jpg"]
-  FileHandlerInfo file_handler_info_3;
-  file_handler_info_3.extensions.insert("jpg");
-  EXPECT_TRUE(IsGoodMatchFileHandler(file_handler_info_3, entries_1));
-
-  // types: ["*"]
-  FileHandlerInfo file_handler_info_4;
-  file_handler_info_4.types.insert("*");
-  EXPECT_FALSE(IsGoodMatchFileHandler(file_handler_info_4, entries_1));
-
-  // types: ["*/*"]
-  FileHandlerInfo file_handler_info_5;
-  file_handler_info_5.types.insert("*/*");
-  EXPECT_FALSE(IsGoodMatchFileHandler(file_handler_info_5, entries_1));
-
-  // types: ["image/*"]
-  FileHandlerInfo file_handler_info_6;
-  file_handler_info_6.types.insert("image/*");
-  // Partial wild card is not generic.
-  EXPECT_TRUE(IsGoodMatchFileHandler(file_handler_info_6, entries_1));
-
-  // types: ["*", "image/*"]
-  FileHandlerInfo file_handler_info_7;
-  file_handler_info_7.types.insert("*");
-  file_handler_info_7.types.insert("image/*");
-  EXPECT_FALSE(IsGoodMatchFileHandler(file_handler_info_7, entries_1));
-
-  // extensions: ["*"], types: ["image/*"]
-  FileHandlerInfo file_handler_info_8;
-  file_handler_info_8.extensions.insert("*");
-  file_handler_info_8.types.insert("image/*");
-  EXPECT_FALSE(IsGoodMatchFileHandler(file_handler_info_8, entries_1));
-
-  // types: ["text/*"] and target files contain unsupported text mime type, e.g.
-  // text/calendar.
-  FileHandlerInfo file_handler_info_9;
-  file_handler_info_9.types.insert("text/*");
-  EXPECT_FALSE(IsGoodMatchFileHandler(file_handler_info_9, entries_2));
-
-  // types: ["text/*"] and target files don't contain unsupported text mime
-  // type.
-  FileHandlerInfo file_handler_info_10;
-  file_handler_info_10.types.insert("text/*");
-  EXPECT_TRUE(IsGoodMatchFileHandler(file_handler_info_10, entries_1));
-
-  // path_directory_set not empty.
-  FileHandlerInfo file_handler_info_11;
-  std::vector<extensions::EntryInfo> entries_3;
-  entries_3.emplace_back(base::FilePath(FILE_PATH_LITERAL("dir1")), "", true);
-  EXPECT_FALSE(IsGoodMatchFileHandler(file_handler_info_11, entries_3));
+  EXPECT_FALSE(FileHandlerIsEnabled(&test_profile, "install-linux-package"));
+  EXPECT_TRUE(FileHandlerIsEnabled(&test_profile, test_id));
 }
 
 // Test IsGoodMatchAppsFileHandler, which returns whether an apps::FileHandler
@@ -630,165 +546,6 @@
   extensions::ExtensionService* extension_service_;  // Owned by test_profile_;
 };
 
-TEST_F(FileManagerFileTasksComplexTest, FindFileHandlerTasks) {
-  // Random IDs generated by
-  // % ruby -le 'print (0...32).to_a.map{(?a + rand(16)).chr}.join'
-  const char kFooId[] = "hhgbjpmdppecanaaogonaigmmifgpaph";
-  const char kBarId[] = "odlhccgofgkadkkhcmhgnhgahonahoca";
-
-  // Foo.app can handle "text/plain" and "text/html".
-  extensions::ExtensionBuilder foo_app;
-  foo_app.SetManifest(
-      extensions::DictionaryBuilder()
-          .Set("name", "Foo")
-          .Set("version", "1.0.0")
-          .Set("manifest_version", 2)
-          .Set("app", extensions::DictionaryBuilder()
-                          .Set("background",
-                               extensions::DictionaryBuilder()
-                                   .Set("scripts", extensions::ListBuilder()
-                                                       .Append("background.js")
-                                                       .Build())
-                                   .Build())
-                          .Build())
-          .Set("file_handlers",
-               extensions::DictionaryBuilder()
-                   .Set("text", extensions::DictionaryBuilder()
-                                    .Set("title", "Text")
-                                    .Set("types", extensions::ListBuilder()
-                                                      .Append("text/plain")
-                                                      .Append("text/html")
-                                                      .Build())
-                                    .Build())
-                   .Build())
-          .Build());
-  foo_app.SetID(kFooId);
-  extension_service_->AddExtension(foo_app.Build().get());
-
-  // Bar.app can only handle "text/plain".
-  extensions::ExtensionBuilder bar_app;
-  bar_app.SetManifest(
-      extensions::DictionaryBuilder()
-          .Set("name", "Bar")
-          .Set("version", "1.0.0")
-          .Set("manifest_version", 2)
-          .Set("app", extensions::DictionaryBuilder()
-                          .Set("background",
-                               extensions::DictionaryBuilder()
-                                   .Set("scripts", extensions::ListBuilder()
-                                                       .Append("background.js")
-                                                       .Build())
-                                   .Build())
-                          .Build())
-          .Set("file_handlers",
-               extensions::DictionaryBuilder()
-                   .Set("text", extensions::DictionaryBuilder()
-                                    .Set("title", "Text")
-                                    .Set("types", extensions::ListBuilder()
-                                                      .Append("text/plain")
-                                                      .Build())
-                                    .Build())
-                   .Build())
-          .Build());
-  bar_app.SetID(kBarId);
-  extension_service_->AddExtension(bar_app.Build().get());
-
-  // Find apps for a "text/plain" file. Foo.app and Bar.app should be found.
-  std::vector<extensions::EntryInfo> entries;
-  entries.emplace_back(util::GetMyFilesFolderForProfile(test_profile_.get())
-                           .AppendASCII("foo.txt"),
-                       "text/plain", false);
-
-  std::vector<FullTaskDescriptor> tasks;
-  FindFileHandlerTasks(test_profile_.get(), entries, &tasks);
-  ASSERT_EQ(2U, tasks.size());
-  // Sort the app IDs, as the order is not guaranteed.
-  std::vector<std::string> app_ids;
-  app_ids.push_back(tasks[0].task_descriptor.app_id);
-  app_ids.push_back(tasks[1].task_descriptor.app_id);
-  std::sort(app_ids.begin(), app_ids.end());
-  // Confirm that both Foo.app and Bar.app are found.
-  EXPECT_EQ(kFooId, app_ids[0]);
-  EXPECT_EQ(kBarId, app_ids[1]);
-
-  // Find apps for "text/plain" and "text/html" files. Only Foo.app should be
-  // found.
-  entries.clear();
-  entries.emplace_back(util::GetMyFilesFolderForProfile(test_profile_.get())
-                           .AppendASCII("foo.txt"),
-                       "text/plain", false);
-  entries.emplace_back(util::GetMyFilesFolderForProfile(test_profile_.get())
-                           .AppendASCII("foo.html"),
-                       "text/html", false);
-  tasks.clear();
-  FindFileHandlerTasks(test_profile_.get(), entries, &tasks);
-  ASSERT_EQ(1U, tasks.size());
-  // Confirm that only Foo.app is found.
-  EXPECT_EQ(kFooId, tasks[0].task_descriptor.app_id);
-
-  // Add an "image/png" file. No tasks should be found.
-  entries.emplace_back(base::FilePath::FromUTF8Unsafe("foo.png"), "image/png",
-                       false);
-  tasks.clear();
-  FindFileHandlerTasks(test_profile_.get(), entries, &tasks);
-  // Confirm no tasks are found.
-  ASSERT_TRUE(tasks.empty());
-}
-
-TEST_F(FileManagerFileTasksComplexTest,
-       BookmarkAppsAreNotListedInFileHandlerTasks) {
-  const char kGraphrId[] = "ppcpljkgngnngojbghcdiojhbneibgdg";
-  const char kGraphrFileAction[] = "https://graphr.tld/open-files/?name=raw";
-  extensions::ExtensionBuilder graphr;
-  graphr.SetManifest(
-      extensions::DictionaryBuilder()
-          .Set("name", "Graphr")
-          .Set("version", "1.0.0")
-          .Set("manifest_version", 2)
-          .Set("app",
-               extensions::DictionaryBuilder()
-                   .Set("launch", extensions::DictionaryBuilder()
-                                      .Set("web_url", "https://graphr.tld")
-                                      .Build())
-                   .Build())
-          .Set(
-              "file_handlers",
-              extensions::DictionaryBuilder()
-                  .Set(kGraphrFileAction,
-                       extensions::DictionaryBuilder()
-                           .Set("title", "Raw")
-                           .Set("types", extensions::ListBuilder()
-                                             .Append("text/csv")
-                                             .Build())
-                           .Set("extensions",
-                                extensions::ListBuilder().Append("csv").Build())
-                           .Build())
-                  .Build())
-          .Build());
-  graphr.SetID(kGraphrId);
-  graphr.AddFlags(extensions::Extension::InitFromValueFlags::FROM_BOOKMARK);
-
-  extension_service_->AddExtension(graphr.Build().get());
-  extensions::ExtensionRegistry* registry =
-      extensions::ExtensionRegistry::Get(test_profile_.get());
-  const extensions::Extension* extension = registry->GetExtensionById(
-      kGraphrId, extensions::ExtensionRegistry::ENABLED);
-
-  ASSERT_EQ(extension->GetType(), extensions::Manifest::Type::TYPE_HOSTED_APP);
-  ASSERT_TRUE(extension->from_bookmark());
-
-  std::vector<FullTaskDescriptor> tasks;
-  std::vector<extensions::EntryInfo> entries;
-  entries.emplace_back(util::GetMyFilesFolderForProfile(test_profile_.get())
-                           .AppendASCII("foo.csv"),
-                       "text/csv", false);
-
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitWithFeatures({blink::features::kFileHandlingAPI}, {});
-  FindFileHandlerTasks(test_profile_.get(), entries, &tasks);
-  EXPECT_EQ(0u, tasks.size());
-}
-
 // The basic logic is similar to a test case for FindFileHandlerTasks above.
 TEST_F(FileManagerFileTasksComplexTest, FindFileBrowserHandlerTasks) {
   // Copied from FindFileHandlerTasks test above.
@@ -879,90 +636,6 @@
   ASSERT_TRUE(tasks.empty());
 }
 
-// Test that all kinds of apps (file handler and file browser handler) are
-// returned.
-TEST_F(FileManagerFileTasksComplexTest, FindAllTypesOfTasks) {
-  // kFooId and kBarId copied from FindFileHandlerTasks test above.
-  const char kFooId[] = "hhgbjpmdppecanaaogonaigmmifgpaph";
-  const char kBarId[] = "odlhccgofgkadkkhcmhgnhgahonahoca";
-
-  // Foo.app can handle "text/plain".
-  // This is a packaged app (file handler).
-  extensions::ExtensionBuilder foo_app;
-  foo_app.SetManifest(
-      extensions::DictionaryBuilder()
-          .Set("name", "Foo")
-          .Set("version", "1.0.0")
-          .Set("manifest_version", 2)
-          .Set("app", extensions::DictionaryBuilder()
-                          .Set("background",
-                               extensions::DictionaryBuilder()
-                                   .Set("scripts", extensions::ListBuilder()
-                                                       .Append("background.js")
-                                                       .Build())
-                                   .Build())
-                          .Build())
-          .Set("file_handlers",
-               extensions::DictionaryBuilder()
-                   .Set("text", extensions::DictionaryBuilder()
-                                    .Set("title", "Text")
-                                    .Set("types", extensions::ListBuilder()
-                                                      .Append("text/plain")
-                                                      .Build())
-                                    .Build())
-                   .Build())
-          .Build());
-  foo_app.SetID(kFooId);
-  extension_service_->AddExtension(foo_app.Build().get());
-
-  // Bar.app can only handle ".txt".
-  // This is an extension (file browser handler).
-  extensions::ExtensionBuilder bar_app;
-  bar_app.SetManifest(
-      extensions::DictionaryBuilder()
-          .Set("name", "Bar")
-          .Set("version", "1.0.0")
-          .Set("manifest_version", 2)
-          .Set("permissions",
-               extensions::ListBuilder().Append("fileBrowserHandler").Build())
-          .Set("file_browser_handlers",
-               extensions::ListBuilder()
-                   .Append(
-                       extensions::DictionaryBuilder()
-                           .Set("id", "open")
-                           .Set("default_title", "open")
-                           .Set("file_filters", extensions::ListBuilder()
-                                                    .Append("filesystem:*.txt")
-                                                    .Build())
-                           .Build())
-                   .Build())
-          .Build());
-  bar_app.SetID(kBarId);
-  extension_service_->AddExtension(bar_app.Build().get());
-
-  // Find apps for "foo.txt". All apps should be found.
-  std::vector<extensions::EntryInfo> entries;
-  std::vector<GURL> file_urls;
-  entries.emplace_back(util::GetMyFilesFolderForProfile(test_profile_.get())
-                           .AppendASCII("foo.txt"),
-                       "text/plain", false);
-  file_urls.emplace_back("filesystem:chrome-extension://id/dir/foo.txt");
-
-  std::vector<FullTaskDescriptor> tasks;
-  FindAllTypesOfTasksSynchronousWrapper().Call(test_profile_.get(), entries,
-                                               file_urls, &tasks);
-  ASSERT_EQ(2U, tasks.size());
-
-  // Sort the app IDs, as the order is not guaranteed.
-  std::vector<std::string> app_ids;
-  app_ids.push_back(tasks[0].task_descriptor.app_id);
-  app_ids.push_back(tasks[1].task_descriptor.app_id);
-  std::sort(app_ids.begin(), app_ids.end());
-  // Confirm that all apps are found.
-  EXPECT_EQ(kFooId, app_ids[0]);
-  EXPECT_EQ(kBarId, app_ids[1]);
-}
-
 TEST_F(FileManagerFileTasksComplexTest, FindAllTypesOfTasks_GoogleDocument) {
   // kFooId and kBarId copied from FindFileHandlerTasks test above.
   const char kBarId[] = "odlhccgofgkadkkhcmhgnhgahonahoca";
@@ -1034,322 +707,6 @@
   EXPECT_EQ(kFileManagerAppId, tasks[0].task_descriptor.app_id);
 }
 
-TEST_F(FileManagerFileTasksComplexTest, FindFileHandlerTask_Generic) {
-  // Since we want to keep the order of the result as foo,bar,baz,qux,
-  // keep the ids in alphabetical order.
-  const char kFooId[] = "hhgbjpmdppecanaaogonaigmmifgpaph";
-  const char kBarId[] = "odlhccgofgkadkkhcmhgnhgahonahoca";
-  const char kBazId[] = "plifkpkakemokpflgbnnigcoldgcbdmc";
-  const char kQuxId[] = "pmifkpkakgkadkkhcmhgnigmmifgpaph";
-
-  // Foo app provides file handler for text/plain and all file types.
-  extensions::ExtensionBuilder foo_app;
-  foo_app.SetManifest(
-      extensions::DictionaryBuilder()
-          .Set("name", "Foo")
-          .Set("version", "1.0.0")
-          .Set("manifest_version", 2)
-          .Set("app", extensions::DictionaryBuilder()
-                          .Set("background",
-                               extensions::DictionaryBuilder()
-                                   .Set("scripts", extensions::ListBuilder()
-                                                       .Append("background.js")
-                                                       .Build())
-                                   .Build())
-                          .Build())
-          .Set(
-              "file_handlers",
-              extensions::DictionaryBuilder()
-                  .Set("any",
-                       extensions::DictionaryBuilder()
-                           .Set("types",
-                                extensions::ListBuilder().Append("*/*").Build())
-                           .Build())
-                  .Set("text", extensions::DictionaryBuilder()
-                                   .Set("types", extensions::ListBuilder()
-                                                     .Append("text/plain")
-                                                     .Build())
-                                   .Build())
-                  .Build())
-          .Build());
-  foo_app.SetID(kFooId);
-  extension_service_->AddExtension(foo_app.Build().get());
-
-  // Bar app provides file handler for .txt and not provide generic file
-  // handler, but handles directories.
-  extensions::ExtensionBuilder bar_app;
-  bar_app.SetManifest(
-      extensions::DictionaryBuilder()
-          .Set("name", "Bar")
-          .Set("version", "1.0.0")
-          .Set("manifest_version", 2)
-          .Set("app", extensions::DictionaryBuilder()
-                          .Set("background",
-                               extensions::DictionaryBuilder()
-                                   .Set("scripts", extensions::ListBuilder()
-                                                       .Append("background.js")
-                                                       .Build())
-                                   .Build())
-                          .Build())
-          .Set(
-              "file_handlers",
-              extensions::DictionaryBuilder()
-                  .Set("text",
-                       extensions::DictionaryBuilder()
-                           .Set("include_directories", true)
-                           .Set("extensions",
-                                extensions::ListBuilder().Append("txt").Build())
-                           .Build())
-                  .Build())
-          .Build());
-  bar_app.SetID(kBarId);
-  extension_service_->AddExtension(bar_app.Build().get());
-
-  // Baz app provides file handler for all extensions and images.
-  extensions::ExtensionBuilder baz_app;
-  baz_app.SetManifest(
-      extensions::DictionaryBuilder()
-          .Set("name", "Baz")
-          .Set("version", "1.0.0")
-          .Set("manifest_version", 2)
-          .Set("app", extensions::DictionaryBuilder()
-                          .Set("background",
-                               extensions::DictionaryBuilder()
-                                   .Set("scripts", extensions::ListBuilder()
-                                                       .Append("background.js")
-                                                       .Build())
-                                   .Build())
-                          .Build())
-          .Set("file_handlers",
-               extensions::DictionaryBuilder()
-                   .Set("any", extensions::DictionaryBuilder()
-                                   .Set("extensions", extensions::ListBuilder()
-                                                          .Append("*")
-                                                          .Append("bar")
-                                                          .Build())
-                                   .Build())
-                   .Set("image", extensions::DictionaryBuilder()
-                                     .Set("types", extensions::ListBuilder()
-                                                       .Append("image/*")
-                                                       .Build())
-                                     .Build())
-                   .Build())
-          .Build());
-  baz_app.SetID(kBazId);
-  extension_service_->AddExtension(baz_app.Build().get());
-
-  // Qux app provides file handler for all types.
-  extensions::ExtensionBuilder qux_app;
-  qux_app.SetManifest(
-      extensions::DictionaryBuilder()
-          .Set("name", "Qux")
-          .Set("version", "1.0.0")
-          .Set("manifest_version", 2)
-          .Set("app", extensions::DictionaryBuilder()
-                          .Set("background",
-                               extensions::DictionaryBuilder()
-                                   .Set("scripts", extensions::ListBuilder()
-                                                       .Append("background.js")
-                                                       .Build())
-                                   .Build())
-                          .Build())
-          .Set("file_handlers",
-               extensions::DictionaryBuilder()
-                   .Set("any",
-                        extensions::DictionaryBuilder()
-                            .Set("types",
-                                 extensions::ListBuilder().Append("*").Build())
-                            .Build())
-                   .Build())
-          .Build());
-  qux_app.SetID(kQuxId);
-  extension_service_->AddExtension(qux_app.Build().get());
-
-  // Test case with .txt file
-  std::vector<extensions::EntryInfo> txt_entries;
-  txt_entries.emplace_back(util::GetMyFilesFolderForProfile(test_profile_.get())
-                               .AppendASCII("foo.txt"),
-                           "text/plain", false);
-  std::vector<FullTaskDescriptor> txt_result;
-  FindFileHandlerTasks(test_profile_.get(), txt_entries, &txt_result);
-  EXPECT_EQ(4U, txt_result.size());
-  // Foo app provides a handler for text/plain.
-  EXPECT_EQ("Foo", txt_result[0].task_title);
-  EXPECT_FALSE(txt_result[0].is_generic_file_handler);
-  // Bar app provides a handler for .txt.
-  EXPECT_EQ("Bar", txt_result[1].task_title);
-  EXPECT_FALSE(txt_result[1].is_generic_file_handler);
-  // Baz app provides a handler for all extensions.
-  EXPECT_EQ("Baz", txt_result[2].task_title);
-  EXPECT_TRUE(txt_result[2].is_generic_file_handler);
-  // Qux app provides a handler for all types.
-  EXPECT_EQ("Qux", txt_result[3].task_title);
-  EXPECT_TRUE(txt_result[3].is_generic_file_handler);
-
-  // Test case with .jpg file
-  std::vector<extensions::EntryInfo> jpg_entries;
-  jpg_entries.emplace_back(util::GetMyFilesFolderForProfile(test_profile_.get())
-                               .AppendASCII("foo.jpg"),
-                           "image/jpeg", false);
-  std::vector<FullTaskDescriptor> jpg_result;
-  FindFileHandlerTasks(test_profile_.get(), jpg_entries, &jpg_result);
-  EXPECT_EQ(3U, jpg_result.size());
-  // Foo app provides a handler for all types.
-  EXPECT_EQ("Foo", jpg_result[0].task_title);
-  EXPECT_TRUE(jpg_result[0].is_generic_file_handler);
-  // Baz app provides a handler for image/*. A partial wildcarded handler is
-  // treated as non-generic handler.
-  EXPECT_EQ("Baz", jpg_result[1].task_title);
-  EXPECT_FALSE(jpg_result[1].is_generic_file_handler);
-  // Qux app provides a handler for all types.
-  EXPECT_EQ("Qux", jpg_result[2].task_title);
-  EXPECT_TRUE(jpg_result[2].is_generic_file_handler);
-
-  // Test case with directories.
-  std::vector<extensions::EntryInfo> dir_entries;
-  dir_entries.emplace_back(
-      util::GetMyFilesFolderForProfile(test_profile_.get()).AppendASCII("dir"),
-      "", true);
-  std::vector<FullTaskDescriptor> dir_result;
-  FindFileHandlerTasks(test_profile_.get(), dir_entries, &dir_result);
-  ASSERT_EQ(1U, dir_result.size());
-  // Confirm that only Bar.app is found and that it is a generic file handler.
-  EXPECT_EQ(kBarId, dir_result[0].task_descriptor.app_id);
-  EXPECT_TRUE(dir_result[0].is_generic_file_handler);
-}
-
-// The basic logic is similar to a test case for FindFileHandlerTasks above.
-TEST_F(FileManagerFileTasksComplexTest, FindFileHandlerTask_Verbs) {
-  // kFooId copied from FindFileHandlerTasks test above.
-  const char kFooId[] = "hhgbjpmdppecanaaogonaigmmifgpaph";
-
-  // Foo.app can handle "text/plain" and "text/html".
-  extensions::ExtensionBuilder foo_app;
-  foo_app.SetManifest(
-      extensions::DictionaryBuilder()
-          .Set("name", "Foo")
-          .Set("version", "1.0.0")
-          .Set("manifest_version", 2)
-          .Set("app", extensions::DictionaryBuilder()
-                          .Set("background",
-                               extensions::DictionaryBuilder()
-                                   .Set("scripts", extensions::ListBuilder()
-                                                       .Append("background.js")
-                                                       .Build())
-                                   .Build())
-                          .Build())
-          .Set(
-              "file_handlers",
-              extensions::DictionaryBuilder()
-                  .Set("any",
-                       extensions::DictionaryBuilder()
-                           .Set("types",
-                                extensions::ListBuilder().Append("*").Build())
-                           .Set("verb", "add_to")
-                           .Build())
-                  .Set("any_with_directories",
-                       extensions::DictionaryBuilder()
-                           .Set("include_directories", true)
-                           .Set("types",
-                                extensions::ListBuilder().Append("*").Build())
-                           .Set("verb", "pack_with")
-                           .Build())
-                  .Set("all_text", extensions::DictionaryBuilder()
-                                       .Set("title", "Text")
-                                       .Set("types", extensions::ListBuilder()
-                                                         .Append("text/plain")
-                                                         .Append("text/html")
-                                                         .Build())
-                                       .Set("verb", "add_to")
-                                       .Build())
-                  .Set("plain_text", extensions::DictionaryBuilder()
-                                         .Set("title", "Plain")
-                                         .Set("types", extensions::ListBuilder()
-                                                           .Append("text/plain")
-                                                           .Build())
-                                         .Set("verb", "open_with")
-                                         .Build())
-                  .Set("html_text_duplicate_verb",
-                       extensions::DictionaryBuilder()
-                           .Set("title", "Html")
-                           .Set("types", extensions::ListBuilder()
-                                             .Append("text/html")
-                                             .Build())
-                           .Set("verb", "add_to")
-                           .Build())
-                  .Set("share_plain_text",
-                       extensions::DictionaryBuilder()
-                           .Set("title", "Share Plain")
-                           .Set("types", extensions::ListBuilder()
-                                             .Append("text/plain")
-                                             .Build())
-                           .Set("verb", "share_with")
-                           .Build())
-                  .Build())
-          .Build());
-  foo_app.SetID(kFooId);
-  extension_service_->AddExtension(foo_app.Build().get());
-
-  // Find app with corresponding verbs for a "text/plain" file.
-  // Foo.app with ADD_TO, OPEN_WITH, PACK_WITH and SHARE_WITH should be found,
-  // but only one ADD_TO that is not a generic handler will be taken into
-  // account, even though there are 2 ADD_TO matches for "text/plain".
-  std::vector<extensions::EntryInfo> entries;
-  entries.emplace_back(util::GetMyFilesFolderForProfile(test_profile_.get())
-                           .AppendASCII("foo.txt"),
-                       "text/plain", false);
-
-  std::vector<FullTaskDescriptor> tasks;
-  FindFileHandlerTasks(test_profile_.get(), entries, &tasks);
-
-  ASSERT_EQ(4U, tasks.size());
-  EXPECT_EQ(kFooId, tasks[0].task_descriptor.app_id);
-  EXPECT_EQ("Foo", tasks[0].task_title);
-  EXPECT_EQ(Verb::VERB_ADD_TO, tasks[0].task_verb);
-  EXPECT_EQ(kFooId, tasks[1].task_descriptor.app_id);
-  EXPECT_EQ("Foo", tasks[1].task_title);
-  EXPECT_EQ(Verb::VERB_OPEN_WITH, tasks[1].task_verb);
-  EXPECT_EQ(kFooId, tasks[2].task_descriptor.app_id);
-  EXPECT_EQ("Foo", tasks[2].task_title);
-  EXPECT_EQ(Verb::VERB_PACK_WITH, tasks[2].task_verb);
-  EXPECT_EQ(kFooId, tasks[3].task_descriptor.app_id);
-  EXPECT_EQ("Foo", tasks[3].task_title);
-  EXPECT_EQ(Verb::VERB_SHARE_WITH, tasks[3].task_verb);
-
-  // Find app with corresponding verbs for a "text/html" file.
-  // Foo.app with ADD_TO and PACK_WITH should be found, but only the first
-  // ADD_TO that is a good match will be taken into account, even though there
-  // are 3 ADD_TO matches for "text/html".
-  entries.clear();
-  entries.emplace_back(util::GetMyFilesFolderForProfile(test_profile_.get())
-                           .AppendASCII("foo.html"),
-                       "text/html", false);
-  tasks.clear();
-  FindFileHandlerTasks(test_profile_.get(), entries, &tasks);
-
-  ASSERT_EQ(2U, tasks.size());
-  EXPECT_EQ(kFooId, tasks[0].task_descriptor.app_id);
-  EXPECT_EQ("Foo", tasks[0].task_title);
-  EXPECT_EQ(Verb::VERB_ADD_TO, tasks[0].task_verb);
-  EXPECT_EQ(kFooId, tasks[1].task_descriptor.app_id);
-  EXPECT_EQ("Foo", tasks[1].task_title);
-  EXPECT_EQ(Verb::VERB_PACK_WITH, tasks[1].task_verb);
-
-  // Find app with corresponding verbs for directories.
-  // Foo.app with only PACK_WITH should be found.
-  entries.clear();
-  entries.emplace_back(
-      util::GetMyFilesFolderForProfile(test_profile_.get()).AppendASCII("dir"),
-      "", true);
-  tasks.clear();
-  FindFileHandlerTasks(test_profile_.get(), entries, &tasks);
-
-  ASSERT_EQ(1U, tasks.size());
-  EXPECT_EQ(kFooId, tasks[0].task_descriptor.app_id);
-  EXPECT_EQ("Foo", tasks[0].task_title);
-  EXPECT_EQ(Verb::VERB_PACK_WITH, tasks[0].task_verb);
-}
-
 // Test using the test extension system, which needs lots of setup.
 class FileManagerFileTasksCrostiniTest
     : public FileManagerFileTasksComplexTest {
diff --git a/chrome/browser/ash/input_method/input_method_manager_impl.cc b/chrome/browser/ash/input_method/input_method_manager_impl.cc
index b7d2a6b..1440be3 100644
--- a/chrome/browser/ash/input_method/input_method_manager_impl.cc
+++ b/chrome/browser/ash/input_method/input_method_manager_impl.cc
@@ -808,9 +808,14 @@
   if (!CanCycleInputMethod())
     return;
 
-  // Find the next input method and switch to it.
-  SwitchToNextInputMethodInternal(active_input_method_ids,
-                                  current_input_method.id());
+  auto iter =
+      std::find(active_input_method_ids.begin(), active_input_method_ids.end(),
+                current_input_method.id());
+  if (iter != active_input_method_ids.end())
+    ++iter;
+  if (iter == active_input_method_ids.end())
+    iter = active_input_method_ids.begin();
+  ChangeInputMethod(*iter, true);
 }
 
 void InputMethodManagerImpl::StateImpl::SwitchToLastUsedInputMethod() {
@@ -834,18 +839,6 @@
   ChangeInputMethod(*iter, true);
 }
 
-void InputMethodManagerImpl::StateImpl::SwitchToNextInputMethodInternal(
-    const std::vector<std::string>& input_method_ids,
-    const std::string& current_input_method_id) {
-  auto iter = std::find(input_method_ids.begin(), input_method_ids.end(),
-                        current_input_method_id);
-  if (iter != input_method_ids.end())
-    ++iter;
-  if (iter == input_method_ids.end())
-    iter = input_method_ids.begin();
-  ChangeInputMethod(*iter, true);
-}
-
 InputMethodDescriptor InputMethodManagerImpl::StateImpl::GetCurrentInputMethod()
     const {
   if (current_input_method.id().empty())
diff --git a/chrome/browser/ash/input_method/input_method_manager_impl.h b/chrome/browser/ash/input_method/input_method_manager_impl.h
index 76ec7e6..048778ff 100644
--- a/chrome/browser/ash/input_method/input_method_manager_impl.h
+++ b/chrome/browser/ash/input_method/input_method_manager_impl.h
@@ -67,13 +67,6 @@
     // Returns true if |input_method_id| is in |active_input_method_ids|.
     bool InputMethodIsActivated(const std::string& input_method_id) const;
 
-    // If |current_input_methodid_| is not in |input_method_ids|, switch to
-    // input_method_ids[0]. If the ID is equal to input_method_ids[N], switch to
-    // input_method_ids[N+1].
-    void SwitchToNextInputMethodInternal(
-        const std::vector<std::string>& input_method_ids,
-        const std::string& current_input_methodid);
-
     // Returns true if given input method requires pending extension.
     bool MethodAwaitsExtensionLoad(const std::string& input_method_id) const;
 
diff --git a/chrome/browser/ash/policy/remote_commands/crd_host_delegate.cc b/chrome/browser/ash/policy/remote_commands/crd_host_delegate.cc
index 01f8d6e..b88e54ff 100644
--- a/chrome/browser/ash/policy/remote_commands/crd_host_delegate.cc
+++ b/chrome/browser/ash/policy/remote_commands/crd_host_delegate.cc
@@ -7,311 +7,194 @@
 #include <string>
 
 #include "base/bind.h"
-#include "base/json/json_reader.h"
-#include "base/json/json_writer.h"
-#include "base/threading/thread_task_runner_handle.h"
+#include "base/callback_forward.h"
+#include "base/memory/weak_ptr.h"
 #include "chrome/browser/ash/policy/remote_commands/crd_logging.h"
-#include "chrome/browser/browser_process.h"
-#include "content/public/browser/browser_task_traits.h"
-#include "content/public/browser/browser_thread.h"
-#include "extensions/browser/api/messaging/native_message_host.h"
-#include "google_apis/gaia/gaia_constants.h"
-#include "remoting/host/it2me/it2me_constants.h"
-#include "remoting/host/it2me/it2me_native_messaging_host_chromeos.h"
-#include "remoting/protocol/errors.h"
+#include "remoting/host/chromeos/remote_support_host_ash.h"
+#include "remoting/host/chromeos/remoting_service.h"
+#include "remoting/host/mojom/remote_support.mojom.h"
 
 namespace policy {
 
+using ResultCode = DeviceCommandStartCRDSessionJob::ResultCode;
+using AccessCodeCallback = DeviceCommandStartCRDSessionJob::AccessCodeCallback;
+using ErrorCallback = DeviceCommandStartCRDSessionJob::ErrorCallback;
+
 namespace {
 
-class DefaultNativeMessageHostFactory
-    : public CRDHostDelegate::NativeMessageHostFactory {
+// Default implementation of the RemotingService, which will contact the real
+// remoting service.
+class DefaultRemotingService : public CrdHostDelegate::RemotingServiceProxy {
  public:
-  DefaultNativeMessageHostFactory() = default;
-  DefaultNativeMessageHostFactory(const DefaultNativeMessageHostFactory&) =
-      delete;
-  DefaultNativeMessageHostFactory& operator=(
-      const DefaultNativeMessageHostFactory&) = delete;
-  ~DefaultNativeMessageHostFactory() override = default;
+  DefaultRemotingService() = default;
+  DefaultRemotingService(const DefaultRemotingService&) = delete;
+  DefaultRemotingService& operator=(const DefaultRemotingService&) = delete;
+  ~DefaultRemotingService() override = default;
 
-  // CRDHostDelegate::NativeMessageHostFactory implementation:
-  std::unique_ptr<extensions::NativeMessageHost> CreateNativeMessageHostHost()
-      override {
-    return remoting::CreateIt2MeNativeMessagingHostForChromeOS(
-        content::GetIOThreadTaskRunner({}), content::GetUIThreadTaskRunner({}),
-        g_browser_process->policy_service());
+  // CrdHostDelegate::RemotingService implementation:
+
+  void StartSession(remoting::mojom::SupportSessionParamsPtr params,
+                    const remoting::ChromeOsEnterpriseParams& enterprise_params,
+                    StartSessionCallback callback) override {
+    return remoting::RemotingService::Get().GetSupportHost().StartSession(
+        std::move(params), enterprise_params, std::move(callback));
   }
 };
 
-std::string FindStringKeyOrDefault(
-    const base::Value& dictionary,
-    const std::string& key_name,
-    const std::string& default_value = "<missing-key>") {
-  const std::string* result = dictionary.FindStringKey(key_name);
-  return result ? *result : default_value;
-}
-
 }  // namespace
 
-CRDHostDelegate::CRDHostDelegate()
-    : CRDHostDelegate(std::make_unique<DefaultNativeMessageHostFactory>()) {}
+class CrdHostDelegate::CrdHostSession
+    : public remoting::mojom::SupportHostObserver {
+ public:
+  CrdHostSession(const SessionParameters& parameters,
+                 AccessCodeCallback success_callback,
+                 ErrorCallback error_callback)
+      : parameters_(parameters),
+        success_callback_(std::move(success_callback)),
+        error_callback_(std::move(error_callback)) {}
+  CrdHostSession(const CrdHostSession&) = delete;
+  CrdHostSession& operator=(const CrdHostSession&) = delete;
+  ~CrdHostSession() override = default;
 
-CRDHostDelegate::CRDHostDelegate(
-    std::unique_ptr<NativeMessageHostFactory> factory)
-    : factory_(std::move(factory)) {
-  DCHECK(factory_);
+  void Start(CrdHostDelegate::RemotingServiceProxy& remoting_service) {
+    CRD_DVLOG(3) << "Starting CRD session with parameters { "
+                    "user_name '"
+                 << parameters_.user_name << "', terminate_upon_input "
+                 << parameters_.terminate_upon_input
+                 << ", show_confirmation_dialog "
+                 << parameters_.show_confirmation_dialog << "}";
+
+    remoting_service.StartSession(
+        GetSessionParameters(), GetEnterpriseParameters(),
+        base::BindOnce(&CrdHostSession::OnStartSupportSessionResponse,
+                       weak_factory_.GetWeakPtr()));
+  }
+
+  // remoting::mojom::SupportHostObserver implementation:
+  void OnHostStateStarting() override { CRD_DVLOG(3) << __FUNCTION__; }
+  void OnHostStateRequestedAccessCode() override {
+    CRD_DVLOG(3) << __FUNCTION__;
+  }
+  void OnHostStateReceivedAccessCode(const std::string& access_code,
+                                     base::TimeDelta lifetime) override {
+    CRD_DVLOG(3) << __FUNCTION__;
+
+    ReportSuccess(access_code);
+  }
+  void OnHostStateConnecting() override { CRD_DVLOG(3) << __FUNCTION__; }
+  void OnHostStateConnected(const std::string& remote_username) override {
+    CRD_DVLOG(3) << __FUNCTION__;
+  }
+  void OnHostStateDisconnected(
+      const absl::optional<std::string>& disconnect_reason) override {
+    CRD_DVLOG(3) << __FUNCTION__
+                 << " with reason: " << disconnect_reason.value_or("<none>");
+
+    ReportError(ResultCode::FAILURE_CRD_HOST_ERROR, "host disconnected");
+  }
+  void OnNatPolicyChanged(
+      remoting::mojom::NatPolicyStatePtr nat_policy_state) override {
+    CRD_DVLOG(3) << __FUNCTION__;
+  }
+  void OnHostStateError(int64_t error_code) override {
+    CRD_DVLOG(3) << __FUNCTION__ << " with error code: " << error_code;
+
+    ReportError(ResultCode::FAILURE_CRD_HOST_ERROR, "host state error");
+  }
+  void OnPolicyError() override {
+    CRD_DVLOG(3) << __FUNCTION__;
+
+    ReportError(ResultCode::FAILURE_CRD_HOST_ERROR, "policy error");
+  }
+  void OnInvalidDomainError() override {
+    CRD_DVLOG(3) << __FUNCTION__;
+
+    ReportError(ResultCode::FAILURE_CRD_HOST_ERROR, "invalid domain error");
+  }
+
+ private:
+  void OnStartSupportSessionResponse(
+      remoting::mojom::StartSupportSessionResponsePtr response) {
+    if (response->is_support_session_error()) {
+      ReportError(ResultCode::FAILURE_CRD_HOST_ERROR, "");
+      return;
+    }
+
+    observer_.Bind(std::move(response->get_observer()));
+  }
+
+  remoting::mojom::SupportSessionParamsPtr GetSessionParameters() const {
+    auto result = remoting::mojom::SupportSessionParams::New();
+    result->user_name = parameters_.user_name;
+    // Note the oauth token must be prefixed with 'oauth2:', or it will be
+    // rejected by the CRD host.
+    result->oauth_access_token = "oauth2:" + parameters_.oauth_token;
+    return result;
+  }
+
+  remoting::ChromeOsEnterpriseParams GetEnterpriseParameters() const {
+    return remoting::ChromeOsEnterpriseParams{
+        /*suppress_user_dialogs=*/!parameters_.show_confirmation_dialog,
+        /*suppress_notifications=*/!parameters_.show_confirmation_dialog,
+        /*terminate_upon_input=*/parameters_.terminate_upon_input};
+  }
+
+  void ReportSuccess(const std::string& access_code) {
+    if (success_callback_) {
+      std::move(success_callback_).Run(access_code);
+
+      success_callback_.Reset();
+      error_callback_.Reset();
+    }
+  }
+
+  void ReportError(ResultCode error_code, const std::string& error_message) {
+    if (error_callback_) {
+      std::move(error_callback_).Run(error_code, error_message);
+
+      success_callback_.Reset();
+      error_callback_.Reset();
+    }
+  }
+
+  SessionParameters parameters_;
+  AccessCodeCallback success_callback_;
+  ErrorCallback error_callback_;
+
+  mojo::Receiver<remoting::mojom::SupportHostObserver> observer_{this};
+  base::WeakPtrFactory<CrdHostSession> weak_factory_{this};
+};
+
+CrdHostDelegate::CrdHostDelegate()
+    : CrdHostDelegate(std::make_unique<DefaultRemotingService>()) {}
+
+CrdHostDelegate::CrdHostDelegate(
+    std::unique_ptr<RemotingServiceProxy> remoting_service)
+    : remoting_service_(std::move(remoting_service)) {}
+
+CrdHostDelegate::~CrdHostDelegate() = default;
+
+bool CrdHostDelegate::HasActiveSession() const {
+  LOG(ERROR) << __FUNCTION__;
+  return active_session_ != nullptr;
 }
 
-CRDHostDelegate::~CRDHostDelegate() = default;
-
-bool CRDHostDelegate::HasActiveSession() const {
-  return host_ != nullptr;
-}
-
-void CRDHostDelegate::TerminateSession(base::OnceClosure callback) {
-  DoShutdownHost();
+void CrdHostDelegate::TerminateSession(base::OnceClosure callback) {
+  LOG(ERROR) << __FUNCTION__;
+  CRD_DVLOG(3) << "Terminating CRD session";
+  active_session_ = nullptr;
   std::move(callback).Run();
 }
 
-void CRDHostDelegate::StartCRDHostAndGetCode(
+void CrdHostDelegate::StartCRDHostAndGetCode(
     const SessionParameters& parameters,
-    DeviceCommandStartCRDSessionJob::AccessCodeCallback success_callback,
-    DeviceCommandStartCRDSessionJob::ErrorCallback error_callback) {
-  DCHECK(!host_);
-  DCHECK(!code_success_callback_);
-  DCHECK(!error_callback_);
+    AccessCodeCallback success_callback,
+    ErrorCallback error_callback) {
+  DCHECK(!active_session_);
+  active_session_ = std::make_unique<CrdHostSession>(
+      parameters, std::move(success_callback), std::move(error_callback));
 
-  // Store all parameters for future connect call.
-  base::Value connect_params(base::Value::Type::DICTIONARY);
-
-  connect_params.SetStringKey(remoting::kUserName, parameters.user_name);
-  connect_params.SetStringKey(remoting::kAuthServiceWithToken,
-                              "oauth2:" + parameters.oauth_token);
-  connect_params.SetBoolKey(remoting::kTerminateUponInput,
-                            parameters.terminate_upon_input);
-  connect_params.SetBoolKey(remoting::kIsEnterpriseAdminUser, true);
-  // Note both |kSuppressUserDialogs| and |kSuppressNotifications| are
-  // controlled by |show_confirmation_dialog|.
-  connect_params.SetBoolKey(remoting::kSuppressUserDialogs,
-                            !parameters.show_confirmation_dialog);
-  connect_params.SetBoolKey(remoting::kSuppressNotifications,
-                            !parameters.show_confirmation_dialog);
-
-  connect_params_ = std::move(connect_params);
-
-  remote_connected_ = false;
-  command_awaiting_crd_access_code_ = true;
-
-  code_success_callback_ = std::move(success_callback);
-  error_callback_ = std::move(error_callback);
-
-  // TODO(antrim): set up watchdog timer (reasonable cutoff).
-  host_ = factory_->CreateNativeMessageHostHost();
-  host_->Start(this);
-
-  base::Value params(base::Value::Type::DICTIONARY);
-  SendMessageToHost(remoting::kHelloMessage, params);
-}
-
-void CRDHostDelegate::PostMessageFromNativeHost(
-    const std::string& message_string) {
-  CRD_DVLOG(1) << "Received message from CRD host: " << message_string;
-
-  absl::optional<base::Value> message = base::JSONReader::Read(message_string);
-  if (!message) {
-    OnProtocolBroken("Message is invalid JSON");
-    return;
-  }
-
-  if (!message->is_dict()) {
-    OnProtocolBroken("Message is not a dictionary");
-    return;
-  }
-
-  const std::string* type = message->FindStringKey(remoting::kMessageType);
-  if (!type) {
-    OnProtocolBroken("Message without type");
-    return;
-  }
-
-  HandleNativeHostMessage(*type, *message);
-}
-
-void CRDHostDelegate::HandleNativeHostMessage(const std::string& type,
-                                              const base::Value& message) {
-  if (type == remoting::kHelloResponse) {
-    OnHelloResponse();
-  } else if (type == remoting::kConnectResponse) {
-    //  Ok, just ignore.
-  } else if (type == remoting::kDisconnectResponse) {
-    OnDisconnectResponse();
-  } else if (type == remoting::kErrorMessage) {
-    OnConnectionError(
-        FindStringKeyOrDefault(message, remoting::kErrorMessageCode));
-  } else if (type == remoting::kHostStateChangedMessage) {
-    //  Handle CRD host state changes
-    const std::string* state = message.FindStringKey(remoting::kState);
-    if (!state) {
-      OnProtocolBroken("No state in message");
-      return;
-    }
-    HandleNativeHostStateChangeMessage(*state, message);
-  } else {
-    CRD_LOG(WARNING) << "Unknown message type: " << type;
-  }
-}
-
-void CRDHostDelegate::HandleNativeHostStateChangeMessage(
-    const std::string& state,
-    const base::Value& message) {
-  if (state == remoting::kHostStateReceivedAccessCode) {
-    OnStateReceivedAccessCode(message);
-  } else if (state == remoting::kHostStateConnected) {
-    OnStateRemoteConnected(message);
-  } else if (state == remoting::kHostStateDisconnected) {
-    OnStateRemoteDisconnected(
-        FindStringKeyOrDefault(message, remoting::kDisconnectReason));
-  } else if (state == remoting::kHostStateDomainError) {
-    OnConnectionError(state);
-  } else if (state == remoting::kHostStateStarting ||
-             state == remoting::kHostStateRequestedAccessCode) {
-    //  Just ignore these states.
-  } else {
-    CRD_LOG(WARNING) << "Unhandled state: " << state;
-  }
-}
-
-void CRDHostDelegate::OnHelloResponse() {
-  // Host is initialized, start connection.
-  SendMessageToHost(remoting::kConnectMessage, connect_params_);
-}
-
-void CRDHostDelegate::OnDisconnectResponse() {
-  // Should happen only when remoting session finished and we
-  // have requested host to shut down, or when we have got second auth code
-  // without receiving connection.
-  DCHECK(!command_awaiting_crd_access_code_);
-  DCHECK(!remote_connected_);
-  ShutdownHost();
-}
-
-void CRDHostDelegate::OnConnectionError(const std::string& error_reason) {
-  // Notify callback if command is still running.
-  if (command_awaiting_crd_access_code_) {
-    command_awaiting_crd_access_code_ = false;
-    std::move(error_callback_)
-        .Run(DeviceCommandStartCRDSessionJob::FAILURE_CRD_HOST_ERROR,
-             "CRD Connection Error: " + error_reason);
-    code_success_callback_.Reset();
-  }
-  // Shut down host, if any.
-  ShutdownHost();
-}
-
-void CRDHostDelegate::OnStateRemoteConnected(const base::Value& message) {
-  remote_connected_ = true;
-
-  // TODO(antrim): set up watchdog timer (session duration).
-  const std::string* client = message.FindStringKey(remoting::kClient);
-  if (client)
-    CRD_DVLOG(1) << "Remote connection by " << *client;
-}
-
-void CRDHostDelegate::OnStateRemoteDisconnected(
-    const std::string& disconnect_reason) {
-  // There could be a connection attempt that was not successful, we will
-  // receive "disconnected" message without actually receiving "connected".
-  if (!remote_connected_) {
-    CRD_DVLOG(1) << "Connection failed with reason: " << disconnect_reason;
-    return;
-  }
-  remote_connected_ = false;
-
-  CRD_DVLOG(1) << "Remote host has disconnected";
-  // Remote has disconnected, time to send "disconnect" that would result
-  // in shutting down the host.
-  base::Value params(base::Value::Type::DICTIONARY);
-  SendMessageToHost(remoting::kDisconnectMessage, params);
-}
-
-void CRDHostDelegate::OnStateReceivedAccessCode(const base::Value& message) {
-  if (!command_awaiting_crd_access_code_) {
-    if (!remote_connected_) {
-      // We have already sent the access code back to the server which
-      // initiated this CRD session through a remote command, and we can not
-      // send a new access code. Assuming that the old access code is no
-      // longer valid, we can only terminate the current CRD session.
-      base::Value params(base::Value::Type::DICTIONARY);
-      SendMessageToHost(remoting::kDisconnectMessage, params);
-    }
-    return;
-  }
-
-  const std::string* access_code = message.FindStringKey(remoting::kAccessCode);
-  absl::optional<int> code_lifetime =
-      message.FindIntKey(remoting::kAccessCodeLifetime);
-  if (!access_code || !code_lifetime) {
-    OnProtocolBroken("Can not obtain access code");
-    return;
-  }
-
-  CRD_DVLOG(1) << "Got access code";
-  // TODO(antrim): set up watchdog timer (access code lifetime).
-  command_awaiting_crd_access_code_ = false;
-  std::move(code_success_callback_).Run(*access_code);
-  error_callback_.Reset();
-}
-
-void CRDHostDelegate::CloseChannel(const std::string& error_message) {
-  CRD_LOG(ERROR) << "CRD Host closed channel" << error_message;
-  command_awaiting_crd_access_code_ = false;
-
-  if (error_callback_) {
-    std::move(error_callback_)
-        .Run(DeviceCommandStartCRDSessionJob::FAILURE_CRD_HOST_ERROR,
-             error_message);
-  }
-  code_success_callback_.Reset();
-  ShutdownHost();
-}
-
-void CRDHostDelegate::SendMessageToHost(const std::string& type,
-                                        base::Value& params) {
-  CRD_DVLOG(1) << "Sending message of type '" << type << "' to CRD host.";
-  std::string message_json;
-  params.SetKey(remoting::kMessageType, base::Value(type));
-  base::JSONWriter::Write(params, &message_json);
-  base::ThreadTaskRunnerHandle::Get()->PostTask(
-      FROM_HERE, base::BindOnce(&CRDHostDelegate::DoSendMessage,
-                                weak_factory_.GetWeakPtr(), message_json));
-}
-
-void CRDHostDelegate::DoSendMessage(const std::string& json) {
-  if (!host_)
-    return;
-  host_->OnMessage(json);
-}
-
-void CRDHostDelegate::OnProtocolBroken(const std::string& message) {
-  CRD_LOG(ERROR) << "Error communicating with CRD Host : " << message;
-  command_awaiting_crd_access_code_ = false;
-
-  std::move(error_callback_)
-      .Run(DeviceCommandStartCRDSessionJob::FAILURE_CRD_HOST_ERROR, message);
-  code_success_callback_.Reset();
-  ShutdownHost();
-}
-
-void CRDHostDelegate::ShutdownHost() {
-  if (!host_)
-    return;
-  base::ThreadTaskRunnerHandle::Get()->PostTask(
-      FROM_HERE, base::BindOnce(&CRDHostDelegate::DoShutdownHost,
-                                weak_factory_.GetWeakPtr()));
-}
-
-void CRDHostDelegate::DoShutdownHost() {
-  host_.reset();
+  active_session_->Start(*remoting_service_);
 }
 
 }  // namespace policy
diff --git a/chrome/browser/ash/policy/remote_commands/crd_host_delegate.h b/chrome/browser/ash/policy/remote_commands/crd_host_delegate.h
index 9d49d7d..5b1c113 100644
--- a/chrome/browser/ash/policy/remote_commands/crd_host_delegate.h
+++ b/chrome/browser/ash/policy/remote_commands/crd_host_delegate.h
@@ -6,40 +6,45 @@
 #define CHROME_BROWSER_ASH_POLICY_REMOTE_COMMANDS_CRD_HOST_DELEGATE_H_
 
 #include <memory>
-#include <string>
 
 #include "base/callback_forward.h"
-#include "base/macros.h"
-#include "base/time/time.h"
-#include "base/values.h"
 #include "chrome/browser/ash/policy/remote_commands/device_command_start_crd_session_job.h"
-#include "extensions/browser/api/messaging/native_message_host.h"
+#include "mojo/public/cpp/bindings/pending_receiver.h"
+#include "remoting/host/chromeos/chromeos_enterprise_params.h"
+#include "remoting/host/mojom/remote_support.mojom-forward.h"
 
 namespace policy {
 
 // Delegate that will start a session with the CRD native host.
 // Will keep the session alive and active as long as this class lives.
 // Deleting this class object will forcefully interrupt the active CRD session.
-class CRDHostDelegate : public DeviceCommandStartCRDSessionJob::Delegate,
-                        public extensions::NativeMessageHost::Client {
+class CrdHostDelegate : public DeviceCommandStartCRDSessionJob::Delegate {
  public:
-  class NativeMessageHostFactory {
+  // Proxy class to establish a connection with the Remoting service.
+  // Overwritten in unittests to inject a test service.
+  class RemotingServiceProxy {
    public:
-    virtual ~NativeMessageHostFactory() = default;
+    virtual ~RemotingServiceProxy() = default;
 
-    virtual std::unique_ptr<extensions::NativeMessageHost>
-    CreateNativeMessageHostHost() = 0;
+    using StartSessionCallback = base::OnceCallback<void(
+        remoting::mojom::StartSupportSessionResponsePtr response)>;
+
+    // Start a new remote support session. |callback| is
+    // called with the result.
+    virtual void StartSession(
+        remoting::mojom::SupportSessionParamsPtr params,
+        const remoting::ChromeOsEnterpriseParams& enterprise_params,
+        StartSessionCallback callback) = 0;
   };
 
-  CRDHostDelegate();
-  explicit CRDHostDelegate(std::unique_ptr<NativeMessageHostFactory> factory);
+  CrdHostDelegate();
+  explicit CrdHostDelegate(
+      std::unique_ptr<RemotingServiceProxy> remoting_service);
+  CrdHostDelegate(const CrdHostDelegate&) = delete;
+  CrdHostDelegate& operator=(const CrdHostDelegate&) = delete;
+  ~CrdHostDelegate() override;
 
-  CRDHostDelegate(const CRDHostDelegate&) = delete;
-  CRDHostDelegate& operator=(const CRDHostDelegate&) = delete;
-
-  ~CRDHostDelegate() override;
-
-  // DeviceCommandStartCRDSessionJob::Delegate:
+  // DeviceCommandStartCRDSessionJob::Delegate implementation:
   bool HasActiveSession() const override;
   void TerminateSession(base::OnceClosure callback) override;
   void StartCRDHostAndGetCode(
@@ -48,55 +53,11 @@
       DeviceCommandStartCRDSessionJob::ErrorCallback error_callback) override;
 
  private:
-  // extensions::NativeMessageHost::Client:
-  // Invoked when native host sends a message
-  void PostMessageFromNativeHost(const std::string& message) override;
-  void CloseChannel(const std::string& error_message) override;
+  class CrdHostSession;
 
-  void HandleNativeHostMessage(const std::string& type,
-                               const base::Value& message);
-  void HandleNativeHostStateChangeMessage(const std::string& state,
-                                          const base::Value& message);
-
-  // Sends message to host in separate task.
-  void SendMessageToHost(const std::string& type, base::Value& params);
-  // Actually sends message to host.
-  void DoSendMessage(const std::string& json);
-  void OnProtocolBroken(const std::string& message);
-  // Shuts down host in a separate task.
-  void ShutdownHost();
-  // Actually shuts down a host.
-  void DoShutdownHost();
-
-  // Handlers for messages from host
-  void OnHelloResponse();
-  void OnDisconnectResponse();
-
-  void OnConnectionError(const std::string& error_reason);
-  void OnStateRemoteConnected(const base::Value& message);
-  void OnStateRemoteDisconnected(const std::string& disconnect_reason);
-  void OnStateReceivedAccessCode(const base::Value& message);
-
-  std::unique_ptr<NativeMessageHostFactory> factory_;
-
-  DeviceCommandStartCRDSessionJob::AccessCodeCallback code_success_callback_;
-  DeviceCommandStartCRDSessionJob::ErrorCallback error_callback_;
-
-  std::unique_ptr<extensions::NativeMessageHost> host_;
-
-  // Filled structure with parameters for "connect" message.
-  base::Value connect_params_;
-
-  // Determines actions when receiving messages from CRD host,
-  // if command is still running (no error / access code), then
-  // callbacks have to be called.
-  bool command_awaiting_crd_access_code_;
-  // True if remote session was established.
-  bool remote_connected_;
-
-  base::WeakPtrFactory<CRDHostDelegate> weak_factory_{this};
+  std::unique_ptr<RemotingServiceProxy> remoting_service_;
+  std::unique_ptr<CrdHostSession> active_session_;
 };
-
 }  // namespace policy
 
 #endif  // CHROME_BROWSER_ASH_POLICY_REMOTE_COMMANDS_CRD_HOST_DELEGATE_H_
diff --git a/chrome/browser/ash/policy/remote_commands/crd_host_delegate_unittest.cc b/chrome/browser/ash/policy/remote_commands/crd_host_delegate_unittest.cc
index b429cfc01..bd377123 100644
--- a/chrome/browser/ash/policy/remote_commands/crd_host_delegate_unittest.cc
+++ b/chrome/browser/ash/policy/remote_commands/crd_host_delegate_unittest.cc
@@ -5,17 +5,15 @@
 #include "chrome/browser/ash/policy/remote_commands/crd_host_delegate.h"
 
 #include "base/bind.h"
-#include "base/json/json_reader.h"
-#include "base/json/json_writer.h"
-#include "base/location.h"
-#include "base/memory/weak_ptr.h"
+#include "base/callback.h"
 #include "base/run_loop.h"
-#include "base/strings/stringprintf.h"
-#include "base/test/bind.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_future.h"
-#include "base/threading/thread_task_runner_handle.h"
-#include "remoting/host/it2me/it2me_constants.h"
+#include "base/test/test_timeouts.h"
+#include "chromeos/crosapi/mojom/remoting.mojom.h"
+#include "mojo/public/cpp/bindings/receiver.h"
+#include "mojo/public/cpp/bindings/remote.h"
+#include "remoting/host/mojom/remote_support.mojom.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -23,597 +21,416 @@
 
 namespace {
 
-using ::testing::HasSubstr;
-using SessionParameters = CRDHostDelegate::SessionParameters;
-using base::test::TestFuture;
+using SessionParameters =
+    DeviceCommandStartCRDSessionJob::Delegate::SessionParameters;
+using StartSupportSessionCallback =
+    crosapi::mojom::Remoting::StartSupportSessionCallback;
+using remoting::mojom::StartSupportSessionResponse;
+using remoting::mojom::StartSupportSessionResponsePtr;
+using remoting::mojom::SupportHostObserver;
+using remoting::mojom::SupportSessionParamsPtr;
 
-std::string FindStringKey(const base::Value& dictionary,
-                          const std::string& key) {
-  const std::string* result = dictionary.FindStringKey(key);
-  if (result)
-    return *result;
-
-  return base::StringPrintf("Key '%s' not found", key.c_str());
+// Returns a valid response that can be sent to a |StartSupportSessionCallback|.
+StartSupportSessionResponsePtr AnyResponse() {
+  // Note we return an error response as the success response requires us to
+  // bind an observer (|SupportHostObserver|).
+  return StartSupportSessionResponse::NewSupportSessionError(
+      remoting::mojom::StartSupportSessionError::kExistingAdminSession);
 }
 
-#define EXPECT_STRING_KEY(dictionary, key, value)    \
-  ({                                                 \
-    EXPECT_EQ(FindStringKey(dictionary, key), value) \
-        << "Wrong value for key '" << key << "'";    \
-  })
+// Helper action that can be used in `EXPECT_CALL(...).WillOnce(<action>)`
+// and which will store the `SupportSessionParamsPtr` argument in the given
+// output parameter.
+//
+// Note this is very similar to ::testing::SaveArg(), but we can't use that
+// because:
+//     1) ::testing::SaveArg() does not support move-only arguments.
+//     2) the callback must be invoked (because that's required by mojom).
+auto SaveParamAndInvokeCallback(SupportSessionParamsPtr* output) {
+  return [output](SupportSessionParamsPtr params,
+                  const remoting::ChromeOsEnterpriseParams& enterprise_params,
+                  StartSupportSessionCallback callback) {
+    *output = std::move(params);
+    std::move(callback).Run(AnyResponse());
+  };
+}
 
-#define EXPECT_BOOL_KEY(dictionary, key, value)                            \
-  ({                                                                       \
-    absl::optional<bool> value_maybe = dictionary.FindBoolKey(key);        \
-    EXPECT_TRUE(value_maybe.has_value()) << "Missing key '" << key << "'"; \
-    EXPECT_EQ(value_maybe.value_or(false), value)                          \
-        << "Wrong value for key '" << key << "'";                          \
-  })
+auto SaveParamAndInvokeCallback(remoting::ChromeOsEnterpriseParams* output) {
+  return [output](SupportSessionParamsPtr params,
+                  const remoting::ChromeOsEnterpriseParams& enterprise_params,
+                  StartSupportSessionCallback callback) {
+    *output = enterprise_params;
+    std::move(callback).Run(AnyResponse());
+  };
+}
 
-#define EXPECT_TYPE(dictionary, value) \
-  EXPECT_STRING_KEY(dictionary, remoting::kMessageType, value)
-
-#define EXPECT_NO_CALLS(args...) EXPECT_CALL(args).Times(0);
-
-// Builder class that constructs a message to send to the native host.
-class Message {
+class RemotingServiceMock : public CrdHostDelegate::RemotingServiceProxy {
  public:
-  Message() = default;
-  Message(const Message&) = delete;
-  Message& operator=(const Message&) = delete;
-  ~Message() = default;
-
-  Message& WithType(const std::string& type) {
-    return WithString(remoting::kMessageType, type);
+  RemotingServiceMock() {
+    ON_CALL(*this, StartSession)
+        .WillByDefault(
+            [&](SupportSessionParamsPtr,
+                const remoting::ChromeOsEnterpriseParams& enterprise_params,
+                StartSupportSessionCallback callback) {
+              // A mojom callback *must* be called, so we will call it here
+              // by default.
+              std::move(callback).Run(AnyResponse());
+            });
   }
+  RemotingServiceMock(const RemotingServiceMock&) = delete;
+  RemotingServiceMock& operator=(const RemotingServiceMock&) = delete;
+  ~RemotingServiceMock() override = default;
 
-  Message& WithState(const std::string& state) {
-    return WithString(remoting::kState, state);
-  }
-
-  Message& WithString(const std::string& key, const std::string& value) {
-    result.SetStringKey(key, value);
-    return *this;
-  }
-  Message& WithInt(const std::string& key, int value) {
-    result.SetIntKey(key, value);
-    return *this;
-  }
-
-  base::Value Build() { return std::move(result); }
-
- private:
-  base::Value result{base::Value::Type::DICTIONARY};
+  MOCK_METHOD(void,
+              StartSession,
+              (SupportSessionParamsPtr params,
+               const remoting::ChromeOsEnterpriseParams& enterprise_params,
+               StartSessionCallback callback));
 };
 
-// Stub implementation of the |NativeMessageHost| which allows the test to wait
-// for messages to the host and to send replies to the client.
-// The implementation is strict, meaning the test will fail if the client sends
-// a message that the test does not handle through a |WaitFor...| call.
-class NativeMessageHostStub : public extensions::NativeMessageHost {
+// Wrapper around the |RemotingServiceMock|, solving the lifetime issue
+// where this wrapper is owned by the |CrdHostDelegate|, but we want
+// to be able to access the |RemotingServiceMock| from our tests.
+class RemotingServiceWrapper : public CrdHostDelegate::RemotingServiceProxy {
  public:
-  NativeMessageHostStub() = default;
-  NativeMessageHostStub(const NativeMessageHostStub&) = delete;
-  NativeMessageHostStub& operator=(const NativeMessageHostStub&) = delete;
-  ~NativeMessageHostStub() override {
-    EXPECT_FALSE(last_message_->IsReady())
-        << "Test finishes without handling a message: " << last_message_->Get();
-  }
+  explicit RemotingServiceWrapper(RemotingServiceProxy* implementation)
+      : implementation_(*implementation) {}
+  RemotingServiceWrapper(const RemotingServiceWrapper&) = delete;
+  RemotingServiceWrapper& operator=(const RemotingServiceWrapper&) = delete;
+  ~RemotingServiceWrapper() override = default;
 
-  // extensions::NativeMessageHost implementation:
-  void OnMessage(const std::string& message) override {
-    EXPECT_FALSE(last_message_->IsReady())
-        << "Unhandled message: " << last_message_->Get();
-
-    last_message_->SetValue(message);
-  }
-
-  void Start(Client* client) override {
-    client_ = client;
-    is_started_.SetValue(true);
-  }
-  scoped_refptr<base::SingleThreadTaskRunner> task_runner() const override {
-    return base::ThreadTaskRunnerHandle::Get();
-  }
-
-  void WaitForStart() {
-    if (client_)
-      return;  // Start has already been called
-
-    EXPECT_TRUE(is_started_.Wait()) << "Timeout waiting for start.";
-  }
-
-  void WaitForHello() { WaitForMessageOfType("hello"); }
-
-  // Wait until a message is received, checks the type and returns the message.
-  base::Value WaitForMessageOfType(const std::string& type) {
-    EXPECT_TRUE(last_message_->Wait())
-        << "Timeout waiting for message of type '" << type.c_str() << "'";
-
-    std::string message_str = last_message_->Get();
-
-    // Prepare for our next message.
-    last_message_ = std::make_unique<TestFuture<std::string>>();
-
-    absl::optional<base::Value> message = base::JSONReader::Read(message_str);
-    if (!message) {
-      ADD_FAILURE() << "Malformed JSON message: " << message_str;
-      base::Value dummy_message(base::Value::Type::DICTIONARY);
-      return dummy_message;
-    }
-
-    EXPECT_TYPE(message.value(), type);
-    return std::move(message.value());
-  }
-
-  bool has_message() const { return last_message_->IsReady(); }
-
-  void PostMessageOfType(const std::string& type) {
-    PostMessage(Message().WithType(type));
-  }
-
-  void PostMessage(Message& builder) { PostMessage(builder.Build()); }
-
-  void PostMessage(const base::Value& message) {
-    std::string message_string;
-    base::JSONWriter::Write(message, &message_string);
-    client().PostMessageFromNativeHost(message_string);
-  }
-
-  void HandleHandshake() {
-    WaitForMessageOfType(remoting::kHelloMessage);
-    PostMessageOfType(remoting::kHelloResponse);
-    WaitForMessageOfType(remoting::kConnectMessage);
-    PostMessageOfType(remoting::kConnectResponse);
-  }
-
-  // Return the client passed to Start()
-  Client& client() {
-    DCHECK(client_);
-    return *client_;
-  }
-
-  // True if the host was destroyed. Note that this only destroys the
-  // wrapper, |this| remains valid (so it is safe to call this method).
-  bool is_destroyed() const { return is_destroyed_; }
-  void MarkAsDestroyed() { is_destroyed_ = true; }
-
- private:
-  Client* client_ = nullptr;
-  TestFuture<bool> is_started_;
-
-  // Waiter for the next message from the CRD Host.
-  // Will never be null.
-  std::unique_ptr<TestFuture<std::string>> last_message_ =
-      std::make_unique<TestFuture<std::string>>();
-
-  bool is_destroyed_ = false;
-};
-
-class NativeMessageHostWrapper : public extensions::NativeMessageHost {
- public:
-  explicit NativeMessageHostWrapper(NativeMessageHostStub* impl)
-      : impl_(*impl) {}
-  NativeMessageHostWrapper(const NativeMessageHostWrapper&) = delete;
-  NativeMessageHostWrapper& operator=(const NativeMessageHostWrapper&) = delete;
-  ~NativeMessageHostWrapper() override { impl_.MarkAsDestroyed(); }
-
-  // extensionsNativeMessageHost implementation:
-  void OnMessage(const std::string& message) override {
-    impl_.OnMessage(message);
-  }
-  void Start(Client* client) override { impl_.Start(client); }
-  scoped_refptr<base::SingleThreadTaskRunner> task_runner() const override {
-    return impl_.task_runner();
+  void StartSession(SupportSessionParamsPtr params,
+                    const remoting::ChromeOsEnterpriseParams& enterprise_params,
+                    StartSessionCallback callback) override {
+    implementation_.StartSession(std::move(params), enterprise_params,
+                                 std::move(callback));
   }
 
  private:
-  NativeMessageHostStub& impl_;
+  RemotingServiceProxy& implementation_;
 };
 
-class NativeMessageHostFactoryStub
-    : public CRDHostDelegate::NativeMessageHostFactory {
- public:
-  explicit NativeMessageHostFactoryStub(NativeMessageHostStub* host)
-      : host_(*host) {}
-  NativeMessageHostFactoryStub(const NativeMessageHostFactoryStub&) = delete;
-  NativeMessageHostFactoryStub& operator=(const NativeMessageHostFactoryStub&) =
-      delete;
-  ~NativeMessageHostFactoryStub() override = default;
-
-  // CRDHostDelegate::NativeMessageHostFactory implementation:
-  std::unique_ptr<extensions::NativeMessageHost> CreateNativeMessageHostHost()
-      override {
-    return std::make_unique<NativeMessageHostWrapper>(&host_);
-  }
-
- private:
-  NativeMessageHostStub& host_;
-};
-
-// Represents the response to the CRD host request, which is either an
-// access code or an error message.
+// Represents the response to the CRD host request, which is
+// either an access code or an error message.
 class Response {
  public:
-  Response() = default;
-  Response(const Response&) = delete;
-  Response& operator=(const Response&) = delete;
+  static Response Success(const std::string& access_code) {
+    return Response(access_code);
+  }
+
+  static Response Error(DeviceCommandStartCRDSessionJob::ResultCode error_code,
+                        const std::string& error_message) {
+    return Response(error_code, error_message);
+  }
+
+  Response(Response&&) = default;
+  Response& operator=(Response&&) = default;
   ~Response() = default;
 
   bool HasAccessCode() const { return access_code_.has_value(); }
   bool HasError() const { return error_message_.has_value(); }
 
   std::string error_message() const {
-    EXPECT_FALSE(HasAccessCode());
-    EXPECT_TRUE(HasError());
     return error_message_.value_or("<no error received>");
   }
 
+  DeviceCommandStartCRDSessionJob::ResultCode error_code() const {
+    return error_code_.value_or(
+        DeviceCommandStartCRDSessionJob::ResultCode::SUCCESS);
+  }
+
   std::string access_code() const {
-    EXPECT_TRUE(HasAccessCode());
-    EXPECT_FALSE(HasError());
     return access_code_.value_or("<no access code received>");
   }
 
-  DeviceCommandStartCRDSessionJob::AccessCodeCallback GetSuccessCallback() {
-    return base::BindOnce(&Response::OnSuccess, weak_factory_.GetWeakPtr());
-  }
-
-  DeviceCommandStartCRDSessionJob::ErrorCallback GetErrorCallback() {
-    return base::BindOnce(&Response::OnError, weak_factory_.GetWeakPtr());
-  }
-
  private:
-  void OnSuccess(const std::string& access_code) {
-    EXPECT_FALSE(HasResponse());
-    access_code_ = access_code;
-    run_loop_.Quit();
-  }
-
-  void OnError(DeviceCommandStartCRDSessionJob::ResultCode error_code,
-               const std::string& error_message) {
-    EXPECT_FALSE(HasResponse());
-    error_message_ = error_message;
-    error_code_ = error_code;
-    run_loop_.Quit();
-  }
-
-  bool HasResponse() const { return HasAccessCode() || HasError(); }
+  explicit Response(const std::string& access_code)
+      : access_code_(access_code) {}
+  Response(DeviceCommandStartCRDSessionJob::ResultCode error_code,
+           const std::string& error_message)
+      : error_code_(error_code), error_message_(error_message) {}
 
   absl::optional<std::string> access_code_;
   absl::optional<DeviceCommandStartCRDSessionJob::ResultCode> error_code_;
   absl::optional<std::string> error_message_;
-
-  base::RunLoop run_loop_;
-  base::WeakPtrFactory<Response> weak_factory_{this};
 };
 
 }  // namespace
 
-class CRDHostDelegateTest : public ::testing::Test {
+class CrdHostDelegateTest : public ::testing::Test {
  public:
-  CRDHostDelegateTest() = default;
-  CRDHostDelegateTest(const CRDHostDelegateTest&) = delete;
-  CRDHostDelegateTest& operator=(const CRDHostDelegateTest&) = delete;
-  ~CRDHostDelegateTest() override = default;
+  CrdHostDelegateTest() = default;
+  CrdHostDelegateTest(const CrdHostDelegateTest&) = delete;
+  CrdHostDelegateTest& operator=(const CrdHostDelegateTest&) = delete;
+  ~CrdHostDelegateTest() override = default;
 
-  void StartCRDHostAndGetCode(
-      const SessionParameters& parameters = SessionParameters()) {
-    delegate().StartCRDHostAndGetCode(parameters,
-                                      response_.GetSuccessCallback(),
-                                      response_.GetErrorCallback());
+  RemotingServiceMock& remoting_service() { return remoting_service_; }
+  CrdHostDelegate& delegate() { return delegate_; }
+
+  auto success_callback() {
+    return base::BindOnce(
+        [](base::OnceCallback<void(Response)> setter,
+           const std::string& access_code) {
+          std::move(setter).Run(Response::Success(access_code));
+        },
+        result_.GetCallback());
   }
 
-  // Helper object representing the response, which is either the access code
-  // or an error message.
-  Response& response() { return response_; }
+  auto error_callback() {
+    return base::BindOnce(
+        [](base::OnceCallback<void(Response)> setter,
+           DeviceCommandStartCRDSessionJob::ResultCode error_code,
+           const std::string& error_message) {
+          std::move(setter).Run(Response::Error(error_code, error_message));
+        },
+        result_.GetCallback());
+  }
 
-  void RunUntilIdle() { base::RunLoop().RunUntilIdle(); }
+  // Wait until either the success or error callback is invoked,
+  // and return the response.
+  Response WaitForResponse() { return result_.Take(); }
 
-  CRDHostDelegate& delegate() { return delegate_; }
-  NativeMessageHostStub& host() { return host_; }
+  // Call delegate().StartCRDHostAndGetCode() and wait until the
+  // |SupportHostObserver| is bound.
+  // This observer is used by the CRD host code to inform our delegate of status
+  // updates, and is returned by this method so we can spoof these status
+  // updates during our tests.
+  SupportHostObserver& StartCrdHostAndBindObserver() {
+    EXPECT_CALL(remoting_service(), StartSession)
+        .WillOnce(
+            [&](SupportSessionParamsPtr params,
+                const remoting::ChromeOsEnterpriseParams& enterprise_params,
+                StartSupportSessionCallback callback) {
+              auto response = StartSupportSessionResponse::NewObserver(
+                  observer_.BindNewPipeAndPassReceiver());
+              std::move(callback).Run(std::move(response));
+            });
+
+    delegate().StartCRDHostAndGetCode(SessionParameters{}, success_callback(),
+                                      error_callback());
+
+    EXPECT_TRUE(observer_.is_bound()) << "StartSession() was not called";
+    return *observer_;
+  }
+
+  void FlushForTesting() { observer_.FlushForTesting(); }
 
  private:
   base::test::SingleThreadTaskEnvironment environment_;
 
-  NativeMessageHostStub host_;
-  CRDHostDelegate delegate_{
-      std::make_unique<NativeMessageHostFactoryStub>(&host_)};
-
-  Response response_;
+  base::test::TestFuture<Response> result_;
+  mojo::Remote<SupportHostObserver> observer_;
+  RemotingServiceMock remoting_service_;
+  CrdHostDelegate delegate_{
+      std::make_unique<RemotingServiceWrapper>(&remoting_service_)};
 };
 
-TEST_F(CRDHostDelegateTest, ShouldStartNativeMessageHostAndSendHello) {
-  StartCRDHostAndGetCode();
-  host().WaitForStart();
-  host().WaitForMessageOfType(remoting::kHelloMessage);
-}
-
-TEST_F(CRDHostDelegateTest, ShouldErrorOutIfNativeHostSendsInvalidResponse) {
-  StartCRDHostAndGetCode();
-  host().WaitForHello();
-
-  host().client().PostMessageFromNativeHost("invalid message");
-  RunUntilIdle();
-
-  EXPECT_THAT(response().error_message(), HasSubstr("invalid JSON"));
-}
-
-TEST_F(CRDHostDelegateTest, ShouldDestroyHostOnError) {
-  StartCRDHostAndGetCode();
-  host().WaitForHello();
-
-  host().client().PostMessageFromNativeHost("invalid message");
-  RunUntilIdle();
-
-  EXPECT_TRUE(host().is_destroyed());
-}
-
-TEST_F(CRDHostDelegateTest,
-       ShouldErrorOutIfNativeHostResponseIsNotADictionary) {
-  StartCRDHostAndGetCode();
-  host().WaitForHello();
-
-  host().client().PostMessageFromNativeHost(R"([ "valid json but an array" ])");
-  RunUntilIdle();
-
-  EXPECT_THAT(response().error_message(), HasSubstr("not a dictionary"));
-}
-
-TEST_F(CRDHostDelegateTest, ShouldErrorOutIfNativeHostResponseHasNoType) {
-  StartCRDHostAndGetCode();
-  host().WaitForHello();
-
-  host().client().PostMessageFromNativeHost(R"({ "key": "value" })");
-  RunUntilIdle();
-
-  EXPECT_THAT(response().error_message(), HasSubstr("without type"));
-}
-
-TEST_F(CRDHostDelegateTest, ShouldSendConnectMessageOnHelloResponse) {
-  StartCRDHostAndGetCode();
-  host().WaitForHello();
-  host().PostMessageOfType("helloResponse");
-
-  host().WaitForMessageOfType(remoting::kConnectMessage);
-}
-
-TEST_F(CRDHostDelegateTest, ShouldSendAuthTokenInConnectMessage) {
+TEST_F(CrdHostDelegateTest, ShouldPassOAuthTokenToRemotingService) {
   SessionParameters parameters;
-  parameters.oauth_token = "the-oauth-token";
-  StartCRDHostAndGetCode(parameters);
+  parameters.oauth_token = "<the-oauth-token>";
 
-  host().WaitForHello();
-  host().PostMessageOfType("helloResponse");
+  SupportSessionParamsPtr actual_parameters;
+  EXPECT_CALL(remoting_service(), StartSession)
+      .WillOnce(SaveParamAndInvokeCallback(&actual_parameters));
 
-  base::Value response = host().WaitForMessageOfType(remoting::kConnectMessage);
-  EXPECT_STRING_KEY(response, remoting::kAuthServiceWithToken,
-                    "oauth2:the-oauth-token");
+  delegate().StartCRDHostAndGetCode(parameters, success_callback(),
+                                    error_callback());
+
+  ASSERT_FALSE(actual_parameters.is_null());
+  EXPECT_EQ(actual_parameters->oauth_access_token, "oauth2:<the-oauth-token>");
 }
 
-TEST_F(CRDHostDelegateTest, ShouldSendUserNameInConnectMessage) {
+TEST_F(CrdHostDelegateTest, ShouldPassUserNameToRemotingService) {
   SessionParameters parameters;
-  parameters.user_name = "the-user-name";
-  StartCRDHostAndGetCode(parameters);
+  parameters.user_name = "<the-user-name>";
 
-  host().WaitForHello();
-  host().PostMessageOfType("helloResponse");
+  SupportSessionParamsPtr actual_parameters;
+  EXPECT_CALL(remoting_service(), StartSession)
+      .WillOnce(SaveParamAndInvokeCallback(&actual_parameters));
 
-  base::Value response = host().WaitForMessageOfType(remoting::kConnectMessage);
-  EXPECT_STRING_KEY(response, remoting::kUserName, "the-user-name");
+  delegate().StartCRDHostAndGetCode(parameters, success_callback(),
+                                    error_callback());
+
+  ASSERT_FALSE(actual_parameters.is_null());
+  EXPECT_EQ(actual_parameters->user_name, "<the-user-name>");
 }
 
-TEST_F(CRDHostDelegateTest, ShouldSendTerminateUponInputTrueInConnectMessage) {
-  SessionParameters parameters;
-  parameters.terminate_upon_input = true;
-  StartCRDHostAndGetCode(parameters);
-
-  host().WaitForHello();
-  host().PostMessageOfType("helloResponse");
-
-  base::Value response = host().WaitForMessageOfType(remoting::kConnectMessage);
-  EXPECT_BOOL_KEY(response, remoting::kTerminateUponInput, true);
-}
-
-TEST_F(CRDHostDelegateTest, ShouldSendTerminateUponInputFalseInConnectMessage) {
-  SessionParameters parameters;
-  parameters.terminate_upon_input = false;
-  StartCRDHostAndGetCode(parameters);
-
-  host().WaitForHello();
-  host().PostMessageOfType("helloResponse");
-
-  base::Value response = host().WaitForMessageOfType(remoting::kConnectMessage);
-  EXPECT_BOOL_KEY(response, remoting::kTerminateUponInput, false);
-}
-
-TEST_F(CRDHostDelegateTest,
-       ShouldSendShowConfirmationDialogTrueInConnectMessage) {
+TEST_F(CrdHostDelegateTest,
+       ShouldPassShowConfirmationDialogTrueToRemotingService) {
   SessionParameters parameters;
   parameters.show_confirmation_dialog = true;
-  StartCRDHostAndGetCode(parameters);
 
-  host().WaitForHello();
-  host().PostMessageOfType("helloResponse");
+  remoting::ChromeOsEnterpriseParams actual_parameters;
+  EXPECT_CALL(remoting_service(), StartSession)
+      .WillOnce(SaveParamAndInvokeCallback(&actual_parameters));
 
-  base::Value response = host().WaitForMessageOfType(remoting::kConnectMessage);
-  EXPECT_BOOL_KEY(response, remoting::kSuppressNotifications, false);
-  EXPECT_BOOL_KEY(response, remoting::kSuppressUserDialogs, false);
+  delegate().StartCRDHostAndGetCode(parameters, success_callback(),
+                                    error_callback());
+
+  EXPECT_EQ(actual_parameters.suppress_notifications, false);
+  EXPECT_EQ(actual_parameters.suppress_user_dialogs, false);
 }
 
-TEST_F(CRDHostDelegateTest,
-       ShouldSendShowConfirmationDialogFalseInConnectMessage) {
+TEST_F(CrdHostDelegateTest,
+       ShouldPassShowConfirmationDialogFalseToRemotingService) {
   SessionParameters parameters;
   parameters.show_confirmation_dialog = false;
-  StartCRDHostAndGetCode(parameters);
 
-  host().WaitForHello();
-  host().PostMessageOfType("helloResponse");
+  remoting::ChromeOsEnterpriseParams actual_parameters;
+  EXPECT_CALL(remoting_service(), StartSession)
+      .WillOnce(SaveParamAndInvokeCallback(&actual_parameters));
 
-  base::Value response = host().WaitForMessageOfType(remoting::kConnectMessage);
-  EXPECT_BOOL_KEY(response, remoting::kSuppressNotifications, true);
-  EXPECT_BOOL_KEY(response, remoting::kSuppressUserDialogs, true);
+  delegate().StartCRDHostAndGetCode(parameters, success_callback(),
+                                    error_callback());
+
+  EXPECT_EQ(actual_parameters.suppress_notifications, true);
+  EXPECT_EQ(actual_parameters.suppress_user_dialogs, true);
 }
 
-TEST_F(CRDHostDelegateTest, ShouldSetIsEnterpriseAdminUser) {
-  StartCRDHostAndGetCode();
+TEST_F(CrdHostDelegateTest,
+       ShouldPassTerminateUponInputFalseToRemotingService) {
+  SessionParameters parameters;
+  parameters.terminate_upon_input = false;
 
-  host().WaitForHello();
-  host().PostMessageOfType("helloResponse");
+  remoting::ChromeOsEnterpriseParams actual_parameters;
+  EXPECT_CALL(remoting_service(), StartSession)
+      .WillOnce(SaveParamAndInvokeCallback(&actual_parameters));
 
-  base::Value response = host().WaitForMessageOfType(remoting::kConnectMessage);
-  EXPECT_BOOL_KEY(response, remoting::kIsEnterpriseAdminUser, true);
+  delegate().StartCRDHostAndGetCode(parameters, success_callback(),
+                                    error_callback());
+
+  EXPECT_EQ(actual_parameters.terminate_upon_input, false);
 }
 
-TEST_F(CRDHostDelegateTest, ShouldSendAccessCodeToCallback) {
-  StartCRDHostAndGetCode();
-  host().HandleHandshake();
+TEST_F(CrdHostDelegateTest, ShouldPassTerminateUponInputTrueToRemotingService) {
+  SessionParameters parameters;
+  parameters.terminate_upon_input = true;
 
-  host().PostMessage(Message()
-                         .WithType(remoting::kHostStateChangedMessage)
-                         .WithState(remoting::kHostStateReceivedAccessCode)
-                         .WithString(remoting::kAccessCode, "<the-access-code>")
-                         .WithInt(remoting::kAccessCodeLifetime, 123));
-  RunUntilIdle();
+  remoting::ChromeOsEnterpriseParams actual_parameters;
+  EXPECT_CALL(remoting_service(), StartSession)
+      .WillOnce(SaveParamAndInvokeCallback(&actual_parameters));
 
-  EXPECT_EQ(response().access_code(), "<the-access-code>");
+  delegate().StartCRDHostAndGetCode(parameters, success_callback(),
+                                    error_callback());
+
+  EXPECT_EQ(actual_parameters.terminate_upon_input, true);
 }
 
-TEST_F(CRDHostDelegateTest, ShouldDisconnectTheHostIfASecondAccessCodeArrives) {
-  StartCRDHostAndGetCode();
-  host().HandleHandshake();
+TEST_F(CrdHostDelegateTest, ShouldReportErrorIfStartSessionReturnsError) {
+  EXPECT_CALL(remoting_service(), StartSession)
+      .WillOnce([](SupportSessionParamsPtr params,
+                   const remoting::ChromeOsEnterpriseParams& enterprise_params,
+                   StartSupportSessionCallback callback) {
+        auto response = StartSupportSessionResponse::NewSupportSessionError(
+            remoting::mojom::StartSupportSessionError::kExistingAdminSession);
+        std::move(callback).Run(std::move(response));
+      });
 
-  host().PostMessage(
-      Message()
-          .WithType(remoting::kHostStateChangedMessage)
-          .WithState(remoting::kHostStateReceivedAccessCode)
-          .WithString(remoting::kAccessCode, "<the-first-access-code>")
-          .WithInt(remoting::kAccessCodeLifetime, 123));
-  RunUntilIdle();
+  delegate().StartCRDHostAndGetCode(SessionParameters{}, success_callback(),
+                                    error_callback());
 
-  EXPECT_EQ(response().access_code(), "<the-first-access-code>");
-
-  host().PostMessage(
-      Message()
-          .WithType(remoting::kHostStateChangedMessage)
-          .WithState(remoting::kHostStateReceivedAccessCode)
-          .WithString(remoting::kAccessCode, "<the-second-access-code>")
-          .WithInt(remoting::kAccessCodeLifetime, 123));
-
-  host().WaitForMessageOfType(remoting::kDisconnectMessage);
+  Response response = WaitForResponse();
+  ASSERT_TRUE(response.HasError());
+  EXPECT_EQ(DeviceCommandStartCRDSessionJob::FAILURE_CRD_HOST_ERROR,
+            response.error_code());
 }
 
-TEST_F(CRDHostDelegateTest, ShouldErrorOutIfStateChangeHasNoStateField) {
-  StartCRDHostAndGetCode();
-  host().HandleHandshake();
+TEST_F(CrdHostDelegateTest, ShouldReturnAccessCode) {
+  SupportHostObserver& observer = StartCrdHostAndBindObserver();
 
-  host().PostMessage(Message().WithType(remoting::kHostStateChangedMessage));
-  RunUntilIdle();
+  observer.OnHostStateReceivedAccessCode("the-access-code",
+                                         base::TimeDelta::FromDays(1));
 
-  EXPECT_THAT(response().error_message(), HasSubstr("No state"));
+  Response response = WaitForResponse();
+  ASSERT_TRUE(response.HasAccessCode());
+  EXPECT_EQ("the-access-code", response.access_code());
 }
 
-TEST_F(CRDHostDelegateTest, ShouldDisconnectTheHostIfRemoteDisconnects) {
-  StartCRDHostAndGetCode();
-  host().HandleHandshake();
-  host().PostMessage(Message()
-                         .WithType(remoting::kHostStateChangedMessage)
-                         .WithState(remoting::kHostStateConnected));
+TEST_F(CrdHostDelegateTest,
+       ShouldReportErrorWhenHostStateChangesToDisconnected) {
+  SupportHostObserver& observer = StartCrdHostAndBindObserver();
 
-  host().PostMessage(
-      Message()
-          .WithType(remoting::kHostStateChangedMessage)
-          .WithState(remoting::kHostStateDisconnected)
-          .WithString(remoting::kDisconnectReason, "<the-disconnect-reason>"));
+  observer.OnHostStateDisconnected("the-disconnect-reason");
 
-  host().WaitForMessageOfType(remoting::kDisconnectMessage);
+  Response response = WaitForResponse();
+  ASSERT_TRUE(response.HasError());
+  EXPECT_EQ("host disconnected", response.error_message());
+  EXPECT_EQ(DeviceCommandStartCRDSessionJob::FAILURE_CRD_HOST_ERROR,
+            response.error_code());
 }
 
-TEST_F(CRDHostDelegateTest, ShouldIgnoreRemoveDisconnectBeforeRemoteConnect) {
-  StartCRDHostAndGetCode();
-  host().HandleHandshake();
+TEST_F(CrdHostDelegateTest,
+       ShouldReportErrorWhenRemotingServiceReportsPolicyError) {
+  SupportHostObserver& observer = StartCrdHostAndBindObserver();
 
-  host().PostMessage(
-      Message()
-          .WithType(remoting::kHostStateChangedMessage)
-          .WithState(remoting::kHostStateDisconnected)
-          .WithString(remoting::kDisconnectReason, "<the-disconnect-reason>"));
-  RunUntilIdle();
+  observer.OnPolicyError();
 
-  // The disconnect should be ignored and the host should just keep running.
-  EXPECT_FALSE(host().has_message());
-  EXPECT_FALSE(host().is_destroyed());
+  Response response = WaitForResponse();
+  ASSERT_TRUE(response.HasError());
+  EXPECT_EQ("policy error", response.error_message());
+  EXPECT_EQ(DeviceCommandStartCRDSessionJob::FAILURE_CRD_HOST_ERROR,
+            response.error_code());
 }
 
-TEST_F(CRDHostDelegateTest, ShouldDestroyHostIfHostDisconnects) {
-  StartCRDHostAndGetCode();
-  host().HandleHandshake();
-  // First send the access code, as the disconnect message is only expected
-  // after receiving the access code.
-  host().PostMessage(Message()
-                         .WithType(remoting::kHostStateChangedMessage)
-                         .WithState(remoting::kHostStateReceivedAccessCode)
-                         .WithString(remoting::kAccessCode, "<the-access-code>")
-                         .WithInt(remoting::kAccessCodeLifetime, 123));
+TEST_F(CrdHostDelegateTest,
+       ShouldReportErrorWhenRemotingServiceReportsInvalidDomainError) {
+  SupportHostObserver& observer = StartCrdHostAndBindObserver();
 
-  host().PostMessage(
-      Message()
-          .WithType(remoting::kDisconnectResponse)
-          .WithString(remoting::kDisconnectReason, "<the-disconnect-reason>"));
-  RunUntilIdle();
+  observer.OnInvalidDomainError();
 
-  EXPECT_TRUE(host().is_destroyed());
+  Response response = WaitForResponse();
+  ASSERT_TRUE(response.HasError());
+  EXPECT_EQ("invalid domain error", response.error_message());
+  EXPECT_EQ(DeviceCommandStartCRDSessionJob::FAILURE_CRD_HOST_ERROR,
+            response.error_code());
 }
 
-TEST_F(CRDHostDelegateTest, ShouldDestroyHostOnStateError) {
-  StartCRDHostAndGetCode();
-  host().WaitForHello();
+TEST_F(CrdHostDelegateTest,
+       ShouldReportErrorWhenRemotingServiceReportsStateError) {
+  SupportHostObserver& observer = StartCrdHostAndBindObserver();
 
-  host().PostMessage(
-      Message()
-          .WithType(remoting::kErrorMessage)
-          .WithString(remoting::kErrorMessageCode, "<the-error-code>"));
-  RunUntilIdle();
+  observer.OnHostStateError(123);
 
-  EXPECT_THAT(response().error_message(),
-              HasSubstr("CRD Connection Error: <the-error-code>"));
-
-  EXPECT_TRUE(host().is_destroyed());
+  Response response = WaitForResponse();
+  ASSERT_TRUE(response.HasError());
+  EXPECT_EQ("host state error", response.error_message());
+  EXPECT_EQ(DeviceCommandStartCRDSessionJob::FAILURE_CRD_HOST_ERROR,
+            response.error_code());
 }
 
-TEST_F(CRDHostDelegateTest, ShouldDestroyHostOnStateDomainError) {
-  StartCRDHostAndGetCode();
-  host().WaitForHello();
+TEST_F(CrdHostDelegateTest, HasActiveSessionShouldBeTrueWhenASessionIsStarted) {
+  EXPECT_FALSE(delegate().HasActiveSession());
 
-  host().PostMessage(Message()
-                         .WithType(remoting::kHostStateChangedMessage)
-                         .WithState(remoting::kHostStateDomainError));
-  RunUntilIdle();
+  delegate().StartCRDHostAndGetCode(SessionParameters{}, success_callback(),
+                                    error_callback());
 
-  EXPECT_THAT(response().error_message(),
-              HasSubstr("CRD Connection Error: INVALID_DOMAIN_ERROR"));
-
-  EXPECT_TRUE(host().is_destroyed());
+  EXPECT_TRUE(delegate().HasActiveSession());
 }
 
-TEST_F(CRDHostDelegateTest, ShouldIgnoreOtherStateValues) {
-  StartCRDHostAndGetCode();
-  host().WaitForHello();
+TEST_F(CrdHostDelegateTest, TerminateSessionShouldTerminateTheActiveSession) {
+  delegate().StartCRDHostAndGetCode(SessionParameters{}, success_callback(),
+                                    error_callback());
+  EXPECT_TRUE(delegate().HasActiveSession());
 
-  std::vector<std::string> ignored_states{
-      remoting::kHostStateStarting, remoting::kHostStateRequestedAccessCode,
-      remoting::kHostStateConnecting, "<unknown-state>"};
+  base::RunLoop terminate_callback;
+  delegate().TerminateSession(terminate_callback.QuitClosure());
 
-  for (const std::string& state : ignored_states) {
-    host().PostMessage(Message()
-                           .WithType(remoting::kHostStateChangedMessage)
-                           .WithState(state));
-    RunUntilIdle();
-    EXPECT_FALSE(host().has_message())
-        << "Unexpected response to state " << state;
-    EXPECT_FALSE(host().is_destroyed())
-        << "Unexpected shutdown due to state " << state;
-  }
+  terminate_callback.Run();
+  EXPECT_FALSE(delegate().HasActiveSession());
+}
+
+TEST_F(CrdHostDelegateTest, ShouldNotCrashIfCrdHostSendsMultipleResponses) {
+  SupportHostObserver& observer = StartCrdHostAndBindObserver();
+
+  observer.OnHostStateReceivedAccessCode("access-code",
+                                         base::TimeDelta::FromDays(1));
+  observer.OnHostStateStarting();
+  observer.OnHostStateDisconnected(absl::nullopt);
+  observer.OnHostStateError(1);
+  observer.OnPolicyError();
+  observer.OnInvalidDomainError();
+
+  FlushForTesting();
 }
 
 }  // namespace policy
diff --git a/chrome/browser/ash/policy/remote_commands/device_commands_factory_ash.cc b/chrome/browser/ash/policy/remote_commands/device_commands_factory_ash.cc
index 5c2aa378e..cc1d995a2 100644
--- a/chrome/browser/ash/policy/remote_commands/device_commands_factory_ash.cc
+++ b/chrome/browser/ash/policy/remote_commands/device_commands_factory_ash.cc
@@ -48,7 +48,7 @@
       return std::make_unique<DeviceCommandSetVolumeJob>();
     case em::RemoteCommand_Type_DEVICE_START_CRD_SESSION:
       return std::make_unique<DeviceCommandStartCRDSessionJob>(
-          GetCRDHostDelegate());
+          GetCrdHostDelegate());
     case em::RemoteCommand_Type_DEVICE_FETCH_STATUS:
       return std::make_unique<DeviceCommandFetchStatusJob>();
     case em::RemoteCommand_Type_DEVICE_WIPE_USERS:
@@ -74,9 +74,11 @@
   }
 }
 
-CRDHostDelegate* DeviceCommandsFactoryAsh::GetCRDHostDelegate() {
-  if (!crd_host_delegate_)
-    crd_host_delegate_ = std::make_unique<CRDHostDelegate>();
+DeviceCommandStartCRDSessionJob::Delegate*
+DeviceCommandsFactoryAsh::GetCrdHostDelegate() {
+  if (!crd_host_delegate_) {
+    crd_host_delegate_ = std::make_unique<CrdHostDelegate>();
+  }
   return crd_host_delegate_.get();
 }
 
diff --git a/chrome/browser/ash/policy/remote_commands/device_commands_factory_ash.h b/chrome/browser/ash/policy/remote_commands/device_commands_factory_ash.h
index d7cddd2f..6c68ff9 100644
--- a/chrome/browser/ash/policy/remote_commands/device_commands_factory_ash.h
+++ b/chrome/browser/ash/policy/remote_commands/device_commands_factory_ash.h
@@ -8,11 +8,11 @@
 #include <memory>
 
 #include "base/macros.h"
+#include "chrome/browser/ash/policy/remote_commands/device_command_start_crd_session_job.h"
 #include "components/policy/core/common/remote_commands/remote_commands_factory.h"
 
 namespace policy {
 
-class CRDHostDelegate;
 class DeviceCloudPolicyManagerAsh;
 
 class DeviceCommandsFactoryAsh : public RemoteCommandsFactory {
@@ -32,9 +32,9 @@
 
  private:
   DeviceCloudPolicyManagerAsh* policy_manager_;
-  std::unique_ptr<CRDHostDelegate> crd_host_delegate_;
+  std::unique_ptr<DeviceCommandStartCRDSessionJob::Delegate> crd_host_delegate_;
 
-  CRDHostDelegate* GetCRDHostDelegate();
+  DeviceCommandStartCRDSessionJob::Delegate* GetCrdHostDelegate();
 };
 
 }  // namespace policy
diff --git a/chrome/browser/ash/sync/app_settings_model_type_controller.cc b/chrome/browser/ash/sync/app_settings_model_type_controller.cc
index 8abeb68..90c59cf5 100644
--- a/chrome/browser/ash/sync/app_settings_model_type_controller.cc
+++ b/chrome/browser/ash/sync/app_settings_model_type_controller.cc
@@ -30,8 +30,7 @@
           /*allow_transport_mode=*/true),
       profile_(profile),
       sync_service_(sync_service) {
-  DCHECK(chromeos::features::IsSplitSettingsSyncEnabled() ||
-         chromeos::features::IsSyncSettingsCategorizationEnabled());
+  DCHECK(chromeos::features::IsSyncSettingsCategorizationEnabled());
   DCHECK(profile_);
   DCHECK(sync_service_);
   pref_registrar_.Init(profile_->GetPrefs());
diff --git a/chrome/browser/ash/sync/apps_model_type_controller.cc b/chrome/browser/ash/sync/apps_model_type_controller.cc
index 08f2330..abd83e2 100644
--- a/chrome/browser/ash/sync/apps_model_type_controller.cc
+++ b/chrome/browser/ash/sync/apps_model_type_controller.cc
@@ -30,8 +30,7 @@
     const base::RepeatingClosure& dump_stack,
     syncer::SyncService* sync_service,
     Profile* profile) {
-  DCHECK(chromeos::features::IsSplitSettingsSyncEnabled() ||
-         chromeos::features::IsSyncSettingsCategorizationEnabled());
+  DCHECK(chromeos::features::IsSyncSettingsCategorizationEnabled());
   // Create the bridge here so it can be used to construct forwarding delegates
   // passed to the superclass constructor.
   auto bridge = std::make_unique<SyncableServiceBasedBridge>(
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn
index 57474b5..f110b92 100644
--- a/chrome/browser/chromeos/BUILD.gn
+++ b/chrome/browser/chromeos/BUILD.gn
@@ -646,12 +646,8 @@
     "../ash/apps/apk_web_app_service.h",
     "../ash/apps/apk_web_app_service_factory.cc",
     "../ash/apps/apk_web_app_service_factory.h",
-    "../ash/apps/intent_helper/ash_intent_picker_helpers.cc",
-    "../ash/apps/intent_helper/ash_intent_picker_helpers.h",
     "../ash/apps/intent_helper/common_apps_navigation_throttle.cc",
     "../ash/apps/intent_helper/common_apps_navigation_throttle.h",
-    "../ash/apps/metrics/intent_handling_metrics.cc",
-    "../ash/apps/metrics/intent_handling_metrics.h",
     "../ash/arc/accessibility/accessibility_helper_instance_remote_proxy.cc",
     "../ash/arc/accessibility/accessibility_helper_instance_remote_proxy.h",
     "../ash/arc/accessibility/accessibility_info_data_wrapper.cc",
@@ -3707,7 +3703,6 @@
     "../ash/app_restore/full_restore_prefs_unittest.cc",
     "../ash/app_restore/full_restore_service_unittest.cc",
     "../ash/apps/apk_web_app_installer_unittest.cc",
-    "../ash/apps/metrics/intent_handling_metrics_unittest.cc",
     "../ash/arc/accessibility/accessibility_info_data_wrapper_unittest.cc",
     "../ash/arc/accessibility/accessibility_node_info_data_wrapper_unittest.cc",
     "../ash/arc/accessibility/arc_accessibility_helper_bridge_unittest.cc",
diff --git a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_apitest.cc b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_apitest.cc
index a35ca3f7..ecbf1f8 100644
--- a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_apitest.cc
+++ b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_apitest.cc
@@ -53,9 +53,9 @@
 class AutotestPrivateApiTest : public ExtensionApiTest {
  public:
   AutotestPrivateApiTest() {
-    // SplitSettingsSync makes an untitled Play Store icon appear in the shelf
-    // due to app pin syncing code. Sync isn't relevant to this test, so skip
-    // pinned app sync. https://crbug.com/1085597
+    // SyncSettingsCategorization makes an untitled Play Store icon appear in
+    // the shelf due to app pin syncing code. Sync isn't relevant to this test,
+    // so skip pinned app sync. https://crbug.com/1085597
     SkipPinnedAppsFromSyncForTest();
   }
 
diff --git a/chrome/browser/chromeos/extensions/file_manager/system_notification_manager.cc b/chrome/browser/chromeos/extensions/file_manager/system_notification_manager.cc
index ed7d4117..7c581fd 100644
--- a/chrome/browser/chromeos/extensions/file_manager/system_notification_manager.cc
+++ b/chrome/browser/chromeos/extensions/file_manager/system_notification_manager.cc
@@ -263,12 +263,13 @@
   if (file_manager_private::DriveSyncErrorEvent::Populate(event_arguments[0],
                                                           &sync_error)) {
     id = file_manager_private::ToString(sync_error.type);
+    GURL file_url(sync_error.file_url);
     switch (sync_error.type) {
       case file_manager_private::
           DRIVE_SYNC_ERROR_TYPE_DELETE_WITHOUT_PERMISSION:
         message = l10n_util::GetStringFUTF16(
             IDS_FILE_BROWSER_SYNC_DELETE_WITHOUT_PERMISSION_ERROR,
-            base::UTF8ToUTF16(event.event_url.ExtractFileName()));
+            base::UTF8ToUTF16(file_url.ExtractFileName()));
         notification = CreateNotification(id, title, message);
         break;
       case file_manager_private::DRIVE_SYNC_ERROR_TYPE_SERVICE_UNAVAILABLE:
@@ -279,7 +280,7 @@
       case file_manager_private::DRIVE_SYNC_ERROR_TYPE_NO_SERVER_SPACE:
         message = l10n_util::GetStringFUTF16(
             IDS_FILE_BROWSER_SYNC_NO_SERVER_SPACE,
-            base::UTF8ToUTF16(event.event_url.ExtractFileName()));
+            base::UTF8ToUTF16(file_url.ExtractFileName()));
         notification = CreateNotification(id, title, message);
         break;
       case file_manager_private::DRIVE_SYNC_ERROR_TYPE_NO_LOCAL_SPACE:
@@ -290,7 +291,7 @@
       case file_manager_private::DRIVE_SYNC_ERROR_TYPE_MISC:
         message = l10n_util::GetStringFUTF16(
             IDS_FILE_BROWSER_SYNC_MISC_ERROR,
-            base::UTF8ToUTF16(event.event_url.ExtractFileName()));
+            base::UTF8ToUTF16(file_url.ExtractFileName()));
         notification = CreateNotification(id, title, message);
         break;
       default:
diff --git a/chrome/browser/chromeos/extensions/file_manager/system_notification_manager_unittest.cc b/chrome/browser/chromeos/extensions/file_manager/system_notification_manager_unittest.cc
index caad732..0ae238d 100644
--- a/chrome/browser/chromeos/extensions/file_manager/system_notification_manager_unittest.cc
+++ b/chrome/browser/chromeos/extensions/file_manager/system_notification_manager_unittest.cc
@@ -901,6 +901,141 @@
 
 std::u16string kGoogleDrive = u"Google Drive";
 
+// Tests all the various error notifications.
+TEST_F(SystemNotificationManagerTest, Errors) {
+  // Build a Drive sync error object.
+  file_manager_private::DriveSyncErrorEvent sync_error;
+  sync_error.type =
+      file_manager_private::DRIVE_SYNC_ERROR_TYPE_DELETE_WITHOUT_PERMISSION;
+  sync_error.file_url = "drivefs://fake.txt";
+  std::unique_ptr<extensions::Event> event =
+      std::make_unique<extensions::Event>(
+          extensions::events::FILE_MANAGER_PRIVATE_ON_DRIVE_SYNC_ERROR,
+          file_manager_private::OnDriveSyncError::kEventName,
+          file_manager_private::OnDriveSyncError::Create(sync_error));
+
+  // Send the delete without permission sync error event.
+  SystemNotificationManager* notification_manager =
+      GetSystemNotificationManager();
+  notification_manager->HandleEvent(*event.get());
+  NotificationDisplayService* notification_display_service =
+      GetNotificationDisplayService();
+  // Get the number of notifications from the NotificationDisplayService.
+  notification_display_service->GetDisplayed(
+      base::BindOnce(&SystemNotificationManagerTest::GetNotificationsCallback,
+                     weak_ptr_factory_.GetWeakPtr()));
+  // Check: We have one notification.
+  ASSERT_EQ(1, notification_count);
+  const char* id = file_manager_private::ToString(sync_error.type);
+  // Get the strings for the displayed notification.
+  TestNotificationStrings notification_strings =
+      notification_platform_bridge->GetNotificationStringsById(id);
+  // Check: the expected strings match.
+  EXPECT_EQ(notification_strings.title, kGoogleDrive);
+  EXPECT_EQ(notification_strings.message,
+            u"\"fake.txt\" has been shared with you. You cannot delete it "
+            u"because you do not own it.");
+
+  // Setup for the service unavailable error.
+  sync_error.type =
+      file_manager_private::DRIVE_SYNC_ERROR_TYPE_SERVICE_UNAVAILABLE;
+  event = std::make_unique<extensions::Event>(
+      extensions::events::FILE_MANAGER_PRIVATE_ON_DRIVE_SYNC_ERROR,
+      file_manager_private::OnDriveSyncError::kEventName,
+      file_manager_private::OnDriveSyncError::Create(sync_error));
+
+  // Send the service unavailable sync error event.
+  notification_manager->HandleEvent(*event.get());
+  // Get the number of notifications from the NotificationDisplayService.
+  notification_display_service->GetDisplayed(
+      base::BindOnce(&SystemNotificationManagerTest::GetNotificationsCallback,
+                     weak_ptr_factory_.GetWeakPtr()));
+  // Check: We have two notifications.
+  ASSERT_EQ(2, notification_count);
+  id = file_manager_private::ToString(sync_error.type);
+  // Get the strings for the displayed notification.
+  notification_strings =
+      notification_platform_bridge->GetNotificationStringsById(id);
+  // Check: the expected strings match.
+  EXPECT_EQ(notification_strings.title, kGoogleDrive);
+  EXPECT_EQ(notification_strings.message,
+            u"Google Drive is not available right now. Uploading will "
+            u"automatically restart once Google Drive is back.");
+
+  // Setup for the no server space error.
+  sync_error.type = file_manager_private::DRIVE_SYNC_ERROR_TYPE_NO_SERVER_SPACE;
+  event = std::make_unique<extensions::Event>(
+      extensions::events::FILE_MANAGER_PRIVATE_ON_DRIVE_SYNC_ERROR,
+      file_manager_private::OnDriveSyncError::kEventName,
+      file_manager_private::OnDriveSyncError::Create(sync_error));
+
+  // Send the service unavailable sync error event.
+  notification_manager->HandleEvent(*event.get());
+  // Get the number of notifications from the NotificationDisplayService.
+  notification_display_service->GetDisplayed(
+      base::BindOnce(&SystemNotificationManagerTest::GetNotificationsCallback,
+                     weak_ptr_factory_.GetWeakPtr()));
+  // Check: We have three notifications.
+  ASSERT_EQ(3, notification_count);
+  id = file_manager_private::ToString(sync_error.type);
+  // Get the strings for the displayed notification.
+  notification_strings =
+      notification_platform_bridge->GetNotificationStringsById(id);
+  // Check: the expected strings match.
+  EXPECT_EQ(notification_strings.title, kGoogleDrive);
+  EXPECT_EQ(notification_strings.message,
+            u"\"fake.txt\" was not uploaded. There is not enough free space in "
+            u"your Google Drive.");
+
+  // Setup for the no local space error.
+  sync_error.type = file_manager_private::DRIVE_SYNC_ERROR_TYPE_NO_LOCAL_SPACE;
+  event = std::make_unique<extensions::Event>(
+      extensions::events::FILE_MANAGER_PRIVATE_ON_DRIVE_SYNC_ERROR,
+      file_manager_private::OnDriveSyncError::kEventName,
+      file_manager_private::OnDriveSyncError::Create(sync_error));
+
+  // Send the service unavailable sync error event.
+  notification_manager->HandleEvent(*event.get());
+  // Get the number of notifications from the NotificationDisplayService.
+  notification_display_service->GetDisplayed(
+      base::BindOnce(&SystemNotificationManagerTest::GetNotificationsCallback,
+                     weak_ptr_factory_.GetWeakPtr()));
+  // Check: We have four notifications.
+  ASSERT_EQ(4, notification_count);
+  id = file_manager_private::ToString(sync_error.type);
+  // Get the strings for the displayed notification.
+  notification_strings =
+      notification_platform_bridge->GetNotificationStringsById(id);
+  // Check: the expected strings match.
+  EXPECT_EQ(notification_strings.title, kGoogleDrive);
+  EXPECT_EQ(notification_strings.message, u"You have run out of space");
+
+  // Setup for the miscellaneous sync error.
+  sync_error.type = file_manager_private::DRIVE_SYNC_ERROR_TYPE_MISC;
+  event = std::make_unique<extensions::Event>(
+      extensions::events::FILE_MANAGER_PRIVATE_ON_DRIVE_SYNC_ERROR,
+      file_manager_private::OnDriveSyncError::kEventName,
+      file_manager_private::OnDriveSyncError::Create(sync_error));
+
+  // Send the service unavailable sync error event.
+  notification_manager->HandleEvent(*event.get());
+  // Get the number of notifications from the NotificationDisplayService.
+  notification_display_service->GetDisplayed(
+      base::BindOnce(&SystemNotificationManagerTest::GetNotificationsCallback,
+                     weak_ptr_factory_.GetWeakPtr()));
+  // Check: We have five notifications.
+  ASSERT_EQ(5, notification_count);
+  id = file_manager_private::ToString(sync_error.type);
+  // Get the strings for the displayed notification.
+  notification_strings =
+      notification_platform_bridge->GetNotificationStringsById(id);
+  // Check: the expected strings match.
+  EXPECT_EQ(notification_strings.title, kGoogleDrive);
+  EXPECT_EQ(notification_strings.message,
+            u"Google Drive was unable to sync \"fake.txt\" right now. Google "
+            u"Drive will try again later.");
+}
+
 // Tests the generation of the DriveFS enable offline notification.
 // This is triggered when users make files available offline and the
 // Google Drive offline setting at https://drive.google.com isn't enabled.
diff --git a/chrome/browser/chromeos/preferences_unittest.cc b/chrome/browser/chromeos/preferences_unittest.cc
index 3319c9ef..1276dd7 100644
--- a/chrome/browser/chromeos/preferences_unittest.cc
+++ b/chrome/browser/chromeos/preferences_unittest.cc
@@ -383,7 +383,7 @@
   // Simulates the initial sync of preferences.
   syncer::SyncableService* SyncPreferences(
       const syncer::SyncDataList& sync_data_list) {
-    // SplitSettingsSync moves IME prefs to be OS prefs.
+    // SyncSettingsCategorization moves IME prefs to be OS prefs.
     syncer::ModelType model_type =
         features::IsSyncSettingsCategorizationEnabled() ? syncer::OS_PREFERENCES
                                                         : syncer::PREFERENCES;
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index a2f03f8..06f3a050 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -1476,11 +1476,6 @@
     "expiry_milestone": 102
   },
   {
-    "name": "enable-auto-select",
-    "owners": ["croissant-eng"],
-    "expiry_milestone": 95
-  },
-  {
     "name": "enable-autofill-account-wallet-storage",
     "owners": [ "treib", "jsaul@google.com", "butter-team@google.com" ],
     "expiry_milestone": 95
@@ -2519,11 +2514,6 @@
     "expiry_milestone": 95
   },
   {
-    "name": "enable-quick-answers-translation-cloud-api",
-    "owners": [ "croissant-eng" ],
-    "expiry_milestone": 95
-  },
-  {
     "name": "enable-quick-answers-v2",
     "owners": [ "croissant-eng" ],
     "expiry_milestone": 100
@@ -2671,8 +2661,8 @@
   },
   {
     "name": "enable-suggested-drive-files",
-    "owners": [ "edimitriadis", "tby", "wrong" ],
-    "expiry_milestone": 95
+    "owners": [ "tby", "wrong" ],
+    "expiry_milestone": 100
   },
   {
     "name": "enable-suggested-files",
@@ -2695,11 +2685,6 @@
     "expiry_milestone": 92
   },
   {
-    "name": "enable-sxg-prefetch-cache-for-navigations",
-    "owners": [ "horo", "//content/browser/web_package/OWNERS" ],
-    "expiry_milestone": 92
-  },
-  {
     "name": "enable-sxg-subresource-prefetching",
     "owners": [ "horo", "//content/browser/web_package/OWNERS" ],
     "expiry_milestone": 92
@@ -3184,7 +3169,7 @@
   {
     "name": "files-trash",
     "owners": [ "joelhockey", "noel", "simmonsjosh@google.com" ],
-    "expiry_milestone": 95
+    "expiry_milestone": 105
   },
   {
     "name": "files-zip-unpack",
@@ -5682,6 +5667,11 @@
     "expiry_milestone": 95
   },
   {
+    "name": "vertical-snap",
+    "owners": [ "cattalyya", "afakhry", "nupurjain", "fanafan"],
+    "expiry_milestone": 100
+  },
+  {
     "name": "video-tutorials",
     "owners": [ "shaktisahu"],
     "expiry_milestone": 98
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 7c648e3..2ab4428b 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -2696,6 +2696,12 @@
     "This enables upcoming and experimental V8 VM features. "
     "This flag does not enable experimental JavaScript features.";
 
+const char kVerticalSnapName[] = "Vertical Snap features";
+const char kVerticalSnapDescription[] =
+    "This enables Vertical Snap feature in portrait display."
+    "This feature allows users to snap windows to top and bottom in portrait "
+    "display orientation and maintains left/right snap for landscape display.";
+
 const char kWalletServiceUseSandboxName[] =
     "Use Google Payments sandbox servers";
 const char kWalletServiceUseSandboxDescription[] =
@@ -2870,10 +2876,12 @@
     "Enables users to justify their extension requests by causing a text field "
     "to appear on the extension request dialog.";
 
+#if !defined(OS_ANDROID)
 const char kShareContextMenuName[] = "Share context menu";
 const char kShareContextMenuDescription[] =
     "Whether the sharing options in various context menus are grouped into "
     "a common submenu.";
+#endif
 
 const char kForceMajorVersion100InUserAgentName[] =
     "Force major version to 100 in User-Agent";
@@ -4357,10 +4365,6 @@
 const char kEnableAssistantRoutinesName[] = "Assistant Routines";
 const char kEnableAssistantRoutinesDescription[] = "Enable Assistant Routines.";
 
-const char kEnableAutoSelectName[] = "Auto Select";
-const char kEnableAutoSelectDescription[] =
-    "Automatically select the word under cursor on contextual menu click.";
-
 const char kEnableBackgroundBlurName[] = "Enable background blur.";
 const char kEnableBackgroundBlurDescription[] =
     "Enables background blur for the Launcher, Shelf, Unified System Tray etc.";
@@ -4518,11 +4522,6 @@
 const char kEnableQuickAnswersTextAnnotatorDescription[] =
     "Enable Quick Answers text annotator.";
 
-const char kEnableQuickAnswersTranslationCloudAPIName[] =
-    "Enable Quick Answers translation using the Cloud API";
-const char kEnableQuickAnswersTranslationCloudAPIDescription[] =
-    "Enable Quick Answers translation using the Cloud API.";
-
 const char kEnableQuickAnswersV2Name[] = "Enable Quick Answers V2 features";
 const char kEnableQuickAnswersV2Description[] =
     "Enable Quick Answers V2 features.";
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index 82ec236..1bd21da 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -1524,6 +1524,9 @@
 extern const char kV8VmFutureName[];
 extern const char kV8VmFutureDescription[];
 
+extern const char kVerticalSnapName[];
+extern const char kVerticalSnapDescription[];
+
 extern const char kWalletServiceUseSandboxName[];
 extern const char kWalletServiceUseSandboxDescription[];
 
@@ -1634,8 +1637,10 @@
 extern const char kExtensionWorkflowJustificationName[];
 extern const char kExtensionWorkflowJustificationDescription[];
 
+#if !defined(OS_ANDROID)
 extern const char kShareContextMenuName[];
 extern const char kShareContextMenuDescription[];
+#endif
 
 extern const char kForceMajorVersion100InUserAgentName[];
 extern const char kForceMajorVersion100InUserAgentDescription[];
@@ -2490,9 +2495,6 @@
 extern const char kEnableAssistantRoutinesName[];
 extern const char kEnableAssistantRoutinesDescription[];
 
-extern const char kEnableAutoSelectName[];
-extern const char kEnableAutoSelectDescription[];
-
 extern const char kEnableBackgroundBlurName[];
 extern const char kEnableBackgroundBlurDescription[];
 
@@ -2577,9 +2579,6 @@
 extern const char kEnableQuickAnswersTextAnnotatorName[];
 extern const char kEnableQuickAnswersTextAnnotatorDescription[];
 
-extern const char kEnableQuickAnswersTranslationCloudAPIName[];
-extern const char kEnableQuickAnswersTranslationCloudAPIDescription[];
-
 extern const char kEnableQuickAnswersV2Name[];
 extern const char kEnableQuickAnswersV2Description[];
 
diff --git a/chrome/browser/history/history_tab_helper.cc b/chrome/browser/history/history_tab_helper.cc
index d5d65a5d..0ec0ffb4 100644
--- a/chrome/browser/history/history_tab_helper.cc
+++ b/chrome/browser/history/history_tab_helper.cc
@@ -374,7 +374,7 @@
 
 bool HistoryTabHelper::IsEligibleTab(
     const history::HistoryAddPageArgs& add_page_args) const {
-  if (force_eligibile_tab_for_testing_)
+  if (force_eligible_tab_for_testing_)
     return true;
 
 #if defined(OS_ANDROID)
diff --git a/chrome/browser/history/history_tab_helper.h b/chrome/browser/history/history_tab_helper.h
index b1914c7..fb54fe7 100644
--- a/chrome/browser/history/history_tab_helper.h
+++ b/chrome/browser/history/history_tab_helper.h
@@ -39,7 +39,7 @@
 
   // Fakes that the WebContents is a tab for testing purposes.
   void SetForceEligibleTabForTesting(bool force) {
-    force_eligibile_tab_for_testing_ = force;
+    force_eligible_tab_for_testing_ = force;
   }
 
  private:
@@ -87,7 +87,7 @@
   base::TimeTicks last_load_completion_;
 
   // Set to true in unit tests to avoid need for a Browser instance.
-  bool force_eligibile_tab_for_testing_ = false;
+  bool force_eligible_tab_for_testing_ = false;
 
   // The `WebContents` that opened the `WebContents` associated with `this` via
   // "Open in New Tab", "Open in New Window", window.open(), etc.
diff --git a/chrome/browser/history_clusters/history_clusters_metrics_logger.cc b/chrome/browser/history_clusters/history_clusters_metrics_logger.cc
index d926275..f60005a4 100644
--- a/chrome/browser/history_clusters/history_clusters_metrics_logger.cc
+++ b/chrome/browser/history_clusters/history_clusters_metrics_logger.cc
@@ -5,6 +5,7 @@
 #include "chrome/browser/history_clusters/history_clusters_metrics_logger.h"
 
 #include "base/logging.h"
+#include "base/metrics/histogram_functions.h"
 #include "content/public/browser/page_user_data.h"
 #include "content/public/browser/web_contents.h"
 #include "services/metrics/public/cpp/ukm_builders.h"
@@ -23,6 +24,8 @@
   if (!init_state_)
     return;
 
+  // Record UKM metrics.
+
   ukm::SourceId ukm_source_id =
       ukm::ConvertToSourceId(*navigation_id_, ukm::SourceIdType::NAVIGATION_ID);
   ukm::builders::HistoryClusters builder(ukm_source_id);
@@ -38,6 +41,10 @@
   builder.SetNumQueries(num_queries_);
   builder.SetNumTogglesToBasicHistory(num_toggles_to_basic_history_);
   builder.Record(ukm::UkmRecorder::Get());
+
+  // Record UMA metrics.
+  base::UmaHistogramExactLinear("History.Clusters.Actions.LinksOpened",
+                                links_opened_count_, 100);
 }
 
 PAGE_USER_DATA_KEY_IMPL(HistoryClustersMetricsLogger)
diff --git a/chrome/browser/history_clusters/history_clusters_metrics_logger.h b/chrome/browser/history_clusters/history_clusters_metrics_logger.h
index e6898ef..4d83580 100644
--- a/chrome/browser/history_clusters/history_clusters_metrics_logger.h
+++ b/chrome/browser/history_clusters/history_clusters_metrics_logger.h
@@ -33,8 +33,10 @@
   // The interaction with the HistoryClusters UI ended with a click on a link.
   kLinkClick = 1,
   // The UI interaction ended without opening anything on the page.
+  // TODO(manukh): Currently, clicking on the side bar links (e.g. the link to
+  //  tabs from other devices) will record the final state as `kCloseTab`. We
+  //  should differentiate this case.
   kCloseTab = 2,
-
   // Add new values above this line.
   kMax = kCloseTab,
 };
@@ -66,6 +68,8 @@
     navigation_id_ = navigation_id;
   }
 
+  void IncrementLinksOpenedCount() { links_opened_count_++; }
+
  private:
   // The navigation ID of the navigation handle that this data is associated
   // with, used for recording the metrics to UKM.
@@ -85,6 +89,12 @@
   // The number of times in this interaction with HistoryClusters included the
   // user toggled to the basic History UI from the HistoryClusters UI.
   int num_toggles_to_basic_history_ = 0;
+
+  // The number of links opened from the HistoryClusters UI. Includes both
+  // same-tab and new-tab/window navigations. Includes both visit and related
+  // search links. Does not include sidebar navigations (e.g. 'Clear browsing
+  // data').
+  int links_opened_count_ = 0;
 };
 
 }  // namespace history_clusters
diff --git a/chrome/browser/history_clusters/history_clusters_tab_helper.cc b/chrome/browser/history_clusters/history_clusters_tab_helper.cc
index 679ed2bf..5be5db6a 100644
--- a/chrome/browser/history_clusters/history_clusters_tab_helper.cc
+++ b/chrome/browser/history_clusters/history_clusters_tab_helper.cc
@@ -11,6 +11,7 @@
 #include "build/build_config.h"
 #include "chrome/browser/bookmarks/bookmark_model_factory.h"
 #include "chrome/browser/history/history_service_factory.h"
+#include "chrome/browser/history/history_utils.h"
 #include "chrome/browser/history_clusters/history_clusters_metrics_logger.h"
 #include "chrome/browser/history_clusters/history_clusters_service_factory.h"
 #include "chrome/browser/profiles/profile.h"
@@ -260,6 +261,119 @@
   return context_annotations_copy;
 }
 
+void HistoryClustersTabHelper::DidStartNavigation(
+    content::NavigationHandle* navigation_handle) {
+  // Will detect:
+  // 1) When the history clusters page was toggled to the basic history page.
+  // 2) A link was followed in the same web contents from the history clusters
+  //    page.
+  // And will update this page's associated `HistoryClustersMetricsLogger`.
+
+  if (!navigation_handle->IsInPrimaryMainFrame()) {
+    return;
+  }
+
+  // We only care if the previously committed navigation was on the
+  // HistoryClusters UI.
+  if (!IsHistoryPage(navigation_handle->GetWebContents()->GetLastCommittedURL(),
+                     GURL(chrome::kChromeUIHistoryClustersURL))) {
+    return;
+  }
+
+  if (navigation_handle->IsSameDocument()) {
+    if (IsHistoryPage(navigation_handle->GetURL(),
+                      GURL(chrome::kChromeUIHistoryURL))) {
+      history_clusters::HistoryClustersMetricsLogger::GetOrCreateForPage(
+          navigation_handle->GetWebContents()->GetPrimaryPage())
+          ->increment_toggles_to_basic_history();
+    }
+    return;
+  }
+
+  if (!IsHistoryPage(navigation_handle->GetURL(),
+                     GURL(chrome::kChromeUIHistoryClustersURL)) &&
+      PageTransitionCoreTypeIs(navigation_handle->GetPageTransition(),
+                               ui::PAGE_TRANSITION_LINK)) {
+    // If the previously committed navigation was on the history clusters page,
+    // the current navigation is not on the history clusters UI and the
+    // transition type is a link click, then we know the user clicked on a
+    // result on the clusters page.
+    auto* logger =
+        history_clusters::HistoryClustersMetricsLogger::GetOrCreateForPage(
+            navigation_handle->GetWebContents()->GetPrimaryPage());
+    logger->set_final_state(
+        history_clusters::HistoryClustersFinalState::kLinkClick);
+    if (CanAddURLToHistory(navigation_handle->GetURL()))
+      logger->IncrementLinksOpenedCount();
+  }
+}
+
+void HistoryClustersTabHelper::DidFinishNavigation(
+    content::NavigationHandle* navigation_handle) {
+  // Will detect when the history clusters page was navigated to directly (e.g.,
+  // through the omnibox, by page refresh, or by page back/forward), as opposed
+  // to indirectly (e.g. through the side bar on the history page).
+  // And will update this page's associated `HistoryClustersMetricsLogger`.
+  // TODO(manukh): Indirect navigations currently don't log UKM and UMA metrics
+  //  but they should.
+
+  if (!navigation_handle->IsInPrimaryMainFrame()) {
+    return;
+  }
+  if (navigation_handle->IsSameDocument()) {
+    return;
+  }
+
+  if (!IsHistoryPage(navigation_handle->GetURL(),
+                     GURL(chrome::kChromeUIHistoryClustersURL))) {
+    return;
+  }
+  // If the transition type is typed (meaning directly entered into the
+  // address bar), PAGE_TRANSITION_TYPED, or is partially typed and selected
+  // from the omnibox history, which results in PAGE_TRANSITION_RELOADS, this
+  // usage of the history clusters UI is considered a "direct" navigation.
+  if (PageTransitionCoreTypeIs(navigation_handle->GetPageTransition(),
+                               ui::PAGE_TRANSITION_TYPED) ||
+      PageTransitionCoreTypeIs(navigation_handle->GetPageTransition(),
+                               ui::PAGE_TRANSITION_RELOAD)) {
+    auto* logger =
+        history_clusters::HistoryClustersMetricsLogger::GetOrCreateForPage(
+            navigation_handle->GetWebContents()->GetPrimaryPage());
+    logger->set_navigation_id(navigation_handle->GetNavigationId());
+    logger->set_initial_state(
+        history_clusters::HistoryClustersInitialState::kDirectNavigation);
+  }
+}
+
+void HistoryClustersTabHelper::DidOpenRequestedURL(
+    content::WebContents* new_contents,
+    content::RenderFrameHost* source_render_frame_host,
+    const GURL& url,
+    const content::Referrer& referrer,
+    WindowOpenDisposition disposition,
+    ui::PageTransition transition,
+    bool started_from_context_menu,
+    bool renderer_initiated) {
+  // Will detect when a link was followed from the history clusters page in a
+  // new web contents (e.g. new tab or window).
+  // And will update this page's associated `HistoryClustersMetricsLogger`.
+  if (IsHistoryPage(web_contents()->GetLastCommittedURL(),
+                    GURL(chrome::kChromeUIHistoryClustersURL)) &&
+      CanAddURLToHistory(url)) {
+    auto* logger =
+        history_clusters::HistoryClustersMetricsLogger::GetOrCreateForPage(
+            web_contents()->GetPrimaryPage());
+    logger->IncrementLinksOpenedCount();
+  }
+}
+
+void HistoryClustersTabHelper::WebContentsDestroyed() {
+  // Complete any incomplete visits associated with navigations made in this
+  // tab.
+  for (auto navigation_id : navigation_ids_)
+    RecordPageEndMetricsIfNeeded(navigation_id);
+}
+
 void HistoryClustersTabHelper::StartNewNavigationIfNeeded(
     int64_t navigation_id) {
   if (!navigation_ids_.empty() && navigation_id == navigation_ids_.back())
@@ -327,11 +441,6 @@
       navigation_id);
 }
 
-void HistoryClustersTabHelper::WebContentsDestroyed() {
-  for (auto navigation_id : navigation_ids_)
-    RecordPageEndMetricsIfNeeded(navigation_id);
-}
-
 history_clusters::HistoryClustersService*
 HistoryClustersTabHelper::GetHistoryClustersService() {
   if (!web_contents()) {
@@ -353,72 +462,4 @@
       profile, ServiceAccessType::IMPLICIT_ACCESS);
 }
 
-void HistoryClustersTabHelper::DidStartNavigation(
-    content::NavigationHandle* navigation_handle) {
-  if (!navigation_handle->IsInPrimaryMainFrame()) {
-    return;
-  }
-
-  // We only care if the previously committed navigation was on the
-  // HistoryClusters UI.
-  if (!IsHistoryPage(navigation_handle->GetWebContents()->GetLastCommittedURL(),
-                     GURL(chrome::kChromeUIHistoryClustersURL))) {
-    return;
-  }
-
-  if (navigation_handle->IsSameDocument()) {
-    if (IsHistoryPage(navigation_handle->GetURL(),
-                      GURL(chrome::kChromeUIHistoryURL))) {
-      history_clusters::HistoryClustersMetricsLogger::GetOrCreateForPage(
-          navigation_handle->GetWebContents()->GetPrimaryPage())
-          ->increment_toggles_to_basic_history();
-    }
-    return;
-  }
-
-  if (!IsHistoryPage(navigation_handle->GetURL(),
-                     GURL(chrome::kChromeUIHistoryClustersURL)) &&
-      PageTransitionCoreTypeIs(navigation_handle->GetPageTransition(),
-                               ui::PAGE_TRANSITION_LINK)) {
-    // If the previously committed navigation was on the history clusters page,
-    // the current navigation is not on the history clusters UI and the
-    // transition type is a link click, then we know the user clicked on a
-    // result on the clusters page.
-    history_clusters::HistoryClustersMetricsLogger::GetOrCreateForPage(
-        navigation_handle->GetWebContents()->GetPrimaryPage())
-        ->set_final_state(
-            history_clusters::HistoryClustersFinalState::kLinkClick);
-  }
-}
-
-void HistoryClustersTabHelper::DidFinishNavigation(
-    content::NavigationHandle* navigation_handle) {
-  if (!navigation_handle->IsInPrimaryMainFrame()) {
-    return;
-  }
-  if (navigation_handle->IsSameDocument()) {
-    return;
-  }
-
-  if (!IsHistoryPage(navigation_handle->GetURL(),
-                     GURL(chrome::kChromeUIHistoryClustersURL))) {
-    return;
-  }
-  // If the transition type is typed (meaning directly entered into the
-  // address bar), PAGE_TRANSITION_TYPED, or is partially typed and selected
-  // from the omnibox history, which results in PAGE_TRANSITION_RELOADS, this
-  // usage of the history clusters UI is considered a "direct" navigation.
-  if (PageTransitionCoreTypeIs(navigation_handle->GetPageTransition(),
-                               ui::PAGE_TRANSITION_TYPED) ||
-      PageTransitionCoreTypeIs(navigation_handle->GetPageTransition(),
-                               ui::PAGE_TRANSITION_RELOAD)) {
-    auto* logger =
-        history_clusters::HistoryClustersMetricsLogger::GetOrCreateForPage(
-            navigation_handle->GetWebContents()->GetPrimaryPage());
-    logger->set_navigation_id(navigation_handle->GetNavigationId());
-    logger->set_initial_state(
-        history_clusters::HistoryClustersInitialState::kDirectNavigation);
-  }
-}
-
 WEB_CONTENTS_USER_DATA_KEY_IMPL(HistoryClustersTabHelper)
diff --git a/chrome/browser/history_clusters/history_clusters_tab_helper.h b/chrome/browser/history_clusters/history_clusters_tab_helper.h
index 3e7c843..704ea69 100644
--- a/chrome/browser/history_clusters/history_clusters_tab_helper.h
+++ b/chrome/browser/history_clusters/history_clusters_tab_helper.h
@@ -56,6 +56,21 @@
       int64_t navigation_id,
       const page_load_metrics::PageEndReason page_end_reason);
 
+  // content::WebContentsObserver:
+  void DidStartNavigation(
+      content::NavigationHandle* navigation_handle) override;
+  void DidFinishNavigation(
+      content::NavigationHandle* navigation_handle) override;
+  void DidOpenRequestedURL(content::WebContents* new_contents,
+                           content::RenderFrameHost* source_render_frame_host,
+                           const GURL& url,
+                           const content::Referrer& referrer,
+                           WindowOpenDisposition disposition,
+                           ui::PageTransition transition,
+                           bool started_from_context_menu,
+                           bool renderer_initiated) override;
+  void WebContentsDestroyed() override;
+
  private:
   FRIEND_TEST_ALL_PREFIXES(UkmPageLoadMetricsObserverTest,
                            DurationSinceLastVisitSeconds);
@@ -70,18 +85,6 @@
   // recorded page end metrics.
   void RecordPageEndMetricsIfNeeded(int64_t navigation_id);
 
-  // content::WebContentsObserver implementation.
-
-  // Will update this page's associated `HistoryClustersMetricsLogger`.
-  void DidStartNavigation(
-      content::NavigationHandle* navigation_handle) override;
-  void DidFinishNavigation(
-      content::NavigationHandle* navigation_handle) override;
-
-  // Will complete any incomplete visits associated with navigations made in
-  // this tab.
-  void WebContentsDestroyed() override;
-
   // Helper functions to return the memories and history services.
   // `GetHistoryClustersService()` may return nullptr (in tests).
   history_clusters::HistoryClustersService* GetHistoryClustersService();
diff --git a/chrome/browser/media/webrtc/media_stream_permission_browsertest.cc b/chrome/browser/media/webrtc/media_stream_permission_browsertest.cc
index bc22760..51456d2 100644
--- a/chrome/browser/media/webrtc/media_stream_permission_browsertest.cc
+++ b/chrome/browser/media/webrtc/media_stream_permission_browsertest.cc
@@ -6,6 +6,7 @@
 #include "base/files/file_util.h"
 #include "base/macros.h"
 #include "base/run_loop.h"
+#include "build/chromeos_buildflags.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
 #include "chrome/browser/media/webrtc/webrtc_browsertest_base.h"
@@ -140,8 +141,15 @@
   GetUserMediaAndDismiss(tab_contents);
 }
 
+// TODO(crbug.com/1251470): Fix the issue on Lacros and enable the test.
+#if BUILDFLAG(IS_CHROMEOS_LACROS)
+#define MAYBE_TestDenyingUserMediaIncognito \
+  DISABLED_TestDenyingUserMediaIncognito
+#else
+#define MAYBE_TestDenyingUserMediaIncognito TestDenyingUserMediaIncognito
+#endif
 IN_PROC_BROWSER_TEST_F(MediaStreamPermissionTest,
-                       TestDenyingUserMediaIncognito) {
+                       MAYBE_TestDenyingUserMediaIncognito) {
   content::WebContents* tab_contents = LoadTestPageInIncognitoTab();
   GetUserMediaAndDeny(tab_contents);
 }
diff --git a/chrome/browser/metrics/variations/variations_safe_mode_browsertest.cc b/chrome/browser/metrics/variations/variations_safe_mode_browsertest.cc
index 2ca20ec..8380434 100644
--- a/chrome/browser/metrics/variations/variations_safe_mode_browsertest.cc
+++ b/chrome/browser/metrics/variations/variations_safe_mode_browsertest.cc
@@ -8,34 +8,17 @@
 
 #include <string>
 
-#include "base/base_switches.h"
-#include "base/containers/contains.h"
 #include "base/metrics/field_trial.h"
-#include "base/path_service.h"
-#include "base/ranges/ranges.h"
-#include "base/strings/strcat.h"
-#include "base/test/launcher/test_launcher.h"
 #include "base/test/metrics/histogram_tester.h"
-#include "base/test/task_environment.h"
-#include "base/test/test_switches.h"
 #include "chrome/browser/browser_process.h"
-#include "chrome/common/chrome_paths.h"
-#include "chrome/common/chrome_switches.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "components/metrics/clean_exit_beacon.h"
 #include "components/metrics/metrics_pref_names.h"
-#include "components/metrics/metrics_service.h"
-#include "components/prefs/json_pref_store.h"
 #include "components/prefs/pref_service.h"
-#include "components/prefs/pref_service_factory.h"
 #include "components/variations/metrics.h"
 #include "components/variations/pref_names.h"
 #include "components/variations/service/variations_field_trial_creator.h"
-#include "components/variations/service/variations_safe_mode_constants.h"
-#include "components/variations/service/variations_service.h"
-#include "components/variations/variations_switches.h"
 #include "components/variations/variations_test_utils.h"
-#include "content/public/common/content_switches.h"
 #include "content/public/test/browser_test.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -111,7 +94,7 @@
                                        SeedUsage::kSafeSeedUsed, 1);
 
   // Verify that there is a field trial associated with the sole test seed
-  // study, |variations::kTestSeedStudyName|.
+  // study, |kTestSeedStudyName|.
   EXPECT_TRUE(base::FieldTrialList::TrialExists(kTestSeedStudyName));
 }
 
@@ -168,174 +151,4 @@
                                        SeedUsage::kRegularSeedUsed, 1);
 }
 
-// This test code is programmatically launched by the SafeModeEndToEnd
-// test below. Its primary purpose is to provide an entry-point by
-// which the SafeModeEndToEnd test can cause the Field Trial Setup
-// code to be exercised. For some launches, the setup code is expected
-// to crash before reaching the test body; the test body simply verifies
-// that the test is using the user-data-dir configured on the command-line.
-//
-// The MANUAL_ prefix prevents the test from running unless explicitly
-// invoked.
-IN_PROC_BROWSER_TEST_F(VariationsSafeModeBrowserTest, MANUAL_SubTest) {
-  // Validate that Chrome is running with the user-data-dir specified on the
-  // command-line.
-  base::FilePath expected_user_data_dir =
-      base::CommandLine::ForCurrentProcess()->GetSwitchValuePath(
-          ::switches::kUserDataDir);
-  base::FilePath actual_user_data_dir;
-  ASSERT_TRUE(
-      base::PathService::Get(chrome::DIR_USER_DATA, &actual_user_data_dir));
-  ASSERT_FALSE(expected_user_data_dir.empty());
-  ASSERT_FALSE(actual_user_data_dir.empty());
-  ASSERT_EQ(actual_user_data_dir, expected_user_data_dir);
-}
-
-namespace {
-
-class FieldTrialTest : public ::testing::TestWithParam<std::string> {
- public:
-  void SetUp() override {
-    ::testing::TestWithParam<std::string>::SetUp();
-    metrics::CleanExitBeacon::SkipCleanShutdownStepsForTesting();
-
-    pref_registry_ = base::MakeRefCounted<PrefRegistrySimple>();
-    metrics::MetricsService::RegisterPrefs(pref_registry_.get());
-    variations::VariationsService::RegisterPrefs(pref_registry_.get());
-
-    base::ScopedAllowBlockingForTesting allow_blocking;
-    ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
-    user_data_dir_ = temp_dir_.GetPath().AppendASCII("user-data-dir");
-    pref_service_factory_.set_user_prefs(base::MakeRefCounted<JsonPrefStore>(
-        user_data_dir_.AppendASCII("Local State")));
-  }
-
- protected:
-  const std::string& field_trial_group() const { return GetParam(); }
-  const base::FilePath& user_data_dir() const { return user_data_dir_; }
-
-  bool IsSuccessfulSubTestOutput(const std::string& output) {
-    static const char* const kSubTestSuccessStrings[] = {
-        "Running 1 test from 1 test suite",
-        "OK ] VariationsSafeModeBrowserTest.MANUAL_SubTest",
-        "1 test from VariationsSafeModeBrowserTest",
-        "1 test from 1 test suite ran",
-    };
-    return base::ranges::all_of(kSubTestSuccessStrings, [&](const char* s) {
-      return base::Contains(output, s);
-    });
-  }
-
-  bool IsCrashingSubTestOutput(const std::string& output) {
-    const char* const kSubTestCrashStrings[] = {
-        "Running 1 test from 1 test suite",
-        "VariationsSafeModeBrowserTest.MANUAL_SubTest",
-        "Check failed: crash_for_testing",
-    };
-    return base::ranges::all_of(kSubTestCrashStrings, [&](const char* s) {
-      return base::Contains(output, s);
-    });
-  }
-
-  void RunAndExpectSuccessfulSubTest(
-      const base::CommandLine& sub_test_command) {
-    std::string output;
-    base::GetAppOutputAndError(sub_test_command, &output);
-    EXPECT_TRUE(IsSuccessfulSubTestOutput(output))
-        << "Did not find success signals in output:\n"
-        << output;
-  }
-
-  void RunAndExpectCrashingSubTest(const base::CommandLine& sub_test_command) {
-    std::string output;
-    base::GetAppOutputAndError(sub_test_command, &output);
-    EXPECT_FALSE(IsSuccessfulSubTestOutput(output))
-        << "Expected crash but found success signals in output:\n"
-        << output;
-    EXPECT_TRUE(IsCrashingSubTestOutput(output))
-        << "Did not find crash signals in output:\n"
-        << output;
-  }
-
-  std::unique_ptr<PrefService> LoadLocalState() {
-    return pref_service_factory_.Create(pref_registry_);
-  }
-
-  std::unique_ptr<metrics::CleanExitBeacon> LoadCleanExitBeacon(
-      PrefService* pref_service) {
-    static constexpr wchar_t kDummyWindowsRegistryKey[] = L"";
-    auto clean_exit_beacon = std::make_unique<metrics::CleanExitBeacon>(
-        kDummyWindowsRegistryKey, user_data_dir(), pref_service);
-    clean_exit_beacon->Initialize();
-    return clean_exit_beacon;
-  }
-
- private:
-  base::test::TaskEnvironment task_environment_;
-  scoped_refptr<PrefRegistrySimple> pref_registry_;
-  PrefServiceFactory pref_service_factory_;
-  base::ScopedTempDir temp_dir_;
-  base::FilePath user_data_dir_;
-};
-
-}  // namespace
-
-TEST_P(FieldTrialTest, ExtendedSafeModeEndToEnd) {
-  SCOPED_TRACE(field_trial_group());
-
-  // Reuse the browser_tests binary (i.e., that this test code is in), to
-  // manually run the sub-test.
-  base::CommandLine sub_test =
-      base::CommandLine(base::CommandLine::ForCurrentProcess()->GetProgram());
-
-  // Run the sub-test in the |user_data_dir()| allocated for the test case.
-  sub_test.AppendSwitchASCII(base::kGTestFilterFlag,
-                             "VariationsSafeModeBrowserTest.MANUAL_SubTest");
-  sub_test.AppendSwitch(::switches::kRunManualTestsFlag);
-  sub_test.AppendSwitch(::switches::kSingleProcessTests);
-  sub_test.AppendSwitchPath(::switches::kUserDataDir, user_data_dir());
-
-  // Select the extended variations safe mode field trial group. The "*"
-  // prefix forces the experiment/trial state to "active" at startup.
-  sub_test.AppendSwitchASCII(::switches::kForceFieldTrials,
-                             base::StrCat({"*", kExtendedSafeModeTrial, "/",
-                                           field_trial_group(), "/"}));
-
-  // Explicitly avoid any terminal control characters in the output.
-  sub_test.AppendSwitchASCII("gtest_color", "no");
-
-  // Initial sub-test run should be successful.
-  RunAndExpectSuccessfulSubTest(sub_test);
-
-  // Add command-line switch to force crash during metric initialization.
-  // TODO(crbug/1249256): inject variations seed into user-data-dir that
-  // enables this feature instead of using altered command line.
-  base::CommandLine crashing_sub_test = sub_test;
-  crashing_sub_test.AppendSwitchASCII(
-      ::switches::kEnableFeatures, kForceFieldTrialSetupCrashForTesting.name);
-
-  SetUpExtendedSafeModeExperiment(field_trial_group());
-
-  // The next three runs of the sub-test should crash...
-  for (int expected_crash_streak = 1;
-       expected_crash_streak <= kCrashStreakThreshold;
-       ++expected_crash_streak) {
-    RunAndExpectCrashingSubTest(crashing_sub_test);
-    auto local_state = LoadLocalState();
-    auto clean_exit_beacon = LoadCleanExitBeacon(local_state.get());
-    ASSERT_TRUE(clean_exit_beacon != nullptr);
-    ASSERT_FALSE(clean_exit_beacon->exited_cleanly());
-    EXPECT_EQ(expected_crash_streak,
-              local_state->GetInteger(prefs::kVariationsCrashStreak));
-  }
-
-  // Until safe mode kicks in.
-  RunAndExpectSuccessfulSubTest(sub_test);
-}
-
-INSTANTIATE_TEST_CASE_P(
-    VariationsSafeModeBrowserTest,
-    FieldTrialTest,
-    ::testing::Values(kSignalAndWriteSynchronouslyViaPrefServiceGroup,
-                      kSignalAndWriteViaFileUtilGroup));
 }  // namespace variations
diff --git a/chrome/browser/platform_util_unittest.cc b/chrome/browser/platform_util_unittest.cc
index fa3b5bf1..c108277e 100644
--- a/chrome/browser/platform_util_unittest.cc
+++ b/chrome/browser/platform_util_unittest.cc
@@ -20,6 +20,10 @@
 #if BUILDFLAG(IS_CHROMEOS_ASH)
 #include "base/json/json_string_value_serializer.h"
 #include "base/values.h"
+#include "chrome/browser/apps/app_service/app_service_proxy_chromeos.h"
+#include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
+#include "chrome/browser/apps/app_service/app_service_test.h"
+#include "chrome/browser/apps/app_service/intent_util.h"
 #include "chrome/browser/ash/file_manager/app_id.h"
 #include "chrome/browser/chrome_content_browser_client.h"
 #include "chrome/browser/chromeos/fileapi/file_system_backend.h"
@@ -80,6 +84,11 @@
     old_content_browser_client_ =
         content::SetBrowserClientForTesting(content_browser_client_.get());
 
+    app_service_test_.SetUp(GetProfile());
+    app_service_proxy_ =
+        apps::AppServiceProxyFactory::GetForProfile(GetProfile());
+    ASSERT_TRUE(app_service_proxy_);
+
     // The test_directory needs to be mounted for it to be accessible.
     GetProfile()->GetMountPoints()->RegisterFileSystem(
         "test", storage::kFileSystemTypeLocal, storage::FileSystemMountOption(),
@@ -119,7 +128,20 @@
             extensions::mojom::ManifestLocation::kInvalidLocation,
             *manifest_dictionary, extensions::Extension::NO_FLAGS, &error);
     ASSERT_TRUE(error.empty()) << error;
-    extensions::ExtensionRegistry::Get(GetProfile())->AddEnabled(extension);
+
+    std::vector<apps::mojom::AppPtr> apps;
+    auto app = apps::mojom::App::New();
+    app->app_id = "invalid-chrome-app";
+    app->app_type = apps::mojom::AppType::kExtension;
+    app->show_in_launcher = apps::mojom::OptionalBool::kTrue;
+    app->readiness = apps::mojom::Readiness::kReady;
+    app->intent_filters =
+        apps_util::CreateChromeAppIntentFilters(extension.get());
+    apps.push_back(std::move(app));
+    app_service_proxy_->AppRegistryCache().OnApps(
+        std::move(apps), apps::mojom::AppType::kExtension,
+        /*should_notify_initialized=*/false);
+    app_service_test_.WaitForAppService();
   }
 
   void SetUp() override {
@@ -141,6 +163,8 @@
  private:
   std::unique_ptr<content::ContentBrowserClient> content_browser_client_;
   content::ContentBrowserClient* old_content_browser_client_ = nullptr;
+  apps::AppServiceTest app_service_test_;
+  apps::AppServiceProxyChromeOs* app_service_proxy_ = nullptr;
 };
 
 #else
diff --git a/chrome/browser/policy/client_data_delegate_android.cc b/chrome/browser/policy/client_data_delegate_android.cc
index 3b562b08..e9c70be 100644
--- a/chrome/browser/policy/client_data_delegate_android.cc
+++ b/chrome/browser/policy/client_data_delegate_android.cc
@@ -4,34 +4,18 @@
 
 #include "chrome/browser/policy/client_data_delegate_android.h"
 
-#include <utility>
-
-#include "base/bind.h"
-#include "base/callback.h"
-#include "base/system/sys_info.h"
 #include "chrome/browser/policy/android/cloud_management_android_connection.h"
 #include "components/policy/core/common/cloud/cloud_policy_util.h"
 #include "components/policy/proto/device_management_backend.pb.h"
 
 namespace policy {
 
-namespace {
-
-void SetHardwareInfo(enterprise_management::RegisterBrowserRequest* request,
-                     base::OnceClosure callback,
-                     base::SysInfo::HardwareInfo hardware_info) {
-  request->set_device_model(hardware_info.model);
-  request->set_brand_name(hardware_info.manufacturer);
-  std::move(callback).Run();
-}
-
-}  // namespace
-
 void ClientDataDelegateAndroid::FillRegisterBrowserRequest(
-    enterprise_management::RegisterBrowserRequest* request,
-    base::OnceClosure callback) const {
+    enterprise_management::RegisterBrowserRequest* request) const {
   request->set_os_platform(GetOSPlatform());
   request->set_os_version(GetOSVersion());
+  request->set_device_model(GetDeviceModel());
+  request->set_brand_name(GetDeviceManufacturer());
 
   std::string gservices_android_id = android::GetGservicesAndroidId();
   if (!gservices_android_id.empty()) {
@@ -39,9 +23,6 @@
         ->mutable_android_identifier()
         ->set_gservices_android_id(gservices_android_id);
   }
-
-  base::SysInfo::GetHardwareInfo(
-      base::BindOnce(&SetHardwareInfo, request, std::move(callback)));
 }
 
 }  // namespace policy
diff --git a/chrome/browser/policy/client_data_delegate_android.h b/chrome/browser/policy/client_data_delegate_android.h
index 351cde42..0d04881 100644
--- a/chrome/browser/policy/client_data_delegate_android.h
+++ b/chrome/browser/policy/client_data_delegate_android.h
@@ -19,8 +19,7 @@
   ~ClientDataDelegateAndroid() override = default;
 
   void FillRegisterBrowserRequest(
-      enterprise_management::RegisterBrowserRequest* request,
-      base::OnceClosure callback) const override;
+      enterprise_management::RegisterBrowserRequest* request) const override;
 };
 
 }  // namespace policy
diff --git a/chrome/browser/policy/client_data_delegate_android_unittest.cc b/chrome/browser/policy/client_data_delegate_android_unittest.cc
index b36449e..baa7d50 100644
--- a/chrome/browser/policy/client_data_delegate_android_unittest.cc
+++ b/chrome/browser/policy/client_data_delegate_android_unittest.cc
@@ -4,12 +4,6 @@
 
 #include "chrome/browser/policy/client_data_delegate_android.h"
 
-#include <utility>
-
-#include "base/bind.h"
-#include "base/callback_helpers.h"
-#include "base/system/sys_info.h"
-#include "base/test/task_environment.h"
 #include "build/branding_buildflags.h"
 #include "components/policy/core/common/cloud/cloud_policy_util.h"
 #include "components/policy/proto/device_management_backend.pb.h"
@@ -30,24 +24,12 @@
 }  // namespace
 
 TEST(ClientDataDelegateAndroidTest, FillRegisterBrowserRequest) {
-  base::test::TaskEnvironment task_environment;
   ClientDataDelegateAndroid client_data_delegate;
   enterprise_management::RegisterBrowserRequest request;
-  client_data_delegate.FillRegisterBrowserRequest(&request, base::DoNothing());
-  task_environment.RunUntilIdle();
+  client_data_delegate.FillRegisterBrowserRequest(&request);
 
-  base::SysInfo::HardwareInfo hardware_info;
-  base::SysInfo::GetHardwareInfo(base::BindOnce(
-      [](base::SysInfo::HardwareInfo* target_info,
-         base::SysInfo::HardwareInfo info) { *target_info = std::move(info); },
-      &hardware_info));
-  task_environment.RunUntilIdle();
-
-  EXPECT_FALSE(request.device_model().empty());
-  EXPECT_EQ(request.device_model(), hardware_info.model);
-  EXPECT_FALSE(request.brand_name().empty());
-  EXPECT_EQ(request.brand_name(), hardware_info.manufacturer);
-
+  EXPECT_EQ(request.device_model(), GetDeviceModel());
+  EXPECT_EQ(request.device_model(), GetDeviceManufacturer());
   EXPECT_EQ(request.browser_device_identifier()
                 .android_identifier()
                 .gservices_android_id()
diff --git a/chrome/browser/policy/client_data_delegate_desktop.cc b/chrome/browser/policy/client_data_delegate_desktop.cc
index 4b34736..03256da8 100644
--- a/chrome/browser/policy/client_data_delegate_desktop.cc
+++ b/chrome/browser/policy/client_data_delegate_desktop.cc
@@ -4,9 +4,6 @@
 
 #include "chrome/browser/policy/client_data_delegate_desktop.h"
 
-#include <utility>
-
-#include "base/callback.h"
 #include "base/feature_list.h"
 #include "components/policy/core/common/cloud/cloud_policy_util.h"
 #include "components/policy/core/common/features.h"
@@ -15,8 +12,7 @@
 namespace policy {
 
 void ClientDataDelegateDesktop::FillRegisterBrowserRequest(
-    enterprise_management::RegisterBrowserRequest* request,
-    base::OnceClosure callback) const {
+    enterprise_management::RegisterBrowserRequest* request) const {
   request->set_os_platform(GetOSPlatform());
   request->set_os_version(GetOSVersion());
   request->set_machine_name(GetMachineName());
@@ -25,8 +21,6 @@
     request->set_allocated_browser_device_identifier(
         GetBrowserDeviceIdentifier().release());
   }
-
-  std::move(callback).Run();
 }
 
 }  // namespace policy
diff --git a/chrome/browser/policy/client_data_delegate_desktop.h b/chrome/browser/policy/client_data_delegate_desktop.h
index 0de87e0..b64c6bf 100644
--- a/chrome/browser/policy/client_data_delegate_desktop.h
+++ b/chrome/browser/policy/client_data_delegate_desktop.h
@@ -19,8 +19,7 @@
   ~ClientDataDelegateDesktop() override = default;
 
   void FillRegisterBrowserRequest(
-      enterprise_management::RegisterBrowserRequest* request,
-      base::OnceClosure callback) const override;
+      enterprise_management::RegisterBrowserRequest* request) const override;
 };
 
 }  // namespace policy
diff --git a/chrome/browser/policy/client_data_delegate_desktop_unittest.cc b/chrome/browser/policy/client_data_delegate_desktop_unittest.cc
index ffea5d5b..28f40b15 100644
--- a/chrome/browser/policy/client_data_delegate_desktop_unittest.cc
+++ b/chrome/browser/policy/client_data_delegate_desktop_unittest.cc
@@ -6,9 +6,7 @@
 
 #include <memory>
 
-#include "base/callback_helpers.h"
 #include "base/test/scoped_feature_list.h"
-#include "base/test/task_environment.h"
 #include "build/build_config.h"
 #include "components/policy/core/common/cloud/cloud_policy_util.h"
 #include "components/policy/core/common/features.h"
@@ -19,14 +17,12 @@
 
 TEST(ClientDataDelegateDesktopTest,
      FillRegisterBrowserRequest_BrowserDeviceIdentifier) {
-  base::test::TaskEnvironment task_environment;
   base::test::ScopedFeatureList scoped_feature_list(
       features::kUploadBrowserDeviceIdentifier);
 
   ClientDataDelegateDesktop client_data_delegate;
   enterprise_management::RegisterBrowserRequest request;
-  client_data_delegate.FillRegisterBrowserRequest(&request, base::DoNothing());
-  task_environment.RunUntilIdle();
+  client_data_delegate.FillRegisterBrowserRequest(&request);
 
   EXPECT_EQ(request.machine_name(), GetMachineName());
   std::unique_ptr<enterprise_management::BrowserDeviceIdentifier>
@@ -39,15 +35,13 @@
 
 TEST(ClientDataDelegateDesktopTest,
      FillRegisterBrowserRequest_NoBrowserDeviceIdentifier) {
-  base::test::TaskEnvironment task_environment;
   base::test::ScopedFeatureList scoped_feature_list;
   scoped_feature_list.InitAndDisableFeature(
       features::kUploadBrowserDeviceIdentifier);
 
   ClientDataDelegateDesktop client_data_delegate;
   enterprise_management::RegisterBrowserRequest request;
-  client_data_delegate.FillRegisterBrowserRequest(&request, base::DoNothing());
-  task_environment.RunUntilIdle();
+  client_data_delegate.FillRegisterBrowserRequest(&request);
 
   EXPECT_EQ(request.machine_name(), GetMachineName());
   EXPECT_TRUE(request.browser_device_identifier().computer_name().empty());
diff --git a/chrome/browser/policy/messaging_layer/public/report_client.cc b/chrome/browser/policy/messaging_layer/public/report_client.cc
index f665845..5b84b14 100644
--- a/chrome/browser/policy/messaging_layer/public/report_client.cc
+++ b/chrome/browser/policy/messaging_layer/public/report_client.cc
@@ -8,6 +8,7 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/bind_post_task.h"
 #include "base/callback.h"
 #include "base/feature_list.h"
 #include "base/memory/ptr_util.h"
@@ -197,13 +198,11 @@
     InitCompleteCallback init_complete_cb,
     scoped_refptr<InitializationStateTracker> init_state_tracker) {
   return new ClientInitializingContext(
-      build_cloud_policy_client_cb_,
       base::BindRepeating(&ReportingClient::AsyncStartUploader),
       std::move(init_complete_cb), this, init_state_tracker);
 }
 
 ReportingClient::ClientInitializingContext::ClientInitializingContext(
-    GetCloudPolicyClientCallback get_client_cb,
     UploaderInterface::AsyncStartUploaderCb async_start_upload_cb,
     InitCompleteCallback init_complete_cb,
     ReportingClient* client,
@@ -211,68 +210,13 @@
         init_state_tracker)
     : ReportQueueProvider::InitializingContext(std::move(init_complete_cb),
                                                std::move(init_state_tracker)),
-      get_client_cb_(std::move(get_client_cb)),
       async_start_upload_cb_(std::move(async_start_upload_cb)),
-      client_(client) {
-  DCHECK(get_client_cb_);
-}
+      client_(client) {}
 
 ReportingClient::ClientInitializingContext::~ClientInitializingContext() =
     default;
 
 void ReportingClient::ClientInitializingContext::OnStart() {
-  if (!StorageSelector::is_uploader_required() ||
-      StorageSelector::is_use_missive()) {
-    // If uploading is disabled or missived is used, proceed with no
-    // CloudPolicyClient. In the latter case, uploader will be provided by
-    // EncryptedReportingServiceProvider so it does not need to be enabled here.
-    ConfigureStorageModule();
-    return;
-  }
-
-  // Uploading is enabled, it will need CloudPolicyClient, which requires
-  // posting to the main UI thread for getting access to it.
-  content::GetUIThreadTaskRunner({})->PostTask(
-      FROM_HERE,
-      base::BindOnce(
-          [](GetCloudPolicyClientCallback get_client_cb,
-             base::OnceCallback<void(StatusOr<policy::CloudPolicyClient*>)>
-                 on_client_configured) {
-            if (!StorageSelector::is_uploader_required()) {
-              // Uploading is disabled, proceed with no CloudPolicyClient.
-              std::move(on_client_configured)
-                  .Run(Status(error::FAILED_PRECONDITION,
-                              "Uploading is disabled"));
-              return;
-            }
-            std::move(get_client_cb).Run(std::move(on_client_configured));
-          },
-          std::move(get_client_cb_),
-          base::BindOnce(
-              &ClientInitializingContext::OnCloudPolicyClientConfigured,
-              base::Unretained(this))));
-}
-
-void ReportingClient::ClientInitializingContext::OnCloudPolicyClientConfigured(
-    StatusOr<policy::CloudPolicyClient*> client_result) {
-  if (!client_result.ok()) {
-    client_->uploaders_queue_task_runner_->PostTask(
-        FROM_HERE,
-        base::BindOnce(
-            &ClientInitializingContext::Complete, base::Unretained(this),
-            Status(error::FAILED_PRECONDITION,
-                   base::StrCat({"Unable to build CloudPolicyClient: ",
-                                 client_result.status().message()}))));
-    return;
-  }
-  cloud_policy_client_ = client_result.ValueOrDie();
-  base::ThreadPool::PostTask(
-      FROM_HERE,
-      base::BindOnce(&ClientInitializingContext::ConfigureStorageModule,
-                     base::Unretained(this)));
-}
-
-void ReportingClient::ClientInitializingContext::ConfigureStorageModule() {
   StorageSelector::CreateStorageModule(
       client_->reporting_path_, client_->verification_key_,
       CompressionInformation::COMPRESSION_SNAPPY,
@@ -295,37 +239,6 @@
   }
 
   storage_ = storage_result.ValueOrDie();
-  if (!cloud_policy_client_) {
-    // No policy client - no uploader needed (uploads will not be forwarded).
-    client_->uploaders_queue_task_runner_->PostTask(
-        FROM_HERE, base::BindOnce(&ClientInitializingContext::Complete,
-                                  base::Unretained(this), Status::StatusOK()));
-    return;
-  }
-
-  UploadClient::Create(
-      cloud_policy_client_,
-      base::BindRepeating(&StorageModuleInterface::ReportSuccess, storage_),
-      base::BindRepeating(&StorageModuleInterface::UpdateEncryptionKey,
-                          storage_),
-      base::BindOnce(&ClientInitializingContext::OnUploadClientCreated,
-                     base::Unretained(this)));
-}
-
-void ReportingClient::ClientInitializingContext::OnUploadClientCreated(
-    StatusOr<std::unique_ptr<UploadClient>> upload_client_result) {
-  if (!upload_client_result.ok()) {
-    client_->uploaders_queue_task_runner_->PostTask(
-        FROM_HERE,
-        base::BindOnce(
-            &ClientInitializingContext::Complete, base::Unretained(this),
-            Status(error::FAILED_PRECONDITION,
-                   base::StrCat({"Unable to create UploadClient: ",
-                                 upload_client_result.status().message()}))));
-    return;
-  }
-  upload_client_ = std::move(upload_client_result.ValueOrDie());
-  // All done, return success.
   client_->uploaders_queue_task_runner_->PostTask(
       FROM_HERE, base::BindOnce(&ClientInitializingContext::Complete,
                                 base::Unretained(this), Status::StatusOK()));
@@ -333,17 +246,66 @@
 
 void ReportingClient::ClientInitializingContext::OnCompleted() {
   DCHECK_CALLED_ON_VALID_SEQUENCE(client_->uploaders_queue_sequence_checker_);
-  if (cloud_policy_client_) {
-    DCHECK(client_->cloud_policy_client_ == nullptr)
-        << "Cloud policy client already recorded";
-    client_->cloud_policy_client_ = cloud_policy_client_;
-  }
-  if (upload_client_) {
-    DCHECK(!client_->upload_client_) << "Upload client already recorded";
-    client_->SetUploadClient(std::move(upload_client_));
-  }
   DCHECK(!client_->storage_) << "Storage module already recorded";
   client_->storage_ = std::move(storage_);
+
+  // If non-missived uploading is enabled, it will need CloudPolicyClient,
+  // which requires posting to the main UI thread for getting access to it.
+  // In case of missived Uploader will be provided by
+  // EncryptedReportingServiceProvider so it does not need to be enabled here.
+  if (StorageSelector::is_uploader_required() &&
+      !StorageSelector::is_use_missive()) {
+    // Start configuring upload clients. Note that we will not wait for it!
+    client_->StartConfigureUpload();
+  }
+}
+
+void ReportingClient::StartConfigureUpload() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(uploaders_queue_sequence_checker_);
+  content::GetUIThreadTaskRunner({})->PostTask(
+      FROM_HERE,
+      base::BindOnce(
+          [](ReportingClient* client) {
+            std::move(client->build_cloud_policy_client_cb_)
+                .Run(base::BindPostTask(
+                    client->uploaders_queue_task_runner_,
+                    base::BindOnce(
+                        &ReportingClient::OnCloudPolicyClientConfigured,
+                        base::Unretained(client))));
+          },
+          base::Unretained(this)));
+}
+
+void ReportingClient::OnCloudPolicyClientConfigured(
+    StatusOr<policy::CloudPolicyClient*> client_result) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(uploaders_queue_sequence_checker_);
+  if (!client_result.ok()) {
+    LOG(ERROR) << "Unable to build CloudPolicyClient, status="
+               << client_result.status();
+    return;
+  }
+  DCHECK(cloud_policy_client_ == nullptr)
+      << "Cloud policy client already recorded";
+  cloud_policy_client_ = client_result.ValueOrDie();
+
+  UploadClient::Create(
+      cloud_policy_client_,
+      base::BindRepeating(&StorageModuleInterface::ReportSuccess, storage_),
+      base::BindRepeating(&StorageModuleInterface::UpdateEncryptionKey,
+                          storage_),
+      base::BindOnce(&ReportingClient::OnUploadClientCreated,
+                     base::Unretained(this)));
+}
+
+void ReportingClient::OnUploadClientCreated(
+    StatusOr<std::unique_ptr<UploadClient>> upload_client_result) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(uploaders_queue_sequence_checker_);
+  if (!upload_client_result.ok()) {
+    LOG(ERROR) << "Unable to create UploadClient, status="
+               << upload_client_result.status();
+    return;
+  }
+  SetUploadClient(std::move(upload_client_result.ValueOrDie()));
 }
 
 ReportingClient::ReportingClient()
@@ -440,7 +402,7 @@
     std::unique_ptr<UploadClient> upload_client) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(uploaders_queue_sequence_checker_);
   // This can only happen once.
-  DCHECK(!upload_client_);
+  DCHECK(upload_client_ == nullptr) << "Upload client already recorded";
   upload_client_ = std::move(upload_client);
   uploaders_queue_task_runner_->PostTask(
       FROM_HERE, base::BindOnce(&ReportingClient::FlushAsyncStartUploaderQueue,
diff --git a/chrome/browser/policy/messaging_layer/public/report_client.h b/chrome/browser/policy/messaging_layer/public/report_client.h
index eec4d06..4472285 100644
--- a/chrome/browser/policy/messaging_layer/public/report_client.h
+++ b/chrome/browser/policy/messaging_layer/public/report_client.h
@@ -38,7 +38,6 @@
       : public ReportQueueProvider::InitializingContext {
    public:
     ClientInitializingContext(
-        GetCloudPolicyClientCallback get_client_cb,
         UploaderInterface::AsyncStartUploaderCb async_start_upload_cb,
         InitCompleteCallback init_complete_cb,
         ReportingClient* client,
@@ -58,24 +57,13 @@
     // ReportingClient, if the configuration process succeeded.
     void OnCompleted() override;
 
-    // Called back after CloudPolicyClient configuration succeeded.
-    void OnCloudPolicyClientConfigured(
-        StatusOr<policy::CloudPolicyClient*> client_result);
-
-    // Instantiates a StorageModuleInterface for ReportingClient to refer to.
-    void ConfigureStorageModule();
+    // Handles StorageModuleInterface instantiation for ReportingClient to refer
+    // to.
     void OnStorageModuleConfigured(
         StatusOr<scoped_refptr<StorageModuleInterface>> storage_result);
 
-    // Calls back upon creation of upload client.
-    void OnUploadClientCreated(
-        StatusOr<std::unique_ptr<UploadClient>> upload_client_result);
-
-    GetCloudPolicyClientCallback get_client_cb_;
     UploaderInterface::AsyncStartUploaderCb async_start_upload_cb_;
 
-    policy::CloudPolicyClient* cloud_policy_client_ = nullptr;
-    std::unique_ptr<UploadClient> upload_client_;
     scoped_refptr<StorageModuleInterface> storage_;
     ReportingClient* const client_;
   };
@@ -159,6 +147,16 @@
 
   void FlushAsyncStartUploaderQueue();
 
+  void StartConfigureUpload();
+
+  // Called back after CloudPolicyClient configuration succeeded.
+  void OnCloudPolicyClientConfigured(
+      StatusOr<policy::CloudPolicyClient*> client_result);
+
+  // Calls back upon creation of upload client.
+  void OnUploadClientCreated(
+      StatusOr<std::unique_ptr<UploadClient>> upload_client_result);
+
   void SetUploadClient(std::unique_ptr<UploadClient> upload_client);
 
   base::FilePath reporting_path_;
diff --git a/chrome/browser/printing/print_browsertest.cc b/chrome/browser/printing/print_browsertest.cc
index 3f75537a..c5bf0918 100644
--- a/chrome/browser/printing/print_browsertest.cc
+++ b/chrome/browser/printing/print_browsertest.cc
@@ -95,7 +95,7 @@
   DCHECK(printer_query);
   auto params = mojom::PrintPagesParams::New();
   params->params = mojom::PrintParams::New();
-  if (printer_query->last_status() == PrintingContext::OK) {
+  if (printer_query->last_status() == mojom::ResultCode::kSuccess) {
     RenderParamsFromPrintSettings(printer_query->settings(),
                                   params->params.get());
     params->params->document_cookie = printer_query->cookie();
@@ -103,7 +103,7 @@
     snooped_settings =
         std::make_unique<PrintSettings>(printer_query->settings());
   }
-  bool canceled = printer_query->last_status() == PrintingContext::CANCEL;
+  bool canceled = printer_query->last_status() == mojom::ResultCode::kCanceled;
 
   params->params = GetPrintParams();
 
diff --git a/chrome/browser/printing/print_job_unittest.cc b/chrome/browser/printing/print_job_unittest.cc
index 01d13e4..e020df8 100644
--- a/chrome/browser/printing/print_job_unittest.cc
+++ b/chrome/browser/printing/print_job_unittest.cc
@@ -19,6 +19,7 @@
 #include "content/public/browser/notification_service.h"
 #include "content/public/common/child_process_host.h"
 #include "content/public/test/browser_task_environment.h"
+#include "printing/mojom/print.mojom.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace printing {
@@ -41,7 +42,7 @@
 
   void GetSettingsDone(base::OnceClosure callback,
                        std::unique_ptr<PrintSettings> new_settings,
-                       PrintingContext::Result result) override {
+                       mojom::ResultCode result) override {
     FAIL();
   }
 
diff --git a/chrome/browser/printing/print_job_worker.cc b/chrome/browser/printing/print_job_worker.cc
index 43059434..fdb3b71 100644
--- a/chrome/browser/printing/print_job_worker.cc
+++ b/chrome/browser/printing/print_job_worker.cc
@@ -240,7 +240,7 @@
 #endif  // defined(OS_LINUX) && defined(USE_CUPS)
   }
 
-  PrintingContext::Result result;
+  mojom::ResultCode result;
   {
 #if defined(OS_WIN)
     // Blocking is needed here because Windows printer drivers are oftentimes
@@ -257,14 +257,14 @@
     std::unique_ptr<PrintSettings> new_settings,
     SettingsCallback callback) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
-  PrintingContext::Result result =
+  mojom::ResultCode result =
       printing_context_->UpdatePrintSettingsFromPOD(std::move(new_settings));
   GetSettingsDone(std::move(callback), result);
 }
 #endif
 
 void PrintJobWorker::GetSettingsDone(SettingsCallback callback,
-                                     PrintingContext::Result result) {
+                                     mojom::ResultCode result) {
   std::move(callback).Run(printing_context_->TakeAndResetSettings(), result);
 }
 
@@ -275,7 +275,7 @@
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
 
   if (document_page_count > kMaxPageCount) {
-    GetSettingsDone(std::move(callback), PrintingContext::Result::FAILED);
+    GetSettingsDone(std::move(callback), mojom::ResultCode::kFailed);
     return;
   }
 
@@ -313,7 +313,7 @@
 }
 
 void PrintJobWorker::UseDefaultSettings(SettingsCallback callback) {
-  PrintingContext::Result result;
+  mojom::ResultCode result;
   {
 #if defined(OS_WIN)
     // Blocking is needed here because Windows printer drivers are oftentimes
@@ -348,9 +348,8 @@
     document_name = SimplifyDocumentTitle(
         l10n_util::GetStringUTF16(IDS_DEFAULT_PRINT_DOCUMENT_TITLE));
   }
-  PrintingContext::Result result =
-      printing_context_->NewDocument(document_name);
-  if (result != PrintingContext::OK) {
+  mojom::ResultCode result = printing_context_->NewDocument(document_name);
+  if (result != mojom::ResultCode::kSuccess) {
     OnFailure();
     return;
   }
@@ -480,7 +479,7 @@
   DCHECK(print_job_);
 
   int job_id = printing_context_->job_id();
-  if (printing_context_->DocumentDone() != PrintingContext::OK) {
+  if (printing_context_->DocumentDone() != mojom::ResultCode::kSuccess) {
     OnFailure();
     return;
   }
@@ -501,7 +500,7 @@
   DCHECK_NE(page_number_, PageNumber::npos());
 
   // Preprocess.
-  if (printing_context_->NewPage() != PrintingContext::OK) {
+  if (printing_context_->NewPage() != mojom::ResultCode::kSuccess) {
     OnFailure();
     return;
   }
@@ -510,7 +509,7 @@
   document_->RenderPrintedPage(*page, printing_context_->context());
 
   // Postprocess.
-  if (printing_context_->PageDone() != PrintingContext::OK) {
+  if (printing_context_->PageDone() != mojom::ResultCode::kSuccess) {
     OnFailure();
     return;
   }
diff --git a/chrome/browser/printing/print_job_worker.h b/chrome/browser/printing/print_job_worker.h
index 553277b..4b2001b 100644
--- a/chrome/browser/printing/print_job_worker.h
+++ b/chrome/browser/printing/print_job_worker.h
@@ -37,7 +37,7 @@
  public:
   using SettingsCallback =
       base::OnceCallback<void(std::unique_ptr<PrintSettings>,
-                              PrintingContext::Result)>;
+                              mojom::ResultCode)>;
 
   PrintJobWorker(int render_process_id, int render_frame_id);
 
@@ -161,8 +161,7 @@
 #endif
 
   // Reports settings back to |callback|.
-  void GetSettingsDone(SettingsCallback callback,
-                       PrintingContext::Result result);
+  void GetSettingsDone(SettingsCallback callback, mojom::ResultCode result);
 
   // Use the default settings. When using GTK+ or Mac, this can still end up
   // displaying a dialog. So this needs to happen from the UI thread on these
diff --git a/chrome/browser/printing/print_view_manager_base.cc b/chrome/browser/printing/print_view_manager_base.cc
index e4cacbf..0a31c54 100644
--- a/chrome/browser/printing/print_view_manager_base.cc
+++ b/chrome/browser/printing/print_view_manager_base.cc
@@ -155,7 +155,8 @@
     mojom::PrintManagerHost::GetDefaultPrintSettingsCallback callback) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
   mojom::PrintParamsPtr params = mojom::PrintParams::New();
-  if (printer_query && printer_query->last_status() == PrintingContext::OK) {
+  if (printer_query &&
+      printer_query->last_status() == mojom::ResultCode::kSuccess) {
     RenderParamsFromPrintSettings(printer_query->settings(), params.get());
     params->document_cookie = printer_query->cookie();
   }
@@ -237,13 +238,13 @@
   DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
   DCHECK(printer_query);
   mojom::PrintPagesParamsPtr params = CreateEmptyPrintPagesParamsPtr();
-  if (printer_query->last_status() == PrintingContext::OK) {
+  if (printer_query->last_status() == mojom::ResultCode::kSuccess) {
     RenderParamsFromPrintSettings(printer_query->settings(),
                                   params->params.get());
     params->params->document_cookie = printer_query->cookie();
     params->pages = PageRange::GetPages(printer_query->settings().ranges());
   }
-  bool canceled = printer_query->last_status() == PrintingContext::CANCEL;
+  bool canceled = printer_query->last_status() == mojom::ResultCode::kCanceled;
 #if defined(OS_WIN)
   if (canceled) {
     content::GetUIThreadTaskRunner({})->PostTask(
@@ -291,7 +292,7 @@
     mojom::PrintManagerHost::ScriptedPrintCallback callback) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
   mojom::PrintPagesParamsPtr params = CreateEmptyPrintPagesParamsPtr();
-  if (printer_query->last_status() == PrintingContext::OK &&
+  if (printer_query->last_status() == mojom::ResultCode::kSuccess &&
       printer_query->settings().dpi()) {
     RenderParamsFromPrintSettings(printer_query->settings(),
                                   params->params.get());
@@ -428,7 +429,7 @@
 
   // Check if the job was cancelled. This should only happen on Windows when
   // the system dialog is cancelled.
-  if (printer_query->last_status() == PrintingContext::CANCEL) {
+  if (printer_query->last_status() == mojom::ResultCode::kCanceled) {
     queue_->QueuePrinterQuery(std::move(printer_query));
 #if defined(OS_WIN)
     content::GetUIThreadTaskRunner({})->PostTask(
diff --git a/chrome/browser/printing/printer_query.cc b/chrome/browser/printing/printer_query.cc
index a65e9fd..68f987c5 100644
--- a/chrome/browser/printing/printer_query.cc
+++ b/chrome/browser/printing/printer_query.cc
@@ -36,11 +36,11 @@
 
 void PrinterQuery::GetSettingsDone(base::OnceClosure callback,
                                    std::unique_ptr<PrintSettings> new_settings,
-                                   PrintingContext::Result result) {
+                                   mojom::ResultCode result) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
   is_print_dialog_box_shown_ = false;
   last_status_ = result;
-  if (result != PrintingContext::FAILED) {
+  if (result == mojom::ResultCode::kSuccess) {
     settings_ = std::move(new_settings);
     cookie_ = PrintSettings::NewCookie();
   } else {
@@ -54,7 +54,7 @@
 void PrinterQuery::PostSettingsDoneToIO(
     base::OnceClosure callback,
     std::unique_ptr<PrintSettings> new_settings,
-    PrintingContext::Result result) {
+    mojom::ResultCode result) {
   // |this| is owned by |callback|, so |base::Unretained()| is safe.
   content::GetIOThreadTaskRunner({})->PostTask(
       FROM_HERE,
diff --git a/chrome/browser/printing/printer_query.h b/chrome/browser/printing/printer_query.h
index c936e39..44c0509 100644
--- a/chrome/browser/printing/printer_query.h
+++ b/chrome/browser/printing/printer_query.h
@@ -78,7 +78,7 @@
   virtual void StopWorker();
 
   int cookie() const;
-  PrintingContext::Result last_status() const { return last_status_; }
+  mojom::ResultCode last_status() const { return last_status_; }
 
   // Returns if a worker thread is still associated to this instance.
   bool is_valid() const;
@@ -90,11 +90,11 @@
   // Virtual so that tests can override.
   virtual void GetSettingsDone(base::OnceClosure callback,
                                std::unique_ptr<PrintSettings> new_settings,
-                               PrintingContext::Result result);
+                               mojom::ResultCode result);
 
   void PostSettingsDoneToIO(base::OnceClosure callback,
                             std::unique_ptr<PrintSettings> new_settings,
-                            PrintingContext::Result result);
+                            mojom::ResultCode result);
 
   void SetSettingsForTest(std::unique_ptr<PrintSettings> settings);
 
@@ -112,7 +112,7 @@
   int cookie_;
 
   // Results from the last GetSettingsDone() callback.
-  PrintingContext::Result last_status_ = PrintingContext::FAILED;
+  mojom::ResultCode last_status_ = mojom::ResultCode::kFailed;
 
   // All the UI is done in a worker thread because many Win32 print functions
   // are blocking and enters a message loop without your consent. There is one
diff --git a/chrome/browser/printing/test_printer_query.cc b/chrome/browser/printing/test_printer_query.cc
index 028bd4c..a0cb31fe 100644
--- a/chrome/browser/printing/test_printer_query.cc
+++ b/chrome/browser/printing/test_printer_query.cc
@@ -59,10 +59,10 @@
 #endif
   std::unique_ptr<PrintSettings> settings =
       PrintSettingsFromJobSettings(new_settings);
-  PrintingContext::Result result = PrintingContext::OK;
+  mojom::ResultCode result = mojom::ResultCode::kSuccess;
   if (!settings) {
     settings = std::make_unique<PrintSettings>();
-    result = PrintingContext::FAILED;
+    result = mojom::ResultCode::kFailed;
   }
 
   float device_microns_per_device_unit =
diff --git a/chrome/browser/renderer_context_menu/render_view_context_menu.cc b/chrome/browser/renderer_context_menu/render_view_context_menu.cc
index a66204e52..4811898 100644
--- a/chrome/browser/renderer_context_menu/render_view_context_menu.cc
+++ b/chrome/browser/renderer_context_menu/render_view_context_menu.cc
@@ -61,11 +61,11 @@
 #include "chrome/browser/search_engines/template_url_service_factory.h"
 #include "chrome/browser/send_tab_to_self/send_tab_to_self_desktop_util.h"
 #include "chrome/browser/send_tab_to_self/send_tab_to_self_util.h"
+#include "chrome/browser/share/share_submenu_model.h"
 #include "chrome/browser/sharing/click_to_call/click_to_call_context_menu_observer.h"
 #include "chrome/browser/sharing/click_to_call/click_to_call_metrics.h"
 #include "chrome/browser/sharing/click_to_call/click_to_call_utils.h"
 #include "chrome/browser/sharing/features.h"
-#include "chrome/browser/sharing/share_submenu_model.h"
 #include "chrome/browser/sharing/shared_clipboard/shared_clipboard_context_menu_observer.h"
 #include "chrome/browser/sharing/shared_clipboard/shared_clipboard_utils.h"
 #include "chrome/browser/spellchecker/spellcheck_service.h"
@@ -613,7 +613,7 @@
 }
 
 bool ShouldUseShareMenu() {
-  return base::FeatureList::IsEnabled(sharing::kShareMenu);
+  return base::FeatureList::IsEnabled(share::kShareMenu);
 }
 
 }  // namespace
@@ -1352,11 +1352,10 @@
     menu_model_.AddSeparator(ui::NORMAL_SEPARATOR);
 
     if (ShouldUseShareMenu()) {
-      sharing::ShareSubmenuModel::Context context =
-          params_.has_image_contents
-              ? sharing::ShareSubmenuModel::Context::IMAGE
-              : sharing::ShareSubmenuModel::Context::LINK;
-      share_submenu_model_ = std::make_unique<sharing::ShareSubmenuModel>(
+      share::ShareSubmenuModel::Context context =
+          params_.has_image_contents ? share::ShareSubmenuModel::Context::IMAGE
+                                     : share::ShareSubmenuModel::Context::LINK;
+      share_submenu_model_ = std::make_unique<share::ShareSubmenuModel>(
           GetBrowser(), context, params_.page_url);
       if (share_submenu_model_->GetItemCount() > 0) {
         menu_model_.AddSubMenuWithStringId(IDC_CONTENT_CONTEXT_SHARING_SUBMENU,
@@ -1523,8 +1522,8 @@
                                   IDS_CONTENT_CONTEXT_COPYIMAGELOCATION);
 
   if (ShouldUseShareMenu() && !share_submenu_model_) {
-    share_submenu_model_ = std::make_unique<sharing::ShareSubmenuModel>(
-        GetBrowser(), sharing::ShareSubmenuModel::Context::IMAGE,
+    share_submenu_model_ = std::make_unique<share::ShareSubmenuModel>(
+        GetBrowser(), share::ShareSubmenuModel::Context::IMAGE,
         params_.src_url);
     if (share_submenu_model_->GetItemCount() > 0) {
       menu_model_.AddSubMenuWithStringId(IDC_CONTENT_CONTEXT_SHARING_SUBMENU,
@@ -1655,8 +1654,8 @@
 
   if (ShouldUseShareMenu()) {
     menu_model_.AddSeparator(ui::NORMAL_SEPARATOR);
-    share_submenu_model_ = std::make_unique<sharing::ShareSubmenuModel>(
-        GetBrowser(), sharing::ShareSubmenuModel::Context::PAGE,
+    share_submenu_model_ = std::make_unique<share::ShareSubmenuModel>(
+        GetBrowser(), share::ShareSubmenuModel::Context::PAGE,
         params_.page_url);
     if (share_submenu_model_->GetItemCount() > 0) {
       menu_model_.AddSubMenuWithStringId(IDC_CONTENT_CONTEXT_SHARING_SUBMENU,
diff --git a/chrome/browser/renderer_context_menu/render_view_context_menu.h b/chrome/browser/renderer_context_menu/render_view_context_menu.h
index 879d7ca4..3fc171c 100644
--- a/chrome/browser/renderer_context_menu/render_view_context_menu.h
+++ b/chrome/browser/renderer_context_menu/render_view_context_menu.h
@@ -16,7 +16,7 @@
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/custom_handlers/protocol_handler_registry.h"
-#include "chrome/browser/sharing/share_submenu_model.h"
+#include "chrome/browser/share/share_submenu_model.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/send_tab_to_self/send_tab_to_self_sub_menu_model.h"
 #include "components/renderer_context_menu/context_menu_content_type.h"
@@ -354,7 +354,7 @@
       send_tab_to_self_sub_menu_model_;
 
   // Sharing submenu, if present.
-  std::unique_ptr<sharing::ShareSubmenuModel> share_submenu_model_;
+  std::unique_ptr<share::ShareSubmenuModel> share_submenu_model_;
 
   // Click to call menu observer.
   std::unique_ptr<ClickToCallContextMenuObserver>
diff --git a/chrome/browser/resources/chromeos/accessibility/accessibility_common/magnifier/magnifier.js b/chrome/browser/resources/chromeos/accessibility/accessibility_common/magnifier/magnifier.js
index f313e7c1..a6fdd52 100644
--- a/chrome/browser/resources/chromeos/accessibility/accessibility_common/magnifier/magnifier.js
+++ b/chrome/browser/resources/chromeos/accessibility/accessibility_common/magnifier/magnifier.js
@@ -48,6 +48,13 @@
         [], chrome.automation.EventType.CARET_BOUNDS_CHANGED,
         event => this.onCaretBoundsChanged(event));
 
+    /** @private {function(!chrome.accessibilityPrivate.ScreenRect)} */
+    this.onMagnifierBoundsChangedListener_ = bounds =>
+        this.onMagnifierBoundsChanged_(bounds);
+
+    /** @private {function(!Array<!chrome.settingsPrivate.PrefObject>)} */
+    this.updateFromPrefsListener_ = prefs => this.updateFromPrefs_(prefs);
+
     this.init_();
   }
 
@@ -58,7 +65,10 @@
     this.onCaretBoundsChangedHandler.stop();
 
     chrome.accessibilityPrivate.onMagnifierBoundsChanged.removeListener(
-        this.onMagnifierBoundsChanged_);
+        this.onMagnifierBoundsChangedListener_);
+
+    chrome.settingsPrivate.onPrefsChanged.removeListener(
+        this.updateFromPrefsListener_);
   }
 
   /**
@@ -68,7 +78,7 @@
   init_() {
     chrome.settingsPrivate.getAllPrefs(prefs => this.updateFromPrefs_(prefs));
     chrome.settingsPrivate.onPrefsChanged.addListener(
-        prefs => this.updateFromPrefs_(prefs));
+        this.updateFromPrefsListener_);
 
     chrome.automation.getDesktop(desktop => {
       this.focusHandler_.setNodes(desktop);
@@ -80,7 +90,7 @@
     });
 
     chrome.accessibilityPrivate.onMagnifierBoundsChanged.addListener(
-        bounds => this.onMagnifierBoundsChanged_(bounds));
+        this.onMagnifierBoundsChangedListener_);
 
     this.isInitializing_ = true;
 
@@ -96,6 +106,10 @@
         });
   }
 
+  /**
+   * @param {!chrome.accessibilityPrivate.ScreenRect} bounds
+   * @private
+   */
   onMagnifierBoundsChanged_(bounds) {
     if (this.magnifierDebugDrawRect_) {
       chrome.accessibilityPrivate.setFocusRings([{
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/phonetic_data_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/phonetic_data_test.js
index af3b5d20..e9f3a21 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/phonetic_data_test.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/phonetic_data_test.js
@@ -29,9 +29,20 @@
  * @const
  */
 JA_TEST_MAP = new Map([
-  ['A', 'エイ アニマル'], ['a', 'エイ アニマル'], ['1', 'イチ'],
-  ['A', 'エイ アニマル'], ['a', 'エイ アニマル'], ['1', 'イチ'],
-  ['亜', 'アジア ノ ア'], ['ー', 'チョウオン']
+  ['A', 'エイ アニマル'],
+  ['a', 'エイ アニマル'],
+  ['1', 'イチ'],
+  ['A', 'エイ アニマル'],
+  ['a', 'エイ アニマル'],
+  ['1', 'イチ'],
+  ['ー', 'チョウオン'],
+  ['。', 'マル'],
+  ['亜', 'アジア ノ ア'],
+  ['今', 'コンゲツノコン'],
+  ['日', 'ニチヨウビノニチ'],
+  ['天', 'テンキヨホウノテン'],
+  ['気', 'クウキノキ'],
+  ['働', 'ロウドウノドウ'],
 ]);
 
 // TODO(crbug/1195393): Polish phonetic readings so that users can disambiguate
@@ -53,14 +64,14 @@
 });
 
 TEST_F('ChromeVoxPhoneticDataTest', 'forTextJaSingleCharacter', function() {
-  assertEquals('ヒラガナ あ', PhoneticData.forText('あ', 'ja'));
+  assertEquals('あ', PhoneticData.forText('あ', 'ja'));
   assertEquals('カタカナ ア', PhoneticData.forText('ア', 'ja'));
-  assertEquals('ヒラガナ チイサイ あ', PhoneticData.forText('ぁ', 'ja'));
+  assertEquals('あ', PhoneticData.forText('ぁ', 'ja'));
   assertEquals('カタカナ チイサイ ア', PhoneticData.forText('ァ', 'ja'));
   assertEquals('ハンカク ア', PhoneticData.forText('ア', 'ja'));
   assertEquals('ハンカク チイサイ ア', PhoneticData.forText('ァ', 'ja'));
   assertEquals('オオモジ A', PhoneticData.forText('A', 'ja'));
-  assertEquals('ハンカク a', PhoneticData.forText('a', 'ja'));
+  assertEquals('a', PhoneticData.forText('a', 'ja'));
   assertEquals('イチ', PhoneticData.forText('1', 'ja'));
   assertEquals('ゼンカクオオモジ A', PhoneticData.forText('A', 'ja'));
   assertEquals('ゼンカク a', PhoneticData.forText('a', 'ja'));
@@ -69,47 +80,123 @@
 });
 
 TEST_F(
-    'ChromeVoxPhoneticDataTest', 'forTextJaPairCharacters_StartWithHiragana',
+    'ChromeVoxPhoneticDataTest', 'forTextJaPairCharacters_EndWithHiragana',
     function() {
-      assertEquals('ヒラガナ ああ', PhoneticData.forText('ああ', 'ja'));
+      assertEquals('ああ', PhoneticData.forText('ああ', 'ja'));
+      assertEquals('ああ', PhoneticData.forText('ぁあ', 'ja'));
+      assertEquals('オオモジ A あ', PhoneticData.forText('Aあ', 'ja'));
+    });
+
+TEST_F(
+    'ChromeVoxPhoneticDataTest', 'forTextJaPairCharacters_EndWithKatakana',
+    function() {
+      assertEquals('カタカナ アア', PhoneticData.forText('アア', 'ja'));
       assertEquals(
-          'ヒラガナ あ カタカナ ア', PhoneticData.forText('あア', 'ja'));
-      assertEquals(
-          'ヒラガナ あ ヒラガナ チイサイ あ',
-          PhoneticData.forText('あぁ', 'ja'));
-      assertEquals(
-          'ヒラガナ あ カタカナ チイサイ ア',
-          PhoneticData.forText('あァ', 'ja'));
-      assertEquals('ヒラガナ あ ハンカク ア', PhoneticData.forText('あア', 'ja'));
-      assertEquals(
-          'ヒラガナ あ ハンカク チイサイ ア', PhoneticData.forText('あァ', 'ja'));
-      assertEquals('ヒラガナ あ オオモジ A', PhoneticData.forText('あA', 'ja'));
-      assertEquals('ヒラガナ あ ハンカク a', PhoneticData.forText('あa', 'ja'));
-      assertEquals('ヒラガナ あ イチ', PhoneticData.forText('あ1', 'ja'));
-      assertEquals(
-          'ヒラガナ あ ゼンカクオオモジ A',
-          PhoneticData.forText('あA', 'ja'));
-      assertEquals(
-          'ヒラガナ あ ゼンカク a', PhoneticData.forText('あa', 'ja'));
-      assertEquals('ヒラガナ あ イチ', PhoneticData.forText('あ1', 'ja'));
-      assertEquals(
-          'ヒラガナ あ アジア ノ ア', PhoneticData.forText('あ亜', 'ja'));
+          'カタカナ チイサイ アア', PhoneticData.forText('ァア', 'ja'));
+      assertEquals('あ カタカナ ア', PhoneticData.forText('あア', 'ja'));
     });
 
 TEST_F(
     'ChromeVoxPhoneticDataTest',
-    'forTextJaPairCharacters_StartWithHiraganaSmallLetter', function() {
+    'forTextJaPairCharacters_EndWithHiraganaSmallLetter', function() {
+      assertEquals('あぁ', PhoneticData.forText('ぁぁ', 'ja'));
+      assertEquals('あぁ', PhoneticData.forText('あぁ', 'ja'));
+      assertEquals('アジア ノ ア あ', PhoneticData.forText('亜ぁ', 'ja'));
+    });
+
+TEST_F(
+    'ChromeVoxPhoneticDataTest',
+    'forTextJaPairCharacters_EndWithKatakanaSmallLetter', function() {
       assertEquals(
-          'ヒラガナ チイサイ あ ヒラガナ あ',
-          PhoneticData.forText('ぁあ', 'ja'));
+          'カタカナ チイサイ アァ', PhoneticData.forText('ァァ', 'ja'));
+      assertEquals('カタカナ アァ', PhoneticData.forText('アァ', 'ja'));
       assertEquals(
-          'ヒラガナ チイサイ あぁ', PhoneticData.forText('ぁぁ', 'ja'));
+          'あ カタカナ チイサイ ア', PhoneticData.forText('あァ', 'ja'));
+    });
+
+TEST_F(
+    'ChromeVoxPhoneticDataTest',
+    'forTextJaPairCharacters_EndWithHalfWidthKatakana', function() {
+      assertEquals('ハンカク アア', PhoneticData.forText('アア', 'ja'));
+      assertEquals('ハンカク チイサイ アア', PhoneticData.forText('ァア', 'ja'));
+      assertEquals('あ ハンカク ア', PhoneticData.forText('あア', 'ja'));
+    });
+
+TEST_F(
+    'ChromeVoxPhoneticDataTest',
+    'forTextJaPairCharacters_EndWithHalfWidthKatakanaSmallLetter', function() {
+      assertEquals('ハンカク チイサイ アァ', PhoneticData.forText('ァァ', 'ja'));
+      assertEquals('ハンカク アァ', PhoneticData.forText('アァ', 'ja'));
+      assertEquals('あ ハンカク チイサイ ア', PhoneticData.forText('あァ', 'ja'));
+    });
+
+TEST_F(
+    'ChromeVoxPhoneticDataTest',
+    'forTextJaPairCharacters_EndWithHalfWidthAlphabetUpper', function() {
+      assertEquals('オオモジ AA', PhoneticData.forText('AA', 'ja'));
+      assertEquals(
+          'ゼンカクオオモジ A ハンカクオオモジ A',
+          PhoneticData.forText('AA', 'ja'));
+      assertEquals(
+          'ゼンカク a ハンカクオオモジ A', PhoneticData.forText('aA', 'ja'));
+      assertEquals('あ オオモジ A', PhoneticData.forText('あA', 'ja'));
+    });
+
+TEST_F(
+    'ChromeVoxPhoneticDataTest',
+    'forTextJaPairCharacters_EndWithHalfWidthAlphabetLower', function() {
+      assertEquals('aa', PhoneticData.forText('aa', 'ja'));
+      assertEquals('あ a', PhoneticData.forText('あa', 'ja'));
+    });
+
+TEST_F(
+    'ChromeVoxPhoneticDataTest',
+    'forTextJaPairCharacters_EndWithFullWidthAlphabetUpper', function() {
+      assertEquals('ゼンカクオオモジ AA', PhoneticData.forText('AA', 'ja'));
+      assertEquals(
+          'ゼンカク a オオモジ A', PhoneticData.forText('aA', 'ja'));
+      assertEquals(
+          'あ ゼンカクオオモジ A', PhoneticData.forText('あA', 'ja'));
+    });
+
+TEST_F(
+    'ChromeVoxPhoneticDataTest',
+    'forTextJaPairCharacters_EndWithFullWidthAlphabetLower', function() {
+      assertEquals('ゼンカク aa', PhoneticData.forText('aa', 'ja'));
+      assertEquals(
+          'ゼンカクオオモジ A a', PhoneticData.forText('Aa', 'ja'));
+      assertEquals('あ ゼンカク a', PhoneticData.forText('あa', 'ja'));
+    });
+
+TEST_F(
+    'ChromeVoxPhoneticDataTest', 'forTextJaPairCharacters_EndWithOther',
+    function() {
+      assertEquals(
+          'アジア ノ ア アジア ノ ア', PhoneticData.forText('亜亜', 'ja'));
+      assertEquals('あ イチ', PhoneticData.forText('あ1', 'ja'));
+      assertEquals('あ イチ', PhoneticData.forText('あ1', 'ja'));
     });
 
 TEST_F('ChromeVoxPhoneticDataTest', 'forTextJaLongSound', function() {
-  assertEquals('ヒラガナ あ チョウオン', PhoneticData.forText('あー', 'ja'));
+  assertEquals('あ チョウオン', PhoneticData.forText('あー', 'ja'));
   assertEquals('カタカナ ア チョウオン', PhoneticData.forText('アー', 'ja'));
   assertEquals('ハンカク アー', PhoneticData.forText('アー', 'ja'));
   assertEquals('チョウオン チョウオン', PhoneticData.forText('ーー', 'ja'));
   assertEquals('アジア ノ ア チョウオン', PhoneticData.forText('亜ー', 'ja'));
+});
+
+TEST_F('ChromeVoxPhoneticDataTest', 'forTextSampleSentences', function() {
+  assertEquals(
+      'コンゲツノコン ニチヨウビノニチ は テンキヨホウノテン クウキノキ です マル',
+      PhoneticData.forText('今日は天気です。', 'ja'));
+  assertEquals(
+      'きょうはてんきです マル',
+      PhoneticData.forText('きょうはてんきです。', 'ja'));
+  assertEquals(
+      'オオモジ G oogle で ロウドウノドウ いています マル',
+      PhoneticData.forText('Googleで働いています。', 'ja'));
+  assertEquals('オオモジ GOOGLE', PhoneticData.forText('GOOGLE', 'ja'));
+  assertEquals(
+      'オオモジ GO o オオモジ GLE', PhoneticData.forText('GOoGLE', 'ja'));
+  assertEquals('カタカナ キャット', PhoneticData.forText('キャット', 'ja'));
 });
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/common/abstract_tts.js b/chrome/browser/resources/chromeos/accessibility/chromevox/common/abstract_tts.js
index 7d456c0..d8afe52 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/common/abstract_tts.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/common/abstract_tts.js
@@ -188,7 +188,7 @@
    * @protected
    */
   preprocess(text, properties) {
-    if (text.length === 1 && text >= 'A' && text <= 'Z') {
+    if (text.length === 1 && text.toLowerCase() !== text) {
       // Describe capital letters according to user's setting.
       if (localStorage['capitalStrategy'] === 'increasePitch') {
         for (const prop in AbstractTts.PERSONALITY_CAPITAL) {
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/common/tts_background.js b/chrome/browser/resources/chromeos/accessibility/chromevox/common/tts_background.js
index a1c4b61..a5a5f9c3 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/common/tts_background.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/common/tts_background.js
@@ -773,7 +773,6 @@
     // Remove this property so we don't trap ourselves in a loop.
     delete properties[AbstractTts.PHONETIC_CHARACTERS];
 
-    text = text.toLowerCase();
     // If undefined language, use the UI language of the browser as a best
     // guess.
     if (!properties['lang']) {
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/common/tts_background_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/common/tts_background_test.js
index 1dc03d1..8163189 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/common/tts_background_test.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/common/tts_background_test.js
@@ -40,6 +40,8 @@
   assertEquals('A', preprocess('A'));
   assertEquals('a.', preprocess('a.'));
   assertEquals('.a', preprocess('.a'));
+  assertEquals('A', preprocess('a'));
+  assertEquals('Б', preprocess('б'));
 
   // Only summarize punctuation if there are three or more occurrences without
   // a space in between.
@@ -176,6 +178,8 @@
   localStorage['capitalStrategy'] = 'announceCapitals';
   assertEquals('Cap A', preprocess('A'));
   assertEquals('Cap Z', preprocess('Z'));
+  assertEquals('Cap A', preprocess('A'));
+  assertEquals('Cap Б', preprocess('Б'));
 
   // Do not announce capital for the following inputs.
   assertEquals('BB', preprocess('BB'));
@@ -346,6 +350,10 @@
   assertTrue(spokenStrings.includes('A'));
   assertTrue(spokenStrings.includes('ハンカク a'));
 
+  tts.speak('A', QueueMode.QUEUE, {lang: 'ja', phoneticCharacters: true});
+  assertTrue(spokenStrings.includes('A'));
+  assertTrue(spokenStrings.includes('オオモジ A'));
+
   tts.speak('人', QueueMode.QUEUE, {lang: 'ja', phoneticCharacters: true});
   assertTrue(spokenStrings.includes('人'));
   assertTrue(spokenStrings.includes('ヒト,ニンゲン ノ ニン'));
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/third_party/tamachiyomi/ja_phonetic_data.js b/chrome/browser/resources/chromeos/accessibility/chromevox/third_party/tamachiyomi/ja_phonetic_data.js
index 6ac3ba06..8662cb7 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/third_party/tamachiyomi/ja_phonetic_data.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/third_party/tamachiyomi/ja_phonetic_data.js
@@ -48,18 +48,18 @@
     for (const char of chars) {
       const currentCharacterSet = JaPhoneticData.getCharacterSet(char);
       if (currentCharacterSet !== JaPhoneticData.CharacterSet.OTHER) {
-        if (currentCharacterSet !== lastCharacterSet) {
-          // If the character set has changed, push the prefix first,
-          // followed by the character.
-          const prefix = JaPhoneticData.getDefaultPrefix(currentCharacterSet);
-          result.push(prefix, JaPhoneticData.maybeGetLargeLetterKana(char));
+        const info =
+            JaPhoneticData.getPrefixInfo(lastCharacterSet, currentCharacterSet);
+        if (info.prefix) {
+          // Need to announce the new charset explicitly.
+          result.push(info.prefix);
+        }
+        if (info.delimiter === false && result.length > 0) {
+          // Does not convert small Kana if it is not the beginning of the
+          // element.
+          result[result.length - 1] += char;
         } else {
-          const lastEntry = result[result.length - 1];
-          if (lastEntry) {
-            // If the character set stayed the same, then append the character
-            // to the last entry in the array.
-            result[result.length - 1] = lastEntry.concat(char);
-          }
+          result.push(JaPhoneticData.maybeGetLargeLetterKana(char));
         }
       } else {
         result.push(JaPhoneticData.phoneticMap_.get(char) || char);
@@ -137,6 +137,113 @@
   static getDefaultPrefix(characterSet) {
     return JaPhoneticData.DEFAULT_PREFIX.get(characterSet);
   }
+
+  /**
+   * Returns an object containing the relationship between the preceding
+   * character set and the current character set.
+   * @param {JaPhoneticData.CharacterSet} lastCharacterSet
+   * @param {JaPhoneticData.CharacterSet} currentCharacterSet
+   * @return {Object<{delimiter: boolean, prefix: ?string}>}
+   * delimiter: true if a space between preceding character and current
+   * character is necessary. A space leaves a pause so users can recognize that
+   * the type of characters has changed.
+   * prefix: a string that represents the character set. Null if unncessary.
+   */
+  static getPrefixInfo(lastCharacterSet, currentCharacterSet) {
+    // Don't add prefixes for the same character set.
+    if (lastCharacterSet === currentCharacterSet) {
+      return {delimiter: false, prefix: null};
+    }
+    // Exceptional cases:
+    switch (currentCharacterSet) {
+      case JaPhoneticData.CharacterSet.HIRAGANA:
+        switch (lastCharacterSet) {
+          case JaPhoneticData.CharacterSet.NONE:
+          case JaPhoneticData.CharacterSet.HIRAGANA_SMALL_LETTER:
+            return {delimiter: false, prefix: null};
+          case JaPhoneticData.CharacterSet.HALF_WIDTH_ALPHABET_UPPER:
+          case JaPhoneticData.CharacterSet.HALF_WIDTH_ALPHABET_LOWER:
+          case JaPhoneticData.CharacterSet.FULL_WIDTH_ALPHABET_UPPER:
+          case JaPhoneticData.CharacterSet.FULL_WIDTH_ALPHABET_LOWER:
+          case JaPhoneticData.CharacterSet.OTHER:
+            return {delimiter: true, prefix: null};
+        }
+        break;
+      case JaPhoneticData.CharacterSet.KATAKANA:
+        switch (lastCharacterSet) {
+          case JaPhoneticData.CharacterSet.KATAKANA_SMALL_LETTER:
+            return {delimiter: false, prefix: null};
+        }
+        break;
+      case JaPhoneticData.CharacterSet.HIRAGANA_SMALL_LETTER:
+        switch (lastCharacterSet) {
+          case JaPhoneticData.CharacterSet.NONE:
+          case JaPhoneticData.CharacterSet.HIRAGANA:
+            return {delimiter: false, prefix: null};
+          case JaPhoneticData.CharacterSet.OTHER:
+            return {delimiter: true, prefix: null};
+        }
+        break;
+      case JaPhoneticData.CharacterSet.KATAKANA_SMALL_LETTER:
+        switch (lastCharacterSet) {
+          case JaPhoneticData.CharacterSet.KATAKANA:
+            return {delimiter: false, prefix: null};
+        }
+        break;
+      case JaPhoneticData.CharacterSet.HALF_WIDTH_KATAKANA:
+        switch (lastCharacterSet) {
+          case JaPhoneticData.CharacterSet.HALF_WIDTH_KATAKANA_SMALL_LETTER:
+            return {delimiter: false, prefix: null};
+        }
+        break;
+      case JaPhoneticData.CharacterSet.HALF_WIDTH_KATAKANA_SMALL_LETTER:
+        switch (lastCharacterSet) {
+          case JaPhoneticData.CharacterSet.HALF_WIDTH_KATAKANA:
+            return {delimiter: false, prefix: null};
+        }
+        break;
+      case JaPhoneticData.CharacterSet.HALF_WIDTH_ALPHABET_UPPER:
+        switch (lastCharacterSet) {
+          case JaPhoneticData.CharacterSet.FULL_WIDTH_ALPHABET_UPPER:
+          case JaPhoneticData.CharacterSet.FULL_WIDTH_ALPHABET_LOWER:
+          case JaPhoneticData.CharacterSet.OTHER:
+            return {delimiter: true, prefix: 'ハンカクオオモジ'};
+        }
+        break;
+      case JaPhoneticData.CharacterSet.HALF_WIDTH_ALPHABET_LOWER:
+        switch (lastCharacterSet) {
+          case JaPhoneticData.CharacterSet.NONE:
+            return {delimiter: false, prefix: null};
+          case JaPhoneticData.CharacterSet.HIRAGANA:
+          case JaPhoneticData.CharacterSet.KATAKANA:
+          case JaPhoneticData.CharacterSet.HIRAGANA_SMALL_LETTER:
+          case JaPhoneticData.CharacterSet.KATAKANA_SMALL_LETTER:
+          case JaPhoneticData.CharacterSet.HALF_WIDTH_KATAKANA:
+          case JaPhoneticData.CharacterSet.HALF_WIDTH_KATAKANA_SMALL_LETTER:
+          case JaPhoneticData.CharacterSet.HALF_WIDTH_ALPHABET_UPPER:
+            return {delimiter: true, prefix: null};
+        }
+        break;
+      case JaPhoneticData.CharacterSet.FULL_WIDTH_ALPHABET_UPPER:
+        switch (lastCharacterSet) {
+          case JaPhoneticData.CharacterSet.FULL_WIDTH_ALPHABET_LOWER:
+          case JaPhoneticData.CharacterSet.OTHER:
+            return {delimiter: true, prefix: 'オオモジ'};
+        }
+        break;
+      case JaPhoneticData.CharacterSet.FULL_WIDTH_ALPHABET_LOWER:
+        switch (lastCharacterSet) {
+          case JaPhoneticData.CharacterSet.FULL_WIDTH_ALPHABET_UPPER:
+            return {delimiter: true, prefix: null};
+        }
+        break;
+    }
+    // Returns the default prefix.
+    return {
+      delimiter: true,
+      prefix: JaPhoneticData.getDefaultPrefix(currentCharacterSet)
+    };
+  }
 };
 
 /** @enum {number} */
diff --git a/chrome/browser/resources/chromeos/login/oobe_welcome.html b/chrome/browser/resources/chromeos/login/oobe_welcome.html
index 271bcd96b..28296d44 100644
--- a/chrome/browser/resources/chromeos/login/oobe_welcome.html
+++ b/chrome/browser/resources/chromeos/login/oobe_welcome.html
@@ -98,6 +98,15 @@
       <h1 slot="title">
         [[i18nDynamic(locale, 'languageSectionTitle')]]
       </h1>
+      <p slot="subtitle">
+        <template is="dom-if" if="[[shouldShowLanguageSectionSubtitle_]]">
+          [[i18nDynamic(locale, 'languageSectionHint')]]
+          <a id="languagesLearnMore" class="oobe-local-link" is="action-link"
+              on-click="onLanguageLearnMoreLinkClicked_">
+            [[i18nDynamic(locale, 'learnMore')]]
+          </a>
+        </template>
+      </p>
       <div id="setup-container" slot="content" class="landscape-header-aligned">
         <div id="languageDropdownContainer"
             class="flex layout center horizontal justified
diff --git a/chrome/browser/resources/chromeos/login/oobe_welcome.js b/chrome/browser/resources/chromeos/login/oobe_welcome.js
index 0419563..6adf0b3 100644
--- a/chrome/browser/resources/chromeos/login/oobe_welcome.js
+++ b/chrome/browser/resources/chromeos/login/oobe_welcome.js
@@ -134,7 +134,18 @@
      * Tracks if we've given the ChromeVox hint yet.
      * @private
      */
-    chromeVoxHintGiven_: {type: Boolean, value: false}
+    chromeVoxHintGiven_: {type: Boolean, value: false},
+
+    /**
+     * Whether the subtitle for the language section should be shown.
+     */
+    shouldShowLanguageSectionSubtitle_: {
+      type: Boolean,
+      value() {
+        return loadTimeData.valueExists('languagePacksEnabled') &&
+            loadTimeData.getBoolean('languagePacksEnabled');
+      },
+    },
   },
 
   /** Overridden from LoginScreenBehavior. */
@@ -494,6 +505,8 @@
     this.currentKeyboard = getSelectedTitle(this.keyboards);
   },
 
+  /** ******************** Language section ******************* */
+
   /**
    * Handle "OK" button for "LanguageSelection" screen.
    *
@@ -503,6 +516,20 @@
     this.setUIStep(UIState.GREETING);
   },
 
+  /**
+   * On-tap event handler for "learn more" link about language packs.
+   *
+   * @private
+   */
+  onLanguageLearnMoreLinkClicked_(e) {
+    // TODO(b/200128583): Open the OOBE help app with the help centre article
+    // for language packs, or pop up a <oobe-modal-dialog> with similar content.
+
+    // Can't use this.$.languagesLearnMore here as the element is in a <dom-if>.
+    this.$$('#languagesLearnMore').focus();
+    e.stopPropagation();
+  },
+
   /** ******************** Accessibility section ******************* */
 
   /**
diff --git a/chrome/browser/resources/settings/chromeos/BUILD.gn b/chrome/browser/resources/settings/chromeos/BUILD.gn
index fe75104..eff39e2 100644
--- a/chrome/browser/resources/settings/chromeos/BUILD.gn
+++ b/chrome/browser/resources/settings/chromeos/BUILD.gn
@@ -523,7 +523,7 @@
     "chromeos/os_search_page/search_engine.js",
     "chromeos/os_settings_icons_css.m.js",
     "chromeos/os_settings_menu/os_settings_menu.js",
-    "chromeos/os_settings_main/os_settings_main.m.js",
+    "chromeos/os_settings_main/os_settings_main.js",
     "chromeos/os_settings_page/settings_idle_load.js",
     "chromeos/os_settings_page/os_settings_page.js",
     "chromeos/os_settings_ui/os_settings_ui.m.js",
@@ -749,7 +749,7 @@
     "os_privacy_page:web_components",
     "os_reset_page:web_components",
     "os_search_page:web_components",
-    "os_settings_main:polymer3_elements",
+    "os_settings_main:web_components",
     "os_settings_menu:web_components",
     "os_settings_page:web_components",
     "os_settings_search_box:web_components",
diff --git a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_constants.js b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_constants.js
index 6ac1bf8..cccb3466 100644
--- a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_constants.js
+++ b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_constants.js
@@ -45,6 +45,7 @@
     PHONE_HUB_TASK_CONTINUATION: 6,
     WIFI_SYNC: 7,
     ECHE: 8,
+    PHONE_HUB_CAMERA_ROLL: 9,
   };
 
   /**
@@ -98,6 +99,7 @@
    *   messagesState: !settings.MultiDeviceFeatureState,
    *   smartLockState: !settings.MultiDeviceFeatureState,
    *   phoneHubState: !settings.MultiDeviceFeatureState,
+   *   phoneHubCameraRollState: !settings.MultiDeviceFeatureState,
    *   phoneHubNotificationsState: !settings.MultiDeviceFeatureState,
    *   phoneHubTaskContinuationState: !settings.MultiDeviceFeatureState,
    *   phoneHubAppsState: !settings.MultiDeviceFeatureState,
diff --git a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_feature_behavior.js b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_feature_behavior.js
index d34c453..52d23c3d 100644
--- a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_feature_behavior.js
+++ b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_feature_behavior.js
@@ -86,6 +86,7 @@
    */
   isPhoneHubSubFeature(feature) {
     return [
+      settings.MultiDeviceFeature.PHONE_HUB_CAMERA_ROLL,
       settings.MultiDeviceFeature.PHONE_HUB_NOTIFICATIONS,
       settings.MultiDeviceFeature.PHONE_HUB_TASK_CONTINUATION,
       settings.MultiDeviceFeature.ECHE
@@ -152,6 +153,8 @@
         return this.i18n('multideviceSmartLockItemTitle');
       case settings.MultiDeviceFeature.PHONE_HUB:
         return this.i18n('multidevicePhoneHubItemTitle');
+      case settings.MultiDeviceFeature.PHONE_HUB_CAMERA_ROLL:
+        return this.i18n('multidevicePhoneHubCameraRollItemTitle');
       case settings.MultiDeviceFeature.PHONE_HUB_NOTIFICATIONS:
         return this.i18n('multidevicePhoneHubNotificationsItemTitle');
       case settings.MultiDeviceFeature.PHONE_HUB_TASK_CONTINUATION:
@@ -179,8 +182,8 @@
         return 'os-settings:multidevice-messages';
       case settings.MultiDeviceFeature.SMART_LOCK:
         return 'os-settings:multidevice-smart-lock';
-      // TODO(https://crbug.com/1106937): Use real Phone Hub asset.
       case settings.MultiDeviceFeature.PHONE_HUB:
+      case settings.MultiDeviceFeature.PHONE_HUB_CAMERA_ROLL:
       case settings.MultiDeviceFeature.PHONE_HUB_NOTIFICATIONS:
       case settings.MultiDeviceFeature.PHONE_HUB_TASK_CONTINUATION:
       case settings.MultiDeviceFeature.ECHE:
@@ -208,6 +211,8 @@
         return this.i18nAdvanced('multideviceAndroidMessagesItemSummary');
       case settings.MultiDeviceFeature.PHONE_HUB:
         return this.i18nAdvanced('multidevicePhoneHubItemSummary');
+      case settings.MultiDeviceFeature.PHONE_HUB_CAMERA_ROLL:
+        return this.i18nAdvanced('multidevicePhoneHubCameraRollItemSummary');
       case settings.MultiDeviceFeature.PHONE_HUB_NOTIFICATIONS:
         return this.i18nAdvanced('multidevicePhoneHubNotificationsItemSummary');
       case settings.MultiDeviceFeature.PHONE_HUB_TASK_CONTINUATION:
@@ -245,6 +250,8 @@
         return this.pageContentData.smartLockState;
       case settings.MultiDeviceFeature.PHONE_HUB:
         return this.pageContentData.phoneHubState;
+      case settings.MultiDeviceFeature.PHONE_HUB_CAMERA_ROLL:
+        return this.pageContentData.phoneHubCameraRollState;
       case settings.MultiDeviceFeature.PHONE_HUB_NOTIFICATIONS:
         return this.pageContentData.phoneHubNotificationsState;
       case settings.MultiDeviceFeature.PHONE_HUB_TASK_CONTINUATION:
diff --git a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_notification_access_setup_dialog.html b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_notification_access_setup_dialog.html
index c8dd76f..bb4c78e 100644
--- a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_notification_access_setup_dialog.html
+++ b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_notification_access_setup_dialog.html
@@ -40,7 +40,7 @@
       }
 
       iron-icon {
-        --iron-icon-fill-color: var(--google-red-600);
+        --iron-icon-fill-color: var(--cros-icon-color-alert);
         padding-bottom: 13px;
       }
 
diff --git a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_subpage.html b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_subpage.html
index a60c2c09..23b000e 100644
--- a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_subpage.html
+++ b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_subpage.html
@@ -132,6 +132,16 @@
         </template>
         <template is="dom-if"
             if="[[isFeatureSupported(
+                MultiDeviceFeature.PHONE_HUB_CAMERA_ROLL, pageContentData)]]"
+            restamp>
+          <settings-multidevice-feature-item id="phoneHubCameraRollItem"
+              feature="[[MultiDeviceFeature.PHONE_HUB_CAMERA_ROLL]]"
+              page-content-data="[[pageContentData]]" is-sub-feature
+              deep-link-focus-id$="[[Setting.kPhoneHubCameraRollOnOff]]">
+          </settings-multidevice-feature-item>
+        </template>
+        <template is="dom-if"
+            if="[[isFeatureSupported(
                 MultiDeviceFeature.PHONE_HUB_TASK_CONTINUATION, pageContentData)]]"
             restamp>
           <settings-multidevice-task-continuation-item
diff --git a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_subpage.js b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_subpage.js
index 2457448..19d9e36 100644
--- a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_subpage.js
+++ b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_subpage.js
@@ -40,6 +40,7 @@
         chromeos.settings.mojom.Setting.kMessagesOnOff,
         chromeos.settings.mojom.Setting.kForgetPhone,
         chromeos.settings.mojom.Setting.kPhoneHubOnOff,
+        chromeos.settings.mojom.Setting.kPhoneHubCameraRollOnOff,
         chromeos.settings.mojom.Setting.kPhoneHubNotificationsOnOff,
         chromeos.settings.mojom.Setting.kPhoneHubTaskContinuationOnOff,
         chromeos.settings.mojom.Setting.kWifiSyncOnOff,
diff --git a/chrome/browser/resources/settings/chromeos/os_about_page/about_page_browser_proxy.js b/chrome/browser/resources/settings/chromeos/os_about_page/about_page_browser_proxy.js
index feb3f09..1dfee94ca 100644
--- a/chrome/browser/resources/settings/chromeos/os_about_page/about_page_browser_proxy.js
+++ b/chrome/browser/resources/settings/chromeos/os_about_page/about_page_browser_proxy.js
@@ -109,7 +109,7 @@
  */
 export function browserChannelToI18nId(channel, isLts) {
   if (isLts) {
-    return 'aboutChannelLongTermStable';
+    return 'aboutChannelLongTermSupport';
   }
 
   switch (channel) {
diff --git a/chrome/browser/resources/settings/chromeos/os_about_page/detailed_build_info.js b/chrome/browser/resources/settings/chromeos/os_about_page/detailed_build_info.js
index da27fda..eb13b83e 100644
--- a/chrome/browser/resources/settings/chromeos/os_about_page/detailed_build_info.js
+++ b/chrome/browser/resources/settings/chromeos/os_about_page/detailed_build_info.js
@@ -304,8 +304,7 @@
     const buildInfo = {
       'application_label': loadTimeData.getString('aboutBrowserVersion'),
       'platform': this.versionInfo_.osVersion,
-      'aboutChannelLabel': this.channelInfo_.targetChannel +
-          (this.channelInfo_.isLts ? ' (trusted tester)' : ''),
+      'aboutChannelLabel': this.channelInfo_.targetChannel,
       'firmware_version': this.versionInfo_.osFirmware,
       'aboutIsArcStatusTitle': loadTimeData.getBoolean('aboutIsArcEnabled'),
       'arc_label': this.versionInfo_.arcVersion,
diff --git a/chrome/browser/resources/settings/chromeos/os_languages_page/input_page.html b/chrome/browser/resources/settings/chromeos/os_languages_page/input_page.html
index 00266ab..1fd3102 100644
--- a/chrome/browser/resources/settings/chromeos/os_languages_page/input_page.html
+++ b/chrome/browser/resources/settings/chromeos/os_languages_page/input_page.html
@@ -64,12 +64,12 @@
       }
 
       .name-with-error div {
-        color: var(--settings-error-color);
+        color: var(--cros-text-color-alert);
         margin-top: 8px;
       }
 
       iron-icon[icon='cr:error'] {
-        --iron-icon-fill-color: var(--settings-error-color);
+        --iron-icon-fill-color: var(--cros-icon-color-alert);
         height: var(--cr-icon-size);
         margin-inline-end: 4px;
         width: var(--cr-icon-size);
@@ -130,7 +130,7 @@
       }
 
       cr-button[disabled] iron-icon {
-        --iron-icon-fill-color: var(--google-grey-600);
+        --iron-icon-fill-color: var(--cros-button-icon-color-primary-disabled);
       }
     </style>
 
diff --git a/chrome/browser/resources/settings/chromeos/os_settings.gni b/chrome/browser/resources/settings/chromeos/os_settings.gni
index 2d45ada..cb2e506 100644
--- a/chrome/browser/resources/settings/chromeos/os_settings.gni
+++ b/chrome/browser/resources/settings/chromeos/os_settings.gni
@@ -462,6 +462,7 @@
                                  "chrome/browser/resources/settings/chromeos/os_search_page/search_engines_browser_proxy.html",
                                  "chrome/browser/resources/settings/chromeos/os_search_page/search_subpage.html",
                                  "chrome/browser/resources/settings/chromeos/os_settings_menu/os_settings_menu.html",
+                                 "chrome/browser/resources/settings/chromeos/os_settings_main/os_settings_main.html",
                                  "chrome/browser/resources/settings/chromeos/os_settings_page/os_settings_page.html",
                                  "chrome/browser/resources/settings/chromeos/os_settings_page/settings_idle_load.html",
                                  "chrome/browser/resources/settings/chromeos/os_settings_search_box/os_settings_search_box.html",
diff --git a/chrome/browser/resources/settings/chromeos/os_settings.js b/chrome/browser/resources/settings/chromeos/os_settings.js
index 257082b0..1de5961 100644
--- a/chrome/browser/resources/settings/chromeos/os_settings.js
+++ b/chrome/browser/resources/settings/chromeos/os_settings.js
@@ -82,7 +82,7 @@
 import './os_people_page/os_people_page.m.js';
 import './os_people_page/os_sync_controls.m.js';
 import './os_search_page/os_search_page.js';
-import './os_settings_main/os_settings_main.m.js';
+import './os_settings_main/os_settings_main.js';
 import './os_settings_page/os_settings_page.js';
 import './os_settings_page/settings_idle_load.js';
 import './os_settings_menu/os_settings_menu.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_settings_main/BUILD.gn b/chrome/browser/resources/settings/chromeos/os_settings_main/BUILD.gn
index 1ec4cb4..ef26e6c 100644
--- a/chrome/browser/resources/settings/chromeos/os_settings_main/BUILD.gn
+++ b/chrome/browser/resources/settings/chromeos/os_settings_main/BUILD.gn
@@ -2,20 +2,17 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-import("//chrome/browser/resources/settings/chromeos/os_settings.gni")
 import("//third_party/closure_compiler/compile_js.gni")
-import("//tools/polymer/polymer.gni")
-import("//ui/webui/resources/tools/js_modulizer.gni")
+import("//tools/polymer/html_to_js.gni")
 import("../os_settings.gni")
 
 js_type_check("closure_compile_module") {
   closure_flags = os_settings_closure_flags
   is_polymer3 = true
-  deps = [ ":os_settings_main.m" ]
+  deps = [ ":os_settings_main" ]
 }
 
-js_library("os_settings_main.m") {
-  sources = [ "$root_gen_dir/chrome/browser/resources/settings/chromeos/os_settings_main/os_settings_main.m.js" ]
+js_library("os_settings_main") {
   deps = [
     "..:os_page_visibility.m",
     "..:os_route.m",
@@ -24,18 +21,8 @@
     "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
     "//ui/webui/resources/js:assert.m",
   ]
-  extra_deps = [ ":os_settings_main_module" ]
 }
 
-group("polymer3_elements") {
-  public_deps = [ ":os_settings_main_module" ]
-}
-
-polymer_modulizer("os_settings_main") {
-  js_file = "os_settings_main.js"
-  html_file = "os_settings_main.html"
-  html_type = "dom-module"
-  migrated_imports = os_settings_migrated_imports
-  auto_imports = os_settings_auto_imports
-  namespace_rewrites = os_settings_namespace_rewrites
+html_to_js("web_components") {
+  js_files = [ "os_settings_main.js" ]
 }
diff --git a/chrome/browser/resources/settings/chromeos/os_settings_main/os_settings_main.html b/chrome/browser/resources/settings/chromeos/os_settings_main/os_settings_main.html
index 735f33001..10986fb 100644
--- a/chrome/browser/resources/settings/chromeos/os_settings_main/os_settings_main.html
+++ b/chrome/browser/resources/settings/chromeos/os_settings_main/os_settings_main.html
@@ -1,90 +1,66 @@
-<link rel="import" href="chrome://resources/html/polymer.html">
+<style include="cr-hidden-style settings-shared">
+  #overscroll {
+    margin-top: 64px;
+  }
 
-<link rel="import" href="chrome://resources/cr_components/managed_footnote/managed_footnote.html">
-<link rel="import" href="chrome://resources/cr_elements/hidden_style_css.html">
-<link rel="import" href="chrome://resources/cr_elements/icons.html">
-<link rel="import" href="chrome://resources/html/assert.html">
-<link rel="import" href="chrome://resources/html/search_highlight_utils.html">
-<link rel="import" href="chrome://resources/html/promise_resolver.html">
-<link rel="import" href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html">
-<link rel="import" href="../os_about_page/os_about_page.html">
-<link rel="import" href="../os_settings_page/os_settings_page.html">
-<link rel="import" href="../os_page_visibility.html">
-<link rel="import" href="../../i18n_setup.html">
-<link rel="import" href="../../prefs/prefs.html">
-<link rel="import" href="../os_route.html">
-<link rel="import" href="../../router.html">
-<link rel="import" href="../../settings_shared_css.html">
-<link rel="import" href="../../settings_vars_css.html">
+  .showing-subpage ~ #overscroll {
+    display: none;
+  }
 
-<dom-module id="os-settings-main">
-  <template>
-    <style include="cr-hidden-style settings-shared">
-      #overscroll {
-        margin-top: 64px;
-      }
+  #noSearchResults {
+    margin-top: 80px;
+    text-align: center;
+  }
 
-      .showing-subpage ~ #overscroll {
-        display: none;
-      }
+  #noSearchResults div:first-child {
+    font-size: 123%;  /* Should be 16px when 100% is 13px. */
+    margin-bottom: 10px;
+  }
 
-      #noSearchResults {
-        margin-top: 80px;
-        text-align: center;
-      }
-
-      #noSearchResults div:first-child {
-        font-size: 123%;  /* Should be 16px when 100% is 13px. */
-        margin-bottom: 10px;
-      }
-
-      managed-footnote {
-        border-top: none;
-        /* margin-bottom is needed to compensate for the next element's 21px
-         * margin at the top and 8px padding at the top. This leaves a 12px
-         * padding between this element's content and the top of the next
-         * element's text. */
-        margin-bottom: calc(-21px - 8px);
-        padding-bottom: 16px;
-        padding-top: 12px;
-        /* The next element spills over this element. This ensures the link
-         * is clickable. */
-        position: relative;
-        z-index: 1;
-      }
-    </style>
-    <template is="dom-if"
-        if="[[showManagedHeader_(showingSubpage_, showPages_.about)]]">
-      <managed-footnote show-device-info></managed-footnote>
-    </template>
-    <template is="dom-if" if="[[showPages_.settings]]">
-      <os-settings-page
-          class="cr-centered-card-container"
-          prefs="{{prefs}}"
-          page-visibility="[[pageVisibility]]"
-          show-android-apps="[[showAndroidApps]]"
-          show-crostini="[[showCrostini]]"
-          show-plugin-vm="[[showPluginVm]]"
-          show-reset="[[showReset]]"
-          show-startup="[[showStartup]]"
-          have-play-store-app="[[havePlayStoreApp]]"
-          on-showing-section="onShowingSection_"
-          on-subpage-expand="onShowingSubpage_"
-          on-showing-main-page="onShowingMainPage_"
-          advanced-toggle-expanded="{{advancedToggleExpanded}}"
-          show-kerberos-section="[[showKerberosSection]]">
-      </os-settings-page>
-    </template>
-    <template is="dom-if" if="[[showPages_.about]]">
-      <os-settings-about-page role="main"
-          class="cr-centered-card-container"
-          on-subpage-expand="onShowingSubpage_"
-          on-showing-main-page="onShowingMainPage_"
-          prefs="{{prefs}}"
-          show-crostini="[[showCrostini]]">
-      </os-settings-about-page>
-    </template>
-    <div id="overscroll" style="padding-bottom: [[overscroll_]]px"></div>
-  </template>
-  <script src="os_settings_main.js"></script>
-</dom-module>
+  managed-footnote {
+    border-top: none;
+    /* margin-bottom is needed to compensate for the next element's 21px
+      * margin at the top and 8px padding at the top. This leaves a 12px
+      * padding between this element's content and the top of the next
+      * element's text. */
+    margin-bottom: calc(-21px - 8px);
+    padding-bottom: 16px;
+    padding-top: 12px;
+    /* The next element spills over this element. This ensures the link
+      * is clickable. */
+    position: relative;
+    z-index: 1;
+  }
+</style>
+<template is="dom-if"
+    if="[[showManagedHeader_(showingSubpage_, showPages_.about)]]">
+  <managed-footnote show-device-info></managed-footnote>
+</template>
+<template is="dom-if" if="[[showPages_.settings]]">
+  <os-settings-page
+      class="cr-centered-card-container"
+      prefs="{{prefs}}"
+      page-visibility="[[pageVisibility]]"
+      show-android-apps="[[showAndroidApps]]"
+      show-crostini="[[showCrostini]]"
+      show-plugin-vm="[[showPluginVm]]"
+      show-reset="[[showReset]]"
+      show-startup="[[showStartup]]"
+      have-play-store-app="[[havePlayStoreApp]]"
+      on-showing-section="onShowingSection_"
+      on-subpage-expand="onShowingSubpage_"
+      on-showing-main-page="onShowingMainPage_"
+      advanced-toggle-expanded="{{advancedToggleExpanded}}"
+      show-kerberos-section="[[showKerberosSection]]">
+  </os-settings-page>
+</template>
+<template is="dom-if" if="[[showPages_.about]]">
+  <os-settings-about-page role="main"
+      class="cr-centered-card-container"
+      on-subpage-expand="onShowingSubpage_"
+      on-showing-main-page="onShowingMainPage_"
+      prefs="{{prefs}}"
+      show-crostini="[[showCrostini]]">
+  </os-settings-about-page>
+</template>
+<div id="overscroll" style="padding-bottom: [[overscroll_]]px"></div>
diff --git a/chrome/browser/resources/settings/chromeos/os_settings_main/os_settings_main.js b/chrome/browser/resources/settings/chromeos/os_settings_main/os_settings_main.js
index 305601c..901c1be1 100644
--- a/chrome/browser/resources/settings/chromeos/os_settings_main/os_settings_main.js
+++ b/chrome/browser/resources/settings/chromeos/os_settings_main/os_settings_main.js
@@ -3,18 +3,39 @@
 // found in the LICENSE file.
 
 /**
+ * @fileoverview
+ * 'os-settings-main' displays the selected settings page.
+ */
+import '//resources/cr_components/managed_footnote/managed_footnote.js';
+import '//resources/cr_elements/hidden_style_css.m.js';
+import '//resources/cr_elements/icons.m.js';
+import '//resources/js/search_highlight_utils.js';
+import '//resources/polymer/v3_0/iron-icon/iron-icon.js';
+import '../os_about_page/os_about_page.js';
+import '../os_settings_page/os_settings_page.js';
+import '../../prefs/prefs.js';
+import '../../settings_shared_css.js';
+import '../../settings_vars_css.js';
+
+import {assert, assertNotReached} from '//resources/js/assert.m.js';
+import {PromiseResolver} from '//resources/js/promise_resolver.m.js';
+import {afterNextRender, flush, html, Polymer, TemplateInstanceBase, Templatizer} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+
+import {loadTimeData} from '../../i18n_setup.js';
+import {Route, RouteObserverBehavior, Router} from '../../router.js';
+import {OSPageVisibility, osPageVisibility} from '../os_page_visibility.m.js';
+import {routes} from '../os_route.m.js';
+
+/**
  * @typedef {{about: boolean, settings: boolean}}
  */
 let MainPageVisibility;
 
-/**
- * @fileoverview
- * 'os-settings-main' displays the selected settings page.
- */
 Polymer({
+  _template: html`{__html_template__}`,
   is: 'os-settings-main',
 
-  behaviors: [settings.RouteObserverBehavior],
+  behaviors: [RouteObserverBehavior],
 
   properties: {
     /**
@@ -117,11 +138,11 @@
   /**
    * Updates the hidden state of the about and settings pages based on the
    * current route.
-   * @param {!settings.Route} newRoute
+   * @param {!Route} newRoute
    */
   currentRouteChanged(newRoute) {
-    const inAbout = settings.routes.ABOUT.contains(
-        settings.Router.getInstance().getCurrentRoute());
+    const inAbout =
+        routes.ABOUT.contains(Router.getInstance().getCurrentRoute());
     this.showPages_ = {about: inAbout, settings: !inAbout};
 
     if (!newRoute.isSubpage()) {
diff --git a/chrome/browser/resources/settings/chromeos/os_settings_ui/BUILD.gn b/chrome/browser/resources/settings/chromeos/os_settings_ui/BUILD.gn
index 0d14097..16f6ddb 100644
--- a/chrome/browser/resources/settings/chromeos/os_settings_ui/BUILD.gn
+++ b/chrome/browser/resources/settings/chromeos/os_settings_ui/BUILD.gn
@@ -22,7 +22,7 @@
     "..:pref_to_setting_metric_converter.m",
     "../..:router",
     "../../prefs:prefs",
-    "../os_settings_main:os_settings_main.m",
+    "../os_settings_main:os_settings_main",
     "../os_toolbar:os_toolbar",
     "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
     "//ui/webui/resources/cr_elements:cr_container_shadow_behavior.m",
diff --git a/chrome/browser/sharing/share_submenu_model.cc b/chrome/browser/share/share_submenu_model.cc
similarity index 96%
rename from chrome/browser/sharing/share_submenu_model.cc
rename to chrome/browser/share/share_submenu_model.cc
index 2cc83c9..15f6f1e5 100644
--- a/chrome/browser/sharing/share_submenu_model.cc
+++ b/chrome/browser/share/share_submenu_model.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/sharing/share_submenu_model.h"
+#include "chrome/browser/share/share_submenu_model.h"
 
 #include "base/metrics/user_metrics.h"
 #include "build/build_config.h"
@@ -22,7 +22,7 @@
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/models/image_model.h"
 
-namespace sharing {
+namespace share {
 
 namespace {
 
@@ -36,6 +36,11 @@
 
 }  // namespace
 
+const base::Feature kShareMenu{
+    "ShareMenu",
+    base::FEATURE_DISABLED_BY_DEFAULT,
+};
+
 ShareSubmenuModel::ShareSubmenuModel(Browser* browser,
                                      Context context,
                                      GURL url)
@@ -158,4 +163,4 @@
   }
 }
 
-}  // namespace sharing
+}  // namespace share
diff --git a/chrome/browser/sharing/share_submenu_model.h b/chrome/browser/share/share_submenu_model.h
similarity index 86%
rename from chrome/browser/sharing/share_submenu_model.h
rename to chrome/browser/share/share_submenu_model.h
index e3172d54..3b7c7ec 100644
--- a/chrome/browser/sharing/share_submenu_model.h
+++ b/chrome/browser/share/share_submenu_model.h
@@ -2,9 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_SHARING_SHARE_SUBMENU_MODEL_H_
-#define CHROME_BROWSER_SHARING_SHARE_SUBMENU_MODEL_H_
+#ifndef CHROME_BROWSER_SHARE_SHARE_SUBMENU_MODEL_H_
+#define CHROME_BROWSER_SHARE_SHARE_SUBMENU_MODEL_H_
 
+#include "base/feature_list.h"
 #include "ui/base/models/simple_menu_model.h"
 #include "url/gurl.h"
 
@@ -14,7 +15,9 @@
 class SendTabToSelfSubMenuModel;
 }
 
-namespace sharing {
+namespace share {
+
+extern const base::Feature kShareMenu;
 
 // ShareSubmenuModel is a MenuModel intended to be slotted into another menu,
 // usually a context menu, to offer a set of sharing options. Currently, it
@@ -65,6 +68,6 @@
       stts_submenu_model_;
 };
 
-}  // namespace sharing
+}  // namespace share
 
-#endif  // CHROME_BROWSER_SHARING_SHARE_SUBMENU_MODEL_H_
+#endif  // CHROME_BROWSER_SHARE_SHARE_SUBMENU_MODEL_H_
diff --git a/chrome/browser/sharing/README.md b/chrome/browser/sharing/README.md
new file mode 100644
index 0000000..4fea912
--- /dev/null
+++ b/chrome/browser/sharing/README.md
@@ -0,0 +1,3 @@
+This directory contains features for sharing data between one user's Chrome
+instances: click-to-call, shared clipboard, and so on. Social features for
+sharing between users go instead in //chrome/browser/share.
diff --git a/chrome/browser/sharing/features.cc b/chrome/browser/sharing/features.cc
index 7a4faa412..3017a8e 100644
--- a/chrome/browser/sharing/features.cc
+++ b/chrome/browser/sharing/features.cc
@@ -32,12 +32,3 @@
       base::FEATURE_DISABLED_BY_DEFAULT
 #endif  // defined(OS_ANDROID)
 };
-
-namespace sharing {
-
-const base::Feature kShareMenu{
-    "ShareMenu",
-    base::FEATURE_DISABLED_BY_DEFAULT,
-};
-
-}  // namespace sharing
diff --git a/chrome/browser/sharing/features.h b/chrome/browser/sharing/features.h
index eef28642..08e6a82e 100644
--- a/chrome/browser/sharing/features.h
+++ b/chrome/browser/sharing/features.h
@@ -34,10 +34,4 @@
 // Feature flag for prefer sending sharing message using VAPID.
 extern const base::Feature kSharingPreferVapid;
 
-namespace sharing {
-
-extern const base::Feature kShareMenu;
-
-}  // namespace sharing
-
 #endif  // CHROME_BROWSER_SHARING_FEATURES_H_
diff --git a/chrome/browser/ssl/security_state_tab_helper_browsertest.cc b/chrome/browser/ssl/security_state_tab_helper_browsertest.cc
index e0bc40a..5bda2ae 100644
--- a/chrome/browser/ssl/security_state_tab_helper_browsertest.cc
+++ b/chrome/browser/ssl/security_state_tab_helper_browsertest.cc
@@ -1913,7 +1913,7 @@
 class SignedExchangeSecurityStateTest
     : public CertVerifierBrowserTest,
       public testing::WithParamInterface<
-          bool /* sxg_prefetch_cache_for_navigations_enabled */> {
+          bool /* sxg_subresource_prefetch_enabled */> {
  public:
   SignedExchangeSecurityStateTest() = default;
   ~SignedExchangeSecurityStateTest() override = default;
@@ -1932,15 +1932,13 @@
 
  private:
   void SetUp() override {
-    const bool sxg_prefetch_cache_for_navigations_enabled = GetParam();
+    const bool sxg_subresource_prefetch_enabled = GetParam();
     std::vector<base::Feature> enabled_features;
     std::vector<base::Feature> disabled_features;
-    if (sxg_prefetch_cache_for_navigations_enabled) {
-      enabled_features.push_back(
-          features::kSignedExchangePrefetchCacheForNavigations);
+    if (sxg_subresource_prefetch_enabled) {
+      enabled_features.push_back(features::kSignedExchangeSubresourcePrefetch);
     } else {
-      disabled_features.push_back(
-          features::kSignedExchangePrefetchCacheForNavigations);
+      disabled_features.push_back(features::kSignedExchangeSubresourcePrefetch);
     }
     feature_list_.InitWithFeatures(enabled_features, disabled_features);
 
diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteController.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteController.java
index 2f2e68a..ae997b4e 100644
--- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteController.java
+++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteController.java
@@ -274,10 +274,12 @@
         if (!mAutocompleteResult.verifyCoherency(selectedIndex, VerificationPoint.UPDATE_MATCH)) {
             return null;
         }
-        return AutocompleteControllerJni.get().updateMatchDestinationURLWithQueryFormulationTime(
-                mNativeController, selectedIndex, elapsedTimeSinceInputChange, newQueryText,
-                newQueryParams == null ? null
-                                       : newQueryParams.toArray(new String[newQueryParams.size()]));
+        return AutocompleteControllerJni.get()
+                .updateMatchDestinationURLWithAdditionalAssistedQueryStats(mNativeController,
+                        selectedIndex, elapsedTimeSinceInputChange, newQueryText,
+                        newQueryParams == null
+                                ? null
+                                : newQueryParams.toArray(new String[newQueryParams.size()]));
     }
 
     /**
@@ -323,7 +325,7 @@
         void onOmniboxFocused(long nativeAutocompleteControllerAndroid, String omniboxText,
                 String currentUrl, int pageClassification, String currentTitle);
         void deleteSuggestion(long nativeAutocompleteControllerAndroid, int selectedIndex);
-        GURL updateMatchDestinationURLWithQueryFormulationTime(
+        GURL updateMatchDestinationURLWithAdditionalAssistedQueryStats(
                 long nativeAutocompleteControllerAndroid, int selectedIndex,
                 long elapsedTimeSinceInputChange, String newQueryText, String[] newQueryParams);
         Tab findMatchingTabWithUrl(long nativeAutocompleteControllerAndroid, GURL url);
diff --git a/chrome/browser/ui/android/quickactionsearchwidget/java/res/values/dimens.xml b/chrome/browser/ui/android/quickactionsearchwidget/java/res/values/dimens.xml
index 30b9ee5..ee410b2e 100644
--- a/chrome/browser/ui/android/quickactionsearchwidget/java/res/values/dimens.xml
+++ b/chrome/browser/ui/android/quickactionsearchwidget/java/res/values/dimens.xml
@@ -19,7 +19,7 @@
 
     <!-- Small Button Dimensions -->
     <dimen name="quick_action_search_widget_small_button_radius">24dp</dimen>
-    <dimen name="quick_action_search_widget_small_button_icon_padding">16dp</dimen>
+    <dimen name="quick_action_search_widget_small_button_icon_padding">14dp</dimen>
     <dimen name="quick_action_search_widget_small_button_height">48dp</dimen>
     <dimen name="quick_action_search_widget_small_button_width">48dp</dimen>
 
diff --git a/chrome/browser/ui/app_list/arc/arc_app_list_prefs.cc b/chrome/browser/ui/app_list/arc/arc_app_list_prefs.cc
index 4da4a91..3664d55 100644
--- a/chrome/browser/ui/app_list/arc/arc_app_list_prefs.cc
+++ b/chrome/browser/ui/app_list/arc/arc_app_list_prefs.cc
@@ -1208,6 +1208,9 @@
   is_initialized_ = false;
   package_list_initial_refreshed_ = false;
   app_list_refreshed_callback_.Reset();
+
+  for (auto& observer : observer_list_)
+    observer.OnAppConnectionClosed();
 }
 
 void ArcAppListPrefs::HandleTaskCreated(const absl::optional<std::string>& name,
diff --git a/chrome/browser/ui/app_list/arc/arc_app_list_prefs.h b/chrome/browser/ui/app_list/arc/arc_app_list_prefs.h
index d634abfd..7d09374 100644
--- a/chrome/browser/ui/app_list/arc/arc_app_list_prefs.h
+++ b/chrome/browser/ui/app_list/arc/arc_app_list_prefs.h
@@ -236,6 +236,9 @@
     // Notifies that App instance connection is ready.
     virtual void OnAppConnectionReady() {}
 
+    // Notifies that App instance connection is closed.
+    virtual void OnAppConnectionClosed() {}
+
    protected:
     ~Observer() override;
   };
diff --git a/chrome/browser/ui/app_list/search/files/zero_state_drive_provider.cc b/chrome/browser/ui/app_list/search/files/zero_state_drive_provider.cc
index 892fb37..27670c4 100644
--- a/chrome/browser/ui/app_list/search/files/zero_state_drive_provider.cc
+++ b/chrome/browser/ui/app_list/search/files/zero_state_drive_provider.cc
@@ -77,7 +77,8 @@
       drive_service_(
           drive::DriveIntegrationServiceFactory::GetForProfile(profile)),
       item_suggest_cache_(profile, std::move(url_loader_factory)),
-      suggested_files_enabled_(app_list_features::IsSuggestedFilesEnabled()) {
+      suggested_drive_files_enabled_(
+          app_list_features::IsSuggestedDriveFilesEnabled()) {
   DCHECK(profile_);
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   task_runner_ = base::ThreadPool::CreateSequencedTaskRunner(
@@ -93,10 +94,10 @@
   const bool launcher_used = profile->GetPrefs()->GetBoolean(
       chromeos::prefs::kLauncherResultEverLaunched);
   const bool gate_on_use = base::GetFieldTrialParamByFeatureAsBool(
-      app_list_features::kEnableSuggestedFiles, "gate_warm_on_launcher_use",
-      true);
+      app_list_features::kEnableSuggestedDriveFiles,
+      "gate_warm_on_launcher_use", true);
   const bool should_warm = !gate_on_use || launcher_used;
-  if (suggested_files_enabled_ && drive_service_ && should_warm) {
+  if (suggested_drive_files_enabled_ && drive_service_ && should_warm) {
     if (drive_service_->IsMounted()) {
       // Drivefs is mounted, so we can fetch results immediately.
       OnFileSystemMounted();
@@ -109,7 +110,7 @@
 }
 
 ZeroStateDriveProvider::~ZeroStateDriveProvider() {
-  if (suggested_files_enabled_ && drive_service_)
+  if (suggested_drive_files_enabled_ && drive_service_)
     drive_service_->RemoveObserver(this);
 }
 
@@ -205,7 +206,7 @@
 
     provider_results.emplace_back(
         MakeListResult(path_or_error->get_path(), score));
-    if (suggested_files_enabled_ && IsSuggestedContentEnabled(profile_)) {
+    if (suggested_drive_files_enabled_ && IsSuggestedContentEnabled(profile_)) {
       provider_results.emplace_back(
           MakeChipResult(path_or_error->get_path(), score));
     }
diff --git a/chrome/browser/ui/app_list/search/files/zero_state_drive_provider.h b/chrome/browser/ui/app_list/search/files/zero_state_drive_provider.h
index a8da10f..6ecd8c9f 100644
--- a/chrome/browser/ui/app_list/search/files/zero_state_drive_provider.h
+++ b/chrome/browser/ui/app_list/search/files/zero_state_drive_provider.h
@@ -67,9 +67,9 @@
 
   base::TimeTicks query_start_time_;
 
-  // Whether suggested files feature is enabled. True if both the experiment is
-  // enabled, and the suggested content toggle is enabled.
-  const bool suggested_files_enabled_;
+  // Whether the suggested Drive files feature is enabled. True if both the
+  // experiment is enabled, and the suggested content toggle is enabled.
+  const bool suggested_drive_files_enabled_;
 
   // TODO(crbug.com/1247475): Score normalizers removed due to stability issues.
 
diff --git a/chrome/browser/ui/app_list/search/mixer.cc b/chrome/browser/ui/app_list/search/mixer.cc
index aa2816c3..84e54562 100644
--- a/chrome/browser/ui/app_list/search/mixer.cc
+++ b/chrome/browser/ui/app_list/search/mixer.cc
@@ -125,7 +125,8 @@
   search_result_ranker_ = std::make_unique<SearchResultRanker>(profile);
   search_result_ranker_->InitializeRankers(search_controller_);
 
-  if (app_list_features::IsSuggestedFilesEnabled()) {
+  if (app_list_features::IsSuggestedFilesEnabled() ||
+      app_list_features::IsSuggestedDriveFilesEnabled()) {
     chip_ranker_ = std::make_unique<ChipRanker>(profile);
   }
 }
diff --git a/chrome/browser/ui/app_list/search/omnibox_result.cc b/chrome/browser/ui/app_list/search/omnibox_result.cc
index 443368f..c54aab8 100644
--- a/chrome/browser/ui/app_list/search/omnibox_result.cc
+++ b/chrome/browser/ui/app_list/search/omnibox_result.cc
@@ -189,8 +189,7 @@
       is_zero_suggestion_(is_zero_suggestion) {
   if (match_.search_terms_args && autocomplete_controller_) {
     match_.search_terms_args->request_source = TemplateURLRef::CROS_APP_LIST;
-    autocomplete_controller_->UpdateMatchDestinationURL(
-        *match_.search_terms_args, &match_);
+    autocomplete_controller_->SetMatchDestinationURL(&match_);
   }
   set_id(match_.stripped_destination_url.spec());
   SetDisplayType(DisplayType::kList);
diff --git a/chrome/browser/ui/ash/chrome_new_window_client.cc b/chrome/browser/ui/ash/chrome_new_window_client.cc
index 0c52cfd..d8b8a6c 100644
--- a/chrome/browser/ui/ash/chrome_new_window_client.cc
+++ b/chrome/browser/ui/ash/chrome_new_window_client.cc
@@ -21,8 +21,8 @@
 #include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
 #include "chrome/browser/apps/app_service/intent_util.h"
 #include "chrome/browser/apps/app_service/launch_utils.h"
+#include "chrome/browser/apps/intent_helper/metrics/intent_handling_metrics.h"
 #include "chrome/browser/ash/apps/apk_web_app_service.h"
-#include "chrome/browser/ash/apps/metrics/intent_handling_metrics.h"
 #include "chrome/browser/ash/arc/arc_util.h"
 #include "chrome/browser/ash/arc/arc_web_contents_data.h"
 #include "chrome/browser/ash/arc/fileapi/arc_content_file_system_url_util.h"
diff --git a/chrome/browser/ui/webui/chromeos/login/welcome_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/welcome_screen_handler.cc
index 32a8629..c3cd600 100644
--- a/chrome/browser/ui/webui/chromeos/login/welcome_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/welcome_screen_handler.cc
@@ -8,6 +8,7 @@
 
 #include <utility>
 
+#include "ash/constants/ash_features.h"
 #include "ash/constants/ash_switches.h"
 #include "base/bind.h"
 #include "base/callback_helpers.h"
@@ -154,6 +155,7 @@
   builder->Add("oobeOKButtonText", IDS_OOBE_OK_BUTTON_TEXT);
   builder->Add("languageButtonLabel", IDS_LANGUAGE_BUTTON_LABEL);
   builder->Add("languageSectionTitle", IDS_LANGUAGE_SECTION_TITLE);
+  builder->Add("languageSectionHint", IDS_LANGUAGE_SECTION_HINT);
   builder->Add("accessibilitySectionTitle", IDS_ACCESSIBILITY_SECTION_TITLE);
   builder->Add("accessibilitySectionHint", IDS_ACCESSIBILITY_SECTION_HINT);
   builder->Add("timezoneSectionTitle", IDS_TIMEZONE_SECTION_TITLE);
@@ -295,6 +297,9 @@
   // This switch is set by the session manager if the OS install
   // service is enabled and the OS is running from a USB installer.
   dict->SetKey("osInstallEnabled", base::Value(switches::IsOsInstallAllowed()));
+  dict->SetKey("languagePacksEnabled",
+               base::Value(base::FeatureList::IsEnabled(
+                   ash::features::kLanguagePacksHandwriting)));
 }
 
 void WelcomeScreenHandler::Initialize() {
diff --git a/chrome/browser/ui/webui/print_preview/pdf_printer_handler.cc b/chrome/browser/ui/webui/print_preview/pdf_printer_handler.cc
index 1b18146..8933bc14 100644
--- a/chrome/browser/ui/webui/print_preview/pdf_printer_handler.cc
+++ b/chrome/browser/ui/webui/print_preview/pdf_printer_handler.cc
@@ -89,7 +89,7 @@
 gfx::Size GetDefaultPdfMediaSizeMicrons() {
   PrintingContextDelegate delegate;
   auto printing_context(PrintingContext::Create(&delegate));
-  if (PrintingContext::OK != printing_context->UsePdfSettings() ||
+  if (mojom::ResultCode::kSuccess != printing_context->UsePdfSettings() ||
       printing_context->settings().device_units_per_inch() <= 0) {
     return gfx::Size();
   }
diff --git a/chrome/browser/ui/webui/realbox/realbox_handler.cc b/chrome/browser/ui/webui/realbox/realbox_handler.cc
index d0554796..d972437 100644
--- a/chrome/browser/ui/webui/realbox/realbox_handler.cc
+++ b/chrome/browser/ui/webui/realbox/realbox_handler.cc
@@ -411,8 +411,9 @@
   const auto now = base::TimeTicks::Now();
   base::TimeDelta elapsed_time_since_first_autocomplete_query =
       now - time_user_first_modified_realbox_;
-  autocomplete_controller_->UpdateMatchDestinationURLWithQueryFormulationTime(
-      elapsed_time_since_first_autocomplete_query, &match);
+  autocomplete_controller_
+      ->UpdateMatchDestinationURLWithAdditionalAssistedQueryStats(
+          elapsed_time_since_first_autocomplete_query, &match);
 
   LOCAL_HISTOGRAM_BOOLEAN("Omnibox.EventCount", true);
 
diff --git a/chrome/browser/ui/webui/settings/chromeos/about_section.cc b/chrome/browser/ui/webui/settings/chromeos/about_section.cc
index d700010a..d57c555 100644
--- a/chrome/browser/ui/webui/settings/chromeos/about_section.cc
+++ b/chrome/browser/ui/webui/settings/chromeos/about_section.cc
@@ -289,8 +289,8 @@
     {"aboutChannelDev", IDS_SETTINGS_ABOUT_PAGE_CURRENT_CHANNEL_DEV},
     {"aboutChannelLabel", IDS_SETTINGS_ABOUT_PAGE_CHANNEL},
     {"aboutChannelStable", IDS_SETTINGS_ABOUT_PAGE_CURRENT_CHANNEL_STABLE},
-    {"aboutChannelLongTermStable",
-     IDS_SETTINGS_ABOUT_PAGE_CURRENT_CHANNEL_STABLE_TT},
+    {"aboutChannelLongTermSupport",
+     IDS_SETTINGS_ABOUT_PAGE_CURRENT_CHANNEL_LTS},
     {"aboutCheckForUpdates", IDS_SETTINGS_ABOUT_PAGE_CHECK_FOR_UPDATES},
     {"aboutCurrentlyOnChannel", IDS_SETTINGS_ABOUT_PAGE_CURRENT_CHANNEL},
     {"aboutDetailedBuildInfo", IDS_SETTINGS_ABOUT_PAGE_DETAILED_BUILD_INFO},
diff --git a/chrome/browser/ui/webui/settings/chromeos/constants/setting.mojom b/chrome/browser/ui/webui/settings/chromeos/constants/setting.mojom
index 7e92dea..845a113 100644
--- a/chrome/browser/ui/webui/settings/chromeos/constants/setting.mojom
+++ b/chrome/browser/ui/webui/settings/chromeos/constants/setting.mojom
@@ -68,6 +68,7 @@
   kNearbyShareContacts = 216,
   kNearbyShareDataUsage = 217,
   kPhoneHubAppsOnOff = 218,
+  kPhoneHubCameraRollOnOff = 219,
 
   // People section.
   kAddAccount = 300,
diff --git a/chrome/browser/ui/webui/settings/chromeos/multidevice_handler.cc b/chrome/browser/ui/webui/settings/chromeos/multidevice_handler.cc
index c9bc7a40..78bd8e4 100644
--- a/chrome/browser/ui/webui/settings/chromeos/multidevice_handler.cc
+++ b/chrome/browser/ui/webui/settings/chromeos/multidevice_handler.cc
@@ -40,6 +40,8 @@
 const char kPageContentDataInstantTetheringStateKey[] = "instantTetheringState";
 const char kPageContentDataMessagesStateKey[] = "messagesState";
 const char kPageContentDataPhoneHubStateKey[] = "phoneHubState";
+const char kPageContentDataPhoneHubCameraRollStateKey[] =
+    "phoneHubCameraRollState";
 const char kPageContentDataPhoneHubNotificationsStateKey[] =
     "phoneHubNotificationsState";
 const char kPageContentDataPhoneHubTaskContinuationStateKey[] =
@@ -470,6 +472,11 @@
       static_cast<int32_t>(
           feature_states[multidevice_setup::mojom::Feature::kPhoneHub]));
   page_content_dictionary->SetInteger(
+      kPageContentDataPhoneHubCameraRollStateKey,
+      static_cast<int32_t>(
+          feature_states
+              [multidevice_setup::mojom::Feature::kPhoneHubCameraRoll]));
+  page_content_dictionary->SetInteger(
       kPageContentDataPhoneHubNotificationsStateKey,
       static_cast<int32_t>(
           feature_states
diff --git a/chrome/browser/ui/webui/settings/chromeos/multidevice_section.cc b/chrome/browser/ui/webui/settings/chromeos/multidevice_section.cc
index 1aa93ec9..8e4f58e 100644
--- a/chrome/browser/ui/webui/settings/chromeos/multidevice_section.cc
+++ b/chrome/browser/ui/webui/settings/chromeos/multidevice_section.cc
@@ -110,6 +110,18 @@
 }
 
 const std::vector<SearchConcept>&
+GetMultiDeviceOptedInPhoneHubCameraRollSearchConcepts() {
+  static const base::NoDestructor<std::vector<SearchConcept>> tags(
+      {{IDS_OS_SETTINGS_TAG_MULTIDEVICE_PHONE_HUB_CAMERA_ROLL,
+        mojom::kMultiDeviceFeaturesSubpagePath,
+        mojom::SearchResultIcon::kPhone,
+        mojom::SearchResultDefaultRank::kMedium,
+        mojom::SearchResultType::kSetting,
+        {.setting = mojom::Setting::kPhoneHubCameraRollOnOff}}});
+  return *tags;
+}
+
+const std::vector<SearchConcept>&
 GetMultiDeviceOptedInPhoneHubAppsSearchConcepts() {
   static const base::NoDestructor<std::vector<SearchConcept>> tags(
       {{IDS_OS_SETTINGS_TAG_MULTIDEVICE_PHONE_HUB_APPS,
@@ -313,6 +325,8 @@
       {"multideviceSmartLockItemTitle", IDS_SETTINGS_EASY_UNLOCK_SECTION_TITLE},
       {"multidevicePhoneHubItemTitle",
        IDS_SETTINGS_MULTIDEVICE_PHONE_HUB_SECTION_TITLE},
+      {"multidevicePhoneHubCameraRollItemTitle",
+       IDS_SETTINGS_MULTIDEVICE_PHONE_HUB_CAMERA_ROLL_SECTION_TITLE},
       {"multidevicePhoneHubLearnMoreLabel",
        IDS_SETTINGS_MULTIDEVICE_PHONE_HUB_LEARN_MORE_LABEL},
       {"multidevicePhoneHubNotificationsItemTitle",
@@ -434,6 +448,10 @@
       l10n_util::GetStringFUTF16(IDS_SETTINGS_MULTIDEVICE_PHONE_HUB_SUMMARY,
                                  ui::GetChromeOSDeviceName()));
   html_source->AddString(
+      "multidevicePhoneHubCameraRollItemSummary",
+      ui::SubstituteChromeOSDeviceType(
+          IDS_SETTINGS_MULTIDEVICE_PHONE_HUB_CAMERA_ROLL_SUMMARY));
+  html_source->AddString(
       "multidevicePhoneHubNotificationsItemSummary",
       ui::SubstituteChromeOSDeviceType(
           IDS_SETTINGS_MULTIDEVICE_PHONE_HUB_NOTIFICATIONS_SUMMARY));
@@ -548,6 +566,7 @@
       mojom::Setting::kMessagesOnOff,
       mojom::Setting::kForgetPhone,
       mojom::Setting::kPhoneHubOnOff,
+      mojom::Setting::kPhoneHubCameraRollOnOff,
       mojom::Setting::kPhoneHubNotificationsOnOff,
       mojom::Setting::kPhoneHubTaskContinuationOnOff,
       mojom::Setting::kWifiSyncOnOff,
@@ -612,6 +631,8 @@
   SearchTagRegistry::ScopedTagUpdater updater = registry()->StartUpdate();
   updater.RemoveSearchTags(GetSmartLockOptionsSearchConcepts());
   updater.RemoveSearchTags(GetMultiDeviceOptedInPhoneHubSearchConcepts());
+  updater.RemoveSearchTags(
+      GetMultiDeviceOptedInPhoneHubCameraRollSearchConcepts());
   updater.RemoveSearchTags(GetMultiDeviceOptedInWifiSyncSearchConcepts());
   updater.RemoveSearchTags(GetMultiDeviceOptedInPhoneHubAppsSearchConcepts());
 
@@ -619,8 +640,15 @@
       multidevice_setup::mojom::FeatureState::kEnabledByUser) {
     updater.AddSearchTags(GetSmartLockOptionsSearchConcepts());
   }
-  if (IsFeatureSupported(multidevice_setup::mojom::Feature::kPhoneHub))
+  if (IsFeatureSupported(multidevice_setup::mojom::Feature::kPhoneHub)) {
     updater.AddSearchTags(GetMultiDeviceOptedInPhoneHubSearchConcepts());
+    if (features::IsPhoneHubCameraRollEnabled() &&
+        IsFeatureSupported(
+            multidevice_setup::mojom::Feature::kPhoneHubCameraRoll)) {
+      updater.AddSearchTags(
+          GetMultiDeviceOptedInPhoneHubCameraRollSearchConcepts());
+    }
+  }
   if (IsFeatureSupported(multidevice_setup::mojom::Feature::kWifiSync))
     updater.AddSearchTags(GetMultiDeviceOptedInWifiSyncSearchConcepts());
   if (IsFeatureSupported(multidevice_setup::mojom::Feature::kEche))
diff --git a/chrome/browser/web_applications/preinstalled_web_apps_browsertest.cc b/chrome/browser/web_applications/preinstalled_web_apps_browsertest.cc
index e187717..74486e56 100644
--- a/chrome/browser/web_applications/preinstalled_web_apps_browsertest.cc
+++ b/chrome/browser/web_applications/preinstalled_web_apps_browsertest.cc
@@ -66,12 +66,12 @@
         "https://calendar.google.com/calendar/installwebapp?usp=chrome_default",
         "https://calendar.google.com/calendar/r?usp=installed_webapp",
     },
-#endif  // defined(OS_CHROMEOS)
     {
         kCalculatorAppId,
         "https://calculator.apps.chrome/install",
         "https://calculator.apps.chrome/",
     },
+#endif  // defined(OS_CHROMEOS)
     {
         kGoogleDocsAppId,
         "https://docs.google.com/document/installwebapp?usp=chrome_default",
diff --git a/chrome/browser/web_applications/test/fake_web_app_registry_controller.cc b/chrome/browser/web_applications/test/fake_web_app_registry_controller.cc
index 7fac9d65..680676a 100644
--- a/chrome/browser/web_applications/test/fake_web_app_registry_controller.cc
+++ b/chrome/browser/web_applications/test/fake_web_app_registry_controller.cc
@@ -34,7 +34,7 @@
   mutable_registrar_->SetSubsystems(os_integration_manager_.get());
 
   sync_bridge_ = std::make_unique<WebAppSyncBridge>(
-      profile, database_factory_.get(), mutable_registrar_.get(), this,
+      database_factory_.get(), mutable_registrar_.get(), this,
       mock_processor_.CreateForwardingProcessor());
 
   ON_CALL(processor(), IsTrackingMetadata())
diff --git a/chrome/browser/web_applications/web_app_provider.cc b/chrome/browser/web_applications/web_app_provider.cc
index 5f0e4a6..2dab6ae 100644
--- a/chrome/browser/web_applications/web_app_provider.cc
+++ b/chrome/browser/web_applications/web_app_provider.cc
@@ -234,9 +234,9 @@
   {
     auto mutable_registrar = std::make_unique<WebAppRegistrarMutable>(profile);
 
-    sync_bridge = std::make_unique<WebAppSyncBridge>(
-        profile, database_factory_.get(), mutable_registrar.get(),
-        install_manager_.get());
+    sync_bridge = std::make_unique<WebAppSyncBridge>(database_factory_.get(),
+                                                     mutable_registrar.get(),
+                                                     install_manager_.get());
 
     // Upcast to read-only WebAppRegistrar.
     registrar = std::move(mutable_registrar);
diff --git a/chrome/browser/web_applications/web_app_sync_bridge.cc b/chrome/browser/web_applications/web_app_sync_bridge.cc
index 04a9ff6..bc0d3e0 100644
--- a/chrome/browser/web_applications/web_app_sync_bridge.cc
+++ b/chrome/browser/web_applications/web_app_sync_bridge.cc
@@ -15,6 +15,7 @@
 #include "base/logging.h"
 #include "base/metrics/user_metrics.h"
 #include "base/types/pass_key.h"
+#include "build/chromeos_buildflags.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_database.h"
@@ -39,6 +40,11 @@
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "url/gurl.h"
 
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+#include "base/feature_list.h"
+#include "chrome/common/chrome_features.h"
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
+
 namespace web_app {
 
 std::unique_ptr<syncer::EntityData> CreateSyncEntityData(const WebApp& app) {
@@ -107,12 +113,10 @@
 }
 
 WebAppSyncBridge::WebAppSyncBridge(
-    Profile* profile,
     AbstractWebAppDatabaseFactory* database_factory,
     WebAppRegistrarMutable* registrar,
     SyncInstallDelegate* install_delegate)
     : WebAppSyncBridge(
-          profile,
           database_factory,
           registrar,
           install_delegate,
@@ -122,13 +126,11 @@
                                   chrome::GetChannel()))) {}
 
 WebAppSyncBridge::WebAppSyncBridge(
-    Profile* profile,
     AbstractWebAppDatabaseFactory* database_factory,
     WebAppRegistrarMutable* registrar,
     SyncInstallDelegate* install_delegate,
     std::unique_ptr<syncer::ModelTypeChangeProcessor> change_processor)
     : syncer::ModelTypeSyncBridge(std::move(change_processor)),
-      profile_(profile),
       registrar_(registrar),
       install_delegate_(install_delegate) {
   DCHECK(database_factory);
@@ -427,7 +429,12 @@
   for (std::unique_ptr<WebApp>& web_app : update_data->apps_to_create) {
     AppId app_id = web_app->app_id();
     DCHECK(!registrar_->GetAppById(app_id));
-    DCHECK(web_app->IsSystemApp() || AreWebAppsUserInstallable(profile_));
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+    // We do not install non-system web apps in Ash when Lacros web apps are
+    // enabled.
+    DCHECK(web_app->IsSystemApp() ||
+           !base::FeatureList::IsEnabled(features::kWebAppsCrosapi));
+#endif
     registrar_->registry().emplace(std::move(app_id), std::move(web_app));
   }
 
diff --git a/chrome/browser/web_applications/web_app_sync_bridge.h b/chrome/browser/web_applications/web_app_sync_bridge.h
index 864f211d..eeb9950 100644
--- a/chrome/browser/web_applications/web_app_sync_bridge.h
+++ b/chrome/browser/web_applications/web_app_sync_bridge.h
@@ -16,10 +16,10 @@
 #include "components/sync/model/model_type_sync_bridge.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
-class Profile;
 namespace base {
 class Time;
 }
+
 namespace syncer {
 class MetadataBatch;
 class MetadataChangeList;
@@ -56,13 +56,11 @@
 // ModelTypeChangeProcessor and WebAppDatabase (the storage).
 class WebAppSyncBridge : public syncer::ModelTypeSyncBridge {
  public:
-  WebAppSyncBridge(Profile* profile,
-                   AbstractWebAppDatabaseFactory* database_factory,
+  WebAppSyncBridge(AbstractWebAppDatabaseFactory* database_factory,
                    WebAppRegistrarMutable* registrar,
                    SyncInstallDelegate* install_delegate);
   // Tests may inject mocks using this ctor.
   WebAppSyncBridge(
-      Profile* profile,
       AbstractWebAppDatabaseFactory* database_factory,
       WebAppRegistrarMutable* registrar,
       SyncInstallDelegate* install_delegate,
@@ -186,8 +184,6 @@
 
   void MaybeInstallAppsFromSyncAndPendingInstallation();
 
-  Profile* const profile_;
-
   std::unique_ptr<WebAppDatabase> database_;
   WebAppRegistrarMutable* const registrar_;
   SyncInstallDelegate* const install_delegate_;
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt
index c5cd603..446c0ec 100644
--- a/chrome/build/linux.pgo.txt
+++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@
-chrome-linux-main-1632160516-c9f75c92e6ab53bc1d3326019b19564e4776d2b3.profdata
+chrome-linux-main-1632182207-81e00852d933b6567cd65e1da455e91d09d40124.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt
index 657a89b4..51cafa51 100644
--- a/chrome/build/win32.pgo.txt
+++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@
-chrome-win32-main-1632157255-b0f6e01f989b2114ad66786e49fba1eef0d94598.profdata
+chrome-win32-main-1632193191-eb4a0f65f48d803530fed93539925b81861f2679.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt
index 25d738f..ae75385 100644
--- a/chrome/build/win64.pgo.txt
+++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@
-chrome-win64-main-1632138958-7bd404d870e206f9a896f166912964da7efdba26.profdata
+chrome-win64-main-1632193191-88ac3a4a35f1b37a750c6d6cdd9502a77c62191b.profdata
diff --git a/chrome/services/printing/print_backend_service_impl.cc b/chrome/services/printing/print_backend_service_impl.cc
index 76d6128..2a86e36 100644
--- a/chrome/services/printing/print_backend_service_impl.cc
+++ b/chrome/services/printing/print_backend_service_impl.cc
@@ -316,14 +316,11 @@
   // `StartPrinting()` might be called.
   std::unique_ptr<PrintingContext> context =
       PrintingContext::Create(&context_delegate_);
-  PrintingContext::Result context_result =
+  mojom::ResultCode result =
       context->UpdatePrintSettings(base::Value(std::move(job_settings)));
 
-  if (context_result != PrintingContext::OK) {
-    std::move(callback).Run(mojom::PrintSettingsResult::NewResultCode(
-        context_result == PrintingContext::CANCEL
-            ? mojom::ResultCode::kCanceled
-            : mojom::ResultCode::kFailed));
+  if (result != mojom::ResultCode::kSuccess) {
+    std::move(callback).Run(mojom::PrintSettingsResult::NewResultCode(result));
     return;
   }
 
@@ -408,23 +405,19 @@
   }
 #endif
   context->ApplyPrintSettings(document->settings());
-  PrintingContext::Result context_result = context->UpdatePrinterSettings(
+  mojom::ResultCode result = context->UpdatePrinterSettings(
       external_preview, show_system_dialog, document_container.page_count);
-  if (context_result != PrintingContext::OK) {
+  if (result != mojom::ResultCode::kSuccess) {
     DLOG(ERROR) << "Failure updating printer settings for document "
-                << document->cookie() << ", error: " << context_result;
-    return context_result == PrintingContext::CANCEL
-               ? mojom::ResultCode::kCanceled
-               : mojom::ResultCode::kFailed;
+                << document->cookie() << ", error: " << result;
+    return result;
   }
 
-  context_result = context->NewDocument(document->name());
-  if (context_result != PrintingContext::OK) {
+  result = context->NewDocument(document->name());
+  if (result != mojom::ResultCode::kSuccess) {
     DLOG(ERROR) << "Failure initializing new document " << document->cookie()
-                << ", error: " << context_result;
-    return context_result == PrintingContext::CANCEL
-               ? mojom::ResultCode::kCanceled
-               : mojom::ResultCode::kFailed;
+                << ", error: " << result;
+    return result;
   }
 
   document_container.context = std::move(context);
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 8c6b06e2..16b2bae 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -1304,7 +1304,6 @@
       "//components/unified_consent",
       "//components/user_manager",
       "//components/variations/service",
-      "//components/variations/service:constants",
       "//components/webapps/browser",
       "//components/webrtc",
       "//components/webrtc_logging/browser",
@@ -4926,6 +4925,7 @@
 
   if (is_chromeos) {
     sources += [
+      "../browser/apps/intent_helper/metrics/intent_handling_metrics_unittest.cc",
       "chromeos/printing/fake_local_printer_chromeos.cc",
       "chromeos/printing/fake_local_printer_chromeos.h",
     ]
diff --git a/chrome/test/data/extensions/api_test/file_browser/app_file_handler_multi/manifest.json b/chrome/test/data/extensions/api_test/file_browser/app_file_handler_multi/manifest.json
index 1b42012..8fde887 100644
--- a/chrome/test/data/extensions/api_test/file_browser/app_file_handler_multi/manifest.json
+++ b/chrome/test/data/extensions/api_test/file_browser/app_file_handler_multi/manifest.json
@@ -13,7 +13,6 @@
   "file_handlers": {
     "textAction": {
       "extensions": ["txt"],
-      "verb": "add_to",
       "include_directories": true
     }
   },
diff --git a/chrome/test/data/webui/chromeos/fake_network_config_mojom.js b/chrome/test/data/webui/chromeos/fake_network_config_mojom.js
index 6e65fda..00144aa0 100644
--- a/chrome/test/data/webui/chromeos/fake_network_config_mojom.js
+++ b/chrome/test/data/webui/chromeos/fake_network_config_mojom.js
@@ -7,7 +7,7 @@
  */
 
 // clang-format off
- // #import {assert} from 'chrome://resources/js/assert.m.js';
+ // #import {assert, assertNotReached} from 'chrome://resources/js/assert.m.js';
  // #import {OncMojo} from 'chrome://resources/cr_components/chromeos/network/onc_mojo.m.js';
  // #import {PromiseResolver} from 'chrome://resources/js/promise_resolver.m.js';
 // clang-format on
@@ -360,18 +360,48 @@
   }
 
   /**
+   * @param {!chromeos.networkConfig.mojom.ConnectionStateType} connectionState
+   * @param {!chromeos.networkConfig.mojom.FilterType} filterType
+   * @return {boolean} Whether the connectionState type is not filtered out.
+   */
+  passFilter(connectionState, filterType) {
+    switch (filterType) {
+      case chromeos.networkConfig.mojom.FilterType.kActive:
+        return connectionState !==
+            chromeos.networkConfig.mojom.ConnectionStateType.kNotConnected;
+      case chromeos.networkConfig.mojom.FilterType.kVisible:
+        return true;
+      case chromeos.networkConfig.mojom.FilterType.kConfigured:
+        return true;
+      case chromeos.networkConfig.mojom.FilterType.kAll:
+        return true;
+    }
+    assertNotReached('Failed to find filterType: ' + filterType.toString());
+  }
+
+  /**
    * @param {!chromeos.networkConfig.mojom.NetworkFilter} filter
    * @return {!Promise<{result:
    *     !Array<!chromeos.networkConfig.mojom.NetworkStateProperties>}>}
    */
   getNetworkStateList(filter) {
     return new Promise(resolve => {
-      const type = filter.networkType;
+      const networkType = filter.networkType;
+      const filterType = filter.filter;
+      const limit = filter.limit;
       let result;
-      if (type === chromeos.networkConfig.mojom.NetworkType.kAll) {
-        result = this.networkStates_.slice();
+      if (networkType === chromeos.networkConfig.mojom.NetworkType.kAll) {
+        result = this.networkStates_.filter(
+            state => this.passFilter(state.connectionState, filterType));
       } else {
-        result = this.networkStates_.filter(state => state.type === type);
+        result = this.networkStates_.filter(
+            state =>
+                (state.type === networkType &&
+                 this.passFilter(state.connectionState, filterType)));
+      }
+
+      if (limit !== chromeos.networkConfig.mojom.NO_LIMIT) {
+        result = result.slice(0, limit);
       }
       this.methodCalled('getNetworkStateList');
       resolve({result: result});
diff --git a/chrome/test/data/webui/settings/chromeos/os_privacy_page_test.js b/chrome/test/data/webui/settings/chromeos/os_privacy_page_test.js
index 1bfed31..31670b0 100644
--- a/chrome/test/data/webui/settings/chromeos/os_privacy_page_test.js
+++ b/chrome/test/data/webui/settings/chromeos/os_privacy_page_test.js
@@ -11,7 +11,7 @@
 // #import {assertEquals, assertFalse, assertTrue} from '../../chai_assert.js';
 // #import {assert} from 'chrome://resources/js/assert.m.js';
 // #import {getDeepActiveElement} from 'chrome://resources/js/util.m.js';
-// #import {Router, routes, PeripheralDataAccessBrowserProxyImpl, DataAccessPolicyState} from 'chrome://os-settings/chromeos/os_settings.js';
+// #import {SecureDnsMode, SecureDnsUiManagementMode, Router, routes, PeripheralDataAccessBrowserProxyImpl, DataAccessPolicyState} from 'chrome://os-settings/chromeos/os_settings.js';
 // #import {FakeQuickUnlockPrivate} from './fake_quick_unlock_private.m.js';
 // #import {waitAfterNextRender} from 'chrome://test/test_util.js';
 // clang-format on
@@ -99,7 +99,6 @@
   test('Suggested content, pref disabled', async () => {
     privacyPage = document.createElement('os-settings-privacy-page');
     document.body.appendChild(privacyPage);
-
     Polymer.dom.flush();
 
     // The default state of the pref is disabled.
@@ -122,6 +121,14 @@
           }
         }
       },
+      'dns_over_https': {
+        'mode': {
+          value: SecureDnsMode.AUTOMATIC
+        },
+        'templates': {
+          value: ''
+        }
+      }
     };
 
     Polymer.dom.flush();
@@ -154,6 +161,7 @@
 
     privacyPage = document.createElement('os-settings-privacy-page');
     document.body.appendChild(privacyPage);
+
     await test_util.waitAfterNextRender(privacyPage);
 
     if (!privacyPage.isAccountManagementFlowsV2Enabled_) {
@@ -217,7 +225,7 @@
         }
       }
     },
-  };
+   };
 
   /** @type {?TestPeripheralDataAccessBrowserProxy} */
   let browserProxy = null;
@@ -272,7 +280,15 @@
       }
     },
     'settings': {'local_state_device_pci_data_access_enabled': {value: false}},
-  };
+    'dns_over_https': {
+      'mode': {
+        value: SecureDnsMode.AUTOMATIC
+      },
+      'templates': {
+        value: ''
+      }
+     },
+   };
 
   /** @type {?TestPeripheralDataAccessBrowserProxy} */
   let browserProxy = null;
diff --git a/chromeos/CHROMEOS_LKGM b/chromeos/CHROMEOS_LKGM
index f4a6cbb..834d263 100644
--- a/chromeos/CHROMEOS_LKGM
+++ b/chromeos/CHROMEOS_LKGM
@@ -1 +1 @@
-14230.0.0
\ No newline at end of file
+14232.0.0
\ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_TRAFFIC_COUNTERS_LAST_RESET_TIME.png.sha1 b/chromeos/chromeos_strings_grd/IDS_TRAFFIC_COUNTERS_LAST_RESET_TIME.png.sha1
index 337c5994..0be494e77 100644
--- a/chromeos/chromeos_strings_grd/IDS_TRAFFIC_COUNTERS_LAST_RESET_TIME.png.sha1
+++ b/chromeos/chromeos_strings_grd/IDS_TRAFFIC_COUNTERS_LAST_RESET_TIME.png.sha1
@@ -1 +1 @@
-392e722fdef80106b98cee2918a239921b689f65
\ No newline at end of file
+a1736260f1a8b5cb5685b2f935b8281f44edd4b9
\ No newline at end of file
diff --git a/chromeos/components/phonehub/camera_roll_manager.cc b/chromeos/components/phonehub/camera_roll_manager.cc
index cf0e356a..b96920707 100644
--- a/chromeos/components/phonehub/camera_roll_manager.cc
+++ b/chromeos/components/phonehub/camera_roll_manager.cc
@@ -25,23 +25,29 @@
 
 }  // namespace
 
-CameraRollManager::CameraRollManager(MessageReceiver* message_receiver,
-                                     MessageSender* message_sender)
+CameraRollManager::CameraRollManager(
+    MessageReceiver* message_receiver,
+    MessageSender* message_sender,
+    multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client)
     : message_receiver_(message_receiver),
       message_sender_(message_sender),
+      multidevice_setup_client_(multidevice_setup_client),
       thumbnail_decoder_(std::make_unique<CameraRollThumbnailDecoderImpl>()) {
   max_item_count_ = 4;  // TODO(mattwalliser): Pull this value from config.
   message_receiver->AddObserver(this);
+  multidevice_setup_client_->AddObserver(this);
 }
 
 CameraRollManager::~CameraRollManager() {
   message_receiver_->RemoveObserver(this);
+  multidevice_setup_client_->RemoveObserver(this);
 }
 
 void CameraRollManager::OnPhoneStatusSnapshotReceived(
     proto::PhoneStatusSnapshot phone_status_snapshot) {
   if (!IsCameraRollSupportedOnAndroidDevice(
-          phone_status_snapshot.properties().camera_roll_access_state())) {
+          phone_status_snapshot.properties().camera_roll_access_state()) ||
+      !IsCameraRollSettingEnabled()) {
     ClearCurrentItems();
     CancelPendingThumbnailRequests();
     return;
@@ -53,7 +59,8 @@
 void CameraRollManager::OnPhoneStatusUpdateReceived(
     proto::PhoneStatusUpdate phone_status_update) {
   if (!IsCameraRollSupportedOnAndroidDevice(
-          phone_status_update.properties().camera_roll_access_state())) {
+          phone_status_update.properties().camera_roll_access_state()) ||
+      !IsCameraRollSettingEnabled()) {
     ClearCurrentItems();
     CancelPendingThumbnailRequests();
     return;
@@ -123,5 +130,22 @@
   observer_list_.RemoveObserver(observer);
 }
 
+bool CameraRollManager::IsCameraRollSettingEnabled() {
+  multidevice_setup::mojom::FeatureState camera_roll_feature_state =
+      multidevice_setup_client_->GetFeatureState(
+          multidevice_setup::mojom::Feature::kPhoneHubCameraRoll);
+  return camera_roll_feature_state ==
+         multidevice_setup::mojom::FeatureState::kEnabledByUser;
+}
+
+void CameraRollManager::OnFeatureStatesChanged(
+    const multidevice_setup::MultiDeviceSetupClient::FeatureStatesMap&
+        feature_states_map) {
+  if (!IsCameraRollSettingEnabled()) {
+    ClearCurrentItems();
+    CancelPendingThumbnailRequests();
+  }
+}
+
 }  // namespace phonehub
 }  // namespace chromeos
diff --git a/chromeos/components/phonehub/camera_roll_manager.h b/chromeos/components/phonehub/camera_roll_manager.h
index 7493f32..a1abda1 100644
--- a/chromeos/components/phonehub/camera_roll_manager.h
+++ b/chromeos/components/phonehub/camera_roll_manager.h
@@ -11,6 +11,8 @@
 #include "chromeos/components/phonehub/camera_roll_thumbnail_decoder.h"
 #include "chromeos/components/phonehub/message_receiver.h"
 #include "chromeos/components/phonehub/proto/phonehub_api.pb.h"
+#include "chromeos/services/multidevice_setup/public/cpp/multidevice_setup_client.h"
+#include "chromeos/services/multidevice_setup/public/mojom/multidevice_setup.mojom.h"
 
 namespace chromeos {
 namespace phonehub {
@@ -19,7 +21,9 @@
 class MessageSender;
 
 // Manages camera roll items sent from the connected Android device.
-class CameraRollManager : public MessageReceiver::Observer {
+class CameraRollManager
+    : public MessageReceiver::Observer,
+      public multidevice_setup::MultiDeviceSetupClient::Observer {
  public:
   class Observer : public base::CheckedObserver {
    public:
@@ -30,8 +34,10 @@
     virtual void OnCameraRollItemsChanged() = 0;
   };
 
-  CameraRollManager(MessageReceiver* message_receiver,
-                    MessageSender* message_sender);
+  CameraRollManager(
+      MessageReceiver* message_receiver,
+      MessageSender* message_sender,
+      multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client);
   CameraRollManager(const CameraRollManager&) = delete;
   CameraRollManager& operator=(const CameraRollManager&) = delete;
   ~CameraRollManager() override;
@@ -56,15 +62,22 @@
   void OnFetchCameraRollItemsResponseReceived(
       const proto::FetchCameraRollItemsResponse& response) override;
 
+  // MultiDeviceSetupClient::Observer:
+  void OnFeatureStatesChanged(
+      const multidevice_setup::MultiDeviceSetupClient::FeatureStatesMap&
+          feature_states_map) override;
+
   void SendFetchCameraRollItemsRequest();
   void ClearCurrentItems();
   void OnItemThumbnailsDecoded(
       CameraRollThumbnailDecoder::BatchDecodeResult result,
       const std::vector<CameraRollItem>& items);
   void CancelPendingThumbnailRequests();
+  bool IsCameraRollSettingEnabled();
 
   MessageReceiver* message_receiver_;
   MessageSender* message_sender_;
+  multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client_;
 
   int32_t max_item_count_;
   std::vector<CameraRollItem> current_items_;
diff --git a/chromeos/components/phonehub/camera_roll_manager_unittest.cc b/chromeos/components/phonehub/camera_roll_manager_unittest.cc
index 4070eae..ee356f79 100644
--- a/chromeos/components/phonehub/camera_roll_manager_unittest.cc
+++ b/chromeos/components/phonehub/camera_roll_manager_unittest.cc
@@ -11,6 +11,8 @@
 #include "chromeos/components/phonehub/fake_message_receiver.h"
 #include "chromeos/components/phonehub/fake_message_sender.h"
 #include "chromeos/components/phonehub/proto/phonehub_api.pb.h"
+#include "chromeos/services/multidevice_setup/public/cpp/fake_multidevice_setup_client.h"
+#include "chromeos/services/multidevice_setup/public/mojom/multidevice_setup.mojom.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/gfx/image/image.h"
 #include "ui/gfx/image/image_skia.h"
@@ -110,8 +112,12 @@
   ~CameraRollManagerTest() override = default;
 
   void SetUp() override {
+    fake_multidevice_setup_client_ =
+        std::make_unique<multidevice_setup::FakeMultiDeviceSetupClient>();
+    SetCameraRollFeatureSettings(true);
     camera_roll_manager_ = std::make_unique<CameraRollManager>(
-        &fake_message_receiver_, &fake_message_sender_);
+        &fake_message_receiver_, &fake_message_sender_,
+        fake_multidevice_setup_client_.get());
     camera_roll_manager_->thumbnail_decoder_ =
         std::make_unique<FakeThumbnailDecoder>();
     camera_roll_manager_->AddObserver(&fake_observer_);
@@ -159,7 +165,21 @@
         ->CompletePendingCallback(result);
   }
 
+  void SetCameraRollFeatureSettings(bool enabled) {
+    if (enabled) {
+      fake_multidevice_setup_client_->SetFeatureState(
+          multidevice_setup::mojom::Feature::kPhoneHubCameraRoll,
+          multidevice_setup::mojom::FeatureState::kEnabledByUser);
+    } else {
+      fake_multidevice_setup_client_->SetFeatureState(
+          multidevice_setup::mojom::Feature::kPhoneHubCameraRoll,
+          multidevice_setup::mojom::FeatureState::kDisabledByUser);
+    }
+  }
+
   FakeMessageReceiver fake_message_receiver_;
+  std::unique_ptr<multidevice_setup::FakeMultiDeviceSetupClient>
+      fake_multidevice_setup_client_;
 
  private:
   FakeMessageSender fake_message_sender_;
@@ -323,6 +343,28 @@
 }
 
 TEST_F(CameraRollManagerTest,
+       OnPhoneStatusUpdateReceivedWithCameraRollSettingsDisabled) {
+  proto::FetchCameraRollItemsResponse response;
+  PopulateItemProto(response.add_items(), "key2");
+  PopulateItemProto(response.add_items(), "key1");
+  fake_message_receiver_.NotifyFetchCameraRollItemsResponseReceived(response);
+  CompleteThumbnailDecoding(BatchDecodeResult::kSuccess);
+
+  proto::PhoneStatusUpdate update;
+  update.set_has_camera_roll_updates(true);
+  proto::CameraRollAccessState* access_state =
+      update.mutable_properties()->mutable_camera_roll_access_state();
+  access_state->set_feature_enabled(true);
+  access_state->set_storage_permission_granted(true);
+  SetCameraRollFeatureSettings(false);
+  fake_message_receiver_.NotifyPhoneStatusUpdateReceived(update);
+
+  EXPECT_EQ(0UL, GetSentFetchCameraRollItemsRequestCount());
+  EXPECT_EQ(2, GetOnCameraRollItemChangedCallCount());
+  EXPECT_EQ(0, GetCurrentItemsCount());
+}
+
+TEST_F(CameraRollManagerTest,
        OnPhoneStatusUpdateReceivedWithoutStoragePermission) {
   proto::FetchCameraRollItemsResponse response;
   PopulateItemProto(response.add_items(), "key2");
@@ -375,6 +417,27 @@
 }
 
 TEST_F(CameraRollManagerTest,
+       OnPhoneStatusSnapshotReceivedWithCameraRollSettingDisabled) {
+  proto::FetchCameraRollItemsResponse response;
+  PopulateItemProto(response.add_items(), "key2");
+  PopulateItemProto(response.add_items(), "key1");
+  fake_message_receiver_.NotifyFetchCameraRollItemsResponseReceived(response);
+  CompleteThumbnailDecoding(BatchDecodeResult::kSuccess);
+
+  proto::PhoneStatusSnapshot snapshot;
+  proto::CameraRollAccessState* access_state =
+      snapshot.mutable_properties()->mutable_camera_roll_access_state();
+  access_state->set_feature_enabled(false);
+  access_state->set_storage_permission_granted(true);
+  SetCameraRollFeatureSettings(false);
+  fake_message_receiver_.NotifyPhoneStatusSnapshotReceived(snapshot);
+
+  EXPECT_EQ(0UL, GetSentFetchCameraRollItemsRequestCount());
+  EXPECT_EQ(2, GetOnCameraRollItemChangedCallCount());
+  EXPECT_EQ(0, GetCurrentItemsCount());
+}
+
+TEST_F(CameraRollManagerTest,
        OnPhoneStatusSnapshotReceivedWithoutStoragePermission) {
   proto::FetchCameraRollItemsResponse response;
   PopulateItemProto(response.add_items(), "key2");
@@ -394,5 +457,19 @@
   EXPECT_EQ(0, GetCurrentItemsCount());
 }
 
+TEST_F(CameraRollManagerTest, OnFeatureOnFeatureStatesChangedToDisabled) {
+  proto::FetchCameraRollItemsResponse response;
+  PopulateItemProto(response.add_items(), "key2");
+  PopulateItemProto(response.add_items(), "key1");
+  fake_message_receiver_.NotifyFetchCameraRollItemsResponseReceived(response);
+  CompleteThumbnailDecoding(BatchDecodeResult::kSuccess);
+
+  SetCameraRollFeatureSettings(false);
+
+  EXPECT_EQ(0UL, GetSentFetchCameraRollItemsRequestCount());
+  EXPECT_EQ(2, GetOnCameraRollItemChangedCallCount());
+  EXPECT_EQ(0, GetCurrentItemsCount());
+}
+
 }  // namespace phonehub
 }  // namespace chromeos
diff --git a/chromeos/components/phonehub/phone_hub_manager_impl.cc b/chromeos/components/phonehub/phone_hub_manager_impl.cc
index 88d2849..6ca059d4 100644
--- a/chromeos/components/phonehub/phone_hub_manager_impl.cc
+++ b/chromeos/components/phonehub/phone_hub_manager_impl.cc
@@ -147,7 +147,8 @@
       camera_roll_manager_(
           features::IsPhoneHubCameraRollEnabled()
               ? std::make_unique<CameraRollManager>(message_receiver_.get(),
-                                                    message_sender_.get())
+                                                    message_sender_.get(),
+                                                    multidevice_setup_client)
               : nullptr) {}
 
 PhoneHubManagerImpl::~PhoneHubManagerImpl() = default;
diff --git a/chromeos/crosapi/mojom/app_service_types.mojom b/chromeos/crosapi/mojom/app_service_types.mojom
index 700c183..6e611bd 100644
--- a/chromeos/crosapi/mojom/app_service_types.mojom
+++ b/chromeos/crosapi/mojom/app_service_types.mojom
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// Next MinVersion: 5
+// Next MinVersion: 6
 
 module crosapi.mojom;
 
@@ -168,6 +168,7 @@
   kGlob,
   kMimeType,
   [MinVersion=1] kFileExtension,
+  [MinVersion=5] kIsDirectory,
 };
 
 // For pattern type of condition, the value match will be based on the pattern
diff --git a/chromeos/crosapi/mojom/app_service_types_mojom_traits.cc b/chromeos/crosapi/mojom/app_service_types_mojom_traits.cc
index 5adddc11..64f6896 100644
--- a/chromeos/crosapi/mojom/app_service_types_mojom_traits.cc
+++ b/chromeos/crosapi/mojom/app_service_types_mojom_traits.cc
@@ -474,6 +474,8 @@
       return crosapi::mojom::PatternMatchType::kMimeType;
     case apps::mojom::PatternMatchType::kFileExtension:
       return crosapi::mojom::PatternMatchType::kFileExtension;
+    case apps::mojom::PatternMatchType::kIsDirectory:
+      return crosapi::mojom::PatternMatchType::kIsDirectory;
   }
 
   NOTREACHED();
@@ -502,6 +504,9 @@
     case crosapi::mojom::PatternMatchType::kFileExtension:
       *output = apps::mojom::PatternMatchType::kFileExtension;
       return true;
+    case crosapi::mojom::PatternMatchType::kIsDirectory:
+      *output = apps::mojom::PatternMatchType::kIsDirectory;
+      return true;
   }
 
   NOTREACHED();
diff --git a/chromeos/services/multidevice_setup/feature_state_manager_impl.cc b/chromeos/services/multidevice_setup/feature_state_manager_impl.cc
index fe058f7..09f30cff 100644
--- a/chromeos/services/multidevice_setup/feature_state_manager_impl.cc
+++ b/chromeos/services/multidevice_setup/feature_state_manager_impl.cc
@@ -26,8 +26,8 @@
 
 namespace {
 
-constexpr std::array<mojom::Feature, 3> kPhoneHubSubFeatures{
-    mojom::Feature::kPhoneHubNotifications,
+constexpr std::array<mojom::Feature, 4> kPhoneHubSubFeatures{
+    mojom::Feature::kPhoneHubNotifications, mojom::Feature::kPhoneHubCameraRoll,
     mojom::Feature::kPhoneHubTaskContinuation, mojom::Feature::kEche};
 
 base::flat_map<mojom::Feature, std::string>
@@ -39,6 +39,7 @@
       {mojom::Feature::kMessages, kMessagesEnabledPrefName},
       {mojom::Feature::kSmartLock, kSmartLockEnabledPrefName},
       {mojom::Feature::kPhoneHub, kPhoneHubEnabledPrefName},
+      {mojom::Feature::kPhoneHubCameraRoll, kPhoneHubCameraRollEnabledPrefName},
       {mojom::Feature::kPhoneHubNotifications,
        kPhoneHubNotificationsEnabledPrefName},
       {mojom::Feature::kPhoneHubTaskContinuation,
@@ -53,6 +54,7 @@
       {mojom::Feature::kMessages, kMessagesAllowedPrefName},
       {mojom::Feature::kSmartLock, kSmartLockAllowedPrefName},
       {mojom::Feature::kPhoneHub, kPhoneHubAllowedPrefName},
+      {mojom::Feature::kPhoneHubCameraRoll, kPhoneHubCameraRollAllowedPrefName},
       {mojom::Feature::kPhoneHubNotifications,
        kPhoneHubNotificationsAllowedPrefName},
       {mojom::Feature::kPhoneHubTaskContinuation,
@@ -76,6 +78,8 @@
        mojom::FeatureState::kUnavailableNoVerifiedHost},
       {mojom::Feature::kPhoneHub,
        mojom::FeatureState::kUnavailableNoVerifiedHost},
+      {mojom::Feature::kPhoneHubCameraRoll,
+       mojom::FeatureState::kUnavailableNoVerifiedHost},
       {mojom::Feature::kPhoneHubNotifications,
        mojom::FeatureState::kUnavailableNoVerifiedHost},
       {mojom::Feature::kPhoneHubTaskContinuation,
@@ -230,6 +234,13 @@
   }
 
   if (HasFeatureStateChanged(previous_states, new_states,
+                             mojom::Feature::kPhoneHubCameraRoll)) {
+    UMA_HISTOGRAM_ENUMERATION(
+        "PhoneHub.MultiDeviceFeatureState.CameraRoll",
+        new_states.find(mojom::Feature::kPhoneHubCameraRoll)->second);
+  }
+
+  if (HasFeatureStateChanged(previous_states, new_states,
                              mojom::Feature::kPhoneHubNotifications)) {
     UMA_HISTOGRAM_ENUMERATION(
         "PhoneHub.MultiDeviceFeatureState.Notifications",
@@ -466,6 +477,8 @@
           // Note: All Phone Hub-related features use the same SoftwareFeature.
           {mojom::Feature::kPhoneHub,
            multidevice::SoftwareFeature::kPhoneHubClient},
+          {mojom::Feature::kPhoneHubCameraRoll,
+           multidevice::SoftwareFeature::kPhoneHubClient},
           {mojom::Feature::kPhoneHubNotifications,
            multidevice::SoftwareFeature::kPhoneHubClient},
           {mojom::Feature::kPhoneHubTaskContinuation,
@@ -530,6 +543,8 @@
           // Note: All Phone Hub-related features use the same SoftwareFeature.
           {mojom::Feature::kPhoneHub,
            multidevice::SoftwareFeature::kPhoneHubHost},
+          {mojom::Feature::kPhoneHubCameraRoll,
+           multidevice::SoftwareFeature::kPhoneHubHost},
           {mojom::Feature::kPhoneHubNotifications,
            multidevice::SoftwareFeature::kPhoneHubHost},
           {mojom::Feature::kPhoneHubTaskContinuation,
diff --git a/chromeos/services/multidevice_setup/feature_state_manager_impl_unittest.cc b/chromeos/services/multidevice_setup/feature_state_manager_impl_unittest.cc
index 40562bb..6e78bb9 100644
--- a/chromeos/services/multidevice_setup/feature_state_manager_impl_unittest.cc
+++ b/chromeos/services/multidevice_setup/feature_state_manager_impl_unittest.cc
@@ -550,7 +550,8 @@
                            /*empty_bluetooth_address=*/true);
 
   const std::vector<mojom::Feature> kAllPhoneHubFeatures{
-      mojom::Feature::kPhoneHub, mojom::Feature::kPhoneHubNotifications,
+      mojom::Feature::kPhoneHub, mojom::Feature::kPhoneHubCameraRoll,
+      mojom::Feature::kPhoneHubNotifications,
       mojom::Feature::kPhoneHubTaskContinuation, mojom::Feature::kEche};
 
   for (const auto& phone_hub_feature : kAllPhoneHubFeatures)
@@ -630,7 +631,8 @@
   SetupFeatureStateManager(/*is_secondary_user=*/true);
 
   const std::vector<mojom::Feature> kAllPhoneHubFeatures{
-      mojom::Feature::kPhoneHub, mojom::Feature::kPhoneHubNotifications,
+      mojom::Feature::kPhoneHub, mojom::Feature::kPhoneHubCameraRoll,
+      mojom::Feature::kPhoneHubNotifications,
       mojom::Feature::kPhoneHubTaskContinuation, mojom::Feature::kEche};
 
   for (const auto& phone_hub_feature : kAllPhoneHubFeatures)
@@ -707,7 +709,8 @@
   SetupFeatureStateManager();
 
   const std::vector<mojom::Feature> kAllPhoneHubFeatures{
-      mojom::Feature::kPhoneHub, mojom::Feature::kPhoneHubNotifications,
+      mojom::Feature::kPhoneHub, mojom::Feature::kPhoneHubCameraRoll,
+      mojom::Feature::kPhoneHubNotifications,
       mojom::Feature::kPhoneHubTaskContinuation};
 
   for (const auto& phone_hub_feature : kAllPhoneHubFeatures)
@@ -734,6 +737,7 @@
   // Likewise, the Phone Hub notifications enabled pref is disabled by default
   // to ensure the phone grants access.
   test_pref_service()->SetBoolean(kPhoneHubEnabledPrefName, true);
+  test_pref_service()->SetBoolean(kPhoneHubCameraRollEnabledPrefName, true);
   test_pref_service()->SetBoolean(kPhoneHubNotificationsEnabledPrefName, true);
   SetSoftwareFeatureState(false /* use_local_device */,
                           multidevice::SoftwareFeature::kPhoneHubHost,
diff --git a/chromeos/services/multidevice_setup/public/cpp/prefs.cc b/chromeos/services/multidevice_setup/public/cpp/prefs.cc
index d9f16001..f9de594 100644
--- a/chromeos/services/multidevice_setup/public/cpp/prefs.cc
+++ b/chromeos/services/multidevice_setup/public/cpp/prefs.cc
@@ -21,6 +21,8 @@
 const char kSmartLockAllowedPrefName[] = "easy_unlock.allowed";
 const char kSmartLockSigninAllowedPrefName[] = "smart_lock_signin.allowed";
 const char kPhoneHubAllowedPrefName[] = "phone_hub.allowed";
+const char kPhoneHubCameraRollAllowedPrefName[] =
+    "phone_hub_camera_roll.allowed";
 const char kPhoneHubNotificationsAllowedPrefName[] =
     "phone_hub_notifications.allowed";
 const char kPhoneHubTaskContinuationAllowedPrefName[] =
@@ -36,6 +38,8 @@
 const char kSmartLockEnabledPrefName[] = "smart_lock.enabled";
 const char kSmartLockEnabledDeprecatedPrefName[] = "easy_unlock.enabled";
 const char kPhoneHubEnabledPrefName[] = "phone_hub.enabled";
+const char kPhoneHubCameraRollEnabledPrefName[] =
+    "phone_hub_camera_roll.enabled";
 const char kPhoneHubNotificationsEnabledPrefName[] =
     "phone_hub_notifications.enabled";
 const char kPhoneHubTaskContinuationEnabledPrefName[] =
@@ -48,6 +52,7 @@
   registry->RegisterBooleanPref(kSmartLockAllowedPrefName, true);
   registry->RegisterBooleanPref(kSmartLockSigninAllowedPrefName, true);
   registry->RegisterBooleanPref(kPhoneHubAllowedPrefName, true);
+  registry->RegisterBooleanPref(kPhoneHubCameraRollAllowedPrefName, true);
   registry->RegisterBooleanPref(kPhoneHubNotificationsAllowedPrefName, true);
   registry->RegisterBooleanPref(kPhoneHubTaskContinuationAllowedPrefName, true);
   registry->RegisterBooleanPref(kWifiSyncAllowedPrefName, true);
@@ -64,6 +69,8 @@
   // they must go to settings to explicitly enable PhoneHub.
   registry->RegisterBooleanPref(kPhoneHubEnabledPrefName, false);
 
+  registry->RegisterBooleanPref(kPhoneHubCameraRollEnabledPrefName, false);
+
   // This pref is disabled by default; it should not be enabled until access is
   // granted from the phone.
   registry->RegisterBooleanPref(kPhoneHubNotificationsEnabledPrefName, false);
@@ -109,6 +116,11 @@
       return features::IsPhoneHubEnabled() &&
              pref_service->GetBoolean(kPhoneHubAllowedPrefName);
 
+    case mojom::Feature::kPhoneHubCameraRoll:
+      return features::IsPhoneHubEnabled() &&
+             features::IsPhoneHubCameraRollEnabled() &&
+             pref_service->GetBoolean(kPhoneHubCameraRollAllowedPrefName);
+
     case mojom::Feature::kPhoneHubNotifications:
       return features::IsPhoneHubEnabled() &&
              pref_service->GetBoolean(kPhoneHubNotificationsAllowedPrefName);
@@ -149,6 +161,9 @@
     case mojom::Feature::kPhoneHub:
       return pref_service->FindPreference(kPhoneHubEnabledPrefName)
           ->IsDefaultValue();
+    case mojom::Feature::kPhoneHubCameraRoll:
+      return pref_service->FindPreference(kPhoneHubCameraRollEnabledPrefName)
+          ->IsDefaultValue();
     case mojom::Feature::kPhoneHubNotifications:
       return pref_service->FindPreference(kPhoneHubNotificationsEnabledPrefName)
           ->IsDefaultValue();
diff --git a/chromeos/services/multidevice_setup/public/cpp/prefs.h b/chromeos/services/multidevice_setup/public/cpp/prefs.h
index 3d6b908..370ddf8d 100644
--- a/chromeos/services/multidevice_setup/public/cpp/prefs.h
+++ b/chromeos/services/multidevice_setup/public/cpp/prefs.h
@@ -22,6 +22,7 @@
 extern const char kSmartLockAllowedPrefName[];
 extern const char kSmartLockSigninAllowedPrefName[];
 extern const char kPhoneHubAllowedPrefName[];
+extern const char kPhoneHubCameraRollAllowedPrefName[];
 extern const char kPhoneHubNotificationsAllowedPrefName[];
 extern const char kPhoneHubTaskContinuationAllowedPrefName[];
 extern const char kWifiSyncAllowedPrefName[];
@@ -35,6 +36,7 @@
 extern const char kMessagesEnabledPrefName[];
 extern const char kSmartLockEnabledPrefName[];
 extern const char kPhoneHubEnabledPrefName[];
+extern const char kPhoneHubCameraRollEnabledPrefName[];
 extern const char kPhoneHubNotificationsEnabledPrefName[];
 extern const char kPhoneHubTaskContinuationEnabledPrefName[];
 extern const char kEcheEnabledPrefName[];
diff --git a/chromeos/services/multidevice_setup/public/mojom/multidevice_setup.mojom b/chromeos/services/multidevice_setup/public/mojom/multidevice_setup.mojom
index c2ec876..c85e312 100644
--- a/chromeos/services/multidevice_setup/public/mojom/multidevice_setup.mojom
+++ b/chromeos/services/multidevice_setup/public/mojom/multidevice_setup.mojom
@@ -57,7 +57,8 @@
   kPhoneHubNotifications = 5,
   kPhoneHubTaskContinuation = 6,
   kWifiSync = 7,
-  kEche = 8
+  kEche = 8,
+  kPhoneHubCameraRoll = 9,
 };
 
 // This enum is tied directly to a UMA enum defined in
diff --git a/chromeos/tast_control.gni b/chromeos/tast_control.gni
index e1525810..dcbfd4a 100644
--- a/chromeos/tast_control.gni
+++ b/chromeos/tast_control.gni
@@ -21,9 +21,6 @@
   # b/196705842
   "apps.LaunchGalleryLanguage",
 
-  # crbug.com/1241412
-  "arc.IMEBlockingVK",
-
   # crbug.com/1242415
   "hwsec.AttestationEnrollOnly",
   "hwsec.ChapsAttributePolicy",
diff --git a/components/app_restore/arc_save_handler.cc b/components/app_restore/arc_save_handler.cc
index 119a37d9..559ab192 100644
--- a/components/app_restore/arc_save_handler.cc
+++ b/components/app_restore/arc_save_handler.cc
@@ -141,8 +141,17 @@
 
   auto task_it = task_id_to_app_id_.find(task_id);
   if (task_it != task_id_to_app_id_.end()) {
-    FullRestoreSaveHandler::GetInstance()->RemoveWindowInfo(
-        profile_path_, task_it->second, task_id);
+    // During the system shutdown phase, the ARC instance connection is lost,
+    // and the ARC windows are destroyed, but the ARC tasks are not destroyed
+    // yet. This might cause window bounds lost, and ghost window can't be
+    // created after reboot due to no window bounds. So if the ARC instance
+    // connection is lost, don't remove the window info, but wait for the task
+    // destroyed to keep the window bounds info. Remove the window info only
+    // when the ARC instance is connected.
+    if (is_connection_ready_) {
+      FullRestoreSaveHandler::GetInstance()->RemoveWindowInfo(
+          profile_path_, task_it->second, task_id);
+    }
     return;
   }
 
@@ -152,7 +161,9 @@
       window->GetProperty(app_restore::kGhostWindowSessionIdKey);
   auto it = ghost_window_session_id_to_app_id_.find(session_id);
   if (it != ghost_window_session_id_to_app_id_.end()) {
-    FullRestoreSaveHandler::GetInstance()->RemoveWindowInfo(
+    // For ghost windows, we don't need to wait for OnTaskDestroyed, so remove
+    // AppRestoreData for `session_id`.
+    FullRestoreSaveHandler::GetInstance()->RemoveAppRestoreData(
         profile_path_, it->second, session_id);
     ghost_window_session_id_to_app_id_.erase(it);
   }
diff --git a/components/app_restore/arc_save_handler.h b/components/app_restore/arc_save_handler.h
index 29755f3..107a896 100644
--- a/components/app_restore/arc_save_handler.h
+++ b/components/app_restore/arc_save_handler.h
@@ -71,6 +71,10 @@
   // Returns the app id that associates with |window|.
   std::string GetAppId(aura::Window* window);
 
+  void set_is_connection_ready(bool is_connection_ready) {
+    is_connection_ready_ = is_connection_ready;
+  }
+
  private:
   friend class FullRestoreSaveHandlerTestApi;
 
@@ -87,6 +91,9 @@
 
   int32_t session_id_ = 0;
 
+  // Specify whether the ARC instance connection is ready.
+  bool is_connection_ready_ = false;
+
   // The map from the ARC session id to the app launch info.
   SessionIdMap session_id_to_app_launch_info_;
 
diff --git a/components/app_restore/full_restore_save_handler.cc b/components/app_restore/full_restore_save_handler.cc
index f7986e6..60f7358e 100644
--- a/components/app_restore/full_restore_save_handler.cc
+++ b/components/app_restore/full_restore_save_handler.cc
@@ -466,6 +466,11 @@
   }
 }
 
+void FullRestoreSaveHandler::SetArcConnection(bool is_connection_ready) {
+  if (arc_save_handler_)
+    arc_save_handler_->set_is_connection_ready(is_connection_ready);
+}
+
 void FullRestoreSaveHandler::ClearForTesting() {
   profile_path_to_file_handler_.clear();
   profile_path_to_restore_data_.clear();
diff --git a/components/app_restore/full_restore_save_handler.h b/components/app_restore/full_restore_save_handler.h
index ba6227f..3038af14 100644
--- a/components/app_restore/full_restore_save_handler.h
+++ b/components/app_restore/full_restore_save_handler.h
@@ -171,6 +171,9 @@
   // the window's associated AppRestoreData.
   std::string GetAppId(aura::Window* window);
 
+  // Invoked when the ARC instance connection is ready or closed.
+  void SetArcConnection(bool is_connection_ready);
+
   int window_count() const { return window_count_; }
 
   base::OneShotTimer* GetTimerForTesting() { return &save_timer_; }
diff --git a/components/app_restore/full_restore_utils.cc b/components/app_restore/full_restore_utils.cc
index cd4aed7..9a55a81ad 100644
--- a/components/app_restore/full_restore_utils.cc
+++ b/components/app_restore/full_restore_utils.cc
@@ -143,6 +143,10 @@
   FullRestoreSaveHandler::GetInstance()->OnTaskDestroyed(task_id);
 }
 
+void SetArcConnection(bool is_connection_ready) {
+  FullRestoreSaveHandler::GetInstance()->SetArcConnection(is_connection_ready);
+}
+
 void OnTaskThemeColorUpdated(int32_t task_id,
                              uint32_t primary_color,
                              uint32_t status_bar_color) {
diff --git a/components/app_restore/full_restore_utils.h b/components/app_restore/full_restore_utils.h
index f914692..bc93386c 100644
--- a/components/app_restore/full_restore_utils.h
+++ b/components/app_restore/full_restore_utils.h
@@ -122,6 +122,10 @@
 COMPONENT_EXPORT(APP_RESTORE)
 void OnTaskDestroyed(int32_t task_id);
 
+// Invoked when the ARC instance connection is ready or closed.
+COMPONENT_EXPORT(APP_RESTORE)
+void SetArcConnection(bool is_connection_ready);
+
 // Invoked when the task theme colors are updated for an ARC app.
 COMPONENT_EXPORT(APP_RESTORE)
 void OnTaskThemeColorUpdated(int32_t task_id,
diff --git a/components/arc/intent_helper/arc_intent_helper_bridge.cc b/components/arc/intent_helper/arc_intent_helper_bridge.cc
index 626ed5c..9c67756 100644
--- a/components/arc/intent_helper/arc_intent_helper_bridge.cc
+++ b/components/arc/intent_helper/arc_intent_helper_bridge.cc
@@ -270,11 +270,12 @@
     g_open_url_delegate->OpenWebAppFromArc(gurl);
 }
 
-void ArcIntentHelperBridge::RecordShareFilesMetrics(mojom::ShareFiles flag) {
+void ArcIntentHelperBridge::RecordShareFilesMetricsDeprecated(
+    mojom::ShareFiles flag) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   // Record metrics coming from ARC, these are related Share files feature
   // stability.
-  UMA_HISTOGRAM_ENUMERATION("Arc.ShareFilesOnExit", flag);
+  LOG(ERROR) << "Arc.ShareFilesOnExit is deprecated, erasing incoming";
 }
 
 void ArcIntentHelperBridge::LaunchCameraApp(uint32_t intent_id,
diff --git a/components/arc/intent_helper/arc_intent_helper_bridge.h b/components/arc/intent_helper/arc_intent_helper_bridge.h
index 173e3fe..351c256 100644
--- a/components/arc/intent_helper/arc_intent_helper_bridge.h
+++ b/components/arc/intent_helper/arc_intent_helper_bridge.h
@@ -93,7 +93,7 @@
   void SetWallpaperDeprecated(const std::vector<uint8_t>& jpeg_data) override;
   void OpenVolumeControl() override;
   void OnOpenWebApp(const std::string& url) override;
-  void RecordShareFilesMetrics(mojom::ShareFiles flag) override;
+  void RecordShareFilesMetricsDeprecated(mojom::ShareFiles flag) override;
   void LaunchCameraApp(uint32_t intent_id,
                        arc::mojom::CameraIntentMode mode,
                        bool should_handle_result,
diff --git a/components/arc/mojom/intent_helper.mojom b/components/arc/mojom/intent_helper.mojom
index b8a379c..ba1c6982 100644
--- a/components/arc/mojom/intent_helper.mojom
+++ b/components/arc/mojom/intent_helper.mojom
@@ -248,7 +248,7 @@
 };
 
 // Handles intents from ARC in Chrome.
-// Deprecated method ID: 4, 10
+// Deprecated method ID: 4, 9, 10
 // Next method ID: 20
 interface IntentHelperHost {
   // Called when icons associated with the package are no longer up to date.
@@ -296,7 +296,7 @@
   [MinVersion=23] OnOpenWebApp@8(string url);
 
   // Records Sharing files feature's metrics via Chrome.
-  [MinVersion=24] RecordShareFilesMetrics@9(ShareFiles flag);
+  [MinVersion=24] RecordShareFilesMetricsDeprecated@9(ShareFiles flag);
 
   // Does a reset of ARC; this wipes /data, and then re-calls on OOBE for
   // account binding to happen again, as if the user just went through OOBE.
diff --git a/components/google/core/common/google_util.cc b/components/google/core/common/google_util.cc
index dee18d2..d79438b7 100644
--- a/components/google/core/common/google_util.cc
+++ b/components/google/core/common/google_util.cc
@@ -10,7 +10,7 @@
 #include <vector>
 
 #include "base/command_line.h"
-#include "base/containers/flat_set.h"
+#include "base/containers/fixed_flat_set.h"
 #include "base/cxx17_backports.h"
 #include "base/macros.h"
 #include "base/no_destructor.h"
@@ -47,10 +47,11 @@
 // with a valid TLD that appears in |allowed_tlds|. If |subdomain_permission| is
 // ALLOW_SUBDOMAIN, we check against host "*.<domain_in_lower_case>.<TLD>"
 // instead.
+template <typename Container>
 bool IsValidHostName(base::StringPiece host,
                      base::StringPiece domain_in_lower_case,
                      SubdomainPermission subdomain_permission,
-                     const base::flat_set<base::StringPiece>& allowed_tlds) {
+                     const Container& allowed_tlds) {
   // Fast path to avoid searching the registry set.
   if (host.find(domain_in_lower_case) == base::StringPiece::npos)
     return false;
@@ -104,21 +105,21 @@
   if (base_url.is_valid() && (canonical_host == base_url.host_piece()))
     return true;
 
-  static const base::NoDestructor<base::flat_set<base::StringPiece>>
-      google_tlds(std::initializer_list<base::StringPiece>({GOOGLE_TLD_LIST}));
+  static constexpr auto google_tlds =
+      base::MakeFixedFlatSet<base::StringPiece>({GOOGLE_TLD_LIST});
   return IsValidHostName(canonical_host, "google", subdomain_permission,
-                         *google_tlds);
+                         google_tlds);
 }
 
 bool IsCanonicalHostYoutubeHostname(base::StringPiece canonical_host,
                                     SubdomainPermission subdomain_permission) {
-  static const base::NoDestructor<base::flat_set<base::StringPiece>>
-      youtube_tlds(
-          std::initializer_list<base::StringPiece>({YOUTUBE_TLD_LIST}));
+  static constexpr auto youtube_tlds =
+      base::MakeFixedFlatSet<base::StringPiece>({YOUTUBE_TLD_LIST});
+
   return IsValidHostName(canonical_host, "youtube", subdomain_permission,
-                         *youtube_tlds) ||
-      IsValidHostName(canonical_host, "youtubekids", subdomain_permission,
-                         *youtube_tlds);
+                         youtube_tlds) ||
+         IsValidHostName(canonical_host, "youtubekids", subdomain_permission,
+                         youtube_tlds);
 }
 
 // True if |url| is a valid URL with a host that is in the static list of
@@ -131,11 +132,11 @@
   base::StringPiece host(url.host_piece());
   StripTrailingDot(&host);
 
-  static const base::NoDestructor<base::flat_set<base::StringPiece>>
-      google_subdomains(std::initializer_list<base::StringPiece>(
-          {"ipv4.google.com", "ipv6.google.com"}));
+  static constexpr auto google_subdomains =
+      base::MakeFixedFlatSet<base::StringPiece>(
+          {"ipv4.google.com", "ipv6.google.com"});
 
-  return google_subdomains->contains(host);
+  return google_subdomains.contains(host);
 }
 
 }  // namespace
diff --git a/components/history/core/browser/visit_tracker.cc b/components/history/core/browser/visit_tracker.cc
index e1bb53d1a..81b41ba 100644
--- a/components/history/core/browser/visit_tracker.cc
+++ b/components/history/core/browser/visit_tracker.cc
@@ -25,7 +25,7 @@
 // This function is potentially slow because it may do up to two brute-force
 // searches of the transitions list. This transitions list is kept to a
 // relatively small number by CleanupTransitionList so it shouldn't be a big
-// deal. However, if this ends up being noticable for performance, we may want
+// deal. However, if this ends up being noticeable for performance, we may want
 // to optimize lookup.
 VisitID VisitTracker::GetLastVisit(ContextID context_id,
                                    int nav_entry_id,
diff --git a/components/omnibox/browser/autocomplete_controller.cc b/components/omnibox/browser/autocomplete_controller.cc
index d869511..abccdc0 100644
--- a/components/omnibox/browser/autocomplete_controller.cc
+++ b/components/omnibox/browser/autocomplete_controller.cc
@@ -600,27 +600,27 @@
   provider_client_->GetOmniboxTriggeredFeatureService()->ResetSession();
 }
 
-void AutocompleteController::UpdateMatchDestinationURLWithQueryFormulationTime(
-    base::TimeDelta query_formulation_time,
-    AutocompleteMatch* match) const {
+void AutocompleteController::
+    UpdateMatchDestinationURLWithAdditionalAssistedQueryStats(
+        base::TimeDelta query_formulation_time,
+        AutocompleteMatch* match) const {
   if (!match->search_terms_args ||
       match->search_terms_args->assisted_query_stats.empty())
     return;
 
   // Append the query formulation time (time from when the user first typed a
-  // character into the omnibox to when the user selected a query) and whether
-  // a field trial has triggered to the AQS parameter.
-  TemplateURLRef::SearchTermsArgs search_terms_args(*match->search_terms_args);
-  search_terms_args.assisted_query_stats += base::StringPrintf(
-      ".%" PRId64 "j%dj%d",
-      query_formulation_time.InMilliseconds(),
+  // character into the omnibox to when the user selected a query), whether
+  // a field trial has triggered, and the current page classification to the AQS
+  // parameter.
+  match->search_terms_args->assisted_query_stats += base::StringPrintf(
+      ".%" PRId64 "j%dj%d", query_formulation_time.InMilliseconds(),
       (search_provider_ &&
        search_provider_->field_trial_triggered_in_session()) ||
-      (zero_suggest_provider_ &&
-       zero_suggest_provider_->field_trial_triggered_in_session()),
+          (zero_suggest_provider_ &&
+           zero_suggest_provider_->field_trial_triggered_in_session()),
       input_.current_page_classification());
 
-  // Append the experiment stats to the AQS parameter to be logged in
+  // Append the ExperimentStatsV2 to the AQS parameter to be logged in
   // searchbox_stats.proto's experiment_stats_v2 field.
   if (zero_suggest_provider_) {
     // The field number for the experiment stat type specified as an int
@@ -649,16 +649,15 @@
     }
     if (!experiment_stats_v2.empty()) {
       // 'j' is used as a delimiter between individual experiment stat entries.
-      search_terms_args.assisted_query_stats +=
+      match->search_terms_args->assisted_query_stats +=
           "." + base::JoinString(experiment_stats_v2, "j");
     }
   }
 
-  UpdateMatchDestinationURL(search_terms_args, match);
+  SetMatchDestinationURL(match);
 }
 
-void AutocompleteController::UpdateMatchDestinationURL(
-    const TemplateURLRef::SearchTermsArgs& search_terms_args,
+void AutocompleteController::SetMatchDestinationURL(
     AutocompleteMatch* match) const {
   const TemplateURL* template_url = match->GetTemplateURL(
       template_url_service_, false);
@@ -666,7 +665,7 @@
     return;
 
   match->destination_url = GURL(template_url->url_ref().ReplaceSearchTerms(
-      search_terms_args, template_url_service_->search_terms_data()));
+      *match->search_terms_args, template_url_service_->search_terms_data()));
 #if defined(OS_ANDROID)
   match->UpdateJavaDestinationUrl();
 #endif
@@ -935,8 +934,6 @@
         base::StringPrintf("chrome.%s.%s",
                            selected_index.c_str(),
                            autocompletions.c_str());
-    match->destination_url = GURL(template_url->url_ref().ReplaceSearchTerms(
-        *match->search_terms_args, template_url_service_->search_terms_data()));
   }
 }
 
diff --git a/components/omnibox/browser/autocomplete_controller.h b/components/omnibox/browser/autocomplete_controller.h
index 4c8e234..16e7bc5 100644
--- a/components/omnibox/browser/autocomplete_controller.h
+++ b/components/omnibox/browser/autocomplete_controller.h
@@ -139,19 +139,17 @@
   // content; see |OmniboxEditModel::user_input_in_progress_|.
   void ResetSession();
 
-  // Constructs the final destination URL for a given match using additional
-  // parameters otherwise not available at initial construction time.  This
-  // method should be called from OmniboxEditModel::OpenMatch() before the user
-  // navigates to the selected match.
-  void UpdateMatchDestinationURLWithQueryFormulationTime(
+  // Updates the destination URL for the given match with the final AQS
+  // parameter using additional information otherwise not available at initial
+  // construction time iff the provider's TemplateURL supports assisted query
+  // stats.
+  // This method should be called right before the user navigates to the match.
+  void UpdateMatchDestinationURLWithAdditionalAssistedQueryStats(
       base::TimeDelta query_formulation_time,
       AutocompleteMatch* match) const;
 
-  // Constructs the final destination URL for a given match using additional
-  // parameters otherwise not available at initial construction time.
-  void UpdateMatchDestinationURL(
-      const TemplateURLRef::SearchTermsArgs& search_terms_args,
-      AutocompleteMatch* match) const;
+  // Constructs and sets the final destination URL on the given match.
+  void SetMatchDestinationURL(AutocompleteMatch* match) const;
 
   // Prepend missing tail suggestion prefixes in results, if present.
   void InlineTailPrefixes();
@@ -247,9 +245,8 @@
   // provider name as a description on the first match in the group.
   void UpdateKeywordDescriptions(AutocompleteResult* result);
 
-  // For each AutocompleteMatch returned by SearchProvider, updates the
-  // destination_url iff the provider's TemplateURL supports assisted query
-  // stats.
+  // For each AutocompleteMatch in |result|, updates the assisted query stats
+  // iff the provider's TemplateURL supports it.
   void UpdateAssistedQueryStats(AutocompleteResult* result);
 
   // Calls AutocompleteController::Observer::OnResultChanged() and if done sends
diff --git a/components/omnibox/browser/autocomplete_provider_unittest.cc b/components/omnibox/browser/autocomplete_provider_unittest.cc
index 1c932c7..8e9e143 100644
--- a/components/omnibox/browser/autocomplete_provider_unittest.cc
+++ b/components/omnibox/browser/autocomplete_provider_unittest.cc
@@ -621,7 +621,7 @@
 GURL AutocompleteProviderTest::GetDestinationURL(
     AutocompleteMatch& match,
     base::TimeDelta query_formulation_time) const {
-  controller_->UpdateMatchDestinationURLWithQueryFormulationTime(
+  controller_->UpdateMatchDestinationURLWithAdditionalAssistedQueryStats(
       query_formulation_time, &match);
   return match.destination_url;
 }
@@ -959,12 +959,16 @@
   EXPECT_EQ("//aqs=chrome.0.69i57j69i58j5l2j0l3j69i59.2456j0j0&", url.path());
 
   // Test field trial triggered bit set.
+  match.search_terms_args->assisted_query_stats =
+      "chrome.0.69i57j69i58j5l2j0l3j69i59";
   set_search_provider_field_trial_triggered_in_session(true);
   EXPECT_TRUE(search_provider_field_trial_triggered_in_session());
   url = GetDestinationURL(match, base::TimeDelta::FromMilliseconds(2456));
   EXPECT_EQ("//aqs=chrome.0.69i57j69i58j5l2j0l3j69i59.2456j1j0&", url.path());
 
   // Test page classification set.
+  match.search_terms_args->assisted_query_stats =
+      "chrome.0.69i57j69i58j5l2j0l3j69i59";
   set_current_page_classification(metrics::OmniboxEventProto::OTHER);
   set_search_provider_field_trial_triggered_in_session(false);
   EXPECT_FALSE(search_provider_field_trial_triggered_in_session());
@@ -972,17 +976,24 @@
   EXPECT_EQ("//aqs=chrome.0.69i57j69i58j5l2j0l3j69i59.2456j0j4&", url.path());
 
   // Test page classification and field trial triggered set.
+  match.search_terms_args->assisted_query_stats =
+      "chrome.0.69i57j69i58j5l2j0l3j69i59";
   set_search_provider_field_trial_triggered_in_session(true);
   EXPECT_TRUE(search_provider_field_trial_triggered_in_session());
   url = GetDestinationURL(match, base::TimeDelta::FromMilliseconds(2456));
   EXPECT_EQ("//aqs=chrome.0.69i57j69i58j5l2j0l3j69i59.2456j1j4&", url.path());
 
   // Test experiment stats set.
+  match.search_terms_args->assisted_query_stats =
+      "chrome.0.69i57j69i58j5l2j0l3j69i59";
   add_zero_suggest_provider_experiment_stat(
       base::test::ParseJson(R"json({"2":"0:67","4":10001})json"));
   url = GetDestinationURL(match, base::TimeDelta::FromMilliseconds(2456));
   EXPECT_EQ("//aqs=chrome.0.69i57j69i58j5l2j0l3j69i59.2456j1j4.10001i0,67&",
             url.path());
+
+  match.search_terms_args->assisted_query_stats =
+      "chrome.0.69i57j69i58j5l2j0l3j69i59";
   add_zero_suggest_provider_experiment_stat(
       base::test::ParseJson(R"json({"2":"54:67","4":10001})json"));
   url = GetDestinationURL(match, base::TimeDelta::FromMilliseconds(2456));
diff --git a/components/omnibox/browser/omnibox_edit_model.cc b/components/omnibox/browser/omnibox_edit_model.cc
index f163280..8036cf6 100644
--- a/components/omnibox/browser/omnibox_edit_model.cc
+++ b/components/omnibox/browser/omnibox_edit_model.cc
@@ -762,8 +762,9 @@
   const base::TimeTicks& now(base::TimeTicks::Now());
   base::TimeDelta elapsed_time_since_user_first_modified_omnibox(
       now - time_user_first_modified_omnibox_);
-  autocomplete_controller()->UpdateMatchDestinationURLWithQueryFormulationTime(
-      elapsed_time_since_user_first_modified_omnibox, &match);
+  autocomplete_controller()
+      ->UpdateMatchDestinationURLWithAdditionalAssistedQueryStats(
+          elapsed_time_since_user_first_modified_omnibox, &match);
 
   // Save the result of the interaction, but do not record the histogram yet.
   focus_resulted_in_navigation_ = true;
diff --git a/components/optimization_guide/content/browser/page_content_annotations_model_manager_unittest.cc b/components/optimization_guide/content/browser/page_content_annotations_model_manager_unittest.cc
index 65d9f351..2912dd71 100644
--- a/components/optimization_guide/content/browser/page_content_annotations_model_manager_unittest.cc
+++ b/components/optimization_guide/content/browser/page_content_annotations_model_manager_unittest.cc
@@ -522,8 +522,13 @@
 
 TEST_F(PageContentAnnotationsModelManagerEntitiesOnlyTest,
        GetMetadataForEntityIdEntitiesAnnotatorInitialized) {
+  EntityMetadata entity_metadata;
+  entity_metadata.human_readable_name = "entity1";
+  entity_metadata.human_readable_categories = {
+      {"category1", 0.5},
+  };
   SetPageEntitiesModelExecutor(/*entries=*/{}, {
-                                                   {"entity1", {"entity1"}},
+                                                   {"entity1", entity_metadata},
                                                });
   EXPECT_TRUE(GetMetadataForEntityId("entity1").has_value());
 }
diff --git a/components/optimization_guide/core/BUILD.gn b/components/optimization_guide/core/BUILD.gn
index 5a2a82c..8b3d6de 100644
--- a/components/optimization_guide/core/BUILD.gn
+++ b/components/optimization_guide/core/BUILD.gn
@@ -22,6 +22,7 @@
   sources = [
     "batch_entity_metadata_task.cc",
     "batch_entity_metadata_task.h",
+    "entity_metadata.cc",
     "entity_metadata.h",
     "entity_metadata_provider.h",
   ]
diff --git a/components/optimization_guide/core/entity_metadata.cc b/components/optimization_guide/core/entity_metadata.cc
new file mode 100644
index 0000000..6dcb313
--- /dev/null
+++ b/components/optimization_guide/core/entity_metadata.cc
@@ -0,0 +1,13 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/optimization_guide/core/entity_metadata.h"
+
+namespace optimization_guide {
+
+EntityMetadata::EntityMetadata() = default;
+EntityMetadata::~EntityMetadata() = default;
+EntityMetadata::EntityMetadata(const EntityMetadata&) = default;
+
+}  // namespace optimization_guide
diff --git a/components/optimization_guide/core/entity_metadata.h b/components/optimization_guide/core/entity_metadata.h
index a695ff0e..199f5e51 100644
--- a/components/optimization_guide/core/entity_metadata.h
+++ b/components/optimization_guide/core/entity_metadata.h
@@ -5,15 +5,25 @@
 #ifndef COMPONENTS_OPTIMIZATION_GUIDE_CORE_ENTITY_METADATA_H_
 #define COMPONENTS_OPTIMIZATION_GUIDE_CORE_ENTITY_METADATA_H_
 
+#include <string>
+
+#include "base/containers/flat_map.h"
+
 namespace optimization_guide {
 
 // The metadata associated with a single entity.
 struct EntityMetadata {
+  EntityMetadata();
+  ~EntityMetadata();
+  EntityMetadata(const EntityMetadata&);
+
   // The human-readable name of the entity in the user's locale.
   std::string human_readable_name;
 
-  // TODO(crbug/1234578): Add broader topics when the format of that is
-  // finalized.
+  // A map from human-readable category the entity belongs to in the user's
+  // locale to the confidence that the category is related to the entity. Will
+  // contain the top 5 entries based on confidence score.
+  base::flat_map<std::string, float> human_readable_categories;
 };
 
 }  // namespace optimization_guide
diff --git a/components/policy/core/common/cloud/client_data_delegate.h b/components/policy/core/common/cloud/client_data_delegate.h
index cb3358e..2cbfa1c5 100644
--- a/components/policy/core/common/cloud/client_data_delegate.h
+++ b/components/policy/core/common/cloud/client_data_delegate.h
@@ -5,8 +5,6 @@
 #ifndef COMPONENTS_POLICY_CORE_COMMON_CLOUD_CLIENT_DATA_DELEGATE_H_
 #define COMPONENTS_POLICY_CORE_COMMON_CLOUD_CLIENT_DATA_DELEGATE_H_
 
-#include "base/callback_forward.h"
-
 namespace enterprise_management {
 class RegisterBrowserRequest;
 }  // namespace enterprise_management
@@ -22,8 +20,7 @@
   virtual ~ClientDataDelegate() = default;
 
   virtual void FillRegisterBrowserRequest(
-      enterprise_management::RegisterBrowserRequest* request,
-      base::OnceClosure callback) const = 0;
+      enterprise_management::RegisterBrowserRequest* request) const = 0;
 };
 
 }  // namespace policy
diff --git a/components/policy/core/common/cloud/cloud_policy_client.cc b/components/policy/core/common/cloud/cloud_policy_client.cc
index cd1b716..9ea9c6c 100644
--- a/components/policy/core/common/cloud/cloud_policy_client.cc
+++ b/components/policy/core/common/cloud/cloud_policy_client.cc
@@ -198,7 +198,7 @@
   request_jobs_.clear();
   app_install_report_request_job_ = nullptr;
   extension_install_report_request_job_ = nullptr;
-  unique_request_job_.reset();
+  policy_fetch_request_job_.reset();
   responses_.clear();
   if (device_dm_token_callback_) {
     device_dm_token_ = device_dm_token_callback_.Run(user_affiliation_ids);
@@ -239,7 +239,7 @@
   if (requires_reregistration())
     request->set_reregistration_dm_token(reregistration_dm_token_);
 
-  unique_request_job_ = service_->CreateJob(std::move(config));
+  policy_fetch_request_job_ = service_->CreateJob(std::move(config));
 }
 
 void CloudPolicyClient::RegisterWithCertificate(
@@ -295,11 +295,10 @@
           base::BindOnce(&CloudPolicyClient::OnRegisterCompleted,
                          weak_ptr_factory_.GetWeakPtr()));
 
-  enterprise_management::RegisterBrowserRequest* request =
-      config->request()->mutable_register_browser_request();
   client_data_delegate.FillRegisterBrowserRequest(
-      request, base::BindOnce(&CloudPolicyClient::CreateUniqueRequestJob,
-                              base::Unretained(this), std::move(config)));
+      config->request()->mutable_register_browser_request());
+
+  policy_fetch_request_job_ = service_->CreateJob(std::move(config));
 }
 
 void CloudPolicyClient::OnRegisterWithCertificateRequestSigned(
@@ -328,7 +327,7 @@
   signed_request->set_signature(signed_data.signature());
   signed_request->set_extra_data_bytes(signed_data.extra_data_bytes());
 
-  unique_request_job_ = service_->CreateJob(std::move(config));
+  policy_fetch_request_job_ = service_->CreateJob(std::move(config));
 }
 
 void CloudPolicyClient::SetInvalidationInfo(int64_t version,
@@ -421,7 +420,7 @@
   // since it is now the invalidation version used for the latest fetch.
   fetched_invalidation_version_ = invalidation_version_;
 
-  unique_request_job_ = service_->CreateJob(std::move(config));
+  policy_fetch_request_job_ = service_->CreateJob(std::move(config));
 }
 
 void CloudPolicyClient::UploadPolicyValidationReport(
@@ -510,7 +509,7 @@
 
   config->request()->mutable_unregister_request();
 
-  unique_request_job_ = service_->CreateJob(std::move(config));
+  policy_fetch_request_job_ = service_->CreateJob(std::move(config));
 }
 
 void CloudPolicyClient::UploadEnterpriseMachineCertificate(
@@ -1637,9 +1636,4 @@
   }
 }
 
-void CloudPolicyClient::CreateUniqueRequestJob(
-    std::unique_ptr<RegistrationJobConfiguration> config) {
-  unique_request_job_ = service_->CreateJob(std::move(config));
-}
-
 }  // namespace policy
diff --git a/components/policy/core/common/cloud/cloud_policy_client.h b/components/policy/core/common/cloud/cloud_policy_client.h
index e14993a..142518d 100644
--- a/components/policy/core/common/cloud/cloud_policy_client.h
+++ b/components/policy/core/common/cloud/cloud_policy_client.h
@@ -39,9 +39,8 @@
 namespace policy {
 
 class ClientDataDelegate;
-class DMServerJobConfiguration;
-class RegistrationJobConfiguration;
 class SigningService;
+class DMServerJobConfiguration;
 
 // Implements the core logic required to talk to the device management service.
 // Also keeps track of the current state of the association with the service,
@@ -795,10 +794,9 @@
   // Used for issuing requests to the cloud.
   DeviceManagementService* service_ = nullptr;
 
-  // Only one outstanding policy fetch or device/user registration request is
-  // allowed. Using a separate job to track those requests. If multiple
-  // requests have been started, only the last one will be kept.
-  std::unique_ptr<DeviceManagementService::Job> unique_request_job_;
+  // Only one outstanding policy fetch is allowed, so this is tracked in
+  // its own member variable.
+  std::unique_ptr<DeviceManagementService::Job> policy_fetch_request_job_;
 
   // All of the outstanding non-policy-fetch request jobs. These jobs are
   // silently cancelled if Unregister() is called.
@@ -860,10 +858,6 @@
   // retained by this method.
   void ExecuteCertUploadJob(std::unique_ptr<DMServerJobConfiguration> config);
 
-  // Sets `unique_request_job_` with a new job created with `config`.
-  void CreateUniqueRequestJob(
-      std::unique_ptr<RegistrationJobConfiguration> config);
-
   // Used to store a copy of the previously used |dm_token_|. This is used
   // during re-registration, which gets triggered by a failed policy fetch with
   // error |DM_STATUS_SERVICE_DEVICE_NOT_FOUND|.
diff --git a/components/policy/core/common/cloud/cloud_policy_client_unittest.cc b/components/policy/core/common/cloud/cloud_policy_client_unittest.cc
index c937259..f3655b6 100644
--- a/components/policy/core/common/cloud/cloud_policy_client_unittest.cc
+++ b/components/policy/core/common/cloud/cloud_policy_client_unittest.cc
@@ -10,11 +10,9 @@
 #include <map>
 #include <memory>
 #include <set>
-#include <utility>
 
 #include "base/base64.h"
 #include "base/bind.h"
-#include "base/callback.h"
 #include "base/callback_helpers.h"
 #include "base/compiler_specific.h"
 #include "base/cxx17_backports.h"
@@ -206,12 +204,9 @@
 class FakeClientDataDelegate : public ClientDataDelegate {
  public:
   void FillRegisterBrowserRequest(
-      enterprise_management::RegisterBrowserRequest* request,
-      base::OnceClosure callback) const override {
-    request->set_os_platform(GetOSPlatform());
-    request->set_os_version(GetOSVersion());
-
-    std::move(callback).Run();
+      enterprise_management::RegisterBrowserRequest* request) const override {
+    request->set_os_platform(policy::GetOSPlatform());
+    request->set_os_version(policy::GetOSVersion());
   }
 };
 
@@ -348,8 +343,8 @@
 
   em::RegisterBrowserRequest* enrollment_request =
       request.mutable_register_browser_request();
-  enrollment_request->set_os_platform(GetOSPlatform());
-  enrollment_request->set_os_version(GetOSVersion());
+  enrollment_request->set_os_platform(policy::GetOSPlatform());
+  enrollment_request->set_os_version(policy::GetOSVersion());
   return request;
 }
 #endif
@@ -1770,11 +1765,11 @@
               *payload->FindStringPath(
                   ReportingJobConfigurationBase::BrowserDictionaryBuilder::
                       GetMachineUserPath()));
-    EXPECT_EQ(GetOSPlatform(),
+    EXPECT_EQ(policy::GetOSPlatform(),
               *payload->FindStringPath(
                   ReportingJobConfigurationBase::DeviceDictionaryBuilder::
                       GetOSPlatformPath()));
-    EXPECT_EQ(GetOSVersion(),
+    EXPECT_EQ(policy::GetOSVersion(),
               *payload->FindStringPath(
                   ReportingJobConfigurationBase::DeviceDictionaryBuilder::
                       GetOSVersionPath()));
diff --git a/components/services/app_service/DEPS b/components/services/app_service/DEPS
index d2af379..82362fe 100644
--- a/components/services/app_service/DEPS
+++ b/components/services/app_service/DEPS
@@ -11,6 +11,9 @@
   "icon_cache\.h": [
     "+ui/gfx/image/image_skia.h",
   ],
+  "intent_util\.cc" : [
+    "+third_party/blink/public/common/mime_util/mime_util.h",
+  ],
   "instance\.h": [
     "+ui/aura/window.h",
     "+ui/gfx/image/image_skia_rep.h",
diff --git a/components/services/app_service/public/cpp/BUILD.gn b/components/services/app_service/public/cpp/BUILD.gn
index 9626a81..b3fdf22 100644
--- a/components/services/app_service/public/cpp/BUILD.gn
+++ b/components/services/app_service/public/cpp/BUILD.gn
@@ -145,6 +145,7 @@
   deps = [
     "//base",
     "//components/services/app_service/public/mojom",
+    "//third_party/blink/public/common",
     "//url",
   ]
 }
diff --git a/components/services/app_service/public/cpp/intent_util.cc b/components/services/app_service/public/cpp/intent_util.cc
index 7e9f64d4..0adc3dd 100644
--- a/components/services/app_service/public/cpp/intent_util.cc
+++ b/components/services/app_service/public/cpp/intent_util.cc
@@ -19,6 +19,7 @@
 #include "components/services/app_service/public/mojom/types.mojom-shared.h"
 #include "components/services/app_service/public/mojom/types.mojom.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
+#include "third_party/blink/public/common/mime_util/mime_util.h"
 
 namespace {
 
@@ -129,6 +130,14 @@
   return true;
 }
 
+bool ExtensionMatched(const std::string& intent_extension,
+                      const std::string& filter_extension) {
+  if (filter_extension == kWildCardAny)
+    return true;
+  return base::EndsWith(intent_extension, filter_extension,
+                        base::CompareCase::INSENSITIVE_ASCII);
+}
+
 }  // namespace
 
 namespace apps_util {
@@ -152,9 +161,15 @@
   return intent;
 }
 
-namespace {
+apps::mojom::IntentPtr CreateViewIntentFromFiles(
+    std::vector<apps::mojom::IntentFilePtr> files) {
+  auto intent = apps::mojom::Intent::New();
+  intent->action = kIntentActionView;
+  intent->files = std::move(files);
+  return intent;
+}
 
-apps::mojom::IntentPtr CreateIntentFromFiles(
+apps::mojom::IntentPtr CreateShareIntentFromFiles(
     const std::vector<GURL>& filesystem_urls,
     const std::vector<std::string>& mime_types) {
   DCHECK_EQ(filesystem_urls.size(), mime_types.size());
@@ -167,23 +182,6 @@
     file->mime_type = mime_types.at(i);
     intent->files->push_back(std::move(file));
   }
-  return intent;
-}
-
-}  // namespace
-
-apps::mojom::IntentPtr CreateViewIntentFromFiles(
-    const std::vector<GURL>& filesystem_urls,
-    const std::vector<std::string>& mime_types) {
-  auto intent = CreateIntentFromFiles(filesystem_urls, mime_types);
-  intent->action = kIntentActionView;
-  return intent;
-}
-
-apps::mojom::IntentPtr CreateShareIntentFromFiles(
-    const std::vector<GURL>& filesystem_urls,
-    const std::vector<std::string>& mime_types) {
-  auto intent = CreateIntentFromFiles(filesystem_urls, mime_types);
   intent->action = filesystem_urls.size() == 1 ? kIntentActionSend
                                                : kIntentActionSendMultiple;
   return intent;
@@ -261,7 +259,8 @@
     case apps::mojom::PatternMatchType::kMimeType:
       // kMimeType as a match for kFile is handled in FileMatchesConditionValue.
       return MimeTypeMatched(value, condition_value->value);
-    case apps::mojom::PatternMatchType::kFileExtension: {
+    case apps::mojom::PatternMatchType::kFileExtension:
+    case apps::mojom::PatternMatchType::kIsDirectory: {
       // Handled in FileMatchesConditionValue.
       NOTREACHED();
       return false;
@@ -283,8 +282,9 @@
       return file->mime_type.has_value() &&
              MimeTypeMatched(file->mime_type.value(), condition_value->value);
     case apps::mojom::PatternMatchType::kFileExtension:
-      return base::EndsWith(file->url.path(), condition_value->value,
-                            base::CompareCase::INSENSITIVE_ASCII);
+      return ExtensionMatched(file->url.path(), condition_value->value);
+    case apps::mojom::PatternMatchType::kIsDirectory:
+      return file->is_directory == apps::mojom::OptionalBool::kTrue;
   }
 }
 
@@ -353,6 +353,10 @@
 
 bool FilterIsForFileExtensions(const apps::mojom::IntentFilterPtr& filter) {
   for (const auto& condition : filter->conditions) {
+    // We expect action conditions to be paired with file conditions.
+    if (condition->condition_type == apps::mojom::ConditionType::kAction) {
+      continue;
+    }
     if (condition->condition_type != apps::mojom::ConditionType::kFile) {
       return false;
     }
@@ -366,6 +370,61 @@
   return true;
 }
 
+namespace {
+
+void GetMimeTypesAndExtensions(const apps::mojom::IntentFilterPtr& filter,
+                               std::set<std::string>& mime_types,
+                               std::set<std::string>& file_extensions) {
+  for (const auto& condition : filter->conditions) {
+    if (condition->condition_type != apps::mojom::ConditionType::kFile) {
+      continue;
+    }
+    for (const auto& condition_value : condition->condition_values) {
+      if (condition_value->match_type ==
+          apps::mojom::PatternMatchType::kFileExtension) {
+        file_extensions.insert(condition_value->value);
+      }
+      if (condition_value->match_type ==
+          apps::mojom::PatternMatchType::kMimeType) {
+        mime_types.insert(condition_value->value);
+      }
+    }
+  }
+}
+
+}  // namespace
+
+bool IsGenericFileHandler(const apps::mojom::IntentPtr& intent,
+                          const apps::mojom::IntentFilterPtr& filter) {
+  if (!intent->files.has_value())
+    return false;
+
+  std::set<std::string> mime_types;
+  std::set<std::string> file_extensions;
+  GetMimeTypesAndExtensions(filter, mime_types, file_extensions);
+  if (file_extensions.count("*") > 0 || mime_types.count("*") > 0 ||
+      mime_types.count("*/*") > 0)
+    return true;
+
+  // If a text/* file handler matches with an unsupported text mime type, we
+  // regard it as a generic match.
+  if (mime_types.count("text/*")) {
+    for (const auto& file : intent->files.value()) {
+      if (file->mime_type.has_value() &&
+          blink::IsUnsupportedTextMimeType(file->mime_type.value())) {
+        return true;
+      }
+    }
+  }
+
+  // We consider it a generic match if a directory is selected.
+  for (const auto& file : intent->files.value()) {
+    if (file->is_directory == apps::mojom::OptionalBool::kTrue)
+      return true;
+  }
+  return false;
+}
+
 // TODO(crbug.com/853604): For glob match, it is currently only for Android
 // intent filters, so we will use the ARC intent filter implementation that is
 // transcribed from Android codebase, to prevent divergence from Android code.
diff --git a/components/services/app_service/public/cpp/intent_util.h b/components/services/app_service/public/cpp/intent_util.h
index 2584251..e7e7022 100644
--- a/components/services/app_service/public/cpp/intent_util.h
+++ b/components/services/app_service/public/cpp/intent_util.h
@@ -33,11 +33,9 @@
 // Create an intent struct for a Create Note action.
 apps::mojom::IntentPtr CreateCreateNoteIntent();
 
-// Create an intent struct from the filesystem urls and mime types
-// of a list of files with action kIntentActionView.
+// Create an intent struct with the list of files with action kIntentActionView.
 apps::mojom::IntentPtr CreateViewIntentFromFiles(
-    const std::vector<GURL>& filesystem_urls,
-    const std::vector<std::string>& mime_types);
+    std::vector<apps::mojom::IntentFilePtr> files);
 
 // Create an intent struct from the filesystem urls and mime types
 // of a list of files with action kIntentActionSend{Multiple}.
@@ -89,6 +87,9 @@
 // Return true if |filter| only contains file extension pattern matches.
 bool FilterIsForFileExtensions(const apps::mojom::IntentFilterPtr& filter);
 
+bool IsGenericFileHandler(const apps::mojom::IntentPtr& intent,
+                          const apps::mojom::IntentFilterPtr& filter);
+
 // Return true if |value| matches |pattern| with simple glob syntax.
 // In this syntax, you can use the '*' character to match against zero or
 // more occurrences of the character immediately before. If the character
diff --git a/components/services/app_service/public/cpp/intent_util_unittest.cc b/components/services/app_service/public/cpp/intent_util_unittest.cc
index d69ef4b..39cddb7 100644
--- a/components/services/app_service/public/cpp/intent_util_unittest.cc
+++ b/components/services/app_service/public/cpp/intent_util_unittest.cc
@@ -485,6 +485,13 @@
   return url;
 }
 
+std::vector<apps::mojom::IntentFilePtr> vectorise(
+    const apps::mojom::IntentFilePtr& file) {
+  std::vector<apps::mojom::IntentFilePtr> vector;
+  vector.push_back(file.Clone());
+  return vector;
+}
+
 TEST_F(IntentUtilTest, FileExtensionMatch) {
   std::string mime_type_mp3 = "audio/mp3";
   std::string file_ext_mp3 = "mp3";
@@ -493,36 +500,30 @@
   auto file_filter =
       apps_util::CreateFileFilterForView(mime_type_mp3, file_ext_mp3, "label");
 
-  std::vector<GURL> urls;
-  std::vector<std::string> mime_types;
-
-  urls.push_back(test_url("abc.mp3"));
+  auto file = apps::mojom::IntentFile::New();
+  file->url = test_url("abc.mp3");
+  file->is_directory = apps::mojom::OptionalBool::kFalse;
 
   // Test match with the same mime type and the same file extension.
-  mime_types.push_back(mime_type_mp3);
-  auto intent = apps_util::CreateViewIntentFromFiles(urls, mime_types);
+  file->mime_type = mime_type_mp3;
+  auto intent = apps_util::CreateViewIntentFromFiles(vectorise(file));
   EXPECT_TRUE(apps_util::IntentMatchesFilter(intent, file_filter));
 
   // Test match with different mime types and the same file extension.
-  mime_types.clear();
-  mime_types.push_back(mime_type_mpeg);
-  intent = apps_util::CreateViewIntentFromFiles(urls, mime_types);
+  file->mime_type = mime_type_mpeg;
+  intent = apps_util::CreateViewIntentFromFiles(vectorise(file));
   EXPECT_TRUE(apps_util::IntentMatchesFilter(intent, file_filter));
 
   // Test match with the same mime type and a different file extension.
-  urls.clear();
-  urls.push_back(test_url("abc.png"));
-  mime_types.clear();
-  mime_types.push_back(mime_type_mp3);
-  intent = apps_util::CreateViewIntentFromFiles(urls, mime_types);
+  file->url = test_url("abc.png");
+  file->mime_type = mime_type_mp3;
+  intent = apps_util::CreateViewIntentFromFiles(vectorise(file));
   EXPECT_TRUE(apps_util::IntentMatchesFilter(intent, file_filter));
 
   // Test match with different mime types and a different file extension.
-  urls.clear();
-  urls.push_back(test_url("abc.png"));
-  mime_types.clear();
-  mime_types.push_back(mime_type_mpeg);
-  intent = apps_util::CreateViewIntentFromFiles(urls, mime_types);
+  file->url = test_url("abc.png");
+  file->mime_type = mime_type_mpeg;
+  intent = apps_util::CreateViewIntentFromFiles(vectorise(file));
   EXPECT_FALSE(apps_util::IntentMatchesFilter(intent, file_filter));
 }
 
@@ -668,3 +669,107 @@
   EXPECT_EQ("*/*", apps_util::CalculateCommonMimeType(
                        {"image/png", "image/jpeg", "text/plain"}));
 }
+
+TEST_F(IntentUtilTest, IsGenericFileHandler) {
+  using apps::mojom::IntentFile;
+  using apps::mojom::IntentFilePtr;
+  using apps::mojom::IntentFilterPtr;
+  using apps::mojom::IntentPtr;
+  using apps::mojom::OptionalBool;
+
+  std::vector<IntentFilePtr> intent_files;
+  IntentFilePtr foo = IntentFile::New();
+  foo->url = test_url("foo.jpg");
+  foo->mime_type = "image/jpeg";
+  foo->is_directory = OptionalBool::kFalse;
+  intent_files.push_back(std::move(foo));
+
+  IntentFilePtr bar = IntentFile::New();
+  bar->url = test_url("bar.txt");
+  bar->mime_type = "text/plain";
+  bar->is_directory = OptionalBool::kFalse;
+  intent_files.push_back(std::move(bar));
+
+  std::vector<IntentFilePtr> intent_files2;
+  IntentFilePtr foo2 = IntentFile::New();
+  foo2->url = test_url("foo.ics");
+  foo2->mime_type = "text/calendar";
+  foo2->is_directory = OptionalBool::kFalse;
+  intent_files2.push_back(std::move(foo2));
+
+  std::vector<IntentFilePtr> intent_files3;
+  IntentFilePtr foo_dir = IntentFile::New();
+  foo_dir->url = test_url("foo/");
+  foo_dir->mime_type = "";
+  foo_dir->is_directory = OptionalBool::kTrue;
+  intent_files3.push_back(std::move(foo_dir));
+
+  IntentPtr intent =
+      apps_util::CreateViewIntentFromFiles(std::move(intent_files));
+  IntentPtr intent2 =
+      apps_util::CreateViewIntentFromFiles(std::move(intent_files2));
+  IntentPtr intent3 =
+      apps_util::CreateViewIntentFromFiles(std::move(intent_files3));
+
+  const std::string kLabel = "";
+
+  // extensions: ["*"]
+  IntentFilterPtr filter1 = apps_util::CreateFileFilterForView("", "*", kLabel);
+  EXPECT_TRUE(apps_util::IsGenericFileHandler(intent, filter1));
+
+  // extensions: ["*", "jpg"]
+  IntentFilterPtr filter2 = apps_util::CreateFileFilterForView("", "*", kLabel);
+  apps_util::AddConditionValue(apps::mojom::ConditionType::kFile, "jpg",
+                               apps::mojom::PatternMatchType::kFileExtension,
+                               filter2);
+  EXPECT_TRUE(apps_util::IsGenericFileHandler(intent, filter2));
+
+  // extensions: ["jpg"]
+  IntentFilterPtr filter3 =
+      apps_util::CreateFileFilterForView("", "jpg", kLabel);
+  EXPECT_FALSE(apps_util::IsGenericFileHandler(intent, filter3));
+
+  // types: ["*"]
+  IntentFilterPtr filter4 = apps_util::CreateFileFilterForView("*", "", kLabel);
+  EXPECT_TRUE(apps_util::IsGenericFileHandler(intent, filter4));
+
+  // types: ["*/*"]
+  IntentFilterPtr filter5 =
+      apps_util::CreateFileFilterForView("*/*", "", kLabel);
+  EXPECT_TRUE(apps_util::IsGenericFileHandler(intent, filter5));
+
+  // types: ["image/*"]
+  IntentFilterPtr filter6 =
+      apps_util::CreateFileFilterForView("image/*", "", kLabel);
+  // Partial wild card is not generic.
+  EXPECT_FALSE(apps_util::IsGenericFileHandler(intent, filter6));
+
+  // types: ["*", "image/*"]
+  IntentFilterPtr filter7 = apps_util::CreateFileFilterForView("*", "", kLabel);
+  apps_util::AddConditionValue(apps::mojom::ConditionType::kFile, "image/*",
+                               apps::mojom::PatternMatchType::kMimeType,
+                               filter7);
+  EXPECT_TRUE(apps_util::IsGenericFileHandler(intent, filter7));
+
+  // extensions: ["*"], types: ["image/*"]
+  IntentFilterPtr filter8 =
+      apps_util::CreateFileFilterForView("image/*", "*", kLabel);
+  EXPECT_TRUE(apps_util::IsGenericFileHandler(intent, filter8));
+
+  // types: ["text/*"] and target files contain unsupported text mime type, e.g.
+  // text/calendar.
+  IntentFilterPtr filter9 =
+      apps_util::CreateFileFilterForView("text/*", "", kLabel);
+  EXPECT_TRUE(apps_util::IsGenericFileHandler(intent2, filter9));
+
+  // types: ["text/*"] and target files don't contain unsupported text mime
+  // type.
+  IntentFilterPtr filter10 =
+      apps_util::CreateFileFilterForView("text/*", "", kLabel);
+  EXPECT_FALSE(apps_util::IsGenericFileHandler(intent, filter10));
+
+  // File is a directory.
+  IntentFilterPtr filter11 =
+      apps_util::CreateFileFilterForView("text/*", "", kLabel);
+  EXPECT_TRUE(apps_util::IsGenericFileHandler(intent3, filter11));
+}
diff --git a/components/services/app_service/public/mojom/types.mojom b/components/services/app_service/public/mojom/types.mojom
index 1b2f70b3..3312b7c 100644
--- a/components/services/app_service/public/mojom/types.mojom
+++ b/components/services/app_service/public/mojom/types.mojom
@@ -318,6 +318,7 @@
   kGlob,
   kMimeType,
   kFileExtension,
+  kIsDirectory,
 };
 
 // For pattern type of condition, the value match will be based on the pattern
@@ -365,6 +366,7 @@
   string? file_name;  // Human readable file name, including extension. Should
                       // not contain path separators.
   uint64 file_size;   // File size in bytes.
+  OptionalBool is_directory; // Whether this is a directory or not.
 };
 
 // Action and resource handling request. This should
diff --git a/components/variations/BUILD.gn b/components/variations/BUILD.gn
index 3880eae..eabd779 100644
--- a/components/variations/BUILD.gn
+++ b/components/variations/BUILD.gn
@@ -188,7 +188,6 @@
     "field_trial_config:field_trial_config",
     "proto",
     "//base/test:test_support",
-    "//components/variations/service:constants",
     "//third_party/zlib/google:compression_utils",
   ]
 }
diff --git a/components/variations/service/safe_seed_manager.cc b/components/variations/service/safe_seed_manager.cc
index d8ad349..9f12bae 100644
--- a/components/variations/service/safe_seed_manager.cc
+++ b/components/variations/service/safe_seed_manager.cc
@@ -18,6 +18,24 @@
 
 namespace variations {
 
+// As of the time of this writing, January 2018, users at the 99.5th percentile,
+// across all platforms, tend to experience fewer than 3 consecutive crashes:
+// [1], [2], [3], [4]. Note, however, that this is less true for the less-stable
+// channels on some platforms.
+// [1] All platforms, stable channel (consistently stable):
+//     https://uma.googleplex.com/timeline_v2?sid=90ac80f4573249fb341a8e49501bfcfd
+// [2] Most platforms, all channels (consistently stable other than occasional
+//     spikes on Canary):
+//     https://uma.googleplex.com/timeline_v2?sid=7af5ba1969db76689a401f982a1db539
+// [3] A less stable platform, all channels:
+//     https://uma.googleplex.com/timeline_v2?sid=07dbc8e4fa9f08e332fb609309a21882
+// [4] Another less stable platform, all channels:
+//     https://uma.googleplex.com/timeline_v2?sid=a7b529ef5d52863fae2d216e963c4cbc
+// Overall, the only {platform, channel} combinations that spike above 3
+// consecutive crashes are ones with very few users, plus Canary. It's probably
+// not realistic to avoid false positives for these less-stable configurations.
+constexpr int kCrashStreakThreshold = 3;
+
 // Consecutive seed fetch failures are, unfortunately, a bit more common. As of
 // January 2018, users at the 99.5th percentile tend to see fewer than 4
 // consecutive fetch failures on mobile platforms; and users at the 99th
diff --git a/components/variations/service/safe_seed_manager.h b/components/variations/service/safe_seed_manager.h
index 95173c17..38fe2b7 100644
--- a/components/variations/service/safe_seed_manager.h
+++ b/components/variations/service/safe_seed_manager.h
@@ -19,24 +19,6 @@
 struct ClientFilterableState;
 class VariationsSeedStore;
 
-// As of January 2018, users at the 99.5th percentile, across all platforms,
-// tend to experience fewer than 3 consecutive crashes: [1], [2], [3], [4].
-// Note, however, that this is less true for the less-stable channels on some
-// platforms.
-// [1] All platforms, stable channel (consistently stable):
-//     https://uma.googleplex.com/timeline_v2?sid=90ac80f4573249fb341a8e49501bfcfd
-// [2] Most platforms, all channels (consistently stable other than occasional
-//     spikes on Canary):
-//     https://uma.googleplex.com/timeline_v2?sid=7af5ba1969db76689a401f982a1db539
-// [3] A less stable platform, all channels:
-//     https://uma.googleplex.com/timeline_v2?sid=07dbc8e4fa9f08e332fb609309a21882
-// [4] Another less stable platform, all channels:
-//     https://uma.googleplex.com/timeline_v2?sid=a7b529ef5d52863fae2d216e963c4cbc
-// Overall, the only {platform, channel} combinations that spike above 3
-// consecutive crashes are ones with very few users, plus Canary. It's probably
-// not realistic to avoid false positives for these less-stable configurations.
-constexpr int kCrashStreakThreshold = 3;
-
 // The primary class that encapsulates state for managing the safe seed.
 class SafeSeedManager {
  public:
diff --git a/components/variations/service/variations_field_trial_creator.cc b/components/variations/service/variations_field_trial_creator.cc
index 4314cccb..b5bd47b2 100644
--- a/components/variations/service/variations_field_trial_creator.cc
+++ b/components/variations/service/variations_field_trial_creator.cc
@@ -146,9 +146,6 @@
 
 }  // namespace
 
-const base::Feature kForceFieldTrialSetupCrashForTesting{
-    "ForceFieldTrialSetupCrashForTesting", base::FEATURE_DISABLED_BY_DEFAULT};
-
 VariationsFieldTrialCreator::VariationsFieldTrialCreator(
     VariationsServiceClient* client,
     std::unique_ptr<VariationsSeedStore> seed_store,
@@ -199,6 +196,19 @@
     base::FieldTrial::EnableBenchmarking();
   }
 
+#if !defined(OS_ANDROID)
+  // TODO(crbug/1248239): Enable Extended Variations Safe Mode on Android.
+  if (extend_variations_safe_mode &&
+      !metrics_state_manager->is_background_session()) {
+    // If the session is expected to be a background session, then do not extend
+    // Variations Safe Mode. Extending Safe Mode involves monitoring for crashes
+    // earlier on in startup; however, this monitoring is not desired in
+    // background sessions, whose terminations should never be considered
+    // crashes.
+    MaybeExtendVariationsSafeMode(metrics_state_manager);
+  }
+#endif
+
   if (command_line->HasSwitch(switches::kForceFieldTrialParams)) {
     bool result = AssociateParamsFromString(
         command_line->GetSwitchValueASCII(switches::kForceFieldTrialParams));
@@ -225,19 +235,6 @@
     }
   }
 
-#if !defined(OS_ANDROID)
-  // TODO(crbug/1248239): Enable Extended Variations Safe Mode on Android.
-  if (extend_variations_safe_mode &&
-      !metrics_state_manager->is_background_session()) {
-    // If the session is expected to be a background session, then do not extend
-    // Variations Safe Mode. Extending Safe Mode involves monitoring for crashes
-    // earlier on in startup; however, this monitoring is not desired in
-    // background sessions, whose terminations should never be considered
-    // crashes.
-    MaybeExtendVariationsSafeMode(metrics_state_manager);
-  }
-#endif
-
   VariationsIdsProvider* http_header_provider =
       VariationsIdsProvider::GetInstance();
   http_header_provider->SetLowEntropySourceValue(low_entropy_source_value);
@@ -304,15 +301,6 @@
 
   base::FeatureList::SetInstance(std::move(feature_list));
 
-  // For testing Variations Safe Mode, maybe crash here.
-  if (base::FeatureList::IsEnabled(kForceFieldTrialSetupCrashForTesting)) {
-    // We use a recognizable token for the CHECK condition, to allow tests to
-    // recognize the crash location in the test output. See:
-    // TEST_P(FieldTrialTest, ExtendedSafeModeEndToEnd)
-    constexpr bool crash_for_testing = false;
-    CHECK(crash_for_testing);
-  }
-
   // This must be called after |local_state_| is initialized.
   platform_field_trials->SetupFieldTrials();
 
diff --git a/components/variations/service/variations_field_trial_creator.h b/components/variations/service/variations_field_trial_creator.h
index 570ffd2..b6a56ad 100644
--- a/components/variations/service/variations_field_trial_creator.h
+++ b/components/variations/service/variations_field_trial_creator.h
@@ -255,10 +255,6 @@
   SEQUENCE_CHECKER(sequence_checker_);
 };
 
-// A testing feature that forces a crash during field trial creation
-// on developer and test builds.
-extern const base::Feature kForceFieldTrialSetupCrashForTesting;
-
 }  // namespace variations
 
 #endif  // COMPONENTS_VARIATIONS_SERVICE_VARIATIONS_FIELD_TRIAL_CREATOR_H_
diff --git a/components/variations/service/variations_field_trial_creator_unittest.cc b/components/variations/service/variations_field_trial_creator_unittest.cc
index bea5964..eb81c1a 100644
--- a/components/variations/service/variations_field_trial_creator_unittest.cc
+++ b/components/variations/service/variations_field_trial_creator_unittest.cc
@@ -41,7 +41,6 @@
 #include "components/variations/service/variations_service_client.h"
 #include "components/variations/variations_seed_store.h"
 #include "components/variations/variations_switches.h"
-#include "components/variations/variations_test_utils.h"
 #include "components/version_info/channel.h"
 #include "components/version_info/version_info.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
@@ -61,6 +60,7 @@
 using ::testing::Return;
 
 // Constants used to create the test seeds.
+const char kTestSeedStudyName[] = "test";
 const char kTestSeedExperimentName[] = "abc";
 const char kTestSafeSeedExperimentName[] = "abc.safe";
 const int kTestSeedExperimentProbability = 100;
@@ -116,6 +116,13 @@
   return seed;
 }
 
+void DisableTestingConfig() {
+  // If the testing config is in use, the seed will not be used to set up field
+  // trials. Disable the testing config to exercise CreateTrialsFromSeed().
+  base::CommandLine::ForCurrentProcess()->AppendSwitch(
+      switches::kDisableFieldTrialTestingConfig);
+}
+
 #if defined(OS_ANDROID)
 const char kTestSeedCountry[] = "in";
 
diff --git a/components/variations/variations_test_utils.cc b/components/variations/variations_test_utils.cc
index 559f7835..f82a604 100644
--- a/components/variations/variations_test_utils.cc
+++ b/components/variations/variations_test_utils.cc
@@ -8,7 +8,6 @@
 #include "base/command_line.h"
 #include "base/feature_list.h"
 #include "components/variations/proto/client_variations.pb.h"
-#include "components/variations/service/variations_safe_mode_constants.h"
 #include "components/variations/variations_associated_data.h"
 #include "components/variations/variations_switches.h"
 #include "third_party/zlib/google/compression_utils.h"
@@ -73,18 +72,4 @@
   return trial;
 }
 
-int SetUpExtendedSafeModeExperiment(const std::string& group_name) {
-  int default_group;
-  scoped_refptr<base::FieldTrial> trial(
-      base::FieldTrialList::FactoryGetFieldTrial(
-          kExtendedSafeModeTrial, 100, kDefaultGroup,
-          base::FieldTrial::ONE_TIME_RANDOMIZED, &default_group));
-
-  int active_group = default_group;
-  if (group_name != kDefaultGroup)
-    active_group = trial->AppendGroup(group_name, 100);
-  trial->SetForced();
-  return active_group;
-}
-
 }  // namespace variations
diff --git a/components/variations/variations_test_utils.h b/components/variations/variations_test_utils.h
index 76be121..1310a18 100644
--- a/components/variations/variations_test_utils.h
+++ b/components/variations/variations_test_utils.h
@@ -41,10 +41,6 @@
     IDCollectionKey key,
     VariationID id);
 
-// Sets up the extended safe mode experiment such that |group_name| is the
-// active group. Returns the numeric value that denotes the active group.
-int SetUpExtendedSafeModeExperiment(const std::string& group_name);
-
 }  // namespace variations
 
 #endif  // COMPONENTS_VARIATIONS_VARIATIONS_TEST_UTILS_H_
diff --git a/content/app/android/content_child_process_service_delegate.cc b/content/app/android/content_child_process_service_delegate.cc
index 82d5f826..ebcf948 100644
--- a/content/app/android/content_child_process_service_delegate.cc
+++ b/content/app/android/content_child_process_service_delegate.cc
@@ -38,6 +38,11 @@
                                    public gpu::GpuSurfaceLookup {
  public:
   ChildProcessSurfaceManager() {}
+
+  ChildProcessSurfaceManager(const ChildProcessSurfaceManager&) = delete;
+  ChildProcessSurfaceManager& operator=(const ChildProcessSurfaceManager&) =
+      delete;
+
   ~ChildProcessSurfaceManager() override {}
 
   // |service_impl| is the instance of
@@ -112,8 +117,6 @@
   friend struct base::LazyInstanceTraitsBase<ChildProcessSurfaceManager>;
   // The instance of org.chromium.content.app.ChildProcessService.
   base::android::ScopedJavaGlobalRef<jobject> service_impl_;
-
-  DISALLOW_COPY_AND_ASSIGN(ChildProcessSurfaceManager);
 };
 
 base::LazyInstance<ChildProcessSurfaceManager>::Leaky
diff --git a/content/app/content_main_runner_impl.h b/content/app/content_main_runner_impl.h
index 5dbc33d9..4bf0a0b 100644
--- a/content/app/content_main_runner_impl.h
+++ b/content/app/content_main_runner_impl.h
@@ -44,6 +44,10 @@
   static std::unique_ptr<ContentMainRunnerImpl> Create();
 
   ContentMainRunnerImpl();
+
+  ContentMainRunnerImpl(const ContentMainRunnerImpl&) = delete;
+  ContentMainRunnerImpl& operator=(const ContentMainRunnerImpl&) = delete;
+
   ~ContentMainRunnerImpl() override;
 
   int TerminateForFatalInitializationError();
@@ -95,8 +99,6 @@
   base::OnceClosure* ui_task_ = nullptr;
 
   CreatedMainPartsClosure* created_main_parts_closure_ = nullptr;
-
-  DISALLOW_COPY_AND_ASSIGN(ContentMainRunnerImpl);
 };
 
 // The BrowserTestBase on Android does not call ContentMain(). It tries instead
diff --git a/content/app/mojo_ipc_support.h b/content/app/mojo_ipc_support.h
index 6d6c48b..2e09d319 100644
--- a/content/app/mojo_ipc_support.h
+++ b/content/app/mojo_ipc_support.h
@@ -27,6 +27,10 @@
 class CONTENT_EXPORT MojoIpcSupport {
  public:
   explicit MojoIpcSupport(std::unique_ptr<BrowserProcessIOThread> io_thread);
+
+  MojoIpcSupport(const MojoIpcSupport&) = delete;
+  MojoIpcSupport& operator=(const MojoIpcSupport&) = delete;
+
   ~MojoIpcSupport();
 
   BrowserProcessIOThread* io_thread() { return io_thread_.get(); }
@@ -43,8 +47,6 @@
   std::unique_ptr<BrowserProcessIOThread> io_thread_;
   base::Thread mojo_ipc_thread_{"Mojo IPC"};
   std::unique_ptr<mojo::core::ScopedIPCSupport> mojo_ipc_support_;
-
-  DISALLOW_COPY_AND_ASSIGN(MojoIpcSupport);
 };
 
 }  // namespace content
diff --git a/content/app_shim_remote_cocoa/popup_window_mac.h b/content/app_shim_remote_cocoa/popup_window_mac.h
index 92ffb12..6d836c1 100644
--- a/content/app_shim_remote_cocoa/popup_window_mac.h
+++ b/content/app_shim_remote_cocoa/popup_window_mac.h
@@ -22,6 +22,10 @@
  public:
   PopupWindowMac(const gfx::Rect& content_rect,
                  RenderWidgetHostViewCocoa* cocoa_view);
+
+  PopupWindowMac(const PopupWindowMac&) = delete;
+  PopupWindowMac& operator=(const PopupWindowMac&) = delete;
+
   ~PopupWindowMac();
 
   NSWindow* window() { return popup_window_.get(); }
@@ -31,8 +35,6 @@
 
   // Weak.
   RenderWidgetHostViewCocoa* cocoa_view_ = nil;
-
-  DISALLOW_COPY_AND_ASSIGN(PopupWindowMac);
 };
 
 }  // namespace remote_cocoa
diff --git a/content/app_shim_remote_cocoa/render_widget_host_ns_view_bridge.h b/content/app_shim_remote_cocoa/render_widget_host_ns_view_bridge.h
index acd3b0c..6058831 100644
--- a/content/app_shim_remote_cocoa/render_widget_host_ns_view_bridge.h
+++ b/content/app_shim_remote_cocoa/render_widget_host_ns_view_bridge.h
@@ -29,6 +29,11 @@
  public:
   RenderWidgetHostNSViewBridge(mojom::RenderWidgetHostNSViewHost* client,
                                RenderWidgetHostNSViewHostHelper* client_helper);
+
+  RenderWidgetHostNSViewBridge(const RenderWidgetHostNSViewBridge&) = delete;
+  RenderWidgetHostNSViewBridge& operator=(const RenderWidgetHostNSViewBridge&) =
+      delete;
+
   ~RenderWidgetHostNSViewBridge() override;
 
   // Bind to a remote receiver for a mojo interface.
@@ -106,8 +111,6 @@
 
   // The receiver for this object (only used when remotely instantiated).
   mojo::AssociatedReceiver<mojom::RenderWidgetHostNSView> receiver_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostNSViewBridge);
 };
 
 }  // namespace remote_cocoa
diff --git a/content/app_shim_remote_cocoa/render_widget_host_ns_view_host_helper.h b/content/app_shim_remote_cocoa/render_widget_host_ns_view_host_helper.h
index 12c45468..5c3c3b2 100644
--- a/content/app_shim_remote_cocoa/render_widget_host_ns_view_host_helper.h
+++ b/content/app_shim_remote_cocoa/render_widget_host_ns_view_host_helper.h
@@ -40,6 +40,12 @@
 class RenderWidgetHostNSViewHostHelper {
  public:
   RenderWidgetHostNSViewHostHelper() {}
+
+  RenderWidgetHostNSViewHostHelper(const RenderWidgetHostNSViewHostHelper&) =
+      delete;
+  RenderWidgetHostNSViewHostHelper& operator=(
+      const RenderWidgetHostNSViewHostHelper&) = delete;
+
   virtual ~RenderWidgetHostNSViewHostHelper() {}
 
   // Return the RenderWidget's BrowserAccessibilityManager's root accessibility
@@ -82,9 +88,6 @@
   virtual void GestureEnd(blink::WebGestureEvent end_event) = 0;
   virtual void SmartMagnify(
       const blink::WebGestureEvent& smart_magnify_event) = 0;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostNSViewHostHelper);
 };
 
 }  // namespace remote_cocoa
diff --git a/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm b/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm
index 7a8e4653..0cda365 100644
--- a/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm
+++ b/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm
@@ -712,7 +712,7 @@
 
   if ([self shouldIgnoreMouseEvent:theEvent]) {
     // If this is the first such event, send a mouse exit to the host view.
-    if (!_mouseEventWasIgnored) {
+    if (!_mouseEventWasIgnored && !self.hidden) {
       WebMouseEvent exitEvent =
           WebMouseEventBuilder::Build(theEvent, self, _pointerType);
       exitEvent.SetType(WebInputEvent::Type::kMouseLeave);
diff --git a/content/app_shim_remote_cocoa/web_contents_ns_view_bridge.h b/content/app_shim_remote_cocoa/web_contents_ns_view_bridge.h
index 560cce0..d29404bd 100644
--- a/content/app_shim_remote_cocoa/web_contents_ns_view_bridge.h
+++ b/content/app_shim_remote_cocoa/web_contents_ns_view_bridge.h
@@ -39,6 +39,10 @@
   // when all communication is through mojo.
   WebContentsNSViewBridge(uint64_t view_id,
                           content::WebContentsViewMac* web_contents_view);
+
+  WebContentsNSViewBridge(const WebContentsNSViewBridge&) = delete;
+  WebContentsNSViewBridge& operator=(const WebContentsNSViewBridge&) = delete;
+
   ~WebContentsNSViewBridge() override;
 
   WebContentsViewCocoa* GetNSView() const { return ns_view_.get(); }
@@ -60,8 +64,6 @@
   mojo::AssociatedRemote<mojom::WebContentsNSViewHost> host_;
 
   std::unique_ptr<ScopedNSViewIdMapping> view_id_;
-
-  DISALLOW_COPY_AND_ASSIGN(WebContentsNSViewBridge);
 };
 
 }  // namespace content
diff --git a/content/browser/accessibility/accessibility_auralinux_browsertest.cc b/content/browser/accessibility/accessibility_auralinux_browsertest.cc
index bfaf7b2..582df538 100644
--- a/content/browser/accessibility/accessibility_auralinux_browsertest.cc
+++ b/content/browser/accessibility/accessibility_auralinux_browsertest.cc
@@ -58,6 +58,12 @@
 class AccessibilityAuraLinuxBrowserTest : public AccessibilityBrowserTest {
  public:
   AccessibilityAuraLinuxBrowserTest() = default;
+
+  AccessibilityAuraLinuxBrowserTest(const AccessibilityAuraLinuxBrowserTest&) =
+      delete;
+  AccessibilityAuraLinuxBrowserTest& operator=(
+      const AccessibilityAuraLinuxBrowserTest&) = delete;
+
   ~AccessibilityAuraLinuxBrowserTest() override = default;
 
  protected:
@@ -105,8 +111,6 @@
   // at a given node and for a node with the given role and returns its AtkText
   // interface if found, otherwise returns nullptr.
   AtkText* FindNode(AtkObject* root, const AtkRole role) const;
-
-  DISALLOW_COPY_AND_ASSIGN(AccessibilityAuraLinuxBrowserTest);
 };
 
 void AccessibilityAuraLinuxBrowserTest::CheckTextAtOffset(
diff --git a/content/browser/accessibility/accessibility_browsertest.h b/content/browser/accessibility/accessibility_browsertest.h
index 05511a44..0ab1ecd 100644
--- a/content/browser/accessibility/accessibility_browsertest.h
+++ b/content/browser/accessibility/accessibility_browsertest.h
@@ -17,6 +17,10 @@
 class AccessibilityBrowserTest : public ContentBrowserTest {
  public:
   AccessibilityBrowserTest() = default;
+
+  AccessibilityBrowserTest(const AccessibilityBrowserTest&) = delete;
+  AccessibilityBrowserTest& operator=(const AccessibilityBrowserTest&) = delete;
+
   ~AccessibilityBrowserTest() override = default;
 
  protected:
@@ -35,9 +39,6 @@
 
   static std::string InputContentsString();
   static std::string TextAreaContentsString();
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(AccessibilityBrowserTest);
 };
 
 }  // namespace content
diff --git a/content/browser/accessibility/accessibility_event_recorder_auralinux.h b/content/browser/accessibility/accessibility_event_recorder_auralinux.h
index a25fe1e..6873935 100644
--- a/content/browser/accessibility/accessibility_event_recorder_auralinux.h
+++ b/content/browser/accessibility/accessibility_event_recorder_auralinux.h
@@ -29,6 +29,12 @@
       BrowserAccessibilityManager* manager,
       base::ProcessId pid,
       const AXTreeSelector& selector);
+
+  AccessibilityEventRecorderAuraLinux(
+      const AccessibilityEventRecorderAuraLinux&) = delete;
+  AccessibilityEventRecorderAuraLinux& operator=(
+      const AccessibilityEventRecorderAuraLinux&) = delete;
+
   ~AccessibilityEventRecorderAuraLinux() override;
 
   void ProcessATKEvent(const char* event,
@@ -57,8 +63,6 @@
   base::ProcessId pid_;
   ui::AXTreeSelector selector_;
   static AccessibilityEventRecorderAuraLinux* instance_;
-
-  DISALLOW_COPY_AND_ASSIGN(AccessibilityEventRecorderAuraLinux);
 };
 
 }  // namespace content
diff --git a/content/browser/accessibility/accessibility_event_recorder_mac.h b/content/browser/accessibility/accessibility_event_recorder_mac.h
index d502e00d..0ba7791 100644
--- a/content/browser/accessibility/accessibility_event_recorder_mac.h
+++ b/content/browser/accessibility/accessibility_event_recorder_mac.h
@@ -22,6 +22,11 @@
   AccessibilityEventRecorderMac(BrowserAccessibilityManager* manager,
                                 base::ProcessId pid,
                                 const AXTreeSelector& selector);
+
+  AccessibilityEventRecorderMac(const AccessibilityEventRecorderMac&) = delete;
+  AccessibilityEventRecorderMac& operator=(
+      const AccessibilityEventRecorderMac&) = delete;
+
   ~AccessibilityEventRecorderMac() override;
 
   // Callback executed every time we receive an event notification.
@@ -47,8 +52,6 @@
   // The AXObserver we use to monitor AX notifications.
   base::ScopedCFTypeRef<AXObserverRef> observer_ref_;
   CFRunLoopSourceRef observer_run_loop_source_;
-
-  DISALLOW_COPY_AND_ASSIGN(AccessibilityEventRecorderMac);
 };
 
 }  // namespace content
diff --git a/content/browser/accessibility/accessibility_event_recorder_uia_win.h b/content/browser/accessibility/accessibility_event_recorder_uia_win.h
index e2f7541..77acd9f 100644
--- a/content/browser/accessibility/accessibility_event_recorder_uia_win.h
+++ b/content/browser/accessibility/accessibility_event_recorder_uia_win.h
@@ -28,6 +28,11 @@
       BrowserAccessibilityManager* manager,
       base::ProcessId pid,
       const base::StringPiece& application_name_match_pattern);
+
+  AccessibilityEventRecorderUia(const AccessibilityEventRecorderUia&) = delete;
+  AccessibilityEventRecorderUia& operator=(
+      const AccessibilityEventRecorderUia&) = delete;
+
   ~AccessibilityEventRecorderUia() override;
 
   // Called to ensure the event recorder has finished recording async events.
@@ -78,6 +83,10 @@
                          public IUIAutomationEventHandler {
      public:
       EventHandler();
+
+      EventHandler(const EventHandler&) = delete;
+      EventHandler& operator=(const EventHandler&) = delete;
+
       virtual ~EventHandler();
 
       void Init(AccessibilityEventRecorderUia::Thread* owner,
@@ -122,8 +131,6 @@
       Microsoft::WRL::ComPtr<IUIAutomationElement> root_;
 
       std::vector<int32_t> last_focused_runtime_id_;
-
-      DISALLOW_COPY_AND_ASSIGN(EventHandler);
     };
     Microsoft::WRL::ComPtr<CComObject<EventHandler>> uia_event_handler_;
   };
@@ -131,8 +138,6 @@
   Thread thread_;
   base::RunLoop shutdown_loop_;
   base::PlatformThreadHandle thread_handle_;
-
-  DISALLOW_COPY_AND_ASSIGN(AccessibilityEventRecorderUia);
 };
 
 }  // namespace content
diff --git a/content/browser/accessibility/accessibility_event_recorder_win.h b/content/browser/accessibility/accessibility_event_recorder_win.h
index 0852d5e1..5c1fa3a 100644
--- a/content/browser/accessibility/accessibility_event_recorder_win.h
+++ b/content/browser/accessibility/accessibility_event_recorder_win.h
@@ -18,6 +18,11 @@
   AccessibilityEventRecorderWin(BrowserAccessibilityManager* manager,
                                 base::ProcessId pid,
                                 const ui::AXTreeSelector& selector);
+
+  AccessibilityEventRecorderWin(const AccessibilityEventRecorderWin&) = delete;
+  AccessibilityEventRecorderWin& operator=(
+      const AccessibilityEventRecorderWin&) = delete;
+
   ~AccessibilityEventRecorderWin() override;
 
   // Callback registered by SetWinEventHook. Just calls OnWinEventHook.
@@ -50,8 +55,6 @@
 
   HWINEVENTHOOK win_event_hook_handle_;
   static AccessibilityEventRecorderWin* instance_;
-
-  DISALLOW_COPY_AND_ASSIGN(AccessibilityEventRecorderWin);
 };
 
 }  // namespace content
diff --git a/content/browser/accessibility/accessibility_win_browsertest.cc b/content/browser/accessibility/accessibility_win_browsertest.cc
index aae9d01..16289e8 100644
--- a/content/browser/accessibility/accessibility_win_browsertest.cc
+++ b/content/browser/accessibility/accessibility_win_browsertest.cc
@@ -72,6 +72,11 @@
 class AccessibilityWinBrowserTest : public AccessibilityBrowserTest {
  public:
   AccessibilityWinBrowserTest();
+
+  AccessibilityWinBrowserTest(const AccessibilityWinBrowserTest&) = delete;
+  AccessibilityWinBrowserTest& operator=(const AccessibilityWinBrowserTest&) =
+      delete;
+
   ~AccessibilityWinBrowserTest() override;
 
  protected:
@@ -139,7 +144,6 @@
   BrowserAccessibility* FindNodeInSubtree(BrowserAccessibility& node,
                                           ax::mojom::Role role,
                                           const std::string& name_or_value);
-  DISALLOW_COPY_AND_ASSIGN(AccessibilityWinBrowserTest);
 };
 
 AccessibilityWinBrowserTest::AccessibilityWinBrowserTest() = default;
diff --git a/content/browser/accessibility/browser_accessibility.h b/content/browser/accessibility/browser_accessibility.h
index 4e93efa..87e3e2455 100644
--- a/content/browser/accessibility/browser_accessibility.h
+++ b/content/browser/accessibility/browser_accessibility.h
@@ -67,6 +67,10 @@
       ui::AXPlatformNodeDelegate* delegate);
 
   BrowserAccessibility();
+
+  BrowserAccessibility(const BrowserAccessibility&) = delete;
+  BrowserAccessibility& operator=(const BrowserAccessibility&) = delete;
+
   ~BrowserAccessibility() override;
 
   // Called only once, immediately after construction. The constructor doesn't
@@ -702,8 +706,6 @@
 
   // A unique ID, since node IDs are frame-local.
   ui::AXUniqueId unique_id_;
-
-  DISALLOW_COPY_AND_ASSIGN(BrowserAccessibility);
 };
 
 }  // namespace content
diff --git a/content/browser/accessibility/browser_accessibility_android_unittest.cc b/content/browser/accessibility/browser_accessibility_android_unittest.cc
index 93f84314..91135fb 100644
--- a/content/browser/accessibility/browser_accessibility_android_unittest.cc
+++ b/content/browser/accessibility/browser_accessibility_android_unittest.cc
@@ -46,6 +46,12 @@
 class BrowserAccessibilityAndroidTest : public testing::Test {
  public:
   BrowserAccessibilityAndroidTest();
+
+  BrowserAccessibilityAndroidTest(const BrowserAccessibilityAndroidTest&) =
+      delete;
+  BrowserAccessibilityAndroidTest& operator=(
+      const BrowserAccessibilityAndroidTest&) = delete;
+
   ~BrowserAccessibilityAndroidTest() override;
 
  protected:
@@ -57,7 +63,6 @@
   base::test::TaskEnvironment task_environment_;
   MockContentClient client_;
   ui::testing::ScopedAxModeSetter ax_mode_setter_;
-  DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityAndroidTest);
 };
 
 BrowserAccessibilityAndroidTest::BrowserAccessibilityAndroidTest()
diff --git a/content/browser/accessibility/browser_accessibility_auralinux.h b/content/browser/accessibility/browser_accessibility_auralinux.h
index 1f1d821..7acf9f7 100644
--- a/content/browser/accessibility/browser_accessibility_auralinux.h
+++ b/content/browser/accessibility/browser_accessibility_auralinux.h
@@ -20,6 +20,10 @@
  public:
   BrowserAccessibilityAuraLinux();
 
+  BrowserAccessibilityAuraLinux(const BrowserAccessibilityAuraLinux&) = delete;
+  BrowserAccessibilityAuraLinux& operator=(
+      const BrowserAccessibilityAuraLinux&) = delete;
+
   ~BrowserAccessibilityAuraLinux() override;
 
   CONTENT_EXPORT ui::AXPlatformNodeAuraLinux* GetNode() const;
@@ -42,8 +46,6 @@
   friend class BrowserAccessibility;
 
   ui::AXPlatformNodeAuraLinux* node_;
-
-  DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityAuraLinux);
 };
 
 CONTENT_EXPORT BrowserAccessibilityAuraLinux* ToBrowserAccessibilityAuraLinux(
diff --git a/content/browser/accessibility/browser_accessibility_auralinux_unittest.cc b/content/browser/accessibility/browser_accessibility_auralinux_unittest.cc
index 537929b..6bc3b7c 100644
--- a/content/browser/accessibility/browser_accessibility_auralinux_unittest.cc
+++ b/content/browser/accessibility/browser_accessibility_auralinux_unittest.cc
@@ -20,6 +20,12 @@
 class BrowserAccessibilityAuraLinuxTest : public testing::Test {
  public:
   BrowserAccessibilityAuraLinuxTest();
+
+  BrowserAccessibilityAuraLinuxTest(const BrowserAccessibilityAuraLinuxTest&) =
+      delete;
+  BrowserAccessibilityAuraLinuxTest& operator=(
+      const BrowserAccessibilityAuraLinuxTest&) = delete;
+
   ~BrowserAccessibilityAuraLinuxTest() override;
 
  protected:
@@ -31,8 +37,6 @@
 
   content::BrowserTaskEnvironment task_environment_;
   ui::testing::ScopedAxModeSetter ax_mode_setter_;
-
-  DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityAuraLinuxTest);
 };
 
 BrowserAccessibilityAuraLinuxTest::BrowserAccessibilityAuraLinuxTest()
diff --git a/content/browser/accessibility/browser_accessibility_mac.h b/content/browser/accessibility/browser_accessibility_mac.h
index 34f9eaa..6e04d64c 100644
--- a/content/browser/accessibility/browser_accessibility_mac.h
+++ b/content/browser/accessibility/browser_accessibility_mac.h
@@ -36,6 +36,9 @@
 
 class BrowserAccessibilityMac : public BrowserAccessibility {
  public:
+  BrowserAccessibilityMac(const BrowserAccessibilityMac&) = delete;
+  BrowserAccessibilityMac& operator=(const BrowserAccessibilityMac&) = delete;
+
   // BrowserAccessibility overrides.
   ~BrowserAccessibilityMac() override;
   void OnDataChanged() override;
@@ -77,8 +80,6 @@
 
   // Manager of the native cocoa node. We own this object.
   ui::AXPlatformNodeMac* platform_node_;
-
-  DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityMac);
 };
 
 }  // namespace content
diff --git a/content/browser/accessibility/browser_accessibility_manager.h b/content/browser/accessibility/browser_accessibility_manager.h
index 1d95e96..2728600 100644
--- a/content/browser/accessibility/browser_accessibility_manager.h
+++ b/content/browser/accessibility/browser_accessibility_manager.h
@@ -149,6 +149,10 @@
 
   static BrowserAccessibilityManager* FromID(ui::AXTreeID ax_tree_id);
 
+  BrowserAccessibilityManager(const BrowserAccessibilityManager&) = delete;
+  BrowserAccessibilityManager& operator=(const BrowserAccessibilityManager&) =
+      delete;
+
   ~BrowserAccessibilityManager() override;
 
   void Initialize(const ui::AXTreeUpdate& initial_tree);
@@ -635,8 +639,6 @@
   // declaration, do not move this member above other members.
   base::ScopedObservation<ui::AXTree, ui::AXTreeObserver> tree_observation_{
       this};
-
-  DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityManager);
 };
 
 }  // namespace content
diff --git a/content/browser/accessibility/browser_accessibility_manager_android.h b/content/browser/accessibility/browser_accessibility_manager_android.h
index e0debea2..cb556e3 100644
--- a/content/browser/accessibility/browser_accessibility_manager_android.h
+++ b/content/browser/accessibility/browser_accessibility_manager_android.h
@@ -46,6 +46,11 @@
       base::WeakPtr<WebContentsAccessibilityAndroid> web_contents_accessibility,
       BrowserAccessibilityDelegate* delegate);
 
+  BrowserAccessibilityManagerAndroid(
+      const BrowserAccessibilityManagerAndroid&) = delete;
+  BrowserAccessibilityManagerAndroid& operator=(
+      const BrowserAccessibilityManagerAndroid&) = delete;
+
   ~BrowserAccessibilityManagerAndroid() override;
 
   static ui::AXTreeUpdate GetEmptyDocument();
@@ -167,8 +172,6 @@
   // with each atomic update to prevent superfluous cache clear calls.
   std::unordered_set<int32_t> nodes_already_cleared_ =
       std::unordered_set<int32_t>();
-
-  DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityManagerAndroid);
 };
 
 }  // namespace content
diff --git a/content/browser/accessibility/browser_accessibility_manager_auralinux.h b/content/browser/accessibility/browser_accessibility_manager_auralinux.h
index 7515024..7f25dad 100644
--- a/content/browser/accessibility/browser_accessibility_manager_auralinux.h
+++ b/content/browser/accessibility/browser_accessibility_manager_auralinux.h
@@ -21,6 +21,11 @@
   BrowserAccessibilityManagerAuraLinux(const ui::AXTreeUpdate& initial_tree,
                                        BrowserAccessibilityDelegate* delegate);
 
+  BrowserAccessibilityManagerAuraLinux(
+      const BrowserAccessibilityManagerAuraLinux&) = delete;
+  BrowserAccessibilityManagerAuraLinux& operator=(
+      const BrowserAccessibilityManagerAuraLinux&) = delete;
+
   ~BrowserAccessibilityManagerAuraLinux() override;
 
   static ui::AXTreeUpdate GetEmptyDocument();
@@ -78,8 +83,6 @@
 
   // Give BrowserAccessibilityManager::Create access to our constructor.
   friend class BrowserAccessibilityManager;
-
-  DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityManagerAuraLinux);
 };
 
 }  // namespace content
diff --git a/content/browser/accessibility/browser_accessibility_manager_auralinux_unittest.cc b/content/browser/accessibility/browser_accessibility_manager_auralinux_unittest.cc
index da3934e..ec00f5c5 100644
--- a/content/browser/accessibility/browser_accessibility_manager_auralinux_unittest.cc
+++ b/content/browser/accessibility/browser_accessibility_manager_auralinux_unittest.cc
@@ -20,6 +20,12 @@
  public:
   BrowserAccessibilityManagerAuraLinuxTest()
       : ax_mode_setter_(ui::kAXModeComplete) {}
+
+  BrowserAccessibilityManagerAuraLinuxTest(
+      const BrowserAccessibilityManagerAuraLinuxTest&) = delete;
+  BrowserAccessibilityManagerAuraLinuxTest& operator=(
+      const BrowserAccessibilityManagerAuraLinuxTest&) = delete;
+
   ~BrowserAccessibilityManagerAuraLinuxTest() override = default;
 
  protected:
@@ -29,8 +35,6 @@
  private:
   void SetUp() override;
   ui::testing::ScopedAxModeSetter ax_mode_setter_;
-
-  DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityManagerAuraLinuxTest);
 };
 
 void BrowserAccessibilityManagerAuraLinuxTest::SetUp() {
diff --git a/content/browser/accessibility/browser_accessibility_manager_mac.h b/content/browser/accessibility/browser_accessibility_manager_mac.h
index f15c5f0f8..3d1b6450 100644
--- a/content/browser/accessibility/browser_accessibility_manager_mac.h
+++ b/content/browser/accessibility/browser_accessibility_manager_mac.h
@@ -27,6 +27,11 @@
   BrowserAccessibilityManagerMac(const ui::AXTreeUpdate& initial_tree,
                                  BrowserAccessibilityDelegate* delegate);
 
+  BrowserAccessibilityManagerMac(const BrowserAccessibilityManagerMac&) =
+      delete;
+  BrowserAccessibilityManagerMac& operator=(
+      const BrowserAccessibilityManagerMac&) = delete;
+
   ~BrowserAccessibilityManagerMac() override;
 
   static ui::AXTreeUpdate GetEmptyDocument();
@@ -82,8 +87,6 @@
   friend class BrowserAccessibilityManager;
 
   friend class BrowserAccessibilityCocoaBrowserTest;
-
-  DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityManagerMac);
 };
 
 }  // namespace content
diff --git a/content/browser/accessibility/browser_accessibility_manager_unittest.cc b/content/browser/accessibility/browser_accessibility_manager_unittest.cc
index 613e7b85..a58a26a 100644
--- a/content/browser/accessibility/browser_accessibility_manager_unittest.cc
+++ b/content/browser/accessibility/browser_accessibility_manager_unittest.cc
@@ -48,6 +48,12 @@
 class BrowserAccessibilityManagerTest : public testing::Test {
  public:
   BrowserAccessibilityManagerTest() = default;
+
+  BrowserAccessibilityManagerTest(const BrowserAccessibilityManagerTest&) =
+      delete;
+  BrowserAccessibilityManagerTest& operator=(
+      const BrowserAccessibilityManagerTest&) = delete;
+
   ~BrowserAccessibilityManagerTest() override = default;
 
  protected:
@@ -57,8 +63,6 @@
 
  private:
   void SetUp() override;
-
-  DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityManagerTest);
 };
 
 void BrowserAccessibilityManagerTest::SetUp() {
diff --git a/content/browser/accessibility/browser_accessibility_manager_win.h b/content/browser/accessibility/browser_accessibility_manager_win.h
index d2a417b..8c417a27 100644
--- a/content/browser/accessibility/browser_accessibility_manager_win.h
+++ b/content/browser/accessibility/browser_accessibility_manager_win.h
@@ -29,6 +29,11 @@
   BrowserAccessibilityManagerWin(const ui::AXTreeUpdate& initial_tree,
                                  BrowserAccessibilityDelegate* delegate);
 
+  BrowserAccessibilityManagerWin(const BrowserAccessibilityManagerWin&) =
+      delete;
+  BrowserAccessibilityManagerWin& operator=(
+      const BrowserAccessibilityManagerWin&) = delete;
+
   ~BrowserAccessibilityManagerWin() override;
 
   static ui::AXTreeUpdate GetEmptyDocument();
@@ -160,8 +165,6 @@
   // the map is cleared in |FinalizeAccessibilityEvents|.
   SelectionEventsMap ia2_selection_events_;
   SelectionEventsMap uia_selection_events_;
-
-  DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityManagerWin);
 };
 
 }  // namespace content
diff --git a/content/browser/accessibility/browser_accessibility_manager_win_unittest.cc b/content/browser/accessibility/browser_accessibility_manager_win_unittest.cc
index 1af95d0..bc839e2d 100644
--- a/content/browser/accessibility/browser_accessibility_manager_win_unittest.cc
+++ b/content/browser/accessibility/browser_accessibility_manager_win_unittest.cc
@@ -38,6 +38,12 @@
 class BrowserAccessibilityManagerWinTest : public testing::Test {
  public:
   BrowserAccessibilityManagerWinTest() = default;
+
+  BrowserAccessibilityManagerWinTest(
+      const BrowserAccessibilityManagerWinTest&) = delete;
+  BrowserAccessibilityManagerWinTest& operator=(
+      const BrowserAccessibilityManagerWinTest&) = delete;
+
   ~BrowserAccessibilityManagerWinTest() override = default;
 
  protected:
@@ -46,8 +52,6 @@
 
  private:
   void SetUp() override;
-
-  DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityManagerWinTest);
 };
 
 void BrowserAccessibilityManagerWinTest::SetUp() {
diff --git a/content/browser/accessibility/browser_accessibility_state_impl.h b/content/browser/accessibility/browser_accessibility_state_impl.h
index f07e82c..cac34bf 100644
--- a/content/browser/accessibility/browser_accessibility_state_impl.h
+++ b/content/browser/accessibility/browser_accessibility_state_impl.h
@@ -41,6 +41,11 @@
       public ui::AXModeObserver {
  public:
   BrowserAccessibilityStateImpl();
+
+  BrowserAccessibilityStateImpl(const BrowserAccessibilityStateImpl&) = delete;
+  BrowserAccessibilityStateImpl& operator=(
+      const BrowserAccessibilityStateImpl&) = delete;
+
   ~BrowserAccessibilityStateImpl() override;
 
   static BrowserAccessibilityStateImpl* GetInstance();
@@ -173,8 +178,6 @@
 
   base::RepeatingCallbackList<void(const FocusedNodeDetails&)>
       focus_changed_callbacks_;
-
-  DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityStateImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/accessibility/browser_accessibility_unittest.cc b/content/browser/accessibility/browser_accessibility_unittest.cc
index 0f7f3bc..2c50ff21 100644
--- a/content/browser/accessibility/browser_accessibility_unittest.cc
+++ b/content/browser/accessibility/browser_accessibility_unittest.cc
@@ -16,6 +16,10 @@
 class BrowserAccessibilityTest : public testing::Test {
  public:
   BrowserAccessibilityTest();
+
+  BrowserAccessibilityTest(const BrowserAccessibilityTest&) = delete;
+  BrowserAccessibilityTest& operator=(const BrowserAccessibilityTest&) = delete;
+
   ~BrowserAccessibilityTest() override;
 
  protected:
@@ -27,8 +31,6 @@
 
   BrowserTaskEnvironment task_environment_;
   ui::testing::ScopedAxModeSetter ax_mode_setter_;
-
-  DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityTest);
 };
 
 BrowserAccessibilityTest::BrowserAccessibilityTest()
diff --git a/content/browser/accessibility/browser_accessibility_win.h b/content/browser/accessibility/browser_accessibility_win.h
index 24537b72..0d75d7b 100644
--- a/content/browser/accessibility/browser_accessibility_win.h
+++ b/content/browser/accessibility/browser_accessibility_win.h
@@ -17,6 +17,10 @@
 class CONTENT_EXPORT BrowserAccessibilityWin : public BrowserAccessibility {
  public:
   BrowserAccessibilityWin();
+
+  BrowserAccessibilityWin(const BrowserAccessibilityWin&) = delete;
+  BrowserAccessibilityWin& operator=(const BrowserAccessibilityWin&) = delete;
+
   ~BrowserAccessibilityWin() override;
 
   // This is used to call UpdateStep1ComputeWinAttributes, ... above when
@@ -49,7 +53,6 @@
   CComObject<BrowserAccessibilityComWin>* browser_accessibility_com_;
   // Give BrowserAccessibility::Create access to our constructor.
   friend class BrowserAccessibility;
-  DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityWin);
 };
 
 CONTENT_EXPORT BrowserAccessibilityWin* ToBrowserAccessibilityWin(
diff --git a/content/browser/accessibility/browser_accessibility_win_unittest.cc b/content/browser/accessibility/browser_accessibility_win_unittest.cc
index ca130eea1..f47a93b 100644
--- a/content/browser/accessibility/browser_accessibility_win_unittest.cc
+++ b/content/browser/accessibility/browser_accessibility_win_unittest.cc
@@ -100,6 +100,11 @@
 class BrowserAccessibilityWinTest : public ::testing::Test {
  public:
   BrowserAccessibilityWinTest();
+
+  BrowserAccessibilityWinTest(const BrowserAccessibilityWinTest&) = delete;
+  BrowserAccessibilityWinTest& operator=(const BrowserAccessibilityWinTest&) =
+      delete;
+
   ~BrowserAccessibilityWinTest() override;
 
  protected:
@@ -110,8 +115,6 @@
   void SetUp() override;
 
   content::BrowserTaskEnvironment task_environment_;
-
-  DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityWinTest);
 };
 
 BrowserAccessibilityWinTest::BrowserAccessibilityWinTest() {}
diff --git a/content/browser/accessibility/cross_platform_accessibility_browsertest.cc b/content/browser/accessibility/cross_platform_accessibility_browsertest.cc
index 086af31..f676985e 100644
--- a/content/browser/accessibility/cross_platform_accessibility_browsertest.cc
+++ b/content/browser/accessibility/cross_platform_accessibility_browsertest.cc
@@ -60,6 +60,12 @@
 class CrossPlatformAccessibilityBrowserTest : public ContentBrowserTest {
  public:
   CrossPlatformAccessibilityBrowserTest() = default;
+
+  CrossPlatformAccessibilityBrowserTest(
+      const CrossPlatformAccessibilityBrowserTest&) = delete;
+  CrossPlatformAccessibilityBrowserTest& operator=(
+      const CrossPlatformAccessibilityBrowserTest&) = delete;
+
   ~CrossPlatformAccessibilityBrowserTest() override = default;
 
   // Make sure each node in the tree has a unique id.
@@ -204,8 +210,6 @@
 #if defined(OS_WIN)
   std::unique_ptr<base::win::ScopedCOMInitializer> com_initializer_;
 #endif
-
-  DISALLOW_COPY_AND_ASSIGN(CrossPlatformAccessibilityBrowserTest);
 };
 
 void CrossPlatformAccessibilityBrowserTest::SetUp() {
diff --git a/content/browser/accessibility/fullscreen_browsertest.cc b/content/browser/accessibility/fullscreen_browsertest.cc
index acb1afe..82ce683 100644
--- a/content/browser/accessibility/fullscreen_browsertest.cc
+++ b/content/browser/accessibility/fullscreen_browsertest.cc
@@ -49,6 +49,10 @@
 class FakeFullscreenDelegate : public WebContentsDelegate {
  public:
   FakeFullscreenDelegate() = default;
+
+  FakeFullscreenDelegate(const FakeFullscreenDelegate&) = delete;
+  FakeFullscreenDelegate& operator=(const FakeFullscreenDelegate&) = delete;
+
   ~FakeFullscreenDelegate() override = default;
 
   void EnterFullscreenModeForTab(
@@ -67,7 +71,6 @@
 
  private:
   bool is_fullscreen_ = false;
-  DISALLOW_COPY_AND_ASSIGN(FakeFullscreenDelegate);
 };
 
 }  // namespace
diff --git a/content/browser/accessibility/one_shot_accessibility_tree_search.h b/content/browser/accessibility/one_shot_accessibility_tree_search.h
index 7743ca5b..e7b5194 100644
--- a/content/browser/accessibility/one_shot_accessibility_tree_search.h
+++ b/content/browser/accessibility/one_shot_accessibility_tree_search.h
@@ -84,6 +84,12 @@
   // they will all be within the subtree of the *parent* of |scope| - in other
   // words, siblings of |scope| and their descendants.
   explicit OneShotAccessibilityTreeSearch(BrowserAccessibility* scope);
+
+  OneShotAccessibilityTreeSearch(const OneShotAccessibilityTreeSearch&) =
+      delete;
+  OneShotAccessibilityTreeSearch& operator=(
+      const OneShotAccessibilityTreeSearch&) = delete;
+
   virtual ~OneShotAccessibilityTreeSearch();
 
   //
@@ -151,8 +157,6 @@
   std::vector<BrowserAccessibility*> matches_;
 
   bool did_search_;
-
-  DISALLOW_COPY_AND_ASSIGN(OneShotAccessibilityTreeSearch);
 };
 
 }  // namespace content
diff --git a/content/browser/accessibility/one_shot_accessibility_tree_search_unittest.cc b/content/browser/accessibility/one_shot_accessibility_tree_search_unittest.cc
index 40d5fe2..fac439b 100644
--- a/content/browser/accessibility/one_shot_accessibility_tree_search_unittest.cc
+++ b/content/browser/accessibility/one_shot_accessibility_tree_search_unittest.cc
@@ -40,6 +40,12 @@
 class OneShotAccessibilityTreeSearchTest : public testing::Test {
  public:
   OneShotAccessibilityTreeSearchTest() = default;
+
+  OneShotAccessibilityTreeSearchTest(
+      const OneShotAccessibilityTreeSearchTest&) = delete;
+  OneShotAccessibilityTreeSearchTest& operator=(
+      const OneShotAccessibilityTreeSearchTest&) = delete;
+
   ~OneShotAccessibilityTreeSearchTest() override = default;
 
  protected:
@@ -48,9 +54,6 @@
   BrowserTaskEnvironment task_environment_;
 
   std::unique_ptr<BrowserAccessibilityManager> tree_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(OneShotAccessibilityTreeSearchTest);
 };
 
 void OneShotAccessibilityTreeSearchTest::SetUp() {
diff --git a/content/browser/accessibility/touch_passthrough_manager_unittest.cc b/content/browser/accessibility/touch_passthrough_manager_unittest.cc
index 7691986..3f4e5a6 100644
--- a/content/browser/accessibility/touch_passthrough_manager_unittest.cc
+++ b/content/browser/accessibility/touch_passthrough_manager_unittest.cc
@@ -96,13 +96,16 @@
 class TouchPassthroughManagerTest : public testing::Test {
  public:
   TouchPassthroughManagerTest() = default;
+
+  TouchPassthroughManagerTest(const TouchPassthroughManagerTest&) = delete;
+  TouchPassthroughManagerTest& operator=(const TouchPassthroughManagerTest&) =
+      delete;
+
   ~TouchPassthroughManagerTest() override = default;
 
  protected:
  private:
   void SetUp() override {}
-
-  DISALLOW_COPY_AND_ASSIGN(TouchPassthroughManagerTest);
 };
 
 TEST_F(TouchPassthroughManagerTest, TapOutsidePassthroughRegion) {
diff --git a/content/browser/accessibility/web_contents_accessibility.h b/content/browser/accessibility/web_contents_accessibility.h
index f5db9df..e712fd5d 100644
--- a/content/browser/accessibility/web_contents_accessibility.h
+++ b/content/browser/accessibility/web_contents_accessibility.h
@@ -18,10 +18,11 @@
 class CONTENT_EXPORT WebContentsAccessibility {
  public:
   WebContentsAccessibility() {}
-  virtual ~WebContentsAccessibility() {}
 
- private:
-  DISALLOW_COPY_AND_ASSIGN(WebContentsAccessibility);
+  WebContentsAccessibility(const WebContentsAccessibility&) = delete;
+  WebContentsAccessibility& operator=(const WebContentsAccessibility&) = delete;
+
+  virtual ~WebContentsAccessibility() {}
 };
 }  // namespace content
 
diff --git a/content/browser/accessibility/web_contents_accessibility_android.h b/content/browser/accessibility/web_contents_accessibility_android.h
index df059969..38c3b366 100644
--- a/content/browser/accessibility/web_contents_accessibility_android.h
+++ b/content/browser/accessibility/web_contents_accessibility_android.h
@@ -60,6 +60,12 @@
       JNIEnv* env,
       const base::android::JavaParamRef<jobject>& obj,
       jlong ax_tree_update_ptr);
+
+  WebContentsAccessibilityAndroid(const WebContentsAccessibilityAndroid&) =
+      delete;
+  WebContentsAccessibilityAndroid& operator=(
+      const WebContentsAccessibilityAndroid&) = delete;
+
   ~WebContentsAccessibilityAndroid() override;
 
   // Notify the root BrowserAccessibilityManager that this is the
@@ -421,8 +427,6 @@
   std::unique_ptr<TouchPassthroughManager> touch_passthrough_manager_;
 
   base::WeakPtrFactory<WebContentsAccessibilityAndroid> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(WebContentsAccessibilityAndroid);
 };
 
 }  // namespace content
diff --git a/content/browser/android/date_time_chooser_android.h b/content/browser/android/date_time_chooser_android.h
index eea12b2d..6dcd65d3 100644
--- a/content/browser/android/date_time_chooser_android.h
+++ b/content/browser/android/date_time_chooser_android.h
@@ -21,6 +21,10 @@
       public WebContentsUserData<DateTimeChooserAndroid> {
  public:
   explicit DateTimeChooserAndroid(WebContents* web_contents);
+
+  DateTimeChooserAndroid(const DateTimeChooserAndroid&) = delete;
+  DateTimeChooserAndroid& operator=(const DateTimeChooserAndroid&) = delete;
+
   ~DateTimeChooserAndroid() override;
 
   void OnDateTimeChooserReceiver(
@@ -51,8 +55,6 @@
   mojo::Receiver<blink::mojom::DateTimeChooser> date_time_chooser_receiver_;
 
   WEB_CONTENTS_USER_DATA_KEY_DECL();
-
-  DISALLOW_COPY_AND_ASSIGN(DateTimeChooserAndroid);
 };
 
 }  // namespace content
diff --git a/content/browser/android/gesture_listener_manager.h b/content/browser/android/gesture_listener_manager.h
index 57923d96..921469c4 100644
--- a/content/browser/android/gesture_listener_manager.h
+++ b/content/browser/android/gesture_listener_manager.h
@@ -31,6 +31,10 @@
   GestureListenerManager(JNIEnv* env,
                          const base::android::JavaParamRef<jobject>& obj,
                          WebContentsImpl* web_contents);
+
+  GestureListenerManager(const GestureListenerManager&) = delete;
+  GestureListenerManager& operator=(const GestureListenerManager&) = delete;
+
   ~GestureListenerManager() override;
 
   void ResetGestureDetection(JNIEnv* env,
@@ -88,8 +92,6 @@
 
   // True if there is at least one listener attached.
   bool has_listeners_attached_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(GestureListenerManager);
 };
 
 }  // namespace content
diff --git a/content/browser/android/java/gin_java_bound_object_delegate.h b/content/browser/android/java/gin_java_bound_object_delegate.h
index f4a9c2ae..10154896 100644
--- a/content/browser/android/java/gin_java_bound_object_delegate.h
+++ b/content/browser/android/java/gin_java_bound_object_delegate.h
@@ -18,6 +18,11 @@
     : public GinJavaMethodInvocationHelper::ObjectDelegate {
  public:
   GinJavaBoundObjectDelegate(scoped_refptr<GinJavaBoundObject> object);
+
+  GinJavaBoundObjectDelegate(const GinJavaBoundObjectDelegate&) = delete;
+  GinJavaBoundObjectDelegate& operator=(const GinJavaBoundObjectDelegate&) =
+      delete;
+
   ~GinJavaBoundObjectDelegate() override;
 
   base::android::ScopedJavaLocalRef<jobject> GetLocalRef(JNIEnv* env) override;
@@ -30,8 +35,6 @@
 
  private:
   scoped_refptr<GinJavaBoundObject> object_;
-
-  DISALLOW_COPY_AND_ASSIGN(GinJavaBoundObjectDelegate);
 };
 
 }  // namespace content
diff --git a/content/browser/android/java/gin_java_method_invocation_helper.h b/content/browser/android/java/gin_java_method_invocation_helper.h
index 6582ccf..9ccef12 100644
--- a/content/browser/android/java/gin_java_method_invocation_helper.h
+++ b/content/browser/android/java/gin_java_method_invocation_helper.h
@@ -30,17 +30,22 @@
   class DispatcherDelegate {
    public:
     DispatcherDelegate() {}
+
+    DispatcherDelegate(const DispatcherDelegate&) = delete;
+    DispatcherDelegate& operator=(const DispatcherDelegate&) = delete;
+
     virtual ~DispatcherDelegate() {}
     virtual JavaObjectWeakGlobalRef GetObjectWeakRef(
         GinJavaBoundObject::ObjectID object_id) = 0;
-
-   private:
-    DISALLOW_COPY_AND_ASSIGN(DispatcherDelegate);
   };
 
   class ObjectDelegate {
    public:
     ObjectDelegate() {}
+
+    ObjectDelegate(const ObjectDelegate&) = delete;
+    ObjectDelegate& operator=(const ObjectDelegate&) = delete;
+
     virtual ~ObjectDelegate() {}
     virtual base::android::ScopedJavaLocalRef<jobject> GetLocalRef(
         JNIEnv* env) = 0;
@@ -50,9 +55,6 @@
                                          size_t num_parameters) = 0;
     virtual bool IsObjectGetClassMethod(const JavaMethod* method) = 0;
     virtual const base::android::JavaRef<jclass>& GetSafeAnnotationClass() = 0;
-
-   private:
-    DISALLOW_COPY_AND_ASSIGN(ObjectDelegate);
   };
 
   GinJavaMethodInvocationHelper(std::unique_ptr<ObjectDelegate> object,
diff --git a/content/browser/android/java/gin_java_method_invocation_helper_unittest.cc b/content/browser/android/java/gin_java_method_invocation_helper_unittest.cc
index 751981d8..a533eca 100644
--- a/content/browser/android/java/gin_java_method_invocation_helper_unittest.cc
+++ b/content/browser/android/java/gin_java_method_invocation_helper_unittest.cc
@@ -24,6 +24,9 @@
  public:
   NullObjectDelegate() {}
 
+  NullObjectDelegate(const NullObjectDelegate&) = delete;
+  NullObjectDelegate& operator=(const NullObjectDelegate&) = delete;
+
   ~NullObjectDelegate() override {}
 
   base::android::ScopedJavaLocalRef<jobject> GetLocalRef(JNIEnv* env) override {
@@ -50,8 +53,6 @@
 
  private:
   base::android::ScopedJavaGlobalRef<jclass> safe_annotation_class_;
-
-  DISALLOW_COPY_AND_ASSIGN(NullObjectDelegate);
 };
 
 class NullDispatcherDelegate
@@ -59,14 +60,15 @@
  public:
   NullDispatcherDelegate() {}
 
+  NullDispatcherDelegate(const NullDispatcherDelegate&) = delete;
+  NullDispatcherDelegate& operator=(const NullDispatcherDelegate&) = delete;
+
   ~NullDispatcherDelegate() override {}
 
   JavaObjectWeakGlobalRef GetObjectWeakRef(
       GinJavaBoundObject::ObjectID object_id) override {
     return JavaObjectWeakGlobalRef();
   }
-
-  DISALLOW_COPY_AND_ASSIGN(NullDispatcherDelegate);
 };
 
 }  // namespace
@@ -81,6 +83,10 @@
  public:
   CountingDispatcherDelegate() {}
 
+  CountingDispatcherDelegate(const CountingDispatcherDelegate&) = delete;
+  CountingDispatcherDelegate& operator=(const CountingDispatcherDelegate&) =
+      delete;
+
   ~CountingDispatcherDelegate() override {}
 
   JavaObjectWeakGlobalRef GetObjectWeakRef(
@@ -102,8 +108,6 @@
  private:
   typedef std::map<GinJavaBoundObject::ObjectID, int> Counters;
   Counters counters_;
-
-  DISALLOW_COPY_AND_ASSIGN(CountingDispatcherDelegate);
 };
 
 }  // namespace
@@ -179,6 +183,10 @@
     method_ = std::make_unique<JavaMethod>(method_obj);
   }
 
+  ObjectIsGoneObjectDelegate(const ObjectIsGoneObjectDelegate&) = delete;
+  ObjectIsGoneObjectDelegate& operator=(const ObjectIsGoneObjectDelegate&) =
+      delete;
+
   ~ObjectIsGoneObjectDelegate() override {}
 
   base::android::ScopedJavaLocalRef<jobject> GetLocalRef(JNIEnv* env) override {
@@ -198,9 +206,6 @@
  protected:
   std::unique_ptr<JavaMethod> method_;
   bool get_local_ref_called_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(ObjectIsGoneObjectDelegate);
 };
 
 }  // namespace
@@ -231,6 +236,10 @@
  public:
   MethodNotFoundObjectDelegate() : find_method_called_(false) {}
 
+  MethodNotFoundObjectDelegate(const MethodNotFoundObjectDelegate&) = delete;
+  MethodNotFoundObjectDelegate& operator=(const MethodNotFoundObjectDelegate&) =
+      delete;
+
   ~MethodNotFoundObjectDelegate() override {}
 
   base::android::ScopedJavaLocalRef<jobject> GetLocalRef(JNIEnv* env) override {
@@ -248,9 +257,6 @@
 
  protected:
   bool find_method_called_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(MethodNotFoundObjectDelegate);
 };
 
 }  // namespace
@@ -281,6 +287,9 @@
  public:
   GetClassObjectDelegate() : get_class_called_(false) {}
 
+  GetClassObjectDelegate(const GetClassObjectDelegate&) = delete;
+  GetClassObjectDelegate& operator=(const GetClassObjectDelegate&) = delete;
+
   ~GetClassObjectDelegate() override {}
 
   const JavaMethod* FindMethod(const std::string& method_name,
@@ -299,8 +308,6 @@
  private:
   static const JavaMethod* kFakeGetClass;
   bool get_class_called_;
-
-  DISALLOW_COPY_AND_ASSIGN(GetClassObjectDelegate);
 };
 
 // We don't expect GinJavaMethodInvocationHelper to actually invoke the
diff --git a/content/browser/android/javascript_injector.h b/content/browser/android/javascript_injector.h
index 957d07c3..fc8f485 100644
--- a/content/browser/android/javascript_injector.h
+++ b/content/browser/android/javascript_injector.h
@@ -22,6 +22,10 @@
       const base::android::JavaParamRef<jobject>& obj,
       const base::android::JavaParamRef<jobject>& retained_objects,
       WebContents* web_contents);
+
+  JavascriptInjector(const JavascriptInjector&) = delete;
+  JavascriptInjector& operator=(const JavascriptInjector&) = delete;
+
   ~JavascriptInjector() override;
 
   void SetAllowInspection(JNIEnv* env,
@@ -48,8 +52,6 @@
   scoped_refptr<GinJavaBridgeDispatcherHost> java_bridge_dispatcher_host_;
 
   WEB_CONTENTS_USER_DATA_KEY_DECL();
-
-  DISALLOW_COPY_AND_ASSIGN(JavascriptInjector);
 };
 
 }  // namespace content
diff --git a/content/browser/android/nfc_host.h b/content/browser/android/nfc_host.h
index f881abf..a4d2b673 100644
--- a/content/browser/android/nfc_host.h
+++ b/content/browser/android/nfc_host.h
@@ -23,6 +23,10 @@
 class NFCHost : public WebContentsObserver {
  public:
   explicit NFCHost(WebContents* web_contents);
+
+  NFCHost(const NFCHost&) = delete;
+  NFCHost& operator=(const NFCHost&) = delete;
+
   ~NFCHost() override;
 
   void GetNFC(RenderFrameHost* render_frame_host,
@@ -45,8 +49,6 @@
 
   // Permission change subscription ID provided by |permission_controller_|.
   PermissionController::SubscriptionId subscription_id_;
-
-  DISALLOW_COPY_AND_ASSIGN(NFCHost);
 };
 
 }  // namespace content
diff --git a/content/browser/android/overscroll_controller_android.h b/content/browser/android/overscroll_controller_android.h
index 316fc88..f3d26db 100644
--- a/content/browser/android/overscroll_controller_android.h
+++ b/content/browser/android/overscroll_controller_android.h
@@ -48,6 +48,10 @@
       std::unique_ptr<ui::OverscrollGlow> glow_effect,
       std::unique_ptr<ui::OverscrollRefresh> refresh_effect);
 
+  OverscrollControllerAndroid(const OverscrollControllerAndroid&) = delete;
+  OverscrollControllerAndroid& operator=(const OverscrollControllerAndroid&) =
+      delete;
+
   ~OverscrollControllerAndroid() override;
 
   // Returns true if |event| is consumed by an overscroll effect, in which
@@ -99,8 +103,6 @@
   // TODO(jdduke): Factor out a common API from the two overscroll effects.
   std::unique_ptr<ui::OverscrollGlow> glow_effect_;
   std::unique_ptr<ui::OverscrollRefresh> refresh_effect_;
-
-  DISALLOW_COPY_AND_ASSIGN(OverscrollControllerAndroid);
 };
 
 }  // namespace content
diff --git a/content/browser/android/render_widget_host_connector.cc b/content/browser/android/render_widget_host_connector.cc
index 84dd7526..0f3c0971 100644
--- a/content/browser/android/render_widget_host_connector.cc
+++ b/content/browser/android/render_widget_host_connector.cc
@@ -17,6 +17,10 @@
       public RenderWidgetHostViewAndroid::DestructionObserver {
  public:
   Observer(WebContents* web_contents, RenderWidgetHostConnector* connector);
+
+  Observer(const Observer&) = delete;
+  Observer& operator=(const Observer&) = delete;
+
   ~Observer() override;
 
   // WebContentsObserver implementation.
@@ -44,8 +48,6 @@
 
   // Active RenderWidgetHostView connected to this instance.
   RenderWidgetHostViewAndroid* active_rwhva_;
-
-  DISALLOW_COPY_AND_ASSIGN(Observer);
 };
 
 RenderWidgetHostConnector::Observer::Observer(
diff --git a/content/browser/android/render_widget_host_connector.h b/content/browser/android/render_widget_host_connector.h
index 1294d9462..37b6bf6 100644
--- a/content/browser/android/render_widget_host_connector.h
+++ b/content/browser/android/render_widget_host_connector.h
@@ -23,6 +23,11 @@
 class RenderWidgetHostConnector {
  public:
   explicit RenderWidgetHostConnector(WebContents* web_contents);
+
+  RenderWidgetHostConnector(const RenderWidgetHostConnector&) = delete;
+  RenderWidgetHostConnector& operator=(const RenderWidgetHostConnector&) =
+      delete;
+
   virtual ~RenderWidgetHostConnector();
 
   // Establish initial connection to rwhva if it is present.
@@ -53,8 +58,6 @@
  private:
   class Observer;
   std::unique_ptr<Observer> render_widget_observer_;
-
-  DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostConnector);
 };
 
 }  // namespace content
diff --git a/content/browser/android/selection/composited_touch_handle_drawable.h b/content/browser/android/selection/composited_touch_handle_drawable.h
index e16b806..32c21920d 100644
--- a/content/browser/android/selection/composited_touch_handle_drawable.h
+++ b/content/browser/android/selection/composited_touch_handle_drawable.h
@@ -22,6 +22,11 @@
  public:
   CompositedTouchHandleDrawable(gfx::NativeView view,
                                 const base::android::JavaRef<jobject>& context);
+
+  CompositedTouchHandleDrawable(const CompositedTouchHandleDrawable&) = delete;
+  CompositedTouchHandleDrawable& operator=(
+      const CompositedTouchHandleDrawable&) = delete;
+
   ~CompositedTouchHandleDrawable() override;
 
   // ui::TouchHandleDrawable implementation.
@@ -43,8 +48,6 @@
   ui::TouchHandleOrientation orientation_;
   gfx::PointF origin_position_;
   scoped_refptr<cc::UIResourceLayer> layer_;
-
-  DISALLOW_COPY_AND_ASSIGN(CompositedTouchHandleDrawable);
 };
 
 }  // namespace content
diff --git a/content/browser/android/selection/smart_selection_client.h b/content/browser/android/selection/smart_selection_client.h
index 01f3022..aa4ad71 100644
--- a/content/browser/android/selection/smart_selection_client.h
+++ b/content/browser/android/selection/smart_selection_client.h
@@ -26,6 +26,10 @@
   SmartSelectionClient(JNIEnv* env,
                        const base::android::JavaRef<jobject>& obj,
                        WebContents* web_contents);
+
+  SmartSelectionClient(const SmartSelectionClient&) = delete;
+  SmartSelectionClient& operator=(const SmartSelectionClient&) = delete;
+
   ~SmartSelectionClient();
 
   // Sends asynchronius request to retrieve the text.
@@ -52,8 +56,6 @@
   WebContents* web_contents_;
 
   base::WeakPtrFactory<SmartSelectionClient> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(SmartSelectionClient);
 };
 
 }  // namespace content
diff --git a/content/browser/android/synchronous_compositor_browsertest.cc b/content/browser/android/synchronous_compositor_browsertest.cc
index 8052f5b..733ba2bf 100644
--- a/content/browser/android/synchronous_compositor_browsertest.cc
+++ b/content/browser/android/synchronous_compositor_browsertest.cc
@@ -23,6 +23,12 @@
 class TestSynchronousCompositorClient : public SynchronousCompositorClient {
  public:
   TestSynchronousCompositorClient() = default;
+
+  TestSynchronousCompositorClient(const TestSynchronousCompositorClient&) =
+      delete;
+  TestSynchronousCompositorClient& operator=(
+      const TestSynchronousCompositorClient&) = delete;
+
   ~TestSynchronousCompositorClient() override = default;
 
   // SynchronousCompositorClient overrides.
@@ -65,7 +71,6 @@
 
  private:
   std::map<viz::FrameSinkId, SynchronousCompositor*> compositor_map_;
-  DISALLOW_COPY_AND_ASSIGN(TestSynchronousCompositorClient);
 };
 
 class SynchronousCompositorBrowserTest : public ContentBrowserTest {
diff --git a/content/browser/android/synchronous_compositor_host.cc b/content/browser/android/synchronous_compositor_host.cc
index a3be5e10..f5f587f9 100644
--- a/content/browser/android/synchronous_compositor_host.cc
+++ b/content/browser/android/synchronous_compositor_host.cc
@@ -313,12 +313,12 @@
     SynchronousCompositorSetSkCanvas(canvas);
   }
 
+  ScopedSetSkCanvas(const ScopedSetSkCanvas&) = delete;
+  ScopedSetSkCanvas& operator=(const ScopedSetSkCanvas&) = delete;
+
   ~ScopedSetSkCanvas() {
     SynchronousCompositorSetSkCanvas(nullptr);
   }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(ScopedSetSkCanvas);
 };
 
 }
@@ -349,12 +349,14 @@
 class SynchronousCompositorHost::ScopedSendZeroMemory {
  public:
   ScopedSendZeroMemory(SynchronousCompositorHost* host) : host_(host) {}
+
+  ScopedSendZeroMemory(const ScopedSendZeroMemory&) = delete;
+  ScopedSendZeroMemory& operator=(const ScopedSendZeroMemory&) = delete;
+
   ~ScopedSendZeroMemory() { host_->SendZeroMemory(); }
 
  private:
   SynchronousCompositorHost* const host_;
-
-  DISALLOW_COPY_AND_ASSIGN(ScopedSendZeroMemory);
 };
 
 struct SynchronousCompositorHost::SharedMemoryWithSize {
diff --git a/content/browser/android/synchronous_compositor_host.h b/content/browser/android/synchronous_compositor_host.h
index bb929fbe..ebfa9950 100644
--- a/content/browser/android/synchronous_compositor_host.h
+++ b/content/browser/android/synchronous_compositor_host.h
@@ -53,6 +53,10 @@
       const viz::FrameSinkId& frame_sink_id,
       viz::HostFrameSinkManager* host_frame_sink_manager);
 
+  SynchronousCompositorHost(const SynchronousCompositorHost&) = delete;
+  SynchronousCompositorHost& operator=(const SynchronousCompositorHost&) =
+      delete;
+
   ~SynchronousCompositorHost() override;
 
   // SynchronousCompositor overrides.
@@ -207,8 +211,6 @@
   viz::BeginFrameSource* begin_frame_source_ = nullptr;
   viz::BeginFrameArgs last_begin_frame_args_;
   viz::FrameTimingDetailsMap timing_details_;
-
-  DISALLOW_COPY_AND_ASSIGN(SynchronousCompositorHost);
 };
 
 }  // namespace content
diff --git a/content/browser/android/text_suggestion_host_mojo_impl_android.h b/content/browser/android/text_suggestion_host_mojo_impl_android.h
index 98a7bb126..c2b5c5e 100644
--- a/content/browser/android/text_suggestion_host_mojo_impl_android.h
+++ b/content/browser/android/text_suggestion_host_mojo_impl_android.h
@@ -20,6 +20,12 @@
   TextSuggestionHostMojoImplAndroid(
       TextSuggestionHostAndroid*,
       mojo::PendingReceiver<blink::mojom::TextSuggestionHost> receiver);
+
+  TextSuggestionHostMojoImplAndroid(const TextSuggestionHostMojoImplAndroid&) =
+      delete;
+  TextSuggestionHostMojoImplAndroid& operator=(
+      const TextSuggestionHostMojoImplAndroid&) = delete;
+
   ~TextSuggestionHostMojoImplAndroid() override;
 
   static std::unique_ptr<TextSuggestionHostMojoImplAndroid> Create(
@@ -42,8 +48,6 @@
  private:
   TextSuggestionHostAndroid* const text_suggestion_host_;
   mojo::Receiver<blink::mojom::TextSuggestionHost> receiver_;
-
-  DISALLOW_COPY_AND_ASSIGN(TextSuggestionHostMojoImplAndroid);
 };
 
 }  // namespace content
diff --git a/content/browser/android/web_contents_observer_proxy.h b/content/browser/android/web_contents_observer_proxy.h
index d96d5442..a1864a37 100644
--- a/content/browser/android/web_contents_observer_proxy.h
+++ b/content/browser/android/web_contents_observer_proxy.h
@@ -25,6 +25,10 @@
 class WebContentsObserverProxy : public WebContentsObserver {
  public:
   WebContentsObserverProxy(JNIEnv* env, jobject obj, WebContents* web_contents);
+
+  WebContentsObserverProxy(const WebContentsObserverProxy&) = delete;
+  WebContentsObserverProxy& operator=(const WebContentsObserverProxy&) = delete;
+
   ~WebContentsObserverProxy() override;
 
   void Destroy(JNIEnv* env, const base::android::JavaParamRef<jobject>& obj);
@@ -77,8 +81,6 @@
 
   base::android::ScopedJavaGlobalRef<jobject> java_observer_;
   GURL base_url_of_last_started_data_url_;
-
-  DISALLOW_COPY_AND_ASSIGN(WebContentsObserverProxy);
 };
 
 }  // namespace content
diff --git a/content/browser/appcache/appcache_backend_impl.h b/content/browser/appcache/appcache_backend_impl.h
index 6e426f43..96cce1e5 100644
--- a/content/browser/appcache/appcache_backend_impl.h
+++ b/content/browser/appcache/appcache_backend_impl.h
@@ -24,6 +24,10 @@
   AppCacheBackendImpl(AppCacheServiceImpl* service,
                       int process_id,
                       int routing_id);
+
+  AppCacheBackendImpl(const AppCacheBackendImpl&) = delete;
+  AppCacheBackendImpl& operator=(const AppCacheBackendImpl&) = delete;
+
   ~AppCacheBackendImpl() override;
 
   // blink::mojom::AppCacheBackend
@@ -39,8 +43,6 @@
   const int process_id_;
   const int routing_id_;
   ChildProcessSecurityPolicyImpl::Handle security_policy_handle_;
-
-  DISALLOW_COPY_AND_ASSIGN(AppCacheBackendImpl);
 };
 
 }  // namespace
diff --git a/content/browser/appcache/appcache_browsertest.cc b/content/browser/appcache/appcache_browsertest.cc
index 27c68984..1914e984 100644
--- a/content/browser/appcache/appcache_browsertest.cc
+++ b/content/browser/appcache/appcache_browsertest.cc
@@ -41,11 +41,12 @@
  public:
   AppCacheNetworkServiceBrowserTest() = default;
 
+  AppCacheNetworkServiceBrowserTest(const AppCacheNetworkServiceBrowserTest&) =
+      delete;
+  AppCacheNetworkServiceBrowserTest& operator=(
+      const AppCacheNetworkServiceBrowserTest&) = delete;
+
   ~AppCacheNetworkServiceBrowserTest() override = default;
-
- private:
-
-  DISALLOW_COPY_AND_ASSIGN(AppCacheNetworkServiceBrowserTest);
 };
 
 // This test validates that navigating to a TLD which has an AppCache
diff --git a/content/browser/appcache/appcache_database.h b/content/browser/appcache/appcache_database.h
index f3072d9..7578052 100644
--- a/content/browser/appcache/appcache_database.h
+++ b/content/browser/appcache/appcache_database.h
@@ -124,6 +124,10 @@
   };
 
   explicit AppCacheDatabase(const base::FilePath& path);
+
+  AppCacheDatabase(const AppCacheDatabase&) = delete;
+  AppCacheDatabase& operator=(const AppCacheDatabase&) = delete;
+
   ~AppCacheDatabase();
 
   void Disable();
@@ -288,8 +292,6 @@
   FRIEND_TEST_ALL_PREFIXES(content::AppCacheDatabaseTest, UpgradeSchemaFrom8);
   FRIEND_TEST_ALL_PREFIXES(content::AppCacheDatabaseTest, UpgradeSchemaFrom9);
   FRIEND_TEST_ALL_PREFIXES(content::AppCacheDatabaseTest, WasCorrutionDetected);
-
-  DISALLOW_COPY_AND_ASSIGN(AppCacheDatabase);
 };
 
 }  // namespace content
diff --git a/content/browser/appcache/appcache_internals_ui.h b/content/browser/appcache/appcache_internals_ui.h
index 168126a..951d505 100644
--- a/content/browser/appcache/appcache_internals_ui.h
+++ b/content/browser/appcache/appcache_internals_ui.h
@@ -37,10 +37,11 @@
 class AppCacheInternalsUI : public WebUIController {
  public:
   explicit AppCacheInternalsUI(WebUI* web_ui);
-  ~AppCacheInternalsUI() override;
 
- private:
-  DISALLOW_COPY_AND_ASSIGN(AppCacheInternalsUI);
+  AppCacheInternalsUI(const AppCacheInternalsUI&) = delete;
+  AppCacheInternalsUI& operator=(const AppCacheInternalsUI&) = delete;
+
+  ~AppCacheInternalsUI() override;
 };
 
 class AppCacheInternalsHandler : public WebUIMessageHandler {
@@ -52,6 +53,10 @@
   };
 
   AppCacheInternalsHandler();
+
+  AppCacheInternalsHandler(const AppCacheInternalsHandler&) = delete;
+  AppCacheInternalsHandler& operator=(const AppCacheInternalsHandler&) = delete;
+
   ~AppCacheInternalsHandler() override;
 
   // WebUIMessageHandler implementation.
@@ -139,8 +144,6 @@
   Proxy* GetProxyForPartitionPath(const base::FilePath& path);
   std::list<scoped_refptr<Proxy>> appcache_proxies_;
   base::WeakPtrFactory<AppCacheInternalsHandler> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(AppCacheInternalsHandler);
 };
 
 }  // namespace content
diff --git a/content/browser/appcache/appcache_navigation_handle.h b/content/browser/appcache/appcache_navigation_handle.h
index c04b7786..3e3039d 100644
--- a/content/browser/appcache/appcache_navigation_handle.h
+++ b/content/browser/appcache/appcache_navigation_handle.h
@@ -45,6 +45,10 @@
  public:
   AppCacheNavigationHandle(ChromeAppCacheService* appcache_service,
                            int process_id);
+
+  AppCacheNavigationHandle(const AppCacheNavigationHandle&) = delete;
+  AppCacheNavigationHandle& operator=(const AppCacheNavigationHandle&) = delete;
+
   ~AppCacheNavigationHandle();
 
   const base::UnguessableToken& appcache_host_id() const {
@@ -62,8 +66,6 @@
  private:
   const base::UnguessableToken appcache_host_id_;
   std::unique_ptr<AppCacheHost> precreated_host_;
-
-  DISALLOW_COPY_AND_ASSIGN(AppCacheNavigationHandle);
 };
 
 }  // namespace content
diff --git a/content/browser/appcache/appcache_quota_client.h b/content/browser/appcache/appcache_quota_client.h
index 52d9e450..e80b004f 100644
--- a/content/browser/appcache/appcache_quota_client.h
+++ b/content/browser/appcache/appcache_quota_client.h
@@ -42,6 +42,9 @@
   CONTENT_EXPORT
   explicit AppCacheQuotaClient(base::WeakPtr<AppCacheServiceImpl> service);
 
+  AppCacheQuotaClient(const AppCacheQuotaClient&) = delete;
+  AppCacheQuotaClient& operator=(const AppCacheQuotaClient&) = delete;
+
   ~AppCacheQuotaClient() override;
 
   // storage::StorageKeyQuotaClient method overrides.
@@ -100,8 +103,6 @@
   bool appcache_is_ready_ = false;
   bool service_is_destroyed_ = false;
   SEQUENCE_CHECKER(sequence_checker_);
-
-  DISALLOW_COPY_AND_ASSIGN(AppCacheQuotaClient);
 };
 
 }  // namespace content
diff --git a/content/browser/appcache/appcache_request.h b/content/browser/appcache/appcache_request.h
index 7d9f5ccf..40a751a 100644
--- a/content/browser/appcache/appcache_request.h
+++ b/content/browser/appcache/appcache_request.h
@@ -36,6 +36,10 @@
 class CONTENT_EXPORT AppCacheRequest {
  public:
   explicit AppCacheRequest(const network::ResourceRequest& request);
+
+  AppCacheRequest(const AppCacheRequest&) = delete;
+  AppCacheRequest& operator=(const AppCacheRequest&) = delete;
+
   ~AppCacheRequest();
 
   // The URL for this request.
@@ -105,8 +109,6 @@
   SEQUENCE_CHECKER(sequence_checker_);
 
   base::WeakPtrFactory<AppCacheRequest> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(AppCacheRequest);
 };
 
 }  // namespace content
diff --git a/content/browser/appcache/appcache_request_handler.h b/content/browser/appcache/appcache_request_handler.h
index b60e0cb0..d6cb66a 100644
--- a/content/browser/appcache/appcache_request_handler.h
+++ b/content/browser/appcache/appcache_request_handler.h
@@ -53,6 +53,9 @@
   using AppCacheLoaderCallback =
       base::OnceCallback<void(SingleRequestURLLoaderFactory::RequestHandler)>;
 
+  AppCacheRequestHandler(const AppCacheRequestHandler&) = delete;
+  AppCacheRequestHandler& operator=(const AppCacheRequestHandler&) = delete;
+
   ~AppCacheRequestHandler() override;
 
   // NetworkService loading
@@ -268,8 +271,6 @@
   base::WeakPtr<AppCacheHost> appcache_host_;
 
   base::WeakPtrFactory<AppCacheRequestHandler> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(AppCacheRequestHandler);
 };
 
 }  // namespace content
diff --git a/content/browser/appcache/appcache_subresource_url_factory.h b/content/browser/appcache/appcache_subresource_url_factory.h
index 18414d9c..7dbdc66 100644
--- a/content/browser/appcache/appcache_subresource_url_factory.h
+++ b/content/browser/appcache/appcache_subresource_url_factory.h
@@ -29,6 +29,10 @@
 class CONTENT_EXPORT AppCacheSubresourceURLFactory
     : public network::mojom::URLLoaderFactory {
  public:
+  AppCacheSubresourceURLFactory(const AppCacheSubresourceURLFactory&) = delete;
+  AppCacheSubresourceURLFactory& operator=(
+      const AppCacheSubresourceURLFactory&) = delete;
+
   ~AppCacheSubresourceURLFactory() override;
 
   // Factory function to create an instance of the factory.
@@ -68,7 +72,6 @@
   scoped_refptr<network::SharedURLLoaderFactory> network_loader_factory_;
   base::WeakPtr<AppCacheHost> appcache_host_;
   base::WeakPtrFactory<AppCacheSubresourceURLFactory> weak_factory_{this};
-  DISALLOW_COPY_AND_ASSIGN(AppCacheSubresourceURLFactory);
 };
 
 }  // namespace content
diff --git a/content/browser/appcache/appcache_test_helper.h b/content/browser/appcache/appcache_test_helper.h
index 784731f4..26ba14a 100644
--- a/content/browser/appcache/appcache_test_helper.h
+++ b/content/browser/appcache/appcache_test_helper.h
@@ -21,6 +21,10 @@
 class AppCacheTestHelper : public AppCacheStorage::Delegate {
  public:
   AppCacheTestHelper();
+
+  AppCacheTestHelper(const AppCacheTestHelper&) = delete;
+  AppCacheTestHelper& operator=(const AppCacheTestHelper&) = delete;
+
   ~AppCacheTestHelper() override;
   void AddGroupAndCache(AppCacheServiceImpl* appcache_service,
                         const GURL& manifest_url);
@@ -40,8 +44,6 @@
   int response_id_;
   scoped_refptr<AppCacheInfoCollection> appcache_info_;
   std::set<url::Origin>* origins_;  // not owned
-
-  DISALLOW_COPY_AND_ASSIGN(AppCacheTestHelper);
 };
 
 }  // namespace content
diff --git a/content/browser/appcache/appcache_update_job.h b/content/browser/appcache/appcache_update_job.h
index d96f009..98a8ff1 100644
--- a/content/browser/appcache/appcache_update_job.h
+++ b/content/browser/appcache/appcache_update_job.h
@@ -65,6 +65,10 @@
   };
 
   AppCacheUpdateJob(AppCacheServiceImpl* service, AppCacheGroup* group);
+
+  AppCacheUpdateJob(const AppCacheUpdateJob&) = delete;
+  AppCacheUpdateJob& operator=(const AppCacheUpdateJob&) = delete;
+
   ~AppCacheUpdateJob() override;
 
   // Triggers the update process or adds more info if this update is already
@@ -335,8 +339,6 @@
   base::WeakPtrFactory<AppCacheUpdateJob> weak_factory_{this};
 
   FRIEND_TEST_ALL_PREFIXES(content::AppCacheGroupTest, QueueUpdate);
-
-  DISALLOW_COPY_AND_ASSIGN(AppCacheUpdateJob);
 };
 
 }  // namespace content
diff --git a/content/browser/appcache/appcache_update_url_loader_request.h b/content/browser/appcache/appcache_update_url_loader_request.h
index 176e491..883c791 100644
--- a/content/browser/appcache/appcache_update_url_loader_request.h
+++ b/content/browser/appcache/appcache_update_url_loader_request.h
@@ -38,6 +38,10 @@
                          const GURL& url,
                          int buffer_size,
                          URLFetcher* fetcher);
+
+  UpdateURLLoaderRequest(const UpdateURLLoaderRequest&) = delete;
+  UpdateURLLoaderRequest& operator=(const UpdateURLLoaderRequest&) = delete;
+
   ~UpdateURLLoaderRequest() override;
 
   // This method is called to start the request.
@@ -157,8 +161,6 @@
   bool read_requested_;
   // Adapter for transferring data from a mojo data pipe to net.
   scoped_refptr<network::MojoToNetPendingBuffer> pending_read_;
-
-  DISALLOW_COPY_AND_ASSIGN(UpdateURLLoaderRequest);
 };
 
 }  // namespace content
diff --git a/content/browser/appcache/appcache_url_loader.h b/content/browser/appcache/appcache_url_loader.h
index 09aeddc4..0a3120c1 100644
--- a/content/browser/appcache/appcache_url_loader.h
+++ b/content/browser/appcache/appcache_url_loader.h
@@ -61,6 +61,9 @@
       AppCacheStorage* storage,
       AppCacheRequestHandler::AppCacheLoaderCallback loader_callback);
 
+  AppCacheURLLoader(const AppCacheURLLoader&) = delete;
+  AppCacheURLLoader& operator=(const AppCacheURLLoader&) = delete;
+
   ~AppCacheURLLoader() override;
 
   // Sets up the bindings.
@@ -226,7 +229,6 @@
   SEQUENCE_CHECKER(sequence_checker_);
 
   base::WeakPtrFactory<AppCacheURLLoader> weak_factory_{this};
-  DISALLOW_COPY_AND_ASSIGN(AppCacheURLLoader);
 };
 
 }  // namespace content
diff --git a/content/browser/back_forward_cache_browsertest.cc b/content/browser/back_forward_cache_browsertest.cc
index 2b1326fd..0b67784 100644
--- a/content/browser/back_forward_cache_browsertest.cc
+++ b/content/browser/back_forward_cache_browsertest.cc
@@ -65,6 +65,7 @@
 #include "content/public/test/content_browser_test_utils.h"
 #include "content/public/test/content_mock_cert_verifier.h"
 #include "content/public/test/idle_test_utils.h"
+#include "content/public/test/media_start_stop_observer.h"
 #include "content/public/test/mock_web_contents_observer.h"
 #include "content/public/test/navigation_handle_observer.h"
 #include "content/public/test/test_navigation_observer.h"
@@ -3230,6 +3231,10 @@
 class MockAppBannerService : public blink::mojom::AppBannerService {
  public:
   MockAppBannerService() = default;
+
+  MockAppBannerService(const MockAppBannerService&) = delete;
+  MockAppBannerService& operator=(const MockAppBannerService&) = delete;
+
   ~MockAppBannerService() override = default;
 
   void Bind(mojo::ScopedMessagePipeHandle handle) {
@@ -3267,8 +3272,6 @@
   mojo::Receiver<blink::mojom::AppBannerService> receiver_{this};
   mojo::Remote<blink::mojom::AppBannerEvent> event_;
   mojo::Remote<blink::mojom::AppBannerController> controller_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockAppBannerService);
 };
 
 IN_PROC_BROWSER_TEST_F(BackForwardCacheBrowserTest, DoesNotCacheIfAppBanner) {
@@ -11441,6 +11444,83 @@
                     {}, {}, {reason}, {}, FROM_HERE);
 }
 
+class BackForwardCacheBrowserTestWithMediaSessionPlaybackStateChangeSupported
+    : public BackForwardCacheBrowserTest {
+ protected:
+  void SetUpCommandLine(base::CommandLine* command_line) override {
+    EnableFeatureAndSetParams(kBackForwardCacheMediaSessionPlaybackStateChange,
+                              "", "");
+    BackForwardCacheBrowserTest::SetUpCommandLine(command_line);
+  }
+
+  void PlayVideoNavigateAndGoBack() {
+    MediaSession* media_session = MediaSession::Get(shell()->web_contents());
+    ASSERT_TRUE(media_session);
+
+    content::MediaStartStopObserver start_observer(
+        shell()->web_contents(), MediaStartStopObserver::Type::kStart);
+    EXPECT_TRUE(ExecJs(current_frame_host(),
+                       "document.querySelector('#long-video').play();"));
+    start_observer.Wait();
+
+    content::MediaStartStopObserver stop_observer(
+        shell()->web_contents(), MediaStartStopObserver::Type::kStop);
+    media_session->Suspend(MediaSession::SuspendType::kSystem);
+    stop_observer.Wait();
+
+    // Navigate away.
+    EXPECT_TRUE(NavigateToURL(
+        shell(), embedded_test_server()->GetURL("b.test", "/title1.html")));
+
+    // Go back.
+    web_contents()->GetController().GoBack();
+    EXPECT_TRUE(WaitForLoadStop(shell()->web_contents()));
+  }
+};
+
+IN_PROC_BROWSER_TEST_F(
+    BackForwardCacheBrowserTestWithMediaSessionPlaybackStateChangeSupported,
+    CacheWhenMediaSessionServiceIsNotUsed) {
+  ASSERT_TRUE(embedded_test_server()->Start());
+
+  // 1) Navigate to a page using MediaSession.
+  EXPECT_TRUE(NavigateToURL(
+      shell(), embedded_test_server()->GetURL(
+                   "a.test", "/media/session/media-session.html")));
+
+  // Play the media once, but without setting any callbacks to the MediaSession.
+  // In this case, a MediaSession service is not used.
+  PlayVideoNavigateAndGoBack();
+
+  // The page is restored since a MediaSession service is not used.
+  ExpectRestored(FROM_HERE);
+}
+
+IN_PROC_BROWSER_TEST_F(
+    BackForwardCacheBrowserTestWithMediaSessionPlaybackStateChangeSupported,
+    DontCacheWhenMediaSessionServiceIsUsed) {
+  ASSERT_TRUE(embedded_test_server()->Start());
+
+  // Navigate to a page using MediaSession.
+  EXPECT_TRUE(NavigateToURL(
+      shell(), embedded_test_server()->GetURL(
+                   "a.test", "/media/session/media-session.html")));
+  RenderFrameHostWrapper rfh_a(current_frame_host());
+  // Register a callback explicitly to use a MediaSession service.
+  EXPECT_TRUE(ExecJs(rfh_a.get(), R"(
+    navigator.mediaSession.setActionHandler('play', () => {});
+  )"));
+
+  PlayVideoNavigateAndGoBack();
+
+  // The page is not restored since a MediaSession service is used.
+  auto reason = BackForwardCacheDisable::DisabledReason(
+      BackForwardCacheDisable::DisabledReasonId::kMediaSessionService);
+  ExpectNotRestored({BackForwardCacheMetrics::NotRestoredReason::
+                         kDisableForRenderFrameHostCalled},
+                    {}, {}, {reason}, {}, FROM_HERE);
+}
+
 // Test if the delegate doesn't support BFCache that the reason is
 // recorded correctly.
 IN_PROC_BROWSER_TEST_F(BackForwardCacheBrowserTest,
diff --git a/content/browser/background_fetch/background_fetch_cross_origin_filter.h b/content/browser/background_fetch/background_fetch_cross_origin_filter.h
index 20e14c2..823b168 100644
--- a/content/browser/background_fetch/background_fetch_cross_origin_filter.h
+++ b/content/browser/background_fetch/background_fetch_cross_origin_filter.h
@@ -22,6 +22,12 @@
  public:
   BackgroundFetchCrossOriginFilter(const url::Origin& source_origin,
                                    const BackgroundFetchRequestInfo& request);
+
+  BackgroundFetchCrossOriginFilter(const BackgroundFetchCrossOriginFilter&) =
+      delete;
+  BackgroundFetchCrossOriginFilter& operator=(
+      const BackgroundFetchCrossOriginFilter&) = delete;
+
   ~BackgroundFetchCrossOriginFilter();
 
   // Returns whether the Response object passed to the Service Worker event
@@ -45,8 +51,6 @@
 
   // Whether credentials were included for cross-origin requests.
   bool include_credentials_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(BackgroundFetchCrossOriginFilter);
 };
 
 }  // namespace content
diff --git a/content/browser/background_fetch/background_fetch_cross_origin_filter_unittest.cc b/content/browser/background_fetch/background_fetch_cross_origin_filter_unittest.cc
index 7c5e410..63a74dd1 100644
--- a/content/browser/background_fetch/background_fetch_cross_origin_filter_unittest.cc
+++ b/content/browser/background_fetch/background_fetch_cross_origin_filter_unittest.cc
@@ -28,6 +28,12 @@
   BackgroundFetchCrossOriginFilterTest()
       : task_environment_(BrowserTaskEnvironment::REAL_IO_THREAD),
         source_(url::Origin::Create(GURL(kFirstOrigin))) {}
+
+  BackgroundFetchCrossOriginFilterTest(
+      const BackgroundFetchCrossOriginFilterTest&) = delete;
+  BackgroundFetchCrossOriginFilterTest& operator=(
+      const BackgroundFetchCrossOriginFilterTest&) = delete;
+
   ~BackgroundFetchCrossOriginFilterTest() override = default;
 
   // Creates a BackgroundFetchRequestInfo instance filled with the information
@@ -61,9 +67,6 @@
   BrowserTaskEnvironment task_environment_;  // Must be first member.
 
   url::Origin source_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(BackgroundFetchCrossOriginFilterTest);
 };
 
 TEST_F(BackgroundFetchCrossOriginFilterTest, SameOrigin) {
diff --git a/content/browser/background_fetch/background_fetch_data_manager.h b/content/browser/background_fetch/background_fetch_data_manager.h
index b2d3ea0..0df970c 100644
--- a/content/browser/background_fetch/background_fetch_data_manager.h
+++ b/content/browser/background_fetch/background_fetch_data_manager.h
@@ -87,6 +87,10 @@
       scoped_refptr<ServiceWorkerContextWrapper> service_worker_context,
       scoped_refptr<storage::QuotaManagerProxy> quota_manager_proxy);
 
+  BackgroundFetchDataManager(const BackgroundFetchDataManager&) = delete;
+  BackgroundFetchDataManager& operator=(const BackgroundFetchDataManager&) =
+      delete;
+
   ~BackgroundFetchDataManager() override;
 
   // Grabs a reference to CacheStorageManager.
@@ -273,8 +277,6 @@
   SEQUENCE_CHECKER(sequence_checker_);
 
   base::WeakPtrFactory<BackgroundFetchDataManager> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(BackgroundFetchDataManager);
 };
 
 }  // namespace content
diff --git a/content/browser/background_fetch/background_fetch_delegate_proxy.h b/content/browser/background_fetch/background_fetch_delegate_proxy.h
index dadb632..8b963b6 100644
--- a/content/browser/background_fetch/background_fetch_delegate_proxy.h
+++ b/content/browser/background_fetch/background_fetch_delegate_proxy.h
@@ -80,6 +80,10 @@
   explicit BackgroundFetchDelegateProxy(
       base::WeakPtr<StoragePartitionImpl> storage_partition);
 
+  BackgroundFetchDelegateProxy(const BackgroundFetchDelegateProxy&) = delete;
+  BackgroundFetchDelegateProxy& operator=(const BackgroundFetchDelegateProxy&) =
+      delete;
+
   ~BackgroundFetchDelegateProxy() override;
 
   // Set BackgroundFetchClick event dispatcher callback, which is a method on
@@ -179,8 +183,6 @@
   SEQUENCE_CHECKER(sequence_checker_);
 
   base::WeakPtrFactory<BackgroundFetchDelegateProxy> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(BackgroundFetchDelegateProxy);
 };
 
 }  // namespace content
diff --git a/content/browser/background_fetch/background_fetch_event_dispatcher.h b/content/browser/background_fetch/background_fetch_event_dispatcher.h
index 0815126..0c38577 100644
--- a/content/browser/background_fetch/background_fetch_event_dispatcher.h
+++ b/content/browser/background_fetch/background_fetch_event_dispatcher.h
@@ -41,6 +41,12 @@
       BackgroundFetchContext* background_fetch_context,
       scoped_refptr<ServiceWorkerContextWrapper> service_worker_context,
       DevToolsBackgroundServicesContextImpl* devtools_context);
+
+  BackgroundFetchEventDispatcher(const BackgroundFetchEventDispatcher&) =
+      delete;
+  BackgroundFetchEventDispatcher& operator=(
+      const BackgroundFetchEventDispatcher&) = delete;
+
   ~BackgroundFetchEventDispatcher();
 
   // Dispatches one of the update, fail, or success events depending on the
@@ -151,8 +157,6 @@
 
   // Owned by BackgroundFetchContext.
   DevToolsBackgroundServicesContextImpl* devtools_context_;
-
-  DISALLOW_COPY_AND_ASSIGN(BackgroundFetchEventDispatcher);
 };
 
 }  // namespace content
diff --git a/content/browser/background_fetch/background_fetch_event_dispatcher_unittest.cc b/content/browser/background_fetch/background_fetch_event_dispatcher_unittest.cc
index aed59242..90967fc 100644
--- a/content/browser/background_fetch/background_fetch_event_dispatcher_unittest.cc
+++ b/content/browser/background_fetch/background_fetch_event_dispatcher_unittest.cc
@@ -30,6 +30,12 @@
 class BackgroundFetchEventDispatcherTest : public BackgroundFetchTestBase {
  public:
   BackgroundFetchEventDispatcherTest() = default;
+
+  BackgroundFetchEventDispatcherTest(
+      const BackgroundFetchEventDispatcherTest&) = delete;
+  BackgroundFetchEventDispatcherTest& operator=(
+      const BackgroundFetchEventDispatcherTest&) = delete;
+
   ~BackgroundFetchEventDispatcherTest() override = default;
 
   void SetUp() override {
@@ -45,8 +51,6 @@
  protected:
   std::unique_ptr<BackgroundFetchEventDispatcher> event_dispatcher_;
   base::HistogramTester histogram_tester_;
-
-  DISALLOW_COPY_AND_ASSIGN(BackgroundFetchEventDispatcherTest);
 };
 
 TEST_F(BackgroundFetchEventDispatcherTest, DispatchInvalidRegistration) {
diff --git a/content/browser/background_fetch/background_fetch_job_controller.h b/content/browser/background_fetch/background_fetch_job_controller.h
index f0a8ca6f..3f4cd3a 100644
--- a/content/browser/background_fetch/background_fetch_job_controller.h
+++ b/content/browser/background_fetch/background_fetch_job_controller.h
@@ -67,6 +67,11 @@
       uint64_t upload_total,
       ProgressCallback progress_callback,
       FinishedCallback finished_callback);
+
+  BackgroundFetchJobController(const BackgroundFetchJobController&) = delete;
+  BackgroundFetchJobController& operator=(const BackgroundFetchJobController&) =
+      delete;
+
   ~BackgroundFetchJobController() override;
 
   // Initializes the job controller with the status of the active and completed
@@ -217,8 +222,6 @@
   FinishedCallback finished_callback_;
 
   base::WeakPtrFactory<BackgroundFetchJobController> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(BackgroundFetchJobController);
 };
 
 }  // namespace content
diff --git a/content/browser/background_fetch/background_fetch_job_controller_unittest.cc b/content/browser/background_fetch/background_fetch_job_controller_unittest.cc
index 1c8b9451..13c0085 100644
--- a/content/browser/background_fetch/background_fetch_job_controller_unittest.cc
+++ b/content/browser/background_fetch/background_fetch_job_controller_unittest.cc
@@ -54,6 +54,12 @@
 class BackgroundFetchJobControllerTest : public BackgroundFetchTestBase {
  public:
   BackgroundFetchJobControllerTest() = default;
+
+  BackgroundFetchJobControllerTest(const BackgroundFetchJobControllerTest&) =
+      delete;
+  BackgroundFetchJobControllerTest& operator=(
+      const BackgroundFetchJobControllerTest&) = delete;
+
   ~BackgroundFetchJobControllerTest() override = default;
 
   // Returns the status for the active job for |registration_id|. The
@@ -236,8 +242,6 @@
     finished_requests_[registration_id] = reason_to_abort;
     pending_requests_counts_.erase(iter);
   }
-
-  DISALLOW_COPY_AND_ASSIGN(BackgroundFetchJobControllerTest);
 };
 
 TEST_F(BackgroundFetchJobControllerTest, SingleRequestJob) {
diff --git a/content/browser/background_fetch/background_fetch_registration_notifier.h b/content/browser/background_fetch/background_fetch_registration_notifier.h
index 1bb9a01..1a3bb8b 100644
--- a/content/browser/background_fetch/background_fetch_registration_notifier.h
+++ b/content/browser/background_fetch/background_fetch_registration_notifier.h
@@ -24,6 +24,12 @@
 class CONTENT_EXPORT BackgroundFetchRegistrationNotifier {
  public:
   BackgroundFetchRegistrationNotifier();
+
+  BackgroundFetchRegistrationNotifier(
+      const BackgroundFetchRegistrationNotifier&) = delete;
+  BackgroundFetchRegistrationNotifier& operator=(
+      const BackgroundFetchRegistrationNotifier&) = delete;
+
   ~BackgroundFetchRegistrationNotifier();
 
   // Registers the |observer| to be notified when fetches for the registration
@@ -82,8 +88,6 @@
   std::map<std::string, std::pair<int, int>> num_requests_and_updates_;
 
   base::WeakPtrFactory<BackgroundFetchRegistrationNotifier> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(BackgroundFetchRegistrationNotifier);
 };
 
 }  // namespace content
diff --git a/content/browser/background_fetch/background_fetch_registration_notifier_unittest.cc b/content/browser/background_fetch/background_fetch_registration_notifier_unittest.cc
index f9f07a9..3c204937 100644
--- a/content/browser/background_fetch/background_fetch_registration_notifier_unittest.cc
+++ b/content/browser/background_fetch/background_fetch_registration_notifier_unittest.cc
@@ -61,6 +61,10 @@
   };
 
   TestRegistrationObserver() = default;
+
+  TestRegistrationObserver(const TestRegistrationObserver&) = delete;
+  TestRegistrationObserver& operator=(const TestRegistrationObserver&) = delete;
+
   ~TestRegistrationObserver() override = default;
 
   // Closes the bindings associated with this observer.
@@ -110,8 +114,6 @@
   mojo::Receiver<blink::mojom::BackgroundFetchRegistrationObserver> receiver_{
       this};
   bool records_available_ = true;
-
-  DISALLOW_COPY_AND_ASSIGN(TestRegistrationObserver);
 };
 
 class BackgroundFetchRegistrationNotifierTest : public ::testing::Test {
@@ -119,6 +121,11 @@
   BackgroundFetchRegistrationNotifierTest()
       : notifier_(std::make_unique<BackgroundFetchRegistrationNotifier>()) {}
 
+  BackgroundFetchRegistrationNotifierTest(
+      const BackgroundFetchRegistrationNotifierTest&) = delete;
+  BackgroundFetchRegistrationNotifierTest& operator=(
+      const BackgroundFetchRegistrationNotifierTest&) = delete;
+
   ~BackgroundFetchRegistrationNotifierTest() override = default;
 
   // Notifies all observers for the |unique_id| of the made progress, and waits
@@ -151,9 +158,6 @@
   base::test::TaskEnvironment task_environment_;
 
   std::unique_ptr<BackgroundFetchRegistrationNotifier> notifier_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(BackgroundFetchRegistrationNotifierTest);
 };
 
 TEST_F(BackgroundFetchRegistrationNotifierTest, NotifySingleObserver) {
diff --git a/content/browser/background_fetch/background_fetch_registration_service_impl.h b/content/browser/background_fetch/background_fetch_registration_service_impl.h
index e5ea1db..485e255 100644
--- a/content/browser/background_fetch/background_fetch_registration_service_impl.h
+++ b/content/browser/background_fetch/background_fetch_registration_service_impl.h
@@ -35,6 +35,11 @@
       mojo::PendingRemote<blink::mojom::BackgroundFetchRegistrationObserver>
           observer) override;
 
+  BackgroundFetchRegistrationServiceImpl(
+      const BackgroundFetchRegistrationServiceImpl&) = delete;
+  BackgroundFetchRegistrationServiceImpl& operator=(
+      const BackgroundFetchRegistrationServiceImpl&) = delete;
+
   ~BackgroundFetchRegistrationServiceImpl() override;
 
  private:
@@ -48,8 +53,6 @@
   base::WeakPtr<BackgroundFetchContext> background_fetch_context_;
   mojo::Receiver<blink::mojom::BackgroundFetchRegistrationService> receiver_{
       this};
-
-  DISALLOW_COPY_AND_ASSIGN(BackgroundFetchRegistrationServiceImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/background_fetch/background_fetch_request_match_params.h b/content/browser/background_fetch/background_fetch_request_match_params.h
index 07a68ee..43150f68 100644
--- a/content/browser/background_fetch/background_fetch_request_match_params.h
+++ b/content/browser/background_fetch/background_fetch_request_match_params.h
@@ -17,6 +17,12 @@
       blink::mojom::FetchAPIRequestPtr request_to_match,
       blink::mojom::CacheQueryOptionsPtr cache_query_options,
       bool match_all);
+
+  BackgroundFetchRequestMatchParams(const BackgroundFetchRequestMatchParams&) =
+      delete;
+  BackgroundFetchRequestMatchParams& operator=(
+      const BackgroundFetchRequestMatchParams&) = delete;
+
   ~BackgroundFetchRequestMatchParams();
 
   bool FilterByRequest() const { return !request_to_match_.is_null(); }
@@ -50,8 +56,6 @@
 
   // Whether to return all matching responses from the cache storage.
   bool match_all_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(BackgroundFetchRequestMatchParams);
 };
 
 }  // namespace content
diff --git a/content/browser/background_fetch/background_fetch_scheduler.h b/content/browser/background_fetch/background_fetch_scheduler.h
index a2a9a37..d7c883e 100644
--- a/content/browser/background_fetch/background_fetch_scheduler.h
+++ b/content/browser/background_fetch/background_fetch_scheduler.h
@@ -48,6 +48,10 @@
       BackgroundFetchDelegateProxy* delegate_proxy,
       DevToolsBackgroundServicesContextImpl* devtools_context,
       scoped_refptr<ServiceWorkerContextWrapper> service_worker_context);
+
+  BackgroundFetchScheduler(const BackgroundFetchScheduler&) = delete;
+  BackgroundFetchScheduler& operator=(const BackgroundFetchScheduler&) = delete;
+
   ~BackgroundFetchScheduler() override;
 
   // Aborts the background fetch identified by |registration_id|.
@@ -201,8 +205,6 @@
   int num_running_downloads_ = 0;
 
   base::WeakPtrFactory<BackgroundFetchScheduler> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(BackgroundFetchScheduler);
 };
 
 }  // namespace content
diff --git a/content/browser/background_fetch/background_fetch_service_impl.h b/content/browser/background_fetch/background_fetch_service_impl.h
index 33c93dce..bbd88492 100644
--- a/content/browser/background_fetch/background_fetch_service_impl.h
+++ b/content/browser/background_fetch/background_fetch_service_impl.h
@@ -29,6 +29,11 @@
       scoped_refptr<BackgroundFetchContext> background_fetch_context,
       blink::StorageKey storage_key,
       RenderFrameHostImpl* rfh);
+
+  BackgroundFetchServiceImpl(const BackgroundFetchServiceImpl&) = delete;
+  BackgroundFetchServiceImpl& operator=(const BackgroundFetchServiceImpl&) =
+      delete;
+
   ~BackgroundFetchServiceImpl() override;
 
   static void CreateForWorker(
@@ -74,8 +79,6 @@
   GlobalRenderFrameHostId rfh_id_;
 
   SEQUENCE_CHECKER(sequence_checker_);
-
-  DISALLOW_COPY_AND_ASSIGN(BackgroundFetchServiceImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/background_fetch/background_fetch_service_unittest.cc b/content/browser/background_fetch/background_fetch_service_unittest.cc
index 99384fa9..5f69f313 100644
--- a/content/browser/background_fetch/background_fetch_service_unittest.cc
+++ b/content/browser/background_fetch/background_fetch_service_unittest.cc
@@ -93,6 +93,11 @@
       public DevToolsBackgroundServicesContextImpl::EventObserver {
  public:
   BackgroundFetchServiceTest() = default;
+
+  BackgroundFetchServiceTest(const BackgroundFetchServiceTest&) = delete;
+  BackgroundFetchServiceTest& operator=(const BackgroundFetchServiceTest&) =
+      delete;
+
   ~BackgroundFetchServiceTest() override = default;
 
   class ScopedCustomBackgroundFetchService {
@@ -438,8 +443,6 @@
   std::unique_ptr<content::WebContents> web_contents_;
 
   std::unique_ptr<BackgroundFetchServiceImpl> service_;
-
-  DISALLOW_COPY_AND_ASSIGN(BackgroundFetchServiceTest);
 };
 
 TEST_F(BackgroundFetchServiceTest, FetchInvalidArguments) {
diff --git a/content/browser/background_fetch/background_fetch_test_base.h b/content/browser/background_fetch/background_fetch_test_base.h
index 4f8a309f..6392ba4 100644
--- a/content/browser/background_fetch/background_fetch_test_base.h
+++ b/content/browser/background_fetch/background_fetch_test_base.h
@@ -35,6 +35,10 @@
   using TestResponseBuilder = MockBackgroundFetchDelegate::TestResponseBuilder;
 
   BackgroundFetchTestBase();
+
+  BackgroundFetchTestBase(const BackgroundFetchTestBase&) = delete;
+  BackgroundFetchTestBase& operator=(const BackgroundFetchTestBase&) = delete;
+
   ~BackgroundFetchTestBase() override;
 
   // ::testing::Test overrides.
@@ -111,8 +115,6 @@
 
   bool set_up_called_ = false;
   bool tear_down_called_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(BackgroundFetchTestBase);
 };
 
 }  // namespace content
diff --git a/content/browser/background_fetch/background_fetch_test_data_manager.h b/content/browser/background_fetch/background_fetch_test_data_manager.h
index 9c20479..ca25203 100644
--- a/content/browser/background_fetch/background_fetch_test_data_manager.h
+++ b/content/browser/background_fetch/background_fetch_test_data_manager.h
@@ -35,6 +35,11 @@
       base::WeakPtr<StoragePartitionImpl> storage_partition,
       scoped_refptr<ServiceWorkerContextWrapper> service_worker_context);
 
+  BackgroundFetchTestDataManager(const BackgroundFetchTestDataManager&) =
+      delete;
+  BackgroundFetchTestDataManager& operator=(
+      const BackgroundFetchTestDataManager&) = delete;
+
   ~BackgroundFetchTestDataManager() override;
 
   void Initialize() override;
@@ -46,8 +51,6 @@
   BrowserContext* browser_context_;
   base::WeakPtr<StoragePartition> storage_partition_;
   scoped_refptr<ChromeBlobStorageContext> blob_storage_context_;
-
-  DISALLOW_COPY_AND_ASSIGN(BackgroundFetchTestDataManager);
 };
 
 }  // namespace content
diff --git a/content/browser/background_fetch/background_fetch_test_service_worker.h b/content/browser/background_fetch/background_fetch_test_service_worker.h
index 9f3302b..bc7f7807 100644
--- a/content/browser/background_fetch/background_fetch_test_service_worker.h
+++ b/content/browser/background_fetch/background_fetch_test_service_worker.h
@@ -21,6 +21,12 @@
 class BackgroundFetchTestServiceWorker : public FakeServiceWorker {
  public:
   explicit BackgroundFetchTestServiceWorker(EmbeddedWorkerTestHelper* helper);
+
+  BackgroundFetchTestServiceWorker(const BackgroundFetchTestServiceWorker&) =
+      delete;
+  BackgroundFetchTestServiceWorker& operator=(
+      const BackgroundFetchTestServiceWorker&) = delete;
+
   ~BackgroundFetchTestServiceWorker() override;
 
   // Toggles whether the named Service Worker event should fail.
@@ -89,8 +95,6 @@
   base::OnceClosure fetched_event_closure_;
 
   blink::mojom::BackgroundFetchRegistrationPtr last_registration_;
-
-  DISALLOW_COPY_AND_ASSIGN(BackgroundFetchTestServiceWorker);
 };
 
 }  // namespace content
diff --git a/content/browser/background_fetch/mock_background_fetch_delegate.h b/content/browser/background_fetch/mock_background_fetch_delegate.h
index 6e2fa9a..7aab760 100644
--- a/content/browser/background_fetch/mock_background_fetch_delegate.h
+++ b/content/browser/background_fetch/mock_background_fetch_delegate.h
@@ -29,15 +29,16 @@
   // created by the builder, which also defines the ownership semantics.
   struct TestResponse {
     TestResponse();
+
+    TestResponse(const TestResponse&) = delete;
+    TestResponse& operator=(const TestResponse&) = delete;
+
     ~TestResponse();
 
     bool succeeded = false;
     bool pending = false;
     scoped_refptr<net::HttpResponseHeaders> headers;
     std::string data;
-
-   private:
-    DISALLOW_COPY_AND_ASSIGN(TestResponse);
   };
 
   // Builder for creating a TestResponse object with the given data.
@@ -46,6 +47,10 @@
   class TestResponseBuilder {
    public:
     explicit TestResponseBuilder(int response_code);
+
+    TestResponseBuilder(const TestResponseBuilder&) = delete;
+    TestResponseBuilder& operator=(const TestResponseBuilder&) = delete;
+
     ~TestResponseBuilder();
 
     TestResponseBuilder& AddResponseHeader(const std::string& name,
@@ -60,8 +65,6 @@
 
    private:
     std::unique_ptr<TestResponse> response_;
-
-    DISALLOW_COPY_AND_ASSIGN(TestResponseBuilder);
   };
 
   MockBackgroundFetchDelegate();
diff --git a/content/browser/background_fetch/storage/cleanup_task.h b/content/browser/background_fetch/storage/cleanup_task.h
index 37d5665c..07ba8f2 100644
--- a/content/browser/background_fetch/storage/cleanup_task.h
+++ b/content/browser/background_fetch/storage/cleanup_task.h
@@ -20,6 +20,9 @@
  public:
   explicit CleanupTask(DatabaseTaskHost* host);
 
+  CleanupTask(const CleanupTask&) = delete;
+  CleanupTask& operator=(const CleanupTask&) = delete;
+
   ~CleanupTask() override;
 
   void Start() override;
@@ -39,8 +42,6 @@
   std::string HistogramName() const override;
 
   base::WeakPtrFactory<CleanupTask> weak_factory_{this};  // Keep as last.
-
-  DISALLOW_COPY_AND_ASSIGN(CleanupTask);
 };
 
 }  // namespace background_fetch
diff --git a/content/browser/background_fetch/storage/create_metadata_task.h b/content/browser/background_fetch/storage/create_metadata_task.h
index dc7b919..9b4e7aae 100644
--- a/content/browser/background_fetch/storage/create_metadata_task.h
+++ b/content/browser/background_fetch/storage/create_metadata_task.h
@@ -34,6 +34,9 @@
                      bool start_paused,
                      CreateMetadataCallback callback);
 
+  CreateMetadataTask(const CreateMetadataTask&) = delete;
+  CreateMetadataTask& operator=(const CreateMetadataTask&) = delete;
+
   ~CreateMetadataTask() override;
 
   void Start() override;
@@ -78,8 +81,6 @@
 
   base::WeakPtrFactory<CreateMetadataTask> weak_factory_{
       this};  // Keep as last.
-
-  DISALLOW_COPY_AND_ASSIGN(CreateMetadataTask);
 };
 
 }  // namespace background_fetch
diff --git a/content/browser/background_fetch/storage/database_task.h b/content/browser/background_fetch/storage/database_task.h
index 1fe6708f..74a87d5 100644
--- a/content/browser/background_fetch/storage/database_task.h
+++ b/content/browser/background_fetch/storage/database_task.h
@@ -72,6 +72,9 @@
   using StorageVersionCallback =
       base::OnceCallback<void(proto::BackgroundFetchStorageVersion)>;
 
+  DatabaseTask(const DatabaseTask&) = delete;
+  DatabaseTask& operator=(const DatabaseTask&) = delete;
+
   ~DatabaseTask() override;
 
   virtual void Start() = 0;
@@ -175,8 +178,6 @@
       cache_storage_cache_remote_;
 
   base::WeakPtrFactory<DatabaseTask> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(DatabaseTask);
 };
 
 }  // namespace background_fetch
diff --git a/content/browser/background_fetch/storage/delete_registration_task.h b/content/browser/background_fetch/storage/delete_registration_task.h
index ef01a52..5892485 100644
--- a/content/browser/background_fetch/storage/delete_registration_task.h
+++ b/content/browser/background_fetch/storage/delete_registration_task.h
@@ -25,6 +25,9 @@
                          const std::string& unique_id,
                          HandleBackgroundFetchErrorCallback callback);
 
+  DeleteRegistrationTask(const DeleteRegistrationTask&) = delete;
+  DeleteRegistrationTask& operator=(const DeleteRegistrationTask&) = delete;
+
   ~DeleteRegistrationTask() override;
 
   void Start() override;
@@ -52,8 +55,6 @@
 
   base::WeakPtrFactory<DeleteRegistrationTask> weak_factory_{
       this};  // Keep as last.
-
-  DISALLOW_COPY_AND_ASSIGN(DeleteRegistrationTask);
 };
 
 }  // namespace background_fetch
diff --git a/content/browser/background_fetch/storage/get_developer_ids_task.h b/content/browser/background_fetch/storage/get_developer_ids_task.h
index e273ecf..4469a9f 100644
--- a/content/browser/background_fetch/storage/get_developer_ids_task.h
+++ b/content/browser/background_fetch/storage/get_developer_ids_task.h
@@ -31,6 +31,9 @@
       const blink::StorageKey& storage_key,
       blink::mojom::BackgroundFetchService::GetDeveloperIdsCallback callback);
 
+  GetDeveloperIdsTask(const GetDeveloperIdsTask&) = delete;
+  GetDeveloperIdsTask& operator=(const GetDeveloperIdsTask&) = delete;
+
   ~GetDeveloperIdsTask() override;
 
   // DatabaseTask implementation:
@@ -57,8 +60,6 @@
 
   base::WeakPtrFactory<GetDeveloperIdsTask> weak_factory_{
       this};  // Keep as last.
-
-  DISALLOW_COPY_AND_ASSIGN(GetDeveloperIdsTask);
 };
 
 }  // namespace background_fetch
diff --git a/content/browser/background_fetch/storage/get_initialization_data_task.cc b/content/browser/background_fetch/storage/get_initialization_data_task.cc
index cb2845c..a27bad5 100644
--- a/content/browser/background_fetch/storage/get_initialization_data_task.cc
+++ b/content/browser/background_fetch/storage/get_initialization_data_task.cc
@@ -53,6 +53,9 @@
     DCHECK(sub_task_init_.initialization_data);
   }
 
+  InitializationSubTask(const InitializationSubTask&) = delete;
+  InitializationSubTask& operator=(const InitializationSubTask&) = delete;
+
   ~InitializationSubTask() override = default;
 
  protected:
@@ -68,8 +71,6 @@
  private:
   SubTaskInit sub_task_init_;
   base::OnceClosure done_closure_;
-
-  DISALLOW_COPY_AND_ASSIGN(InitializationSubTask);
 };
 
 // Fills the BackgroundFetchInitializationData with the most recent UI title.
@@ -147,6 +148,9 @@
                   base::OnceClosure done_closure)
       : InitializationSubTask(host, sub_task_init, std::move(done_closure)) {}
 
+  GetRequestsTask(const GetRequestsTask&) = delete;
+  GetRequestsTask& operator=(const GetRequestsTask&) = delete;
+
   ~GetRequestsTask() override = default;
 
   void Start() override {
@@ -275,8 +279,6 @@
   }
 
   base::WeakPtrFactory<GetRequestsTask> weak_factory_{this};  // Keep as last.
-
-  DISALLOW_COPY_AND_ASSIGN(GetRequestsTask);
 };
 
 // Fills the BackgroundFetchInitializationData with all the relevant information
@@ -288,6 +290,9 @@
                        base::OnceClosure done_closure)
       : InitializationSubTask(host, sub_task_init, std::move(done_closure)) {}
 
+  FillFromMetadataTask(const FillFromMetadataTask&) = delete;
+  FillFromMetadataTask& operator=(const FillFromMetadataTask&) = delete;
+
   ~FillFromMetadataTask() override = default;
 
   void Start() override {
@@ -377,8 +382,6 @@
 
   base::WeakPtrFactory<FillFromMetadataTask> weak_factory_{
       this};  // Keep as last.
-
-  DISALLOW_COPY_AND_ASSIGN(FillFromMetadataTask);
 };
 
 // Asynchronously calls the SubTasks required to collect all the information for
@@ -390,6 +393,11 @@
                                             base::OnceClosure done_closure)
       : InitializationSubTask(host, sub_task_init, std::move(done_closure)) {}
 
+  FillBackgroundFetchInitializationDataTask(
+      const FillBackgroundFetchInitializationDataTask&) = delete;
+  FillBackgroundFetchInitializationDataTask& operator=(
+      const FillBackgroundFetchInitializationDataTask&) = delete;
+
   ~FillBackgroundFetchInitializationDataTask() override = default;
 
   void Start() override {
@@ -417,8 +425,6 @@
  private:
   base::WeakPtrFactory<FillBackgroundFetchInitializationDataTask> weak_factory_{
       this};  // Keep as last.
-
-  DISALLOW_COPY_AND_ASSIGN(FillBackgroundFetchInitializationDataTask);
 };
 
 }  // namespace
diff --git a/content/browser/background_fetch/storage/get_initialization_data_task.h b/content/browser/background_fetch/storage/get_initialization_data_task.h
index 7051337..e164ae7 100644
--- a/content/browser/background_fetch/storage/get_initialization_data_task.h
+++ b/content/browser/background_fetch/storage/get_initialization_data_task.h
@@ -75,6 +75,10 @@
   GetInitializationDataTask(DatabaseTaskHost* host,
                             GetInitializationDataCallback callback);
 
+  GetInitializationDataTask(const GetInitializationDataTask&) = delete;
+  GetInitializationDataTask& operator=(const GetInitializationDataTask&) =
+      delete;
+
   ~GetInitializationDataTask() override;
 
   // DatabaseTask implementation:
@@ -96,8 +100,6 @@
 
   base::WeakPtrFactory<GetInitializationDataTask> weak_factory_{
       this};  // Keep as last.
-
-  DISALLOW_COPY_AND_ASSIGN(GetInitializationDataTask);
 };
 
 }  // namespace background_fetch
diff --git a/content/browser/background_fetch/storage/get_metadata_task.h b/content/browser/background_fetch/storage/get_metadata_task.h
index 63b69d1..2da8bda1 100644
--- a/content/browser/background_fetch/storage/get_metadata_task.h
+++ b/content/browser/background_fetch/storage/get_metadata_task.h
@@ -34,6 +34,9 @@
                   const std::string& developer_id,
                   GetMetadataCallback callback);
 
+  GetMetadataTask(const GetMetadataTask&) = delete;
+  GetMetadataTask& operator=(const GetMetadataTask&) = delete;
+
   ~GetMetadataTask() override;
 
   // DatabaseTask implementation:
@@ -59,8 +62,6 @@
   std::unique_ptr<proto::BackgroundFetchMetadata> metadata_proto_;
 
   base::WeakPtrFactory<GetMetadataTask> weak_factory_{this};  // Keep as last.
-
-  DISALLOW_COPY_AND_ASSIGN(GetMetadataTask);
 };
 
 }  // namespace background_fetch
diff --git a/content/browser/background_fetch/storage/get_registration_task.h b/content/browser/background_fetch/storage/get_registration_task.h
index adfaf0d..e5e1970 100644
--- a/content/browser/background_fetch/storage/get_registration_task.h
+++ b/content/browser/background_fetch/storage/get_registration_task.h
@@ -32,6 +32,9 @@
                       const std::string& developer_id,
                       GetRegistrationCallback callback);
 
+  GetRegistrationTask(const GetRegistrationTask&) = delete;
+  GetRegistrationTask& operator=(const GetRegistrationTask&) = delete;
+
   ~GetRegistrationTask() override;
 
   // DatabaseTask implementation:
@@ -56,8 +59,6 @@
 
   base::WeakPtrFactory<GetRegistrationTask> weak_factory_{
       this};  // Keep as last.
-
-  DISALLOW_COPY_AND_ASSIGN(GetRegistrationTask);
 };
 
 }  // namespace background_fetch
diff --git a/content/browser/background_fetch/storage/get_request_blob_task.h b/content/browser/background_fetch/storage/get_request_blob_task.h
index 70b1674..6f2c40bd 100644
--- a/content/browser/background_fetch/storage/get_request_blob_task.h
+++ b/content/browser/background_fetch/storage/get_request_blob_task.h
@@ -27,6 +27,9 @@
       const scoped_refptr<BackgroundFetchRequestInfo>& request_info,
       GetRequestBlobCallback callback);
 
+  GetRequestBlobTask(const GetRequestBlobTask&) = delete;
+  GetRequestBlobTask& operator=(const GetRequestBlobTask&) = delete;
+
   ~GetRequestBlobTask() override;
 
   // DatabaseTask implementation:
@@ -49,8 +52,6 @@
 
   base::WeakPtrFactory<GetRequestBlobTask> weak_factory_{
       this};  // Keep as last.
-
-  DISALLOW_COPY_AND_ASSIGN(GetRequestBlobTask);
 };
 
 }  // namespace background_fetch
diff --git a/content/browser/background_fetch/storage/mark_registration_for_deletion_task.h b/content/browser/background_fetch/storage/mark_registration_for_deletion_task.h
index 6762e5b..d8bfcb37 100644
--- a/content/browser/background_fetch/storage/mark_registration_for_deletion_task.h
+++ b/content/browser/background_fetch/storage/mark_registration_for_deletion_task.h
@@ -29,6 +29,11 @@
       bool check_for_failure,
       MarkRegistrationForDeletionCallback callback);
 
+  MarkRegistrationForDeletionTask(const MarkRegistrationForDeletionTask&) =
+      delete;
+  MarkRegistrationForDeletionTask& operator=(
+      const MarkRegistrationForDeletionTask&) = delete;
+
   ~MarkRegistrationForDeletionTask() override;
 
   void Start() override;
@@ -55,8 +60,6 @@
 
   base::WeakPtrFactory<MarkRegistrationForDeletionTask> weak_factory_{
       this};  // Keep as last.
-
-  DISALLOW_COPY_AND_ASSIGN(MarkRegistrationForDeletionTask);
 };
 
 }  // namespace background_fetch
diff --git a/content/browser/background_fetch/storage/mark_request_complete_task.h b/content/browser/background_fetch/storage/mark_request_complete_task.h
index 88e1b60..504b6f3 100644
--- a/content/browser/background_fetch/storage/mark_request_complete_task.h
+++ b/content/browser/background_fetch/storage/mark_request_complete_task.h
@@ -28,6 +28,9 @@
       scoped_refptr<BackgroundFetchRequestInfo> request_info,
       MarkRequestCompleteCallback callback);
 
+  MarkRequestCompleteTask(const MarkRequestCompleteTask&) = delete;
+  MarkRequestCompleteTask& operator=(const MarkRequestCompleteTask&) = delete;
+
   ~MarkRequestCompleteTask() override;
 
   // DatabaseTask implementation:
@@ -81,8 +84,6 @@
 
   base::WeakPtrFactory<MarkRequestCompleteTask> weak_factory_{
       this};  // Keep as last.
-
-  DISALLOW_COPY_AND_ASSIGN(MarkRequestCompleteTask);
 };
 
 }  // namespace background_fetch
diff --git a/content/browser/background_fetch/storage/match_requests_task.h b/content/browser/background_fetch/storage/match_requests_task.h
index 0c3f9e1..7f3b12a 100644
--- a/content/browser/background_fetch/storage/match_requests_task.h
+++ b/content/browser/background_fetch/storage/match_requests_task.h
@@ -35,6 +35,9 @@
       std::unique_ptr<BackgroundFetchRequestMatchParams> match_params,
       SettledFetchesCallback callback);
 
+  MatchRequestsTask(const MatchRequestsTask&) = delete;
+  MatchRequestsTask& operator=(const MatchRequestsTask&) = delete;
+
   ~MatchRequestsTask() override;
 
   // DatabaseTask implementation:
@@ -60,8 +63,6 @@
   std::vector<blink::mojom::BackgroundFetchSettledFetchPtr> settled_fetches_;
 
   base::WeakPtrFactory<MatchRequestsTask> weak_factory_{this};  // Keep as last.
-
-  DISALLOW_COPY_AND_ASSIGN(MatchRequestsTask);
 };
 
 }  // namespace background_fetch
diff --git a/content/browser/background_fetch/storage/start_next_pending_request_task.h b/content/browser/background_fetch/storage/start_next_pending_request_task.h
index 5bd780a..08f0182 100644
--- a/content/browser/background_fetch/storage/start_next_pending_request_task.h
+++ b/content/browser/background_fetch/storage/start_next_pending_request_task.h
@@ -28,6 +28,10 @@
       const BackgroundFetchRegistrationId& registration_id,
       NextRequestCallback callback);
 
+  StartNextPendingRequestTask(const StartNextPendingRequestTask&) = delete;
+  StartNextPendingRequestTask& operator=(const StartNextPendingRequestTask&) =
+      delete;
+
   ~StartNextPendingRequestTask() override;
 
   // DatabaseTask implementation:
@@ -62,8 +66,6 @@
 
   base::WeakPtrFactory<StartNextPendingRequestTask> weak_factory_{
       this};  // Keep as last.
-
-  DISALLOW_COPY_AND_ASSIGN(StartNextPendingRequestTask);
 };
 
 }  // namespace background_fetch
diff --git a/content/browser/background_sync/background_sync_manager.h b/content/browser/background_sync/background_sync_manager.h
index 3e72d15..c20c457 100644
--- a/content/browser/background_sync/background_sync_manager.h
+++ b/content/browser/background_sync/background_sync_manager.h
@@ -75,6 +75,10 @@
   static std::unique_ptr<BackgroundSyncManager> Create(
       scoped_refptr<ServiceWorkerContextWrapper> service_worker_context,
       scoped_refptr<DevToolsBackgroundServicesContextImpl> devtools_context);
+
+  BackgroundSyncManager(const BackgroundSyncManager&) = delete;
+  BackgroundSyncManager& operator=(const BackgroundSyncManager&) = delete;
+
   ~BackgroundSyncManager() override;
 
   // Stores the given background sync registration and adds it to the scheduling
@@ -506,8 +510,6 @@
   SEQUENCE_CHECKER(sequence_checker_);
 
   base::WeakPtrFactory<BackgroundSyncManager> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(BackgroundSyncManager);
 };
 
 }  // namespace content
diff --git a/content/browser/background_sync/background_sync_metrics_unittest.cc b/content/browser/background_sync/background_sync_metrics_unittest.cc
index a35a915..3f99d3b9 100644
--- a/content/browser/background_sync/background_sync_metrics_unittest.cc
+++ b/content/browser/background_sync/background_sync_metrics_unittest.cc
@@ -15,12 +15,15 @@
 class BackgroundSyncMetricsTest : public ::testing::Test {
  public:
   BackgroundSyncMetricsTest() = default;
+
+  BackgroundSyncMetricsTest(const BackgroundSyncMetricsTest&) = delete;
+  BackgroundSyncMetricsTest& operator=(const BackgroundSyncMetricsTest&) =
+      delete;
+
   ~BackgroundSyncMetricsTest() override = default;
 
  protected:
   base::HistogramTester histogram_tester_;
-
-  DISALLOW_COPY_AND_ASSIGN(BackgroundSyncMetricsTest);
 };
 
 TEST_F(BackgroundSyncMetricsTest, RecordEventStarted) {
diff --git a/content/browser/background_sync/background_sync_network_observer.h b/content/browser/background_sync/background_sync_network_observer.h
index 7f2cb1f..f405c1d 100644
--- a/content/browser/background_sync/background_sync_network_observer.h
+++ b/content/browser/background_sync/background_sync_network_observer.h
@@ -23,6 +23,10 @@
   BackgroundSyncNetworkObserver(
       base::RepeatingClosure network_changed_callback);
 
+  BackgroundSyncNetworkObserver(const BackgroundSyncNetworkObserver&) = delete;
+  BackgroundSyncNetworkObserver& operator=(
+      const BackgroundSyncNetworkObserver&) = delete;
+
   ~BackgroundSyncNetworkObserver() override;
 
   // Does nothing in this class, but can be overridden to do some work
@@ -74,8 +78,6 @@
   SEQUENCE_CHECKER(sequence_checker_);
 
   base::WeakPtrFactory<BackgroundSyncNetworkObserver> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(BackgroundSyncNetworkObserver);
 };
 
 }  // namespace content
diff --git a/content/browser/background_sync/background_sync_op_scheduler.h b/content/browser/background_sync/background_sync_op_scheduler.h
index c2c703d..f5233c6 100644
--- a/content/browser/background_sync/background_sync_op_scheduler.h
+++ b/content/browser/background_sync/background_sync_op_scheduler.h
@@ -26,6 +26,11 @@
  public:
   explicit BackgroundSyncOpScheduler(
       scoped_refptr<base::SequencedTaskRunner> task_runner);
+
+  BackgroundSyncOpScheduler(const BackgroundSyncOpScheduler&) = delete;
+  BackgroundSyncOpScheduler& operator=(const BackgroundSyncOpScheduler&) =
+      delete;
+
   virtual ~BackgroundSyncOpScheduler();
 
   // Adds the operation to the tail of the queue and starts it if possible.
@@ -80,8 +85,6 @@
 
   SEQUENCE_CHECKER(sequence_checker_);
   base::WeakPtrFactory<BackgroundSyncOpScheduler> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(BackgroundSyncOpScheduler);
 };
 
 }  // namespace content
diff --git a/content/browser/background_sync/background_sync_proxy.h b/content/browser/background_sync/background_sync_proxy.h
index 500fb813..ecbd8ba 100644
--- a/content/browser/background_sync/background_sync_proxy.h
+++ b/content/browser/background_sync/background_sync_proxy.h
@@ -32,6 +32,10 @@
  public:
   explicit BackgroundSyncProxy(
       scoped_refptr<ServiceWorkerContextWrapper> service_worker_context);
+
+  BackgroundSyncProxy(const BackgroundSyncProxy&) = delete;
+  BackgroundSyncProxy& operator=(const BackgroundSyncProxy&) = delete;
+
   virtual ~BackgroundSyncProxy();
 
   virtual void ScheduleDelayedProcessing(
@@ -51,8 +55,6 @@
 
   SEQUENCE_CHECKER(sequence_checker_);
   scoped_refptr<ServiceWorkerContextWrapper> service_worker_context_;
-
-  DISALLOW_COPY_AND_ASSIGN(BackgroundSyncProxy);
 };
 
 }  // namespace content
diff --git a/content/browser/background_sync/background_sync_registration_helper.h b/content/browser/background_sync/background_sync_registration_helper.h
index 8c45095..e0f9d6e 100644
--- a/content/browser/background_sync/background_sync_registration_helper.h
+++ b/content/browser/background_sync/background_sync_registration_helper.h
@@ -31,6 +31,12 @@
 
   explicit BackgroundSyncRegistrationHelper(
       BackgroundSyncContextImpl* background_sync_context);
+
+  BackgroundSyncRegistrationHelper(const BackgroundSyncRegistrationHelper&) =
+      delete;
+  BackgroundSyncRegistrationHelper& operator=(
+      const BackgroundSyncRegistrationHelper&) = delete;
+
   ~BackgroundSyncRegistrationHelper();
 
   void Register(blink::mojom::SyncRegistrationOptionsPtr options,
@@ -55,8 +61,6 @@
   BackgroundSyncContextImpl* const background_sync_context_;
   base::WeakPtrFactory<BackgroundSyncRegistrationHelper> weak_ptr_factory_{
       this};
-
-  DISALLOW_COPY_AND_ASSIGN(BackgroundSyncRegistrationHelper);
 };
 
 }  // namespace content
diff --git a/content/browser/background_sync/background_sync_service_impl_test_harness.h b/content/browser/background_sync/background_sync_service_impl_test_harness.h
index b4c2d90..3739f88d 100644
--- a/content/browser/background_sync/background_sync_service_impl_test_harness.h
+++ b/content/browser/background_sync/background_sync_service_impl_test_harness.h
@@ -50,6 +50,12 @@
                             blink::mojom::BackgroundSyncError error);
 
   BackgroundSyncServiceImplTestHarness();
+
+  BackgroundSyncServiceImplTestHarness(
+      const BackgroundSyncServiceImplTestHarness&) = delete;
+  BackgroundSyncServiceImplTestHarness& operator=(
+      const BackgroundSyncServiceImplTestHarness&) = delete;
+
   ~BackgroundSyncServiceImplTestHarness() override;
 
   void SetUp() override;
@@ -81,8 +87,6 @@
   std::unique_ptr<EmbeddedWorkerTestHelper> embedded_worker_helper_;
   std::unique_ptr<StoragePartitionImpl> storage_partition_impl_;
   scoped_refptr<ServiceWorkerRegistration> sw_registration_;
-
-  DISALLOW_COPY_AND_ASSIGN(BackgroundSyncServiceImplTestHarness);
 };
 
 }  // namespace content
diff --git a/content/browser/background_sync/one_shot_background_sync_browsertest.cc b/content/browser/background_sync/one_shot_background_sync_browsertest.cc
index d31ef2e..eb8c9b68 100644
--- a/content/browser/background_sync/one_shot_background_sync_browsertest.cc
+++ b/content/browser/background_sync/one_shot_background_sync_browsertest.cc
@@ -34,6 +34,12 @@
 class OneShotBackgroundSyncBrowserTest : public BackgroundSyncBaseBrowserTest {
  public:
   OneShotBackgroundSyncBrowserTest() {}
+
+  OneShotBackgroundSyncBrowserTest(const OneShotBackgroundSyncBrowserTest&) =
+      delete;
+  OneShotBackgroundSyncBrowserTest& operator=(
+      const OneShotBackgroundSyncBrowserTest&) = delete;
+
   ~OneShotBackgroundSyncBrowserTest() override {}
 
   bool Register(const std::string& tag);
@@ -47,9 +53,6 @@
   bool GetTags(const std::vector<std::string>& expected_tags);
   bool GetTagsFromServiceWorker(const std::vector<std::string>& expected_tags);
   bool RejectDelayedSyncEvent();
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(OneShotBackgroundSyncBrowserTest);
 };
 
 bool OneShotBackgroundSyncBrowserTest::Register(const std::string& tag) {
diff --git a/content/browser/background_sync/one_shot_background_sync_service_impl.h b/content/browser/background_sync/one_shot_background_sync_service_impl.h
index 854737fd..de50258 100644
--- a/content/browser/background_sync/one_shot_background_sync_service_impl.h
+++ b/content/browser/background_sync/one_shot_background_sync_service_impl.h
@@ -30,6 +30,11 @@
       mojo::PendingReceiver<blink::mojom::OneShotBackgroundSyncService>
           receiver);
 
+  OneShotBackgroundSyncServiceImpl(const OneShotBackgroundSyncServiceImpl&) =
+      delete;
+  OneShotBackgroundSyncServiceImpl& operator=(
+      const OneShotBackgroundSyncServiceImpl&) = delete;
+
   ~OneShotBackgroundSyncServiceImpl() override;
 
  private:
@@ -55,8 +60,6 @@
 
   base::WeakPtrFactory<blink::mojom::OneShotBackgroundSyncService>
       weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(OneShotBackgroundSyncServiceImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/background_sync/periodic_background_sync_browsertest.cc b/content/browser/background_sync/periodic_background_sync_browsertest.cc
index 53e73fa7..e0ddd2c 100644
--- a/content/browser/background_sync/periodic_background_sync_browsertest.cc
+++ b/content/browser/background_sync/periodic_background_sync_browsertest.cc
@@ -23,6 +23,12 @@
 class PeriodicBackgroundSyncBrowserTest : public BackgroundSyncBaseBrowserTest {
  public:
   PeriodicBackgroundSyncBrowserTest() {}
+
+  PeriodicBackgroundSyncBrowserTest(const PeriodicBackgroundSyncBrowserTest&) =
+      delete;
+  PeriodicBackgroundSyncBrowserTest& operator=(
+      const PeriodicBackgroundSyncBrowserTest&) = delete;
+
   ~PeriodicBackgroundSyncBrowserTest() override {}
 
   bool Register(const std::string& tag, int min_interval_ms);
@@ -39,9 +45,6 @@
 
  protected:
   base::SimpleTestClock clock_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(PeriodicBackgroundSyncBrowserTest);
 };
 
 bool PeriodicBackgroundSyncBrowserTest::Register(const std::string& tag,
diff --git a/content/browser/background_sync/periodic_background_sync_service_impl.h b/content/browser/background_sync/periodic_background_sync_service_impl.h
index 85eaaa0..534e6e0 100644
--- a/content/browser/background_sync/periodic_background_sync_service_impl.h
+++ b/content/browser/background_sync/periodic_background_sync_service_impl.h
@@ -32,6 +32,11 @@
       mojo::PendingReceiver<blink::mojom::PeriodicBackgroundSyncService>
           receiver);
 
+  PeriodicBackgroundSyncServiceImpl(const PeriodicBackgroundSyncServiceImpl&) =
+      delete;
+  PeriodicBackgroundSyncServiceImpl& operator=(
+      const PeriodicBackgroundSyncServiceImpl&) = delete;
+
   ~PeriodicBackgroundSyncServiceImpl() override;
 
  private:
@@ -61,8 +66,6 @@
 
   base::WeakPtrFactory<PeriodicBackgroundSyncServiceImpl> weak_ptr_factory_{
       this};
-
-  DISALLOW_COPY_AND_ASSIGN(PeriodicBackgroundSyncServiceImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/battery_monitor_browsertest.cc b/content/browser/battery_monitor_browsertest.cc
index b40d1c1a..3f70434 100644
--- a/content/browser/battery_monitor_browsertest.cc
+++ b/content/browser/battery_monitor_browsertest.cc
@@ -29,6 +29,10 @@
 class MockBatteryMonitor : public device::mojom::BatteryMonitor {
  public:
   MockBatteryMonitor() = default;
+
+  MockBatteryMonitor(const MockBatteryMonitor&) = delete;
+  MockBatteryMonitor& operator=(const MockBatteryMonitor&) = delete;
+
   ~MockBatteryMonitor() override = default;
 
   void Bind(mojo::PendingReceiver<device::mojom::BatteryMonitor> receiver) {
@@ -67,8 +71,6 @@
   device::mojom::BatteryStatus status_;
   bool status_to_report_ = false;
   mojo::Receiver<device::mojom::BatteryMonitor> receiver_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(MockBatteryMonitor);
 };
 
 class BatteryMonitorTest : public ContentBrowserTest {
@@ -83,6 +85,9 @@
                             base::Unretained(mock_battery_monitor_.get())));
   }
 
+  BatteryMonitorTest(const BatteryMonitorTest&) = delete;
+  BatteryMonitorTest& operator=(const BatteryMonitorTest&) = delete;
+
   ~BatteryMonitorTest() override {
     OverrideBatteryMonitorBinderForTesting(base::NullCallback());
   }
@@ -94,8 +99,6 @@
 
  private:
   std::unique_ptr<MockBatteryMonitor> mock_battery_monitor_;
-
-  DISALLOW_COPY_AND_ASSIGN(BatteryMonitorTest);
 };
 
 IN_PROC_BROWSER_TEST_F(BatteryMonitorTest, NavigatorGetBatteryInfo) {
diff --git a/content/browser/bluetooth/bluetooth_allowed_devices_map.h b/content/browser/bluetooth/bluetooth_allowed_devices_map.h
index a4fa569..1debac3f9ed 100644
--- a/content/browser/bluetooth/bluetooth_allowed_devices_map.h
+++ b/content/browser/bluetooth/bluetooth_allowed_devices_map.h
@@ -20,6 +20,11 @@
 class CONTENT_EXPORT BluetoothAllowedDevicesMap {
  public:
   BluetoothAllowedDevicesMap();
+
+  BluetoothAllowedDevicesMap(const BluetoothAllowedDevicesMap&) = delete;
+  BluetoothAllowedDevicesMap& operator=(const BluetoothAllowedDevicesMap&) =
+      delete;
+
   ~BluetoothAllowedDevicesMap();
 
   // Gets a BluetoothAllowedDevices for each origin; creates one if it doesn't
@@ -33,8 +38,6 @@
  private:
   std::map<url::Origin, content::BluetoothAllowedDevices>
       origin_to_allowed_devices_map_;
-
-  DISALLOW_COPY_AND_ASSIGN(BluetoothAllowedDevicesMap);
 };
 
 }  //  namespace content
diff --git a/content/browser/bluetooth/bluetooth_blocklist.h b/content/browser/bluetooth/bluetooth_blocklist.h
index 78db647..6ca3326 100644
--- a/content/browser/bluetooth/bluetooth_blocklist.h
+++ b/content/browser/bluetooth/bluetooth_blocklist.h
@@ -35,6 +35,9 @@
     EXCLUDE_WRITES  // Excluded from write operations.
   };
 
+  BluetoothBlocklist(const BluetoothBlocklist&) = delete;
+  BluetoothBlocklist& operator=(const BluetoothBlocklist&) = delete;
+
   ~BluetoothBlocklist();
 
   // Returns a singleton instance of the blocklist.
@@ -97,8 +100,6 @@
 
   // Map of UUID to blocklisted value.
   std::map<device::BluetoothUUID, Value> blocklisted_uuids_;
-
-  DISALLOW_COPY_AND_ASSIGN(BluetoothBlocklist);
 };
 
 }  // namespace content
diff --git a/content/browser/bluetooth/bluetooth_util_unittest.cc b/content/browser/bluetooth/bluetooth_util_unittest.cc
index a16b7ea..fa1d615f 100644
--- a/content/browser/bluetooth/bluetooth_util_unittest.cc
+++ b/content/browser/bluetooth/bluetooth_util_unittest.cc
@@ -37,10 +37,11 @@
 class BluetoothUtilTest : public testing::Test {
  public:
   BluetoothUtilTest() = default;
-  ~BluetoothUtilTest() override = default;
 
- private:
-  DISALLOW_COPY_AND_ASSIGN(BluetoothUtilTest);
+  BluetoothUtilTest(const BluetoothUtilTest&) = delete;
+  BluetoothUtilTest& operator=(const BluetoothUtilTest&) = delete;
+
+  ~BluetoothUtilTest() override = default;
 };
 
 TEST_F(BluetoothUtilTest, SameFilters) {
diff --git a/content/browser/bluetooth/frame_connected_bluetooth_devices.h b/content/browser/bluetooth/frame_connected_bluetooth_devices.h
index 8e9c210..8aae5b38 100644
--- a/content/browser/bluetooth/frame_connected_bluetooth_devices.h
+++ b/content/browser/bluetooth/frame_connected_bluetooth_devices.h
@@ -37,6 +37,12 @@
   // |rfh| should be the RenderFrameHost that owns the WebBluetoothServiceImpl
   // that owns this map.
   explicit FrameConnectedBluetoothDevices(RenderFrameHost* rfh);
+
+  FrameConnectedBluetoothDevices(const FrameConnectedBluetoothDevices&) =
+      delete;
+  FrameConnectedBluetoothDevices& operator=(
+      const FrameConnectedBluetoothDevices&) = delete;
+
   ~FrameConnectedBluetoothDevices();
 
   // Returns true if the map holds a connection to |device_id|.
@@ -86,8 +92,6 @@
   // Keeps track of which device addresses correspond to which ids.
   std::unordered_map<std::string, blink::WebBluetoothDeviceId>
       device_address_to_id_map_;
-
-  DISALLOW_COPY_AND_ASSIGN(FrameConnectedBluetoothDevices);
 };
 
 }  // namespace content
diff --git a/content/browser/bluetooth/web_bluetooth_service_impl.h b/content/browser/bluetooth/web_bluetooth_service_impl.h
index 8b42048efb..1c093a73 100644
--- a/content/browser/bluetooth/web_bluetooth_service_impl.h
+++ b/content/browser/bluetooth/web_bluetooth_service_impl.h
@@ -80,6 +80,10 @@
   WebBluetoothServiceImpl(
       RenderFrameHost* render_frame_host,
       mojo::PendingReceiver<blink::mojom::WebBluetoothService> receiver);
+
+  WebBluetoothServiceImpl(const WebBluetoothServiceImpl&) = delete;
+  WebBluetoothServiceImpl& operator=(const WebBluetoothServiceImpl&) = delete;
+
   ~WebBluetoothServiceImpl() override;
 
   void CrashRendererAndClosePipe(bad_message::BadMessageReason reason);
@@ -497,8 +501,6 @@
 
   WebBluetoothPairingManager pairing_manager_;
   base::WeakPtrFactory<WebBluetoothServiceImpl> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(WebBluetoothServiceImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/browser_main_loop.cc b/content/browser/browser_main_loop.cc
index d5ac86e..6bfc17c 100644
--- a/content/browser/browser_main_loop.cc
+++ b/content/browser/browser_main_loop.cc
@@ -397,6 +397,10 @@
 class OopDataDecoder : public data_decoder::ServiceProvider {
  public:
   OopDataDecoder() { data_decoder::ServiceProvider::Set(this); }
+
+  OopDataDecoder(const OopDataDecoder&) = delete;
+  OopDataDecoder& operator=(const OopDataDecoder&) = delete;
+
   ~OopDataDecoder() override { data_decoder::ServiceProvider::Set(nullptr); }
 
   // data_decoder::ServiceProvider implementation:
@@ -409,9 +413,6 @@
             .WithDisplayName("Data Decoder Service")
             .Pass());
   }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(OopDataDecoder);
 };
 
 void BindHidManager(mojo::PendingReceiver<device::mojom::HidManager> receiver) {
diff --git a/content/browser/browser_main_loop.h b/content/browser/browser_main_loop.h
index 5d41104a..2c13914 100644
--- a/content/browser/browser_main_loop.h
+++ b/content/browser/browser_main_loop.h
@@ -124,6 +124,10 @@
   explicit BrowserMainLoop(
       const MainFunctionParams& parameters,
       std::unique_ptr<base::ThreadPoolInstance::ScopedExecutionFence> fence);
+
+  BrowserMainLoop(const BrowserMainLoop&) = delete;
+  BrowserMainLoop& operator=(const BrowserMainLoop&) = delete;
+
   virtual ~BrowserMainLoop();
 
   void Init();
@@ -391,8 +395,6 @@
   std::unique_ptr<SmsProvider> sms_provider_;
 
   // DO NOT add members here. Add them to the right categories above.
-
-  DISALLOW_COPY_AND_ASSIGN(BrowserMainLoop);
 };
 
 }  // namespace content
diff --git a/content/browser/browser_main_runner_impl.h b/content/browser/browser_main_runner_impl.h
index ca198d8..5668a4cc 100644
--- a/content/browser/browser_main_runner_impl.h
+++ b/content/browser/browser_main_runner_impl.h
@@ -28,6 +28,10 @@
   static std::unique_ptr<BrowserMainRunnerImpl> Create();
 
   BrowserMainRunnerImpl();
+
+  BrowserMainRunnerImpl(const BrowserMainRunnerImpl&) = delete;
+  BrowserMainRunnerImpl& operator=(const BrowserMainRunnerImpl&) = delete;
+
   ~BrowserMainRunnerImpl() override;
 
   // BrowserMainRunner:
@@ -56,8 +60,6 @@
 #if defined(OS_WIN)
   std::unique_ptr<ui::ScopedOleInitializer> ole_initializer_;
 #endif
-
-  DISALLOW_COPY_AND_ASSIGN(BrowserMainRunnerImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/browser_plugin/browser_plugin_embedder.h b/content/browser/browser_plugin/browser_plugin_embedder.h
index bbd8ff2..cf5c30c 100644
--- a/content/browser/browser_plugin/browser_plugin_embedder.h
+++ b/content/browser/browser_plugin/browser_plugin_embedder.h
@@ -29,6 +29,9 @@
 // Perhaps "WebContentsEmbedderDelegate" would be better?
 class CONTENT_EXPORT BrowserPluginEmbedder {
  public:
+  BrowserPluginEmbedder(const BrowserPluginEmbedder&) = delete;
+  BrowserPluginEmbedder& operator=(const BrowserPluginEmbedder&) = delete;
+
   ~BrowserPluginEmbedder();
 
   static BrowserPluginEmbedder* Create(WebContentsImpl* web_contents);
@@ -63,8 +66,6 @@
 
   // Pointer to the WebContentsImpl that owns this object.
   WebContentsImpl* web_contents_;
-
-  DISALLOW_COPY_AND_ASSIGN(BrowserPluginEmbedder);
 };
 
 }  // namespace content
diff --git a/content/browser/browser_plugin/browser_plugin_guest.h b/content/browser/browser_plugin/browser_plugin_guest.h
index bc13113..d596ac1 100644
--- a/content/browser/browser_plugin/browser_plugin_guest.h
+++ b/content/browser/browser_plugin/browser_plugin_guest.h
@@ -53,6 +53,9 @@
 class CONTENT_EXPORT BrowserPluginGuest : public GuestHost,
                                           public WebContentsObserver {
  public:
+  BrowserPluginGuest(const BrowserPluginGuest&) = delete;
+  BrowserPluginGuest& operator=(const BrowserPluginGuest&) = delete;
+
   ~BrowserPluginGuest() override;
 
   // The WebContents passed into the factory method here has not been
@@ -139,8 +142,6 @@
   ui::mojom::TextInputStatePtr last_text_input_state_;
 
   BrowserPluginGuestDelegate* const delegate_;
-
-  DISALLOW_COPY_AND_ASSIGN(BrowserPluginGuest);
 };
 
 }  // namespace content
diff --git a/content/browser/browser_process_io_thread.h b/content/browser/browser_process_io_thread.h
index 1982096..7ef73db1 100644
--- a/content/browser/browser_process_io_thread.h
+++ b/content/browser/browser_process_io_thread.h
@@ -38,6 +38,10 @@
  public:
   // Constructs a BrowserProcessIOThread.
   BrowserProcessIOThread();
+
+  BrowserProcessIOThread(const BrowserProcessIOThread&) = delete;
+  BrowserProcessIOThread& operator=(const BrowserProcessIOThread&) = delete;
+
   ~BrowserProcessIOThread() override;
 
   // Registers this thread to represent the IO thread in the browser_thread.h
@@ -86,8 +90,6 @@
   std::unique_ptr<NotificationService> notification_service_;
 
   THREAD_CHECKER(browser_thread_checker_);
-
-  DISALLOW_COPY_AND_ASSIGN(BrowserProcessIOThread);
 };
 
 }  // namespace content
diff --git a/content/browser/browser_thread_unittest.cc b/content/browser/browser_thread_unittest.cc
index 70fdae16..8f2e262d 100644
--- a/content/browser/browser_thread_unittest.cc
+++ b/content/browser/browser_thread_unittest.cc
@@ -58,6 +58,10 @@
     BrowserTaskExecutor::EnableAllQueues();
   }
 
+  SequenceManagerThreadDelegate(const SequenceManagerThreadDelegate&) = delete;
+  SequenceManagerThreadDelegate& operator=(
+      const SequenceManagerThreadDelegate&) = delete;
+
   ~SequenceManagerThreadDelegate() override {
     BrowserTaskExecutor::ResetForTesting();
   }
@@ -77,8 +81,6 @@
  private:
   std::unique_ptr<base::sequence_manager::SequenceManager> ui_sequence_manager_;
   scoped_refptr<base::SingleThreadTaskRunner> default_task_runner_;
-
-  DISALLOW_COPY_AND_ASSIGN(SequenceManagerThreadDelegate);
 };
 
 }  // namespace
diff --git a/content/browser/browsing_data/browsing_data_filter_builder_impl.h b/content/browser/browsing_data/browsing_data_filter_builder_impl.h
index a861cb5e..aea4528 100644
--- a/content/browser/browsing_data/browsing_data_filter_builder_impl.h
+++ b/content/browser/browsing_data/browsing_data_filter_builder_impl.h
@@ -17,6 +17,11 @@
     : public BrowsingDataFilterBuilder {
  public:
   explicit BrowsingDataFilterBuilderImpl(Mode mode);
+
+  BrowsingDataFilterBuilderImpl(const BrowsingDataFilterBuilderImpl&) = delete;
+  BrowsingDataFilterBuilderImpl& operator=(
+      const BrowsingDataFilterBuilderImpl&) = delete;
+
   ~BrowsingDataFilterBuilderImpl() override;
 
   // BrowsingDataFilterBuilder implementation:
@@ -39,8 +44,6 @@
 
   std::set<url::Origin> origins_;
   std::set<std::string> domains_;
-
-  DISALLOW_COPY_AND_ASSIGN(BrowsingDataFilterBuilderImpl);
 };
 
 }  // content
diff --git a/content/browser/browsing_data/browsing_data_remover_impl.h b/content/browser/browsing_data/browsing_data_remover_impl.h
index 6c4dd02..be63b72 100644
--- a/content/browser/browsing_data/browsing_data_remover_impl.h
+++ b/content/browser/browsing_data/browsing_data_remover_impl.h
@@ -34,6 +34,10 @@
       public base::SupportsUserData::Data {
  public:
   explicit BrowsingDataRemoverImpl(BrowserContext* browser_context);
+
+  BrowsingDataRemoverImpl(const BrowsingDataRemoverImpl&) = delete;
+  BrowsingDataRemoverImpl& operator=(const BrowsingDataRemoverImpl&) = delete;
+
   ~BrowsingDataRemoverImpl() override;
 
   // Is the BrowsingDataRemoverImpl currently in the process of removing data?
@@ -239,8 +243,6 @@
   StoragePartition* storage_partition_for_testing_;
 
   base::WeakPtrFactory<BrowsingDataRemoverImpl> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(BrowsingDataRemoverImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/browsing_data/browsing_data_remover_impl_unittest.cc b/content/browser/browsing_data/browsing_data_remover_impl_unittest.cc
index d300c78..a9538b2 100644
--- a/content/browser/browsing_data/browsing_data_remover_impl_unittest.cc
+++ b/content/browser/browsing_data/browsing_data_remover_impl_unittest.cc
@@ -152,6 +152,12 @@
   StoragePartitionRemovalTestStoragePartition() {
     set_network_context(&network_context_);
   }
+
+  StoragePartitionRemovalTestStoragePartition(
+      const StoragePartitionRemovalTestStoragePartition&) = delete;
+  StoragePartitionRemovalTestStoragePartition& operator=(
+      const StoragePartitionRemovalTestStoragePartition&) = delete;
+
   ~StoragePartitionRemovalTestStoragePartition() override = default;
 
   void ClearDataForOrigin(uint32_t remove_mask,
@@ -217,8 +223,6 @@
  private:
   std::vector<StoragePartitionRemovalData> storage_partition_removal_data_;
   network::TestNetworkContext network_context_;
-
-  DISALLOW_COPY_AND_ASSIGN(StoragePartitionRemovalTestStoragePartition);
 };
 
 // Custom matcher to test the equivalence of two URL filters. Since those are
@@ -340,14 +344,15 @@
     EXPECT_CALL(*download_manager_, Shutdown());
   }
 
+  RemoveDownloadsTester(const RemoveDownloadsTester&) = delete;
+  RemoveDownloadsTester& operator=(const RemoveDownloadsTester&) = delete;
+
   ~RemoveDownloadsTester() = default;
 
   MockDownloadManager* download_manager() { return download_manager_; }
 
  private:
   MockDownloadManager* download_manager_;  // Owned by browser context.
-
-  DISALLOW_COPY_AND_ASSIGN(RemoveDownloadsTester);
 };
 
 // Test Class ----------------------------------------------------------------
@@ -359,6 +364,10 @@
         browser_context_->GetBrowsingDataRemover());
   }
 
+  BrowsingDataRemoverImplTest(const BrowsingDataRemoverImplTest&) = delete;
+  BrowsingDataRemoverImplTest& operator=(const BrowsingDataRemoverImplTest&) =
+      delete;
+
   ~BrowsingDataRemoverImplTest() override = default;
 
   void TearDown() override {
@@ -486,8 +495,6 @@
   std::vector<StoragePartitionRemovalData> storage_partition_removal_data_;
 
   scoped_refptr<storage::MockSpecialStoragePolicy> mock_policy_;
-
-  DISALLOW_COPY_AND_ASSIGN(BrowsingDataRemoverImplTest);
 };
 
 // Tests ---------------------------------------------------------------------
diff --git a/content/browser/browsing_data/same_site_data_remover_impl.h b/content/browser/browsing_data/same_site_data_remover_impl.h
index c3795ac..a4d591bf 100644
--- a/content/browser/browsing_data/same_site_data_remover_impl.h
+++ b/content/browser/browsing_data/same_site_data_remover_impl.h
@@ -21,6 +21,10 @@
 class CONTENT_EXPORT SameSiteDataRemoverImpl {
  public:
   explicit SameSiteDataRemoverImpl(BrowserContext* browser_context);
+
+  SameSiteDataRemoverImpl(const SameSiteDataRemoverImpl&) = delete;
+  SameSiteDataRemoverImpl& operator=(const SameSiteDataRemoverImpl&) = delete;
+
   ~SameSiteDataRemoverImpl();
 
   // Returns a set containing domains associated with deleted SameSite=None
@@ -53,8 +57,6 @@
   BrowserContext* browser_context_;
   StoragePartition* storage_partition_;
   std::set<std::string> same_site_none_domains_;
-
-  DISALLOW_COPY_AND_ASSIGN(SameSiteDataRemoverImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/browsing_data/same_site_data_remover_impl_unittest.cc b/content/browser/browsing_data/same_site_data_remover_impl_unittest.cc
index 94d36e6..6017bc2 100644
--- a/content/browser/browsing_data/same_site_data_remover_impl_unittest.cc
+++ b/content/browser/browsing_data/same_site_data_remover_impl_unittest.cc
@@ -40,6 +40,12 @@
 class SameSiteRemoverTestStoragePartition : public TestStoragePartition {
  public:
   SameSiteRemoverTestStoragePartition() {}
+
+  SameSiteRemoverTestStoragePartition(
+      const SameSiteRemoverTestStoragePartition&) = delete;
+  SameSiteRemoverTestStoragePartition& operator=(
+      const SameSiteRemoverTestStoragePartition&) = delete;
+
   ~SameSiteRemoverTestStoragePartition() override {}
 
   void ClearData(uint32_t removal_mask,
@@ -63,8 +69,6 @@
 
  private:
   StoragePartitionSameSiteRemovalData storage_partition_removal_data_;
-
-  DISALLOW_COPY_AND_ASSIGN(SameSiteRemoverTestStoragePartition);
 };
 
 class SameSiteDataRemoverImplTest : public testing::Test {
diff --git a/content/browser/cache_storage/background_fetch_cache_entry_handler_impl.h b/content/browser/cache_storage/background_fetch_cache_entry_handler_impl.h
index e0e8087..4ca1fb4 100644
--- a/content/browser/cache_storage/background_fetch_cache_entry_handler_impl.h
+++ b/content/browser/cache_storage/background_fetch_cache_entry_handler_impl.h
@@ -14,6 +14,12 @@
  public:
   explicit BackgroundFetchCacheEntryHandlerImpl(
       scoped_refptr<BlobStorageContextWrapper> blob_storage_context);
+
+  BackgroundFetchCacheEntryHandlerImpl(
+      const BackgroundFetchCacheEntryHandlerImpl&) = delete;
+  BackgroundFetchCacheEntryHandlerImpl& operator=(
+      const BackgroundFetchCacheEntryHandlerImpl&) = delete;
+
   ~BackgroundFetchCacheEntryHandlerImpl() override;
 
   // CacheStorageCacheEntryHandler implementation:
@@ -31,8 +37,6 @@
 
   base::WeakPtrFactory<BackgroundFetchCacheEntryHandlerImpl> weak_ptr_factory_{
       this};
-
-  DISALLOW_COPY_AND_ASSIGN(BackgroundFetchCacheEntryHandlerImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/cache_storage/cache_storage_blob_to_disk_cache.h b/content/browser/cache_storage/cache_storage_blob_to_disk_cache.h
index 80d5192..72a89913 100644
--- a/content/browser/cache_storage/cache_storage_blob_to_disk_cache.h
+++ b/content/browser/cache_storage/cache_storage_blob_to_disk_cache.h
@@ -36,6 +36,11 @@
   CacheStorageBlobToDiskCache(
       scoped_refptr<storage::QuotaManagerProxy> quota_manager_proxy,
       const blink::StorageKey& storage_key);
+
+  CacheStorageBlobToDiskCache(const CacheStorageBlobToDiskCache&) = delete;
+  CacheStorageBlobToDiskCache& operator=(const CacheStorageBlobToDiskCache&) =
+      delete;
+
   ~CacheStorageBlobToDiskCache() override;
 
   // Writes the body of |blob_remote| to |entry| with index
@@ -82,8 +87,6 @@
   const blink::StorageKey storage_key_;
 
   base::WeakPtrFactory<CacheStorageBlobToDiskCache> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(CacheStorageBlobToDiskCache);
 };
 
 }  // namespace content
diff --git a/content/browser/cache_storage/cache_storage_blob_to_disk_cache_unittest.cc b/content/browser/cache_storage/cache_storage_blob_to_disk_cache_unittest.cc
index ef39121..276b515 100644
--- a/content/browser/cache_storage/cache_storage_blob_to_disk_cache_unittest.cc
+++ b/content/browser/cache_storage/cache_storage_blob_to_disk_cache_unittest.cc
@@ -47,6 +47,11 @@
       scoped_refptr<storage::QuotaManagerProxy> quota_manager_proxy)
       : CacheStorageBlobToDiskCache(quota_manager_proxy, blink::StorageKey()) {}
 
+  TestCacheStorageBlobToDiskCache(const TestCacheStorageBlobToDiskCache&) =
+      delete;
+  TestCacheStorageBlobToDiskCache& operator=(
+      const TestCacheStorageBlobToDiskCache&) = delete;
+
   ~TestCacheStorageBlobToDiskCache() override = default;
 
   void ContinueReadFromBlob() { CacheStorageBlobToDiskCache::ReadFromBlob(); }
@@ -70,8 +75,6 @@
 
  private:
   bool delay_blob_reads_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(TestCacheStorageBlobToDiskCache);
 };
 
 class CacheStorageBlobToDiskCacheTest : public testing::Test {
diff --git a/content/browser/cache_storage/cache_storage_cache_unittest.cc b/content/browser/cache_storage/cache_storage_cache_unittest.cc
index bc36f3b..48dc588e 100644
--- a/content/browser/cache_storage/cache_storage_cache_unittest.cc
+++ b/content/browser/cache_storage/cache_storage_cache_unittest.cc
@@ -438,6 +438,9 @@
                                 0 /* cache_padding */),
         delay_backend_creation_(false) {}
 
+  TestCacheStorageCache(const TestCacheStorageCache&) = delete;
+  TestCacheStorageCache& operator=(const TestCacheStorageCache&) = delete;
+
   ~TestCacheStorageCache() override { base::RunLoop().RunUntilIdle(); }
 
   void CreateBackend(ErrorCallback callback) override {
@@ -488,8 +491,6 @@
  private:
   bool delay_backend_creation_;
   ErrorCallback backend_creation_callback_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestCacheStorageCache);
 };
 
 class MockLegacyCacheStorage : public LegacyCacheStorage {
diff --git a/content/browser/cache_storage/cache_storage_dispatcher_host.cc b/content/browser/cache_storage/cache_storage_dispatcher_host.cc
index 6ce99b9c..73c78c0 100644
--- a/content/browser/cache_storage/cache_storage_dispatcher_host.cc
+++ b/content/browser/cache_storage/cache_storage_dispatcher_host.cc
@@ -183,6 +183,9 @@
     DCHECK(host_);
   }
 
+  CacheImpl(const CacheImpl&) = delete;
+  CacheImpl& operator=(const CacheImpl&) = delete;
+
   ~CacheImpl() override { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); }
 
   // blink::mojom::CacheStorageCache implementation:
@@ -614,7 +617,6 @@
   SEQUENCE_CHECKER(sequence_checker_);
 
   base::WeakPtrFactory<CacheImpl> weak_factory_{this};
-  DISALLOW_COPY_AND_ASSIGN(CacheImpl);
 };
 
 // Implements the mojom interface CacheStorage. It's owned by the
@@ -651,6 +653,9 @@
     }
   }
 
+  CacheStorageImpl(const CacheStorageImpl&) = delete;
+  CacheStorageImpl& operator=(const CacheStorageImpl&) = delete;
+
   ~CacheStorageImpl() override {
     DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   }
@@ -958,7 +963,6 @@
 
   SEQUENCE_CHECKER(sequence_checker_);
   base::WeakPtrFactory<CacheStorageImpl> weak_factory_{this};
-  DISALLOW_COPY_AND_ASSIGN(CacheStorageImpl);
 };
 
 CacheStorageDispatcherHost::CacheStorageDispatcherHost(
diff --git a/content/browser/cache_storage/cache_storage_dispatcher_host.h b/content/browser/cache_storage/cache_storage_dispatcher_host.h
index 04b8c16..b0dd82d 100644
--- a/content/browser/cache_storage/cache_storage_dispatcher_host.h
+++ b/content/browser/cache_storage/cache_storage_dispatcher_host.h
@@ -31,6 +31,11 @@
 class CacheStorageDispatcherHost {
  public:
   explicit CacheStorageDispatcherHost(CacheStorageContextImpl* context);
+
+  CacheStorageDispatcherHost(const CacheStorageDispatcherHost&) = delete;
+  CacheStorageDispatcherHost& operator=(const CacheStorageDispatcherHost&) =
+      delete;
+
   ~CacheStorageDispatcherHost();
 
   // Binds the CacheStorage Mojo receiver to this instance.
@@ -67,7 +72,6 @@
       cache_receivers_;
 
   SEQUENCE_CHECKER(sequence_checker_);
-  DISALLOW_COPY_AND_ASSIGN(CacheStorageDispatcherHost);
 };
 
 }  // namespace content
diff --git a/content/browser/cache_storage/cache_storage_index.h b/content/browser/cache_storage/cache_storage_index.h
index ae9a2cd..bc9d4ce 100644
--- a/content/browser/cache_storage/cache_storage_index.h
+++ b/content/browser/cache_storage/cache_storage_index.h
@@ -37,6 +37,10 @@
   };
 
   CacheStorageIndex();
+
+  CacheStorageIndex(const CacheStorageIndex&) = delete;
+  CacheStorageIndex& operator=(const CacheStorageIndex&) = delete;
+
   ~CacheStorageIndex();
 
   CacheStorageIndex& operator=(CacheStorageIndex&& rhs);
@@ -109,8 +113,6 @@
   CacheMetadata doomed_cache_metadata_;
   std::list<CacheMetadata>::iterator after_doomed_cache_metadata_;
   bool has_doomed_cache_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(CacheStorageIndex);
 };
 
 }  // namespace content
diff --git a/content/browser/cache_storage/cache_storage_operation.h b/content/browser/cache_storage/cache_storage_operation.h
index d667ed9..22beaba0 100644
--- a/content/browser/cache_storage/cache_storage_operation.h
+++ b/content/browser/cache_storage/cache_storage_operation.h
@@ -28,6 +28,9 @@
                         CacheStorageSchedulerPriority priority,
                         scoped_refptr<base::SequencedTaskRunner> task_runner);
 
+  CacheStorageOperation(const CacheStorageOperation&) = delete;
+  CacheStorageOperation& operator=(const CacheStorageOperation&) = delete;
+
   ~CacheStorageOperation();
 
   // Run the closure passed to the constructor.
@@ -59,8 +62,6 @@
   const CacheStorageSchedulerPriority priority_;
   scoped_refptr<base::SequencedTaskRunner> task_runner_;
   base::WeakPtrFactory<CacheStorageOperation> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(CacheStorageOperation);
 };
 
 }  // namespace content
diff --git a/content/browser/cache_storage/cache_storage_quota_client.h b/content/browser/cache_storage/cache_storage_quota_client.h
index ae203f9..aae12e61 100644
--- a/content/browser/cache_storage/cache_storage_quota_client.h
+++ b/content/browser/cache_storage/cache_storage_quota_client.h
@@ -32,6 +32,10 @@
  public:
   CacheStorageQuotaClient(scoped_refptr<CacheStorageManager> cache_manager,
                           storage::mojom::CacheStorageOwner owner);
+
+  CacheStorageQuotaClient(const CacheStorageQuotaClient&) = delete;
+  CacheStorageQuotaClient& operator=(const CacheStorageQuotaClient&) = delete;
+
   ~CacheStorageQuotaClient() override;
 
   // storage::StorageKeyQuotaClient method overrides.
@@ -57,8 +61,6 @@
   const storage::mojom::CacheStorageOwner owner_;
 
   SEQUENCE_CHECKER(sequence_checker_);
-
-  DISALLOW_COPY_AND_ASSIGN(CacheStorageQuotaClient);
 };
 
 }  // namespace content
diff --git a/content/browser/cache_storage/cache_storage_ref.h b/content/browser/cache_storage/cache_storage_ref.h
index 52dcacd..cbd9d0c 100644
--- a/content/browser/cache_storage/cache_storage_ref.h
+++ b/content/browser/cache_storage/cache_storage_ref.h
@@ -43,6 +43,9 @@
     return *this;
   }
 
+  CacheStorageRef(const CacheStorageRef&) = delete;
+  CacheStorageRef& operator=(const CacheStorageRef&) = delete;
+
   ~CacheStorageRef() {
     if (target_)
       target_->DropHandleRef();
@@ -54,8 +57,6 @@
 
  private:
   base::WeakPtr<TargetType> target_;
-
-  DISALLOW_COPY_AND_ASSIGN(CacheStorageRef);
 };
 
 }  // namespace content
diff --git a/content/browser/cache_storage/cache_storage_scheduler.h b/content/browser/cache_storage/cache_storage_scheduler.h
index b1366fc..309f3a8 100644
--- a/content/browser/cache_storage/cache_storage_scheduler.h
+++ b/content/browser/cache_storage/cache_storage_scheduler.h
@@ -33,6 +33,10 @@
  public:
   CacheStorageScheduler(CacheStorageSchedulerClient client_type,
                         scoped_refptr<base::SequencedTaskRunner> task_runner);
+
+  CacheStorageScheduler(const CacheStorageScheduler&) = delete;
+  CacheStorageScheduler& operator=(const CacheStorageScheduler&) = delete;
+
   virtual ~CacheStorageScheduler();
 
   // Create a scheduler-unique identifier for an operation to be scheduled.
@@ -115,8 +119,6 @@
 
   SEQUENCE_CHECKER(sequence_checker_);
   base::WeakPtrFactory<CacheStorageScheduler> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(CacheStorageScheduler);
 };
 
 }  // namespace content
diff --git a/content/browser/cache_storage/legacy/legacy_cache_storage.h b/content/browser/cache_storage/legacy/legacy_cache_storage.h
index 70c8233..91cc298 100644
--- a/content/browser/cache_storage/legacy/legacy_cache_storage.h
+++ b/content/browser/cache_storage/legacy/legacy_cache_storage.h
@@ -69,6 +69,9 @@
       const blink::StorageKey& storage_key,
       storage::mojom::CacheStorageOwner owner);
 
+  LegacyCacheStorage(const LegacyCacheStorage&) = delete;
+  LegacyCacheStorage& operator=(const LegacyCacheStorage&) = delete;
+
   // Any unfinished asynchronous operations may not complete or call their
   // callbacks.
   ~LegacyCacheStorage() override;
@@ -340,8 +343,6 @@
 
   SEQUENCE_CHECKER(sequence_checker_);
   base::WeakPtrFactory<LegacyCacheStorage> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(LegacyCacheStorage);
 };
 
 }  // namespace content
diff --git a/content/browser/cache_storage/legacy/legacy_cache_storage_cache.h b/content/browser/cache_storage/legacy/legacy_cache_storage_cache.h
index 9bef7bd..848cb65 100644
--- a/content/browser/cache_storage/legacy/legacy_cache_storage_cache.h
+++ b/content/browser/cache_storage/legacy/legacy_cache_storage_cache.h
@@ -147,6 +147,9 @@
 
   InitState GetInitState() const override;
 
+  LegacyCacheStorageCache(const LegacyCacheStorageCache&) = delete;
+  LegacyCacheStorageCache& operator=(const LegacyCacheStorageCache&) = delete;
+
   // Async operations in progress will cancel and not run their callbacks.
   ~LegacyCacheStorageCache() override;
 
@@ -552,8 +555,6 @@
 
   SEQUENCE_CHECKER(sequence_checker_);
   base::WeakPtrFactory<LegacyCacheStorageCache> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(LegacyCacheStorageCache);
 };
 
 }  // namespace content
diff --git a/content/browser/child_process_security_policy_impl.cc b/content/browser/child_process_security_policy_impl.cc
index 86b4318..a95bfc1a2 100644
--- a/content/browser/child_process_security_policy_impl.cc
+++ b/content/browser/child_process_security_policy_impl.cc
@@ -407,6 +407,9 @@
         browser_context_(browser_context),
         resource_context_(browser_context->GetResourceContext()) {}
 
+  SecurityState(const SecurityState&) = delete;
+  SecurityState& operator=(const SecurityState&) = delete;
+
   ~SecurityState() {
     storage::IsolatedContext* isolated_context =
         storage::IsolatedContext::GetInstance();
@@ -737,8 +740,6 @@
 
   BrowserContext* browser_context_;
   ResourceContext* resource_context_;
-
-  DISALLOW_COPY_AND_ASSIGN(SecurityState);
 };
 
 // IsolatedOriginEntry implementation.
diff --git a/content/browser/cocoa/system_hotkey_map.h b/content/browser/cocoa/system_hotkey_map.h
index e40c60ed..b2c87a72 100644
--- a/content/browser/cocoa/system_hotkey_map.h
+++ b/content/browser/cocoa/system_hotkey_map.h
@@ -23,6 +23,10 @@
  public:
   SystemHotkeyMap();
   SystemHotkeyMap(SystemHotkeyMap&&);
+
+  SystemHotkeyMap(const SystemHotkeyMap&) = delete;
+  SystemHotkeyMap& operator=(const SystemHotkeyMap&) = delete;
+
   ~SystemHotkeyMap();
 
   // Parses the property list data commonly stored at
@@ -54,8 +58,6 @@
   void ReserveHotkey(unsigned short key_code, NSUInteger modifiers);
 
   std::vector<SystemHotkey> system_hotkeys_;
-
-  DISALLOW_COPY_AND_ASSIGN(SystemHotkeyMap);
 };
 
 }  // namespace content
diff --git a/content/browser/code_cache/generated_code_cache.h b/content/browser/code_cache/generated_code_cache.h
index 1651255..e8364b1 100644
--- a/content/browser/code_cache/generated_code_cache.h
+++ b/content/browser/code_cache/generated_code_cache.h
@@ -91,6 +91,9 @@
                      int max_size_bytes,
                      CodeCacheType cache_type);
 
+  GeneratedCodeCache(const GeneratedCodeCache&) = delete;
+  GeneratedCodeCache& operator=(const GeneratedCodeCache&) = delete;
+
   ~GeneratedCodeCache();
 
   // Runs the callback with a raw pointer to the backend. If we could not create
@@ -232,8 +235,6 @@
   CodeCacheType cache_type_;
 
   base::WeakPtrFactory<GeneratedCodeCache> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(GeneratedCodeCache);
 };
 
 }  // namespace content
diff --git a/content/browser/compositor/test/test_image_transport_factory.h b/content/browser/compositor/test/test_image_transport_factory.h
index 91766e59..579fc42b 100644
--- a/content/browser/compositor/test/test_image_transport_factory.h
+++ b/content/browser/compositor/test/test_image_transport_factory.h
@@ -29,6 +29,11 @@
                                   public ImageTransportFactory {
  public:
   TestImageTransportFactory();
+
+  TestImageTransportFactory(const TestImageTransportFactory&) = delete;
+  TestImageTransportFactory& operator=(const TestImageTransportFactory&) =
+      delete;
+
   ~TestImageTransportFactory() override;
 
   // ui::ContextFactory implementation.
@@ -59,8 +64,6 @@
   scoped_refptr<viz::ContextProvider> shared_main_context_provider_;
   viz::HostFrameSinkManager host_frame_sink_manager_;
   viz::TestFrameSinkManagerImpl test_frame_sink_manager_impl_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestImageTransportFactory);
 };
 
 }  // namespace content
diff --git a/content/browser/compositor/viz_process_transport_factory.h b/content/browser/compositor/viz_process_transport_factory.h
index 6d2dc84..c8dd86d 100644
--- a/content/browser/compositor/viz_process_transport_factory.h
+++ b/content/browser/compositor/viz_process_transport_factory.h
@@ -54,6 +54,11 @@
       gpu::GpuChannelEstablishFactory* gpu_channel_establish_factory,
       scoped_refptr<base::SingleThreadTaskRunner> resize_task_runner,
       viz::CompositingModeReporterImpl* compositing_mode_reporter);
+
+  VizProcessTransportFactory(const VizProcessTransportFactory&) = delete;
+  VizProcessTransportFactory& operator=(const VizProcessTransportFactory&) =
+      delete;
+
   ~VizProcessTransportFactory() override;
 
   // Connects HostFrameSinkManager to FrameSinkManagerImpl in viz process.
@@ -145,8 +150,6 @@
   bool is_gpu_compositing_disabled_ = false;
 
   base::WeakPtrFactory<VizProcessTransportFactory> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(VizProcessTransportFactory);
 };
 
 }  // namespace content
diff --git a/content/browser/contacts/contacts_manager_impl.h b/content/browser/contacts/contacts_manager_impl.h
index 39f7185..16701a5f 100644
--- a/content/browser/contacts/contacts_manager_impl.h
+++ b/content/browser/contacts/contacts_manager_impl.h
@@ -22,6 +22,10 @@
       mojo::PendingReceiver<blink::mojom::ContactsManager> receiver);
 
   explicit ContactsManagerImpl(RenderFrameHostImpl* render_frame_host);
+
+  ContactsManagerImpl(const ContactsManagerImpl&) = delete;
+  ContactsManagerImpl& operator=(const ContactsManagerImpl&) = delete;
+
   ~ContactsManagerImpl() override;
 
   void Select(bool multiple,
@@ -37,8 +41,6 @@
 
   // The source id to use when reporting back UKM statistics.
   ukm::SourceId source_id_ = ukm::kInvalidSourceId;
-
-  DISALLOW_COPY_AND_ASSIGN(ContactsManagerImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/contacts/contacts_provider_android.h b/content/browser/contacts/contacts_provider_android.h
index e98f76f..66b5e5c 100644
--- a/content/browser/contacts/contacts_provider_android.h
+++ b/content/browser/contacts/contacts_provider_android.h
@@ -20,6 +20,10 @@
 class ContactsProviderAndroid : public ContactsProvider {
  public:
   explicit ContactsProviderAndroid(RenderFrameHostImpl* render_frame_host);
+
+  ContactsProviderAndroid(const ContactsProviderAndroid&) = delete;
+  ContactsProviderAndroid& operator=(const ContactsProviderAndroid&) = delete;
+
   ~ContactsProviderAndroid() override;
 
   // ContactsProvider:
@@ -62,8 +66,6 @@
   // The origin that the contacts data will be shared with. Formatted for
   // display with the scheme omitted.
   std::u16string formatted_origin_;
-
-  DISALLOW_COPY_AND_ASSIGN(ContactsProviderAndroid);
 };
 
 }  // namespace content
diff --git a/content/browser/content_index/content_index_database.h b/content/browser/content_index/content_index_database.h
index 245ded69..8cd83dd 100644
--- a/content/browser/content_index/content_index_database.h
+++ b/content/browser/content_index/content_index_database.h
@@ -36,6 +36,10 @@
   ContentIndexDatabase(
       BrowserContext* browser_context,
       scoped_refptr<ServiceWorkerContextWrapper> service_worker_context);
+
+  ContentIndexDatabase(const ContentIndexDatabase&) = delete;
+  ContentIndexDatabase& operator=(const ContentIndexDatabase&) = delete;
+
   ~ContentIndexDatabase();
 
   void AddEntry(int64_t service_worker_registration_id,
@@ -175,8 +179,6 @@
 
   scoped_refptr<ServiceWorkerContextWrapper> service_worker_context_;
   base::WeakPtrFactory<ContentIndexDatabase> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(ContentIndexDatabase);
 };
 
 }  // namespace content
diff --git a/content/browser/content_index/content_index_database_unittest.cc b/content/browser/content_index/content_index_database_unittest.cc
index 20976146..972f350 100644
--- a/content/browser/content_index/content_index_database_unittest.cc
+++ b/content/browser/content_index/content_index_database_unittest.cc
@@ -112,6 +112,9 @@
       : task_environment_(BrowserTaskEnvironment::IO_MAINLOOP),
         embedded_worker_test_helper_(base::FilePath() /* in memory */) {}
 
+  ContentIndexDatabaseTest(const ContentIndexDatabaseTest&) = delete;
+  ContentIndexDatabaseTest& operator=(const ContentIndexDatabaseTest&) = delete;
+
   ~ContentIndexDatabaseTest() override = default;
 
   void SetUp() override {
@@ -294,8 +297,6 @@
   EmbeddedWorkerTestHelper embedded_worker_test_helper_;
   scoped_refptr<ServiceWorkerRegistration> service_worker_registration_;
   std::unique_ptr<ContentIndexDatabase> database_;
-
-  DISALLOW_COPY_AND_ASSIGN(ContentIndexDatabaseTest);
 };
 
 TEST_F(ContentIndexDatabaseTest, DatabaseOperations) {
diff --git a/content/browser/content_index/content_index_service_impl.h b/content/browser/content_index/content_index_service_impl.h
index 344206f..5d8a1a032 100644
--- a/content/browser/content_index/content_index_service_impl.h
+++ b/content/browser/content_index/content_index_service_impl.h
@@ -36,6 +36,10 @@
       const url::Origin& origin,
       scoped_refptr<ContentIndexContextImpl> content_index_context,
       scoped_refptr<ServiceWorkerContextWrapper> service_worker_context);
+
+  ContentIndexServiceImpl(const ContentIndexServiceImpl&) = delete;
+  ContentIndexServiceImpl& operator=(const ContentIndexServiceImpl&) = delete;
+
   ~ContentIndexServiceImpl() override;
 
   // blink::mojom::ContentIndexService implementation.
@@ -59,8 +63,6 @@
   url::Origin origin_;
   scoped_refptr<ContentIndexContextImpl> content_index_context_;
   scoped_refptr<ServiceWorkerContextWrapper> service_worker_context_;
-
-  DISALLOW_COPY_AND_ASSIGN(ContentIndexServiceImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/content_index/content_index_service_impl_unittest.cc b/content/browser/content_index/content_index_service_impl_unittest.cc
index 52b90542..71e3641 100644
--- a/content/browser/content_index/content_index_service_impl_unittest.cc
+++ b/content/browser/content_index/content_index_service_impl_unittest.cc
@@ -34,6 +34,10 @@
             /* content_index_context= */ nullptr,
             /* service_worker_context= */ nullptr)) {}
 
+  ContentIndexServiceImplTest(const ContentIndexServiceImplTest&) = delete;
+  ContentIndexServiceImplTest& operator=(const ContentIndexServiceImplTest&) =
+      delete;
+
   ~ContentIndexServiceImplTest() override = default;
 
   void Add(const SkBitmap& icon, const GURL& launch_url) {
@@ -57,8 +61,6 @@
   std::unique_ptr<ContentIndexServiceImpl> service_;
   mojo::FakeMessageDispatchContext fake_dispatch_context_;
   mojo::test::BadMessageObserver bad_message_observer_;
-
-  DISALLOW_COPY_AND_ASSIGN(ContentIndexServiceImplTest);
 };
 
 // static
diff --git a/content/browser/cookie_store/cookie_change_subscription.h b/content/browser/cookie_store/cookie_change_subscription.h
index bc5120d5..bb3227f5 100644
--- a/content/browser/cookie_store/cookie_change_subscription.h
+++ b/content/browser/cookie_store/cookie_change_subscription.h
@@ -77,6 +77,9 @@
                            ::network::mojom::CookieMatchType match_type,
                            int64_t service_worker_registration_id);
 
+  CookieChangeSubscription(const CookieChangeSubscription&) = delete;
+  CookieChangeSubscription& operator=(const CookieChangeSubscription&) = delete;
+
   ~CookieChangeSubscription();
 
   // The URL whose cookie list is watched for changes.
@@ -115,8 +118,6 @@
   const std::string name_;
   const ::network::mojom::CookieMatchType match_type_;
   const int64_t service_worker_registration_id_;
-
-  DISALLOW_COPY_AND_ASSIGN(CookieChangeSubscription);
 };
 
 // Used to deduplicate equivalent subscriptons.
diff --git a/content/browser/cookie_store/cookie_store_host.h b/content/browser/cookie_store/cookie_store_host.h
index f822a85..93a6b82 100644
--- a/content/browser/cookie_store/cookie_store_host.h
+++ b/content/browser/cookie_store/cookie_store_host.h
@@ -28,6 +28,10 @@
 class CookieStoreHost : public blink::mojom::CookieStore {
  public:
   CookieStoreHost(CookieStoreManager* manager, const url::Origin& origin);
+
+  CookieStoreHost(const CookieStoreHost&) = delete;
+  CookieStoreHost& operator=(const CookieStoreHost&) = delete;
+
   ~CookieStoreHost() override;
 
   // content::mojom::CookieStore
@@ -54,8 +58,6 @@
   // thread. However, the class implementation itself is thread-friendly, so it
   // only checks that methods are called on the same sequence.
   SEQUENCE_CHECKER(sequence_checker_);
-
-  DISALLOW_COPY_AND_ASSIGN(CookieStoreHost);
 };
 
 }  // namespace content
diff --git a/content/browser/cookie_store/cookie_store_manager_unittest.cc b/content/browser/cookie_store/cookie_store_manager_unittest.cc
index 13c48314..68af4c8a 100644
--- a/content/browser/cookie_store/cookie_store_manager_unittest.cc
+++ b/content/browser/cookie_store/cookie_store_manager_unittest.cc
@@ -45,6 +45,10 @@
   // The caller must ensure that the CookieStore service outlives this.
   explicit CookieStoreSync(blink::mojom::CookieStore* cookie_store_service)
       : cookie_store_service_(cookie_store_service) {}
+
+  CookieStoreSync(const CookieStoreSync&) = delete;
+  CookieStoreSync& operator=(const CookieStoreSync&) = delete;
+
   ~CookieStoreSync() = default;
 
   bool AddSubscriptions(int64_t service_worker_registration_id,
@@ -93,8 +97,6 @@
 
  private:
   blink::mojom::CookieStore* cookie_store_service_;
-
-  DISALLOW_COPY_AND_ASSIGN(CookieStoreSync);
 };
 
 const char kExampleScope[] = "https://example.com/a/";
@@ -118,6 +120,10 @@
    public:
     explicit ServiceWorker(CookieStoreWorkerTestHelper* worker_helper)
         : FakeServiceWorker(worker_helper), worker_helper_(worker_helper) {}
+
+    ServiceWorker(const ServiceWorker&) = delete;
+    ServiceWorker& operator=(const ServiceWorker&) = delete;
+
     ~ServiceWorker() override = default;
 
     // Used to implement WaitForActivateEvent().
@@ -141,8 +147,6 @@
 
    private:
     CookieStoreWorkerTestHelper* const worker_helper_;
-
-    DISALLOW_COPY_AND_ASSIGN(ServiceWorker);
   };
 
   std::unique_ptr<FakeServiceWorker> CreateServiceWorker() override {
diff --git a/content/browser/data_decoder_browsertest.cc b/content/browser/data_decoder_browsertest.cc
index ae458aa..c7fe189 100644
--- a/content/browser/data_decoder_browsertest.cc
+++ b/content/browser/data_decoder_browsertest.cc
@@ -80,6 +80,9 @@
  public:
   ServiceProcessObserver() { ServiceProcessHost::AddObserver(this); }
 
+  ServiceProcessObserver(const ServiceProcessObserver&) = delete;
+  ServiceProcessObserver& operator=(const ServiceProcessObserver&) = delete;
+
   ~ServiceProcessObserver() override {
     ServiceProcessHost::RemoveObserver(this);
   }
@@ -102,8 +105,6 @@
  private:
   absl::optional<base::RunLoop> launch_wait_loop_;
   int instances_started_ = 0;
-
-  DISALLOW_COPY_AND_ASSIGN(ServiceProcessObserver);
 };
 
 IN_PROC_BROWSER_TEST_F(DataDecoderBrowserTest, Launch) {
diff --git a/content/browser/devtools/devtools_background_services_context_impl_unittest.cc b/content/browser/devtools/devtools_background_services_context_impl_unittest.cc
index 8c63a3b..5fcfb14 100644
--- a/content/browser/devtools/devtools_background_services_context_impl_unittest.cc
+++ b/content/browser/devtools/devtools_background_services_context_impl_unittest.cc
@@ -96,6 +96,11 @@
       : task_environment_(BrowserTaskEnvironment::IO_MAINLOOP),
         embedded_worker_test_helper_(base::FilePath() /* in memory */) {}
 
+  DevToolsBackgroundServicesContextTest(
+      const DevToolsBackgroundServicesContextTest&) = delete;
+  DevToolsBackgroundServicesContextTest& operator=(
+      const DevToolsBackgroundServicesContextTest&) = delete;
+
   ~DevToolsBackgroundServicesContextTest() override = default;
 
   void SetUp() override {
@@ -261,8 +266,6 @@
   scoped_refptr<DevToolsBackgroundServicesContextImpl> context_;
   scoped_refptr<ServiceWorkerRegistration> service_worker_registration_;
   std::unique_ptr<ContentBrowserClient> browser_client_;
-
-  DISALLOW_COPY_AND_ASSIGN(DevToolsBackgroundServicesContextTest);
 };
 
 TEST_F(DevToolsBackgroundServicesContextTest,
diff --git a/content/browser/devtools/devtools_frame_trace_recorder.h b/content/browser/devtools/devtools_frame_trace_recorder.h
index 968a3c9..262c7f3 100644
--- a/content/browser/devtools/devtools_frame_trace_recorder.h
+++ b/content/browser/devtools/devtools_frame_trace_recorder.h
@@ -20,14 +20,16 @@
 class DevToolsFrameTraceRecorder {
  public:
   DevToolsFrameTraceRecorder();
+
+  DevToolsFrameTraceRecorder(const DevToolsFrameTraceRecorder&) = delete;
+  DevToolsFrameTraceRecorder& operator=(const DevToolsFrameTraceRecorder&) =
+      delete;
+
   ~DevToolsFrameTraceRecorder();
 
   void OnSynchronousSwapCompositorFrame(
       RenderFrameHostImpl* host,
       const cc::RenderFrameMetadata& metadata);
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(DevToolsFrameTraceRecorder);
 };
 
 }  // namespace content
diff --git a/content/browser/devtools/devtools_frontend_host_impl.h b/content/browser/devtools/devtools_frontend_host_impl.h
index 2df20d6..4577f41 100644
--- a/content/browser/devtools/devtools_frontend_host_impl.h
+++ b/content/browser/devtools/devtools_frontend_host_impl.h
@@ -20,6 +20,10 @@
   DevToolsFrontendHostImpl(
       RenderFrameHost* frame_host,
       const HandleMessageCallback& handle_message_callback);
+
+  DevToolsFrontendHostImpl(const DevToolsFrontendHostImpl&) = delete;
+  DevToolsFrontendHostImpl& operator=(const DevToolsFrontendHostImpl&) = delete;
+
   ~DevToolsFrontendHostImpl() override;
 
   void BadMessageReceived() override;
@@ -31,8 +35,6 @@
   WebContents* web_contents_;
   HandleMessageCallback handle_message_callback_;
   mojo::AssociatedReceiver<blink::mojom::DevToolsFrontendHost> receiver_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(DevToolsFrontendHostImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/devtools/devtools_http_handler.h b/content/browser/devtools/devtools_http_handler.h
index 0c6782d..692fcc6 100644
--- a/content/browser/devtools/devtools_http_handler.h
+++ b/content/browser/devtools/devtools_http_handler.h
@@ -51,6 +51,10 @@
       std::unique_ptr<DevToolsSocketFactory> server_socket_factory,
       const base::FilePath& active_port_output_directory,
       const base::FilePath& debug_frontend_dir);
+
+  DevToolsHttpHandler(const DevToolsHttpHandler&) = delete;
+  DevToolsHttpHandler& operator=(const DevToolsHttpHandler&) = delete;
+
   ~DevToolsHttpHandler();
 
  private:
@@ -114,8 +118,6 @@
   DevToolsManagerDelegate* delegate_;
   std::unique_ptr<DevToolsSocketFactory> socket_factory_;
   base::WeakPtrFactory<DevToolsHttpHandler> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(DevToolsHttpHandler);
 };
 
 }  // namespace content
diff --git a/content/browser/devtools/devtools_manager.h b/content/browser/devtools/devtools_manager.h
index eb8cc0b..c2c95a3 100644
--- a/content/browser/devtools/devtools_manager.h
+++ b/content/browser/devtools/devtools_manager.h
@@ -28,6 +28,10 @@
   static DevToolsManager* GetInstance();
 
   DevToolsManager();
+
+  DevToolsManager(const DevToolsManager&) = delete;
+  DevToolsManager& operator=(const DevToolsManager&) = delete;
+
   virtual ~DevToolsManager();
 
   DevToolsManagerDelegate* delegate() const { return delegate_.get(); }
@@ -42,8 +46,6 @@
   std::unique_ptr<DevToolsManagerDelegate> delegate_;
   std::unique_ptr<DevToolsHttpHandler> http_handler_;
   std::unique_ptr<DevToolsPipeHandler> pipe_handler_;
-
-  DISALLOW_COPY_AND_ASSIGN(DevToolsManager);
 };
 
 }  // namespace content
diff --git a/content/browser/devtools/devtools_manager_unittest.cc b/content/browser/devtools/devtools_manager_unittest.cc
index a5afdd7..ab1ce36 100644
--- a/content/browser/devtools/devtools_manager_unittest.cc
+++ b/content/browser/devtools/devtools_manager_unittest.cc
@@ -40,6 +40,9 @@
  public:
   TestDevToolsClientHost() : closed_(false) {}
 
+  TestDevToolsClientHost(const TestDevToolsClientHost&) = delete;
+  TestDevToolsClientHost& operator=(const TestDevToolsClientHost&) = delete;
+
   ~TestDevToolsClientHost() override { EXPECT_TRUE(closed_); }
 
   void Close() {
@@ -70,8 +73,6 @@
  private:
   bool closed_;
   scoped_refptr<DevToolsAgentHost> agent_host_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestDevToolsClientHost);
 };
 
 int TestDevToolsClientHost::close_counter = 0;
diff --git a/content/browser/devtools/devtools_pipe_handler.h b/content/browser/devtools/devtools_pipe_handler.h
index 0158ed5..851f580 100644
--- a/content/browser/devtools/devtools_pipe_handler.h
+++ b/content/browser/devtools/devtools_pipe_handler.h
@@ -19,6 +19,10 @@
 class DevToolsPipeHandler : public DevToolsAgentHostClient {
  public:
   explicit DevToolsPipeHandler(base::OnceClosure on_disconnect);
+
+  DevToolsPipeHandler(const DevToolsPipeHandler&) = delete;
+  DevToolsPipeHandler& operator=(const DevToolsPipeHandler&) = delete;
+
   ~DevToolsPipeHandler() override;
 
   void HandleMessage(std::vector<uint8_t> message);
@@ -50,8 +54,6 @@
   int write_fd_;
   bool shutting_down_ = false;
   base::WeakPtrFactory<DevToolsPipeHandler> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(DevToolsPipeHandler);
 };
 
 }  // namespace content
diff --git a/content/browser/devtools/devtools_renderer_channel.h b/content/browser/devtools/devtools_renderer_channel.h
index 0dba7c8..87e44fc 100644
--- a/content/browser/devtools/devtools_renderer_channel.h
+++ b/content/browser/devtools/devtools_renderer_channel.h
@@ -38,6 +38,10 @@
     : public blink::mojom::DevToolsAgentHost {
  public:
   explicit DevToolsRendererChannel(DevToolsAgentHostImpl* owner);
+
+  DevToolsRendererChannel(const DevToolsRendererChannel&) = delete;
+  DevToolsRendererChannel& operator=(const DevToolsRendererChannel&) = delete;
+
   ~DevToolsRendererChannel() override;
 
   // Dedicated workers use non-associated version,
@@ -96,8 +100,6 @@
   bool wait_for_debugger_ = false;
   base::OnceClosure set_report_completion_callback_;
   base::WeakPtrFactory<DevToolsRendererChannel> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(DevToolsRendererChannel);
 };
 
 }  // namespace content
diff --git a/content/browser/devtools/devtools_traceable_screenshot.h b/content/browser/devtools/devtools_traceable_screenshot.h
index 0f90cb1..b01848a 100644
--- a/content/browser/devtools/devtools_traceable_screenshot.h
+++ b/content/browser/devtools/devtools_traceable_screenshot.h
@@ -21,6 +21,10 @@
 
   DevToolsTraceableScreenshot(const SkBitmap& bitmap);
 
+  DevToolsTraceableScreenshot(const DevToolsTraceableScreenshot&) = delete;
+  DevToolsTraceableScreenshot& operator=(const DevToolsTraceableScreenshot&) =
+      delete;
+
   ~DevToolsTraceableScreenshot() override;
 
   // base::trace_event::ConvertableToTraceFormat implementation.
@@ -30,8 +34,6 @@
   static base::subtle::Atomic32 number_of_instances_;
 
   SkBitmap frame_;
-
-  DISALLOW_COPY_AND_ASSIGN(DevToolsTraceableScreenshot);
 };
 
 }  // namespace content
diff --git a/content/browser/devtools/devtools_url_loader_interceptor.h b/content/browser/devtools/devtools_url_loader_interceptor.h
index 70ab1d0..b1bc8578 100644
--- a/content/browser/devtools/devtools_url_loader_interceptor.h
+++ b/content/browser/devtools/devtools_url_loader_interceptor.h
@@ -161,13 +161,15 @@
                 std::vector<Pattern> patterns,
                 RequestInterceptedCallback callback);
     FilterEntry(FilterEntry&&);
+
+    FilterEntry(const FilterEntry&) = delete;
+    FilterEntry& operator=(const FilterEntry&) = delete;
+
     ~FilterEntry();
 
     const base::UnguessableToken target_id;
     std::vector<Pattern> patterns;
     const RequestInterceptedCallback callback;
-
-    DISALLOW_COPY_AND_ASSIGN(FilterEntry);
   };
 
   using HandleAuthRequestCallback =
@@ -179,6 +181,11 @@
                                 HandleAuthRequestCallback callback);
 
   explicit DevToolsURLLoaderInterceptor(RequestInterceptedCallback callback);
+
+  DevToolsURLLoaderInterceptor(const DevToolsURLLoaderInterceptor&) = delete;
+  DevToolsURLLoaderInterceptor& operator=(const DevToolsURLLoaderInterceptor&) =
+      delete;
+
   ~DevToolsURLLoaderInterceptor();
 
   void SetPatterns(std::vector<Pattern> patterns, bool handle_auth);
@@ -243,8 +250,6 @@
   std::map<std::string, InterceptionJob*> jobs_;
 
   base::WeakPtrFactory<DevToolsURLLoaderInterceptor> weak_factory_;
-
-  DISALLOW_COPY_AND_ASSIGN(DevToolsURLLoaderInterceptor);
 };
 
 // The purpose of this class is to have a thin wrapper around
diff --git a/content/browser/devtools/devtools_video_consumer.h b/content/browser/devtools/devtools_video_consumer.h
index 0b6a587..f63d11ab 100644
--- a/content/browser/devtools/devtools_video_consumer.h
+++ b/content/browser/devtools/devtools_video_consumer.h
@@ -29,6 +29,10 @@
       base::RepeatingCallback<void(scoped_refptr<media::VideoFrame> frame)>;
 
   explicit DevToolsVideoConsumer(OnFrameCapturedCallback callback);
+
+  DevToolsVideoConsumer(const DevToolsVideoConsumer&) = delete;
+  DevToolsVideoConsumer& operator=(const DevToolsVideoConsumer&) = delete;
+
   ~DevToolsVideoConsumer() override;
 
   // Copies |frame| onto a SkBitmap and returns it.
@@ -90,8 +94,6 @@
 
   // If |capturer_| is alive, then we are currently capturing.
   std::unique_ptr<viz::ClientFrameSinkVideoCapturer> capturer_;
-
-  DISALLOW_COPY_AND_ASSIGN(DevToolsVideoConsumer);
 };
 
 }  // namespace content
diff --git a/content/browser/devtools/protocol/audits_handler.h b/content/browser/devtools/protocol/audits_handler.h
index 796da2b..6eee66b 100644
--- a/content/browser/devtools/protocol/audits_handler.h
+++ b/content/browser/devtools/protocol/audits_handler.h
@@ -21,6 +21,10 @@
                             public Audits::Backend {
  public:
   AuditsHandler();
+
+  AuditsHandler(const AuditsHandler&) = delete;
+  AuditsHandler& operator=(const AuditsHandler&) = delete;
+
   ~AuditsHandler() override;
 
   static std::vector<AuditsHandler*> ForAgentHost(DevToolsAgentHostImpl* host);
@@ -40,8 +44,6 @@
   std::unique_ptr<Audits::Frontend> frontend_;
   bool enabled_ = false;
   RenderFrameHostImpl* host_;
-
-  DISALLOW_COPY_AND_ASSIGN(AuditsHandler);
 };
 
 }  // namespace protocol
diff --git a/content/browser/devtools/protocol/background_service_handler.h b/content/browser/devtools/protocol/background_service_handler.h
index 1c5d1df7..bd19ade 100644
--- a/content/browser/devtools/protocol/background_service_handler.h
+++ b/content/browser/devtools/protocol/background_service_handler.h
@@ -29,6 +29,10 @@
       public DevToolsBackgroundServicesContextImpl::EventObserver {
  public:
   BackgroundServiceHandler();
+
+  BackgroundServiceHandler(const BackgroundServiceHandler&) = delete;
+  BackgroundServiceHandler& operator=(const BackgroundServiceHandler&) = delete;
+
   ~BackgroundServiceHandler() override;
 
   void Wire(UberDispatcher* dispatcher) override;
@@ -64,8 +68,6 @@
   base::flat_set<devtools::proto::BackgroundService> enabled_services_;
 
   base::WeakPtrFactory<BackgroundServiceHandler> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(BackgroundServiceHandler);
 };
 
 }  // namespace protocol
diff --git a/content/browser/devtools/protocol/browser_handler.h b/content/browser/devtools/protocol/browser_handler.h
index 3f58a98..50efcb2 100644
--- a/content/browser/devtools/protocol/browser_handler.h
+++ b/content/browser/devtools/protocol/browser_handler.h
@@ -23,6 +23,10 @@
                        public download::DownloadItem::Observer {
  public:
   explicit BrowserHandler(bool allow_set_download_behavior);
+
+  BrowserHandler(const BrowserHandler&) = delete;
+  BrowserHandler& operator=(const BrowserHandler&) = delete;
+
   ~BrowserHandler() override;
 
   static Response FindBrowserContext(
@@ -98,8 +102,6 @@
   bool download_events_enabled_;
   const bool allow_set_download_behavior_;
   base::flat_set<download::DownloadItem*> pending_downloads_;
-
-  DISALLOW_COPY_AND_ASSIGN(BrowserHandler);
 };
 
 }  // namespace protocol
diff --git a/content/browser/devtools/protocol/devtools_domain_handler.h b/content/browser/devtools/protocol/devtools_domain_handler.h
index be887506..c3cc2998 100644
--- a/content/browser/devtools/protocol/devtools_domain_handler.h
+++ b/content/browser/devtools/protocol/devtools_domain_handler.h
@@ -18,6 +18,10 @@
 class DevToolsDomainHandler {
  public:
   explicit DevToolsDomainHandler(const std::string& name);
+
+  DevToolsDomainHandler(const DevToolsDomainHandler&) = delete;
+  DevToolsDomainHandler& operator=(const DevToolsDomainHandler&) = delete;
+
   virtual ~DevToolsDomainHandler();
 
   virtual void SetRenderer(int process_host_id,
@@ -34,8 +38,6 @@
  private:
   std::string name_;
   DevToolsSession* session_;
-
-  DISALLOW_COPY_AND_ASSIGN(DevToolsDomainHandler);
 };
 
 }  // namespace protocol
diff --git a/content/browser/devtools/protocol/devtools_download_manager_delegate.h b/content/browser/devtools/protocol/devtools_download_manager_delegate.h
index 54e2e0b..de55a20 100644
--- a/content/browser/devtools/protocol/devtools_download_manager_delegate.h
+++ b/content/browser/devtools/protocol/devtools_download_manager_delegate.h
@@ -52,6 +52,12 @@
       content::BrowserContext* browser_Context);
   static DevToolsDownloadManagerDelegate* GetInstance(
       content::BrowserContext* browser_Context);
+
+  DevToolsDownloadManagerDelegate(const DevToolsDownloadManagerDelegate&) =
+      delete;
+  DevToolsDownloadManagerDelegate& operator=(
+      const DevToolsDownloadManagerDelegate&) = delete;
+
   ~DevToolsDownloadManagerDelegate() override = default;
 
   void set_download_behavior(DownloadBehavior behavior) {
@@ -93,8 +99,6 @@
   content::DownloadManagerDelegate* original_download_delegate_;
   DownloadBehavior download_behavior_ = DownloadBehavior::DEFAULT;
   std::string download_path_;
-
-  DISALLOW_COPY_AND_ASSIGN(DevToolsDownloadManagerDelegate);
 };
 
 }  // namespace protocol
diff --git a/content/browser/devtools/protocol/devtools_protocol_browsertest.cc b/content/browser/devtools/protocol/devtools_protocol_browsertest.cc
index d5bbdfb7..7b87646c6 100644
--- a/content/browser/devtools/protocol/devtools_protocol_browsertest.cc
+++ b/content/browser/devtools/protocol/devtools_protocol_browsertest.cc
@@ -123,6 +123,11 @@
                                     public WebContentsDelegate {
  public:
   TestJavaScriptDialogManager() {}
+
+  TestJavaScriptDialogManager(const TestJavaScriptDialogManager&) = delete;
+  TestJavaScriptDialogManager& operator=(const TestJavaScriptDialogManager&) =
+      delete;
+
   ~TestJavaScriptDialogManager() override {}
 
   void Handle() {
@@ -176,7 +181,6 @@
   DialogClosedCallback callback_;
   bool handle_ = false;
   bool is_handled_ = false;
-  DISALLOW_COPY_AND_ASSIGN(TestJavaScriptDialogManager);
 };
 
 }  // namespace
diff --git a/content/browser/devtools/protocol/dom_handler.h b/content/browser/devtools/protocol/dom_handler.h
index fde98512..b9ef0c4 100644
--- a/content/browser/devtools/protocol/dom_handler.h
+++ b/content/browser/devtools/protocol/dom_handler.h
@@ -19,6 +19,10 @@
                    public DOM::Backend {
  public:
   explicit DOMHandler(bool allow_file_access);
+
+  DOMHandler(const DOMHandler&) = delete;
+  DOMHandler& operator=(const DOMHandler&) = delete;
+
   ~DOMHandler() override;
 
   void Wire(UberDispatcher* dispatcher) override;
@@ -35,7 +39,6 @@
  private:
   RenderFrameHostImpl* host_;
   bool allow_file_access_;
-  DISALLOW_COPY_AND_ASSIGN(DOMHandler);
 };
 
 }  // namespace protocol
diff --git a/content/browser/devtools/protocol/emulation_handler.h b/content/browser/devtools/protocol/emulation_handler.h
index 965b9e44..580a2e9 100644
--- a/content/browser/devtools/protocol/emulation_handler.h
+++ b/content/browser/devtools/protocol/emulation_handler.h
@@ -28,6 +28,10 @@
                          public Emulation::Backend {
  public:
   EmulationHandler();
+
+  EmulationHandler(const EmulationHandler&) = delete;
+  EmulationHandler& operator=(const EmulationHandler&) = delete;
+
   ~EmulationHandler() override;
 
   static std::vector<EmulationHandler*> ForAgentHost(
@@ -111,8 +115,6 @@
   RenderFrameHostImpl* host_;
 
   base::ScopedClosureRunner capture_handle_;
-
-  DISALLOW_COPY_AND_ASSIGN(EmulationHandler);
 };
 
 }  // namespace protocol
diff --git a/content/browser/devtools/protocol/fetch_handler.h b/content/browser/devtools/protocol/fetch_handler.h
index 50769222..12874fa4 100644
--- a/content/browser/devtools/protocol/fetch_handler.h
+++ b/content/browser/devtools/protocol/fetch_handler.h
@@ -34,6 +34,10 @@
 
   FetchHandler(DevToolsIOContext* io_context,
                UpdateLoaderFactoriesCallback update_loader_factories_callback);
+
+  FetchHandler(const FetchHandler&) = delete;
+  FetchHandler& operator=(const FetchHandler&) = delete;
+
   ~FetchHandler() override;
 
   static std::vector<FetchHandler*> ForAgentHost(DevToolsAgentHostImpl* host);
@@ -107,8 +111,6 @@
   std::unique_ptr<DevToolsURLLoaderInterceptor> interceptor_;
   UpdateLoaderFactoriesCallback update_loader_factories_callback_;
   base::WeakPtrFactory<FetchHandler> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(FetchHandler);
 };
 
 }  // namespace protocol
diff --git a/content/browser/devtools/protocol/input_handler.h b/content/browser/devtools/protocol/input_handler.h
index da7428f..2a2fcfe 100644
--- a/content/browser/devtools/protocol/input_handler.h
+++ b/content/browser/devtools/protocol/input_handler.h
@@ -36,6 +36,10 @@
 class InputHandler : public DevToolsDomainHandler, public Input::Backend {
  public:
   explicit InputHandler(bool allow_file_access);
+
+  InputHandler(const InputHandler&) = delete;
+  InputHandler& operator=(const InputHandler&) = delete;
+
   ~InputHandler() override;
 
   static std::vector<InputHandler*> ForAgentHost(DevToolsAgentHostImpl* host);
@@ -247,8 +251,6 @@
   std::unique_ptr<SyntheticPointerDriver> synthetic_pointer_driver_;
   base::flat_map<int, blink::WebTouchPoint> touch_points_;
   base::WeakPtrFactory<InputHandler> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(InputHandler);
 };
 
 }  // namespace protocol
diff --git a/content/browser/devtools/protocol/inspector_handler.h b/content/browser/devtools/protocol/inspector_handler.h
index 1385867..19f72ad 100644
--- a/content/browser/devtools/protocol/inspector_handler.h
+++ b/content/browser/devtools/protocol/inspector_handler.h
@@ -20,6 +20,10 @@
                          public Inspector::Backend {
  public:
   InspectorHandler();
+
+  InspectorHandler(const InspectorHandler&) = delete;
+  InspectorHandler& operator=(const InspectorHandler&) = delete;
+
   ~InspectorHandler() override;
 
   static std::vector<InspectorHandler*> ForAgentHost(
@@ -40,8 +44,6 @@
   std::unique_ptr<Inspector::Frontend> frontend_;
   RenderFrameHostImpl* host_ = nullptr;
   bool target_crashed_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(InspectorHandler);
 };
 
 }  // namespace protocol
diff --git a/content/browser/devtools/protocol/io_handler.h b/content/browser/devtools/protocol/io_handler.h
index e47c4f1..3c2a507b 100644
--- a/content/browser/devtools/protocol/io_handler.h
+++ b/content/browser/devtools/protocol/io_handler.h
@@ -21,6 +21,10 @@
                   public IO::Backend {
  public:
   explicit IOHandler(DevToolsIOContext* io_context);
+
+  IOHandler(const IOHandler&) = delete;
+  IOHandler& operator=(const IOHandler&) = delete;
+
   ~IOHandler() override;
 
   void Wire(UberDispatcher* dispatcher) override;
@@ -46,8 +50,6 @@
   BrowserContext* browser_context_;
   StoragePartition* storage_partition_;
   base::WeakPtrFactory<IOHandler> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(IOHandler);
 };
 
 }  // namespace protocol
diff --git a/content/browser/devtools/protocol/log_handler.h b/content/browser/devtools/protocol/log_handler.h
index c985df2..fda9248 100644
--- a/content/browser/devtools/protocol/log_handler.h
+++ b/content/browser/devtools/protocol/log_handler.h
@@ -19,6 +19,10 @@
 class LogHandler final : public DevToolsDomainHandler, public Log::Backend {
  public:
   LogHandler();
+
+  LogHandler(const LogHandler&) = delete;
+  LogHandler& operator=(const LogHandler&) = delete;
+
   ~LogHandler() override;
 
   static std::vector<LogHandler*> ForAgentHost(DevToolsAgentHostImpl* host);
@@ -35,8 +39,6 @@
  private:
   std::unique_ptr<Log::Frontend> frontend_;
   bool enabled_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(LogHandler);
 };
 
 }  // namespace protocol
diff --git a/content/browser/devtools/protocol/memory_handler.h b/content/browser/devtools/protocol/memory_handler.h
index fd456c6..d4574990 100644
--- a/content/browser/devtools/protocol/memory_handler.h
+++ b/content/browser/devtools/protocol/memory_handler.h
@@ -19,6 +19,10 @@
                       public Memory::Backend {
  public:
   MemoryHandler();
+
+  MemoryHandler(const MemoryHandler&) = delete;
+  MemoryHandler& operator=(const MemoryHandler&) = delete;
+
   ~MemoryHandler() override;
 
   void Wire(UberDispatcher* dispatcher) override;
@@ -40,8 +44,6 @@
   mojo::Remote<blink::mojom::LeakDetector> leak_detector_;
   std::unique_ptr<PrepareForLeakDetectionCallback> leak_detection_callback_;
   base::WeakPtrFactory<MemoryHandler> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(MemoryHandler);
 };
 
 }  // namespace protocol
diff --git a/content/browser/devtools/protocol/network_handler.cc b/content/browser/devtools/protocol/network_handler.cc
index 9447125c..b19fc69506 100644
--- a/content/browser/devtools/protocol/network_handler.cc
+++ b/content/browser/devtools/protocol/network_handler.cc
@@ -933,6 +933,9 @@
     SetServiceWorkerOfflineStatus(true);
   }
 
+  BackgroundSyncRestorer(const BackgroundSyncRestorer&) = delete;
+  BackgroundSyncRestorer& operator=(const BackgroundSyncRestorer&) = delete;
+
   ~BackgroundSyncRestorer() { SetServiceWorkerOfflineStatus(false); }
 
   void SetStoragePartition(StoragePartition* storage_partition) {
@@ -973,8 +976,6 @@
   StoragePartition* storage_partition_;
   int64_t offline_sw_registration_id_ =
       blink::mojom::kInvalidServiceWorkerRegistrationId;
-
-  DISALLOW_COPY_AND_ASSIGN(BackgroundSyncRestorer);
 };
 
 NetworkHandler::NetworkHandler(
diff --git a/content/browser/devtools/protocol/network_handler.h b/content/browser/devtools/protocol/network_handler.h
index ab806ca..9883773 100644
--- a/content/browser/devtools/protocol/network_handler.h
+++ b/content/browser/devtools/protocol/network_handler.h
@@ -71,6 +71,10 @@
                  const base::UnguessableToken& devtools_token,
                  DevToolsIOContext* io_context,
                  base::RepeatingClosure update_loader_factories_callback);
+
+  NetworkHandler(const NetworkHandler&) = delete;
+  NetworkHandler& operator=(const NetworkHandler&) = delete;
+
   ~NetworkHandler() override;
 
   static std::vector<NetworkHandler*> ForAgentHost(DevToolsAgentHostImpl* host);
@@ -334,8 +338,6 @@
   absl::optional<std::set<net::SourceStream::SourceType>>
       accepted_stream_types_;
   base::WeakPtrFactory<NetworkHandler> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(NetworkHandler);
 };
 
 }  // namespace protocol
diff --git a/content/browser/devtools/protocol/overlay_handler.h b/content/browser/devtools/protocol/overlay_handler.h
index 164120e5..aff6e63 100644
--- a/content/browser/devtools/protocol/overlay_handler.h
+++ b/content/browser/devtools/protocol/overlay_handler.h
@@ -20,6 +20,10 @@
 class OverlayHandler : public DevToolsDomainHandler, public Overlay::Backend {
  public:
   OverlayHandler();
+
+  OverlayHandler(const OverlayHandler&) = delete;
+  OverlayHandler& operator=(const OverlayHandler&) = delete;
+
   ~OverlayHandler() override;
   void Wire(UberDispatcher* dispatcher) override;
   void SetRenderer(int process_host_id,
@@ -37,7 +41,6 @@
   RenderFrameHostImpl* host_ = nullptr;
   std::string inspect_mode_;
   std::string paused_message_;
-  DISALLOW_COPY_AND_ASSIGN(OverlayHandler);
 };
 
 }  // namespace protocol
diff --git a/content/browser/devtools/protocol/page_handler.cc b/content/browser/devtools/protocol/page_handler.cc
index e37de90e..6f19b1c 100644
--- a/content/browser/devtools/protocol/page_handler.cc
+++ b/content/browser/devtools/protocol/page_handler.cc
@@ -1571,6 +1571,9 @@
         case BackForwardCacheDisable::DisabledReasonId::kMediaSession:
           return Page::BackForwardCacheNotRestoredReasonEnum::
               ContentMediaSession;
+        case BackForwardCacheDisable::DisabledReasonId::kMediaSessionService:
+          return Page::BackForwardCacheNotRestoredReasonEnum::
+              ContentMediaSessionService;
       }
     case BackForwardCache::DisabledSource::kEmbedder:
       switch (static_cast<back_forward_cache::DisabledReasonId>(reason.id)) {
diff --git a/content/browser/devtools/protocol/page_handler.h b/content/browser/devtools/protocol/page_handler.h
index 41df398..81b1f1ff 100644
--- a/content/browser/devtools/protocol/page_handler.h
+++ b/content/browser/devtools/protocol/page_handler.h
@@ -66,6 +66,10 @@
   PageHandler(EmulationHandler* emulation_handler,
               BrowserHandler* browser_handler,
               bool allow_file_access);
+
+  PageHandler(const PageHandler&) = delete;
+  PageHandler& operator=(const PageHandler&) = delete;
+
   ~PageHandler() override;
 
   static std::vector<PageHandler*> EnabledForWebContents(
@@ -243,8 +247,6 @@
   base::flat_set<download::DownloadItem*> pending_downloads_;
 
   base::WeakPtrFactory<PageHandler> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(PageHandler);
 };
 
 }  // namespace protocol
diff --git a/content/browser/devtools/protocol/schema_handler.h b/content/browser/devtools/protocol/schema_handler.h
index c57c7f24..b02d3f3e 100644
--- a/content/browser/devtools/protocol/schema_handler.h
+++ b/content/browser/devtools/protocol/schema_handler.h
@@ -16,15 +16,16 @@
                       public Schema::Backend {
  public:
   SchemaHandler();
+
+  SchemaHandler(const SchemaHandler&) = delete;
+  SchemaHandler& operator=(const SchemaHandler&) = delete;
+
   ~SchemaHandler() override;
 
   void Wire(UberDispatcher* dispatcher) override;
 
   Response GetDomains(
       std::unique_ptr<protocol::Array<Schema::Domain>>* domains) override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(SchemaHandler);
 };
 
 }  // namespace protocol
diff --git a/content/browser/devtools/protocol/security_handler.h b/content/browser/devtools/protocol/security_handler.h
index 1910364..a10232f 100644
--- a/content/browser/devtools/protocol/security_handler.h
+++ b/content/browser/devtools/protocol/security_handler.h
@@ -28,6 +28,10 @@
       base::OnceCallback<void(content::CertificateRequestResultType)>;
 
   SecurityHandler();
+
+  SecurityHandler(const SecurityHandler&) = delete;
+  SecurityHandler& operator=(const SecurityHandler&) = delete;
+
   ~SecurityHandler() override;
 
   static std::vector<SecurityHandler*> ForAgentHost(
@@ -70,8 +74,6 @@
   enum class CertErrorOverrideMode { kDisabled, kHandleEvents, kIgnoreAll };
   CertErrorOverrideMode cert_error_override_mode_ =
       CertErrorOverrideMode::kDisabled;
-
-  DISALLOW_COPY_AND_ASSIGN(SecurityHandler);
 };
 
 }  // namespace protocol
diff --git a/content/browser/devtools/protocol/service_worker_handler.h b/content/browser/devtools/protocol/service_worker_handler.h
index bf1e11b0..19ca2bc 100644
--- a/content/browser/devtools/protocol/service_worker_handler.h
+++ b/content/browser/devtools/protocol/service_worker_handler.h
@@ -32,6 +32,10 @@
                              public ServiceWorker::Backend {
  public:
   explicit ServiceWorkerHandler(bool allow_inspect_worker);
+
+  ServiceWorkerHandler(const ServiceWorkerHandler&) = delete;
+  ServiceWorkerHandler& operator=(const ServiceWorkerHandler&) = delete;
+
   ~ServiceWorkerHandler() override;
 
   void Wire(UberDispatcher* dispatcher) override;
@@ -81,8 +85,6 @@
   StoragePartitionImpl* storage_partition_;
 
   base::WeakPtrFactory<ServiceWorkerHandler> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerHandler);
 };
 
 }  // namespace protocol
diff --git a/content/browser/devtools/protocol/storage_handler.cc b/content/browser/devtools/protocol/storage_handler.cc
index 74a1cdb..29df7aae 100644
--- a/content/browser/devtools/protocol/storage_handler.cc
+++ b/content/browser/devtools/protocol/storage_handler.cc
@@ -130,6 +130,9 @@
     DCHECK_CURRENTLY_ON(BrowserThread::UI);
   }
 
+  CacheStorageObserver(const CacheStorageObserver&) = delete;
+  CacheStorageObserver& operator=(const CacheStorageObserver&) = delete;
+
   ~CacheStorageObserver() override {
     DCHECK_CURRENTLY_ON(BrowserThread::UI);
   }
@@ -173,8 +176,6 @@
 
   base::WeakPtr<StorageHandler> owner_;
   mojo::Receiver<storage::mojom::CacheStorageObserver> receiver_;
-
-  DISALLOW_COPY_AND_ASSIGN(CacheStorageObserver);
 };
 
 // Observer that listens on the IDB thread for IndexedDB notifications and
@@ -192,6 +193,9 @@
     ReconnectObserver();
   }
 
+  IndexedDBObserver(const IndexedDBObserver&) = delete;
+  IndexedDBObserver& operator=(const IndexedDBObserver&) = delete;
+
   ~IndexedDBObserver() override { DCHECK_CURRENTLY_ON(BrowserThread::UI); }
 
   void TrackOrigin(const blink::StorageKey& storage_key) {
@@ -256,8 +260,6 @@
   base::flat_set<blink::StorageKey> storage_keys_;
   base::WeakPtr<StorageHandler> owner_;
   mojo::Receiver<storage::mojom::IndexedDBObserver> receiver_;
-
-  DISALLOW_COPY_AND_ASSIGN(IndexedDBObserver);
 };
 
 StorageHandler::StorageHandler()
diff --git a/content/browser/devtools/protocol/storage_handler.h b/content/browser/devtools/protocol/storage_handler.h
index 263c5a8d..aa45e4a 100644
--- a/content/browser/devtools/protocol/storage_handler.h
+++ b/content/browser/devtools/protocol/storage_handler.h
@@ -26,6 +26,10 @@
                        public Storage::Backend {
  public:
   StorageHandler();
+
+  StorageHandler(const StorageHandler&) = delete;
+  StorageHandler& operator=(const StorageHandler&) = delete;
+
   ~StorageHandler() override;
 
   // content::protocol::DevToolsDomainHandler
@@ -105,8 +109,6 @@
   std::unique_ptr<storage::QuotaOverrideHandle> quota_override_handle_;
 
   base::WeakPtrFactory<StorageHandler> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(StorageHandler);
 };
 
 }  // namespace protocol
diff --git a/content/browser/devtools/protocol/system_info_handler.h b/content/browser/devtools/protocol/system_info_handler.h
index 1d2230c..7120c4c 100644
--- a/content/browser/devtools/protocol/system_info_handler.h
+++ b/content/browser/devtools/protocol/system_info_handler.h
@@ -21,6 +21,10 @@
  public:
 
   SystemInfoHandler();
+
+  SystemInfoHandler(const SystemInfoHandler&) = delete;
+  SystemInfoHandler& operator=(const SystemInfoHandler&) = delete;
+
   ~SystemInfoHandler() override;
 
   void Wire(UberDispatcher* dispatcher) override;
@@ -31,8 +35,6 @@
 
  private:
   friend class SystemInfoHandlerGpuObserver;
-
-  DISALLOW_COPY_AND_ASSIGN(SystemInfoHandler);
 };
 
 }  // namespace protocol
diff --git a/content/browser/devtools/protocol/target_handler.cc b/content/browser/devtools/protocol/target_handler.cc
index 007860a..0ef5dcd86 100644
--- a/content/browser/devtools/protocol/target_handler.cc
+++ b/content/browser/devtools/protocol/target_handler.cc
@@ -291,6 +291,9 @@
 // Throttle is owned externally by the navigation subsystem.
 class TargetHandler::Throttle : public content::NavigationThrottle {
  public:
+  Throttle(const Throttle&) = delete;
+  Throttle& operator=(const Throttle&) = delete;
+
   ~Throttle() override { CleanupPointers(); }
   TargetAutoAttacher* auto_attacher() const { return auto_attacher_; }
   void Clear();
@@ -315,8 +318,6 @@
  private:
   void CleanupPointers();
   TargetAutoAttacher* auto_attacher_;
-
-  DISALLOW_COPY_AND_ASSIGN(Throttle);
 };
 
 class TargetHandler::ResponseThrottle : public TargetHandler::Throttle {
@@ -400,6 +401,9 @@
     return id;
   }
 
+  Session(const Session&) = delete;
+  Session& operator=(const Session&) = delete;
+
   ~Session() override {
     if (!agent_host_)
       return;
@@ -540,8 +544,6 @@
   Throttle* throttle_ = nullptr;
   scoped_refptr<DevToolsThrottleHandle> service_worker_throttle_;
   TargetAutoAttacher* auto_attacher_ = nullptr;
-
-  DISALLOW_COPY_AND_ASSIGN(Session);
 };
 
 void TargetHandler::Throttle::CleanupPointers() {
diff --git a/content/browser/devtools/protocol/target_handler.h b/content/browser/devtools/protocol/target_handler.h
index 470d942..ab6dadfc 100644
--- a/content/browser/devtools/protocol/target_handler.h
+++ b/content/browser/devtools/protocol/target_handler.h
@@ -47,6 +47,10 @@
                 const std::string& owner_target_id,
                 TargetAutoAttacher* auto_attacher,
                 DevToolsSession* root_session);
+
+  TargetHandler(const TargetHandler&) = delete;
+  TargetHandler& operator=(const TargetHandler&) = delete;
+
   ~TargetHandler() override;
 
   static std::vector<TargetHandler*> ForAgentHost(DevToolsAgentHostImpl* host);
@@ -189,8 +193,6 @@
   base::flat_set<Throttle*> throttles_;
   absl::optional<net::ProxyConfig> pending_proxy_config_;
   base::WeakPtrFactory<TargetHandler> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(TargetHandler);
 };
 
 }  // namespace protocol
diff --git a/content/browser/devtools/protocol/tethering_handler.h b/content/browser/devtools/protocol/tethering_handler.h
index cd24de65..82d0bf3 100644
--- a/content/browser/devtools/protocol/tethering_handler.h
+++ b/content/browser/devtools/protocol/tethering_handler.h
@@ -38,6 +38,10 @@
   // is accepted.
   TetheringHandler(CreateServerSocketCallback socket_callback,
                    scoped_refptr<base::SingleThreadTaskRunner> task_runner);
+
+  TetheringHandler(const TetheringHandler&) = delete;
+  TetheringHandler& operator=(const TetheringHandler&) = delete;
+
   ~TetheringHandler() override;
 
   void Wire(UberDispatcher* dispatcher) override;
@@ -58,8 +62,6 @@
   base::WeakPtrFactory<TetheringHandler> weak_factory_{this};
 
   static TetheringImpl* impl_;
-
-  DISALLOW_COPY_AND_ASSIGN(TetheringHandler);
 };
 
 }  // namespace protocol
diff --git a/content/browser/display_cutout/display_cutout_host_impl.h b/content/browser/display_cutout/display_cutout_host_impl.h
index 19df7ea..c01070b 100644
--- a/content/browser/display_cutout/display_cutout_host_impl.h
+++ b/content/browser/display_cutout/display_cutout_host_impl.h
@@ -17,6 +17,10 @@
 class DisplayCutoutHostImpl : public blink::mojom::DisplayCutoutHost {
  public:
   explicit DisplayCutoutHostImpl(WebContentsImpl*);
+
+  DisplayCutoutHostImpl(const DisplayCutoutHostImpl&) = delete;
+  DisplayCutoutHostImpl& operator=(const DisplayCutoutHostImpl&) = delete;
+
   ~DisplayCutoutHostImpl() override;
 
   // Binds a new receiver for the specified frame.
@@ -72,8 +76,6 @@
 
   // Weak pointer to the owning |WebContentsImpl| instance.
   WebContentsImpl* web_contents_impl_;
-
-  DISALLOW_COPY_AND_ASSIGN(DisplayCutoutHostImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/download/data_url_blob_reader.h b/content/browser/download/data_url_blob_reader.h
index b7226ab0..de6faca 100644
--- a/content/browser/download/data_url_blob_reader.h
+++ b/content/browser/download/data_url_blob_reader.h
@@ -36,6 +36,9 @@
       mojo::PendingRemote<blink::mojom::Blob> data_url_blob,
       ReadCompletionCallback read_completion_callback);
 
+  DataURLBlobReader(const DataURLBlobReader&) = delete;
+  DataURLBlobReader& operator=(const DataURLBlobReader&) = delete;
+
   ~DataURLBlobReader() override;
 
  private:
@@ -63,8 +66,6 @@
   base::OnceClosure callback_;
 
   SEQUENCE_CHECKER(sequence_checker_);
-
-  DISALLOW_COPY_AND_ASSIGN(DataURLBlobReader);
 };
 
 }  // namespace content
diff --git a/content/browser/download/download_browsertest.cc b/content/browser/download/download_browsertest.cc
index 670acc7..83841b09 100644
--- a/content/browser/download/download_browsertest.cc
+++ b/content/browser/download/download_browsertest.cc
@@ -270,6 +270,9 @@
       base::WeakPtr<download::DownloadDestinationObserver> observer,
       base::WeakPtr<DownloadFileWithDelayFactory> owner);
 
+  DownloadFileWithDelay(const DownloadFileWithDelay&) = delete;
+  DownloadFileWithDelay& operator=(const DownloadFileWithDelay&) = delete;
+
   ~DownloadFileWithDelay() override;
 
   // Wraps DownloadFileImpl::Rename* and intercepts the return callback,
@@ -298,14 +301,17 @@
   // DownloadFileWithDelay lives on the file thread, but
   // DownloadFileWithDelayFactory is purely a UI thread object.
   base::WeakPtr<DownloadFileWithDelayFactory> owner_;
-
-  DISALLOW_COPY_AND_ASSIGN(DownloadFileWithDelay);
 };
 
 // All routines on this class must be called on the UI thread.
 class DownloadFileWithDelayFactory : public download::DownloadFileFactory {
  public:
   DownloadFileWithDelayFactory();
+
+  DownloadFileWithDelayFactory(const DownloadFileWithDelayFactory&) = delete;
+  DownloadFileWithDelayFactory& operator=(const DownloadFileWithDelayFactory&) =
+      delete;
+
   ~DownloadFileWithDelayFactory() override;
 
   // DownloadFileFactory interface.
@@ -326,8 +332,6 @@
   std::vector<base::OnceClosure> rename_callbacks_;
   base::OnceClosure stop_waiting_;
   base::WeakPtrFactory<DownloadFileWithDelayFactory> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(DownloadFileWithDelayFactory);
 };
 
 DownloadFileWithDelay::DownloadFileWithDelay(
@@ -540,6 +544,12 @@
 class ErrorInjectionDownloadFileFactory : public download::DownloadFileFactory {
  public:
   ErrorInjectionDownloadFileFactory() : download_file_(nullptr) {}
+
+  ErrorInjectionDownloadFileFactory(const ErrorInjectionDownloadFileFactory&) =
+      delete;
+  ErrorInjectionDownloadFileFactory& operator=(
+      const ErrorInjectionDownloadFileFactory&) = delete;
+
   ~ErrorInjectionDownloadFileFactory() override = default;
 
   // DownloadFileFactory interface.
@@ -590,8 +600,6 @@
   int64_t injected_error_length_ = 0;
   base::WeakPtrFactory<ErrorInjectionDownloadFileFactory> weak_ptr_factory_{
       this};
-
-  DISALLOW_COPY_AND_ASSIGN(ErrorInjectionDownloadFileFactory);
 };
 
 class TestShellDownloadManagerDelegate : public ShellDownloadManagerDelegate {
@@ -763,6 +771,10 @@
  public:
   explicit NavigationStartObserver(WebContents* web_contents)
       : WebContentsObserver(web_contents) {}
+
+  NavigationStartObserver(const NavigationStartObserver&) = delete;
+  NavigationStartObserver& operator=(const NavigationStartObserver&) = delete;
+
   ~NavigationStartObserver() override {}
 
   void WaitForFinished(int navigation_count) {
@@ -786,7 +798,6 @@
   int navigation_count_ = 0;
   int start_count_ = 0;
   base::OnceClosure completion_closure_;
-  DISALLOW_COPY_AND_ASSIGN(NavigationStartObserver);
 };
 
 bool IsDownloadInState(download::DownloadItem::DownloadState state,
diff --git a/content/browser/download/download_manager_impl.h b/content/browser/download/download_manager_impl.h
index e3e64302..f83fbe2 100644
--- a/content/browser/download/download_manager_impl.h
+++ b/content/browser/download/download_manager_impl.h
@@ -70,6 +70,10 @@
   // Caller guarantees that |net_log| will remain valid
   // for the lifetime of DownloadManagerImpl (until Shutdown() is called).
   explicit DownloadManagerImpl(BrowserContext* browser_context);
+
+  DownloadManagerImpl(const DownloadManagerImpl&) = delete;
+  DownloadManagerImpl& operator=(const DownloadManagerImpl&) = delete;
+
   ~DownloadManagerImpl() override;
 
   // Implementation functions (not part of the DownloadManager interface).
@@ -385,8 +389,6 @@
   std::set<uint32_t> pending_disk_access_query_;
 
   base::WeakPtrFactory<DownloadManagerImpl> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(DownloadManagerImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/download/download_manager_impl_unittest.cc b/content/browser/download/download_manager_impl_unittest.cc
index 35f6c12..6907de3 100644
--- a/content/browser/download/download_manager_impl_unittest.cc
+++ b/content/browser/download/download_manager_impl_unittest.cc
@@ -112,6 +112,10 @@
       public base::SupportsWeakPtr<MockDownloadItemFactory> {
  public:
   MockDownloadItemFactory();
+
+  MockDownloadItemFactory(const MockDownloadItemFactory&) = delete;
+  MockDownloadItemFactory& operator=(const MockDownloadItemFactory&) = delete;
+
   ~MockDownloadItemFactory() override;
 
   // Access to map of created items.
@@ -180,8 +184,6 @@
   std::map<uint32_t, download::MockDownloadItemImpl*> items_;
   download::DownloadItemImplDelegate item_delegate_;
   bool is_download_persistent_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockDownloadItemFactory);
 };
 
 MockDownloadItemFactory::MockDownloadItemFactory()
@@ -410,6 +412,9 @@
         interrupt_reason_(download::DOWNLOAD_INTERRUPT_REASON_NONE),
         next_download_id_(0) {}
 
+  DownloadManagerTest(const DownloadManagerTest&) = delete;
+  DownloadManagerTest& operator=(const DownloadManagerTest&) = delete;
+
   // We tear down everything in TearDown().
   ~DownloadManagerTest() override {}
 
@@ -587,8 +592,6 @@
   std::unique_ptr<MockDownloadManagerObserver> observer_;
   std::unique_ptr<TestBrowserContext> browser_context_;
   uint32_t next_download_id_;
-
-  DISALLOW_COPY_AND_ASSIGN(DownloadManagerTest);
 };
 
 // Confirm the appropriate invocations occur when you start a download.
diff --git a/content/browser/download/drag_download_file.h b/content/browser/download/drag_download_file.h
index 1bf2e21..79ffd61 100644
--- a/content/browser/download/drag_download_file.h
+++ b/content/browser/download/drag_download_file.h
@@ -42,6 +42,10 @@
                    const Referrer& referrer,
                    const std::string& referrer_encoding,
                    WebContents* web_contents);
+
+  DragDownloadFile(const DragDownloadFile&) = delete;
+  DragDownloadFile& operator=(const DragDownloadFile&) = delete;
+
   ~DragDownloadFile() override;
 
   // DownloadFileProvider methods.
@@ -63,8 +67,6 @@
   base::RunLoop nested_loop_;
   DragDownloadFileUI* drag_ui_ = nullptr;
   base::WeakPtrFactory<DragDownloadFile> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(DragDownloadFile);
 };
 
 }  // namespace content
diff --git a/content/browser/download/mhtml_generation_browsertest.cc b/content/browser/download/mhtml_generation_browsertest.cc
index db34fe7a..97e4aff 100644
--- a/content/browser/download/mhtml_generation_browsertest.cc
+++ b/content/browser/download/mhtml_generation_browsertest.cc
@@ -113,6 +113,10 @@
 class MockWriterBase : public mojom::MhtmlFileWriter {
  public:
   MockWriterBase() = default;
+
+  MockWriterBase(const MockWriterBase&) = delete;
+  MockWriterBase& operator=(const MockWriterBase&) = delete;
+
   ~MockWriterBase() override = default;
 
   void BindReceiver(mojo::ScopedInterfaceEndpointHandle handle) {
@@ -143,9 +147,6 @@
   }
 
   mojo::AssociatedReceiver<mojom::MhtmlFileWriter> receiver_{this};
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(MockWriterBase);
 };
 
 // This Mock injects our overwritten interface, running the callback
diff --git a/content/browser/download/network_download_pending_url_loader_factory.h b/content/browser/download/network_download_pending_url_loader_factory.h
index f66f99da..c5e43f0 100644
--- a/content/browser/download/network_download_pending_url_loader_factory.h
+++ b/content/browser/download/network_download_pending_url_loader_factory.h
@@ -25,6 +25,12 @@
           proxy_factory_remote,
       mojo::PendingReceiver<network::mojom::URLLoaderFactory>
           proxy_factory_receiver);
+
+  NetworkDownloadPendingURLLoaderFactory(
+      const NetworkDownloadPendingURLLoaderFactory&) = delete;
+  NetworkDownloadPendingURLLoaderFactory& operator=(
+      const NetworkDownloadPendingURLLoaderFactory&) = delete;
+
   ~NetworkDownloadPendingURLLoaderFactory() override;
 
  protected:
@@ -37,8 +43,6 @@
   mojo::PendingRemote<network::mojom::URLLoaderFactory> proxy_factory_remote_;
   mojo::PendingReceiver<network::mojom::URLLoaderFactory>
       proxy_factory_receiver_;
-
-  DISALLOW_COPY_AND_ASSIGN(NetworkDownloadPendingURLLoaderFactory);
 };
 
 }  // namespace content
diff --git a/content/browser/download/save_file.h b/content/browser/download/save_file.h
index 1893a00..d9b79651 100644
--- a/content/browser/download/save_file.h
+++ b/content/browser/download/save_file.h
@@ -24,6 +24,10 @@
 class SaveFile {
  public:
   SaveFile(std::unique_ptr<SaveFileCreateInfo> info, bool calculate_hash);
+
+  SaveFile(const SaveFile&) = delete;
+  SaveFile& operator=(const SaveFile&) = delete;
+
   virtual ~SaveFile();
 
   // BaseFile delegated functions.
@@ -56,8 +60,6 @@
  private:
   download::BaseFile file_;
   std::unique_ptr<SaveFileCreateInfo> info_;
-
-  DISALLOW_COPY_AND_ASSIGN(SaveFile);
 };
 
 }  // namespace content
diff --git a/content/browser/download/save_file_manager.cc b/content/browser/download/save_file_manager.cc
index 98ce67d..fb0f282 100644
--- a/content/browser/download/save_file_manager.cc
+++ b/content/browser/download/save_file_manager.cc
@@ -68,6 +68,9 @@
         url_loader_factory, save_file_manager, std::move(on_complete_cb)));
   }
 
+  SimpleURLLoaderHelper(const SimpleURLLoaderHelper&) = delete;
+  SimpleURLLoaderHelper& operator=(const SimpleURLLoaderHelper&) = delete;
+
   ~SimpleURLLoaderHelper() override = default;
 
  private:
@@ -142,8 +145,6 @@
   SavePackageId save_package_id_;
   std::unique_ptr<network::SimpleURLLoader> url_loader_;
   URLLoaderCompleteCallback on_complete_cb_;
-
-  DISALLOW_COPY_AND_ASSIGN(SimpleURLLoaderHelper);
 };
 
 SaveFileManager::SaveFileManager() {
diff --git a/content/browser/download/save_item.h b/content/browser/download/save_item.h
index a499b169..35f315e4c 100644
--- a/content/browser/download/save_item.h
+++ b/content/browser/download/save_item.h
@@ -34,6 +34,9 @@
            int frame_tree_node_id,
            int container_frame_tree_node_id);
 
+  SaveItem(const SaveItem&) = delete;
+  SaveItem& operator=(const SaveItem&) = delete;
+
   ~SaveItem();
 
   void Start();
@@ -103,8 +106,6 @@
 
   // Our owning object.
   SavePackage* package_;
-
-  DISALLOW_COPY_AND_ASSIGN(SaveItem);
 };
 
 }  // namespace content
diff --git a/content/browser/download/save_package_serialization_handler.h b/content/browser/download/save_package_serialization_handler.h
index 5c24ef6..ef224e4 100644
--- a/content/browser/download/save_package_serialization_handler.h
+++ b/content/browser/download/save_package_serialization_handler.h
@@ -30,6 +30,11 @@
       const DidReceiveDataCallback& did_serialize_data_callback,
       DoneCallback done_callback);
 
+  SavePackageSerializationHandler(const SavePackageSerializationHandler&) =
+      delete;
+  SavePackageSerializationHandler& operator=(
+      const SavePackageSerializationHandler&) = delete;
+
   ~SavePackageSerializationHandler() override;
 
   // mojom::FrameHTMLSerializerHandler implementation:
@@ -39,8 +44,6 @@
  private:
   const DidReceiveDataCallback did_serialize_data_callback_;
   DoneCallback done_callback_;
-
-  DISALLOW_COPY_AND_ASSIGN(SavePackageSerializationHandler);
 };
 
 }  // namespace content
diff --git a/content/browser/field_trial_recorder.h b/content/browser/field_trial_recorder.h
index 040e2f5..a7aeba83 100644
--- a/content/browser/field_trial_recorder.h
+++ b/content/browser/field_trial_recorder.h
@@ -14,6 +14,10 @@
 class FieldTrialRecorder : public mojom::FieldTrialRecorder {
  public:
   FieldTrialRecorder();
+
+  FieldTrialRecorder(const FieldTrialRecorder&) = delete;
+  FieldTrialRecorder& operator=(const FieldTrialRecorder&) = delete;
+
   ~FieldTrialRecorder() override;
 
   static void Create(mojo::PendingReceiver<mojom::FieldTrialRecorder> receiver);
@@ -23,8 +27,6 @@
   void FieldTrialActivated(const std::string& trial_name) override;
 
   base::ThreadChecker thread_checker_;
-
-  DISALLOW_COPY_AND_ASSIGN(FieldTrialRecorder);
 };
 
 }  // namespace content
diff --git a/content/browser/file_system/file_system_manager_impl.h b/content/browser/file_system/file_system_manager_impl.h
index 0be1112..0f43ac5 100644
--- a/content/browser/file_system/file_system_manager_impl.h
+++ b/content/browser/file_system/file_system_manager_impl.h
@@ -60,6 +60,10 @@
       int process_id,
       scoped_refptr<storage::FileSystemContext> file_system_context,
       scoped_refptr<ChromeBlobStorageContext> blob_storage_context);
+
+  FileSystemManagerImpl(const FileSystemManagerImpl&) = delete;
+  FileSystemManagerImpl& operator=(const FileSystemManagerImpl&) = delete;
+
   ~FileSystemManagerImpl() override;
   base::WeakPtr<FileSystemManagerImpl> GetWeakPtr();
 
@@ -224,8 +228,6 @@
       in_transit_snapshot_files_;
 
   base::WeakPtrFactory<FileSystemManagerImpl> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(FileSystemManagerImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/file_system/file_system_url_loader_factory.cc b/content/browser/file_system/file_system_url_loader_factory.cc
index 2a74b3a2..63f8cac 100644
--- a/content/browser/file_system/file_system_url_loader_factory.cc
+++ b/content/browser/file_system/file_system_url_loader_factory.cc
@@ -620,6 +620,10 @@
         params_(std::move(params)),
         io_task_runner_(io_task_runner) {}
 
+  FileSystemURLLoaderFactory(const FileSystemURLLoaderFactory&) = delete;
+  FileSystemURLLoaderFactory& operator=(const FileSystemURLLoaderFactory&) =
+      delete;
+
   ~FileSystemURLLoaderFactory() override = default;
 
  private:
@@ -652,8 +656,6 @@
 
   const FactoryParams params_;
   scoped_refptr<base::SequencedTaskRunner> io_task_runner_;
-
-  DISALLOW_COPY_AND_ASSIGN(FileSystemURLLoaderFactory);
 };
 
 }  // anonymous namespace
diff --git a/content/browser/find_in_page_client.h b/content/browser/find_in_page_client.h
index a79c1a56..9710523 100644
--- a/content/browser/find_in_page_client.h
+++ b/content/browser/find_in_page_client.h
@@ -20,6 +20,9 @@
   FindInPageClient(FindRequestManager* find_request_manager,
                    RenderFrameHostImpl* rfh);
 
+  FindInPageClient(const FindInPageClient&) = delete;
+  FindInPageClient& operator=(const FindInPageClient&) = delete;
+
   ~FindInPageClient() override;
 
   void ActivateNearestFindResult(int request_id, const gfx::PointF& point);
@@ -45,8 +48,6 @@
   FindRequestManager* const find_request_manager_;
   mojo::Receiver<blink::mojom::FindInPageClient> receiver_{this};
   int number_of_matches_ = 0;
-
-  DISALLOW_COPY_AND_ASSIGN(FindInPageClient);
 };
 
 }  // namespace content
diff --git a/content/browser/find_request_manager.cc b/content/browser/find_request_manager.cc
index 25359488..fa11e28 100644
--- a/content/browser/find_request_manager.cc
+++ b/content/browser/find_request_manager.cc
@@ -174,6 +174,9 @@
   FrameObserver(WebContentsImpl* web_contents, FindRequestManager* manager)
       : WebContentsObserver(web_contents), manager_(manager) {}
 
+  FrameObserver(const FrameObserver&) = delete;
+  FrameObserver& operator=(const FrameObserver&) = delete;
+
   ~FrameObserver() override = default;
 
   void DidFinishLoad(RenderFrameHost* rfh, const GURL& validated_url) override {
@@ -207,8 +210,6 @@
 
   // The FindRequestManager that owns this FrameObserver.
   FindRequestManager* const manager_;
-
-  DISALLOW_COPY_AND_ASSIGN(FrameObserver);
 };
 
 FindRequestManager::FindRequest::FindRequest() = default;
diff --git a/content/browser/find_request_manager.h b/content/browser/find_request_manager.h
index c9551aa7..b7dedf46 100644
--- a/content/browser/find_request_manager.h
+++ b/content/browser/find_request_manager.h
@@ -35,6 +35,10 @@
 class CONTENT_EXPORT FindRequestManager {
  public:
   explicit FindRequestManager(WebContentsImpl* web_contents);
+
+  FindRequestManager(const FindRequestManager&) = delete;
+  FindRequestManager& operator=(const FindRequestManager&) = delete;
+
   ~FindRequestManager();
 
   // Initiates a find operation for |search_text| with the options specified in
@@ -333,8 +337,6 @@
   // WebContentsObservers to observe frame changes in |contents_| and its inner
   // WebContentses.
   std::vector<std::unique_ptr<FrameObserver>> frame_observers_;
-
-  DISALLOW_COPY_AND_ASSIGN(FindRequestManager);
 };
 
 }  // namespace content
diff --git a/content/browser/find_request_manager_browsertest.cc b/content/browser/find_request_manager_browsertest.cc
index bc07f72..f243fa5 100644
--- a/content/browser/find_request_manager_browsertest.cc
+++ b/content/browser/find_request_manager_browsertest.cc
@@ -43,6 +43,10 @@
   FindRequestManagerTest()
       : normal_delegate_(nullptr),
         last_request_id_(0) {}
+
+  FindRequestManagerTest(const FindRequestManagerTest&) = delete;
+  FindRequestManagerTest& operator=(const FindRequestManagerTest&) = delete;
+
   ~FindRequestManagerTest() override {}
 
   void SetUpOnMainThread() override {
@@ -143,8 +147,6 @@
 
   // The ID of the last find request requested.
   int last_request_id_;
-
-  DISALLOW_COPY_AND_ASSIGN(FindRequestManagerTest);
 };
 
 INSTANTIATE_TEST_SUITE_P(FindRequestManagerTests,
@@ -898,6 +900,12 @@
       : impl_(rwhi->frame_widget_host_receiver_for_testing().SwapImplForTesting(
             this)),
         widget_message_seen_(false) {}
+
+  ZoomToFindInPageRectMessageFilter(const ZoomToFindInPageRectMessageFilter&) =
+      delete;
+  ZoomToFindInPageRectMessageFilter& operator=(
+      const ZoomToFindInPageRectMessageFilter&) = delete;
+
   ~ZoomToFindInPageRectMessageFilter() override {}
 
   blink::mojom::FrameWidgetHost* GetForwardingInterface() override {
@@ -932,8 +940,6 @@
   gfx::Rect widget_rect_seen_;
   bool widget_message_seen_;
   base::OnceClosure quit_closure_;
-
-  DISALLOW_COPY_AND_ASSIGN(ZoomToFindInPageRectMessageFilter);
 };
 
 }  // namespace
diff --git a/content/browser/font_unique_name_lookup/font_unique_name_lookup_service.h b/content/browser/font_unique_name_lookup/font_unique_name_lookup_service.h
index 091c54c0..09fe482 100644
--- a/content/browser/font_unique_name_lookup/font_unique_name_lookup_service.h
+++ b/content/browser/font_unique_name_lookup/font_unique_name_lookup_service.h
@@ -16,6 +16,11 @@
 class FontUniqueNameLookupService : public blink::mojom::FontUniqueNameLookup {
  public:
   FontUniqueNameLookupService();
+
+  FontUniqueNameLookupService(const FontUniqueNameLookupService&) = delete;
+  FontUniqueNameLookupService& operator=(const FontUniqueNameLookupService&) =
+      delete;
+
   ~FontUniqueNameLookupService() override;
 
   static void Create(mojo::PendingReceiver<blink::mojom::FontUniqueNameLookup>);
@@ -29,7 +34,6 @@
       GetUniqueNameLookupTableIfAvailableCallback callback) override;
 
  private:
-  DISALLOW_COPY_AND_ASSIGN(FontUniqueNameLookupService);
   ::content::FontUniqueNameLookup& font_unique_name_lookup_;
 };
 
diff --git a/content/browser/generic_sensor/generic_sensor_browsertest.cc b/content/browser/generic_sensor/generic_sensor_browsertest.cc
index 6af741c..acf5aad 100644
--- a/content/browser/generic_sensor/generic_sensor_browsertest.cc
+++ b/content/browser/generic_sensor/generic_sensor_browsertest.cc
@@ -53,6 +53,9 @@
             base::Unretained(this)));
   }
 
+  GenericSensorBrowserTest(const GenericSensorBrowserTest&) = delete;
+  GenericSensorBrowserTest& operator=(const GenericSensorBrowserTest&) = delete;
+
   ~GenericSensorBrowserTest() override {
     SensorProviderProxyImpl::OverrideSensorProviderBinderForTesting(
         base::NullCallback());
@@ -112,8 +115,6 @@
   base::test::ScopedFeatureList scoped_feature_list_;
   bool sensor_provider_available_ = true;
   std::unique_ptr<FakeSensorProvider> fake_sensor_provider_;
-
-  DISALLOW_COPY_AND_ASSIGN(GenericSensorBrowserTest);
 };
 
 IN_PROC_BROWSER_TEST_F(GenericSensorBrowserTest, AmbientLightSensorTest) {
diff --git a/content/browser/generic_sensor/sensor_provider_proxy_impl.h b/content/browser/generic_sensor/sensor_provider_proxy_impl.h
index 52cbdb8e..4cd27db4 100644
--- a/content/browser/generic_sensor/sensor_provider_proxy_impl.h
+++ b/content/browser/generic_sensor/sensor_provider_proxy_impl.h
@@ -26,6 +26,10 @@
  public:
   SensorProviderProxyImpl(PermissionControllerImpl* permission_controller,
                           RenderFrameHost* render_frame_host);
+
+  SensorProviderProxyImpl(const SensorProviderProxyImpl&) = delete;
+  SensorProviderProxyImpl& operator=(const SensorProviderProxyImpl&) = delete;
+
   ~SensorProviderProxyImpl() override;
 
   void Bind(mojo::PendingReceiver<device::mojom::SensorProvider> receiver);
@@ -54,8 +58,6 @@
   mojo::Remote<device::mojom::SensorProvider> sensor_provider_;
 
   base::WeakPtrFactory<SensorProviderProxyImpl> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(SensorProviderProxyImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/geolocation/geolocation_service_impl.h b/content/browser/geolocation/geolocation_service_impl.h
index d3f58b3..c1428a8 100644
--- a/content/browser/geolocation/geolocation_service_impl.h
+++ b/content/browser/geolocation/geolocation_service_impl.h
@@ -27,6 +27,11 @@
  public:
   explicit GeolocationServiceImplContext(
       PermissionControllerImpl* permission_controller);
+
+  GeolocationServiceImplContext(const GeolocationServiceImplContext&) = delete;
+  GeolocationServiceImplContext& operator=(
+      const GeolocationServiceImplContext&) = delete;
+
   ~GeolocationServiceImplContext();
   using PermissionCallback =
       base::OnceCallback<void(blink::mojom::PermissionStatus)>;
@@ -42,8 +47,6 @@
                               blink::mojom::PermissionStatus permission_status);
 
   base::WeakPtrFactory<GeolocationServiceImplContext> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(GeolocationServiceImplContext);
 };
 
 class CONTENT_EXPORT GeolocationServiceImpl
@@ -51,6 +54,10 @@
  public:
   GeolocationServiceImpl(device::mojom::GeolocationContext* geolocation_context,
                          RenderFrameHost* render_frame_host);
+
+  GeolocationServiceImpl(const GeolocationServiceImpl&) = delete;
+  GeolocationServiceImpl& operator=(const GeolocationServiceImpl&) = delete;
+
   ~GeolocationServiceImpl() override;
 
   // Binds to the GeolocationService.
@@ -81,8 +88,6 @@
   mojo::ReceiverSet<blink::mojom::GeolocationService,
                     std::unique_ptr<GeolocationServiceImplContext>>
       receiver_set_;
-
-  DISALLOW_COPY_AND_ASSIGN(GeolocationServiceImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/gpu/browser_gpu_client_delegate.h b/content/browser/gpu/browser_gpu_client_delegate.h
index ac8c634..ff76cd5f 100644
--- a/content/browser/gpu/browser_gpu_client_delegate.h
+++ b/content/browser/gpu/browser_gpu_client_delegate.h
@@ -12,14 +12,15 @@
 class BrowserGpuClientDelegate : public viz::GpuClientDelegate {
  public:
   BrowserGpuClientDelegate();
+
+  BrowserGpuClientDelegate(const BrowserGpuClientDelegate&) = delete;
+  BrowserGpuClientDelegate& operator=(const BrowserGpuClientDelegate&) = delete;
+
   ~BrowserGpuClientDelegate() override;
 
   // GpuClientDelegate:
   viz::GpuHostImpl* EnsureGpuHost() override;
   viz::HostGpuMemoryBufferManager* GetGpuMemoryBufferManager() override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(BrowserGpuClientDelegate);
 };
 
 }  // namespace content
diff --git a/content/browser/gpu/gpu_data_manager_impl_private.h b/content/browser/gpu/gpu_data_manager_impl_private.h
index afd9e89..3a9630d 100644
--- a/content/browser/gpu/gpu_data_manager_impl_private.h
+++ b/content/browser/gpu/gpu_data_manager_impl_private.h
@@ -42,6 +42,11 @@
 class CONTENT_EXPORT GpuDataManagerImplPrivate {
  public:
   explicit GpuDataManagerImplPrivate(GpuDataManagerImpl* owner);
+
+  GpuDataManagerImplPrivate(const GpuDataManagerImplPrivate&) = delete;
+  GpuDataManagerImplPrivate& operator=(const GpuDataManagerImplPrivate&) =
+      delete;
+
   virtual ~GpuDataManagerImplPrivate();
 
   void StartUmaTimer();
@@ -278,8 +283,6 @@
   bool application_is_visible_ = true;
 
   bool disable_gpu_compositing_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(GpuDataManagerImplPrivate);
 };
 
 }  // namespace content
diff --git a/content/browser/gpu/gpu_data_manager_impl_private_unittest.cc b/content/browser/gpu/gpu_data_manager_impl_private_unittest.cc
index 64d68e8..b002877 100644
--- a/content/browser/gpu/gpu_data_manager_impl_private_unittest.cc
+++ b/content/browser/gpu/gpu_data_manager_impl_private_unittest.cc
@@ -90,6 +90,11 @@
   class ScopedGpuDataManagerImpl {
    public:
     ScopedGpuDataManagerImpl() { EXPECT_TRUE(impl_.private_.get()); }
+
+    ScopedGpuDataManagerImpl(const ScopedGpuDataManagerImpl&) = delete;
+    ScopedGpuDataManagerImpl& operator=(const ScopedGpuDataManagerImpl&) =
+        delete;
+
     ~ScopedGpuDataManagerImpl() = default;
 
     GpuDataManagerImpl* get() { return &impl_; }
@@ -97,7 +102,6 @@
 
    private:
     GpuDataManagerImpl impl_;
-    DISALLOW_COPY_AND_ASSIGN(ScopedGpuDataManagerImpl);
   };
 
   // We want to test the code path where GpuDataManagerImplPrivate is created
@@ -105,6 +109,12 @@
   class ScopedGpuDataManagerImplPrivate {
    public:
     ScopedGpuDataManagerImplPrivate() { EXPECT_TRUE(impl_.private_.get()); }
+
+    ScopedGpuDataManagerImplPrivate(const ScopedGpuDataManagerImplPrivate&) =
+        delete;
+    ScopedGpuDataManagerImplPrivate& operator=(
+        const ScopedGpuDataManagerImplPrivate&) = delete;
+
     ~ScopedGpuDataManagerImplPrivate() = default;
 
     // NO_THREAD_SAFETY_ANALYSIS should be fine below, because unit tests
@@ -118,7 +128,6 @@
 
    private:
     GpuDataManagerImpl impl_;
-    DISALLOW_COPY_AND_ASSIGN(ScopedGpuDataManagerImplPrivate);
   };
 
   base::Time JustBeforeExpiration(const GpuDataManagerImplPrivate* manager);
diff --git a/content/browser/gpu/gpu_internals_ui.cc b/content/browser/gpu/gpu_internals_ui.cc
index daa51337..be0574d 100644
--- a/content/browser/gpu/gpu_internals_ui.cc
+++ b/content/browser/gpu/gpu_internals_ui.cc
@@ -686,6 +686,10 @@
       public ui::GpuSwitchingObserver {
  public:
   GpuMessageHandler();
+
+  GpuMessageHandler(const GpuMessageHandler&) = delete;
+  GpuMessageHandler& operator=(const GpuMessageHandler&) = delete;
+
   ~GpuMessageHandler() override;
 
   // WebUIMessageHandler implementation.
@@ -711,8 +715,6 @@
   // True if observing the GpuDataManager (re-attaching as observer would
   // DCHECK).
   bool observing_;
-
-  DISALLOW_COPY_AND_ASSIGN(GpuMessageHandler);
 };
 
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/content/browser/gpu/gpu_ipc_browsertests.cc b/content/browser/gpu/gpu_ipc_browsertests.cc
index fe12933..c831cd1 100644
--- a/content/browser/gpu/gpu_ipc_browsertests.cc
+++ b/content/browser/gpu/gpu_ipc_browsertests.cc
@@ -36,6 +36,10 @@
       : context_provider_(context_provider) {
     context_provider_->AddObserver(this);
   }
+
+  ContextLostRunLoop(const ContextLostRunLoop&) = delete;
+  ContextLostRunLoop& operator=(const ContextLostRunLoop&) = delete;
+
   ~ContextLostRunLoop() override { context_provider_->RemoveObserver(this); }
 
   void RunUntilContextLost() { run_loop_.Run(); }
@@ -46,8 +50,6 @@
 
   viz::ContextProvider* const context_provider_;
   base::RunLoop run_loop_;
-
-  DISALLOW_COPY_AND_ASSIGN(ContextLostRunLoop);
 };
 
 class ContextTestBase : public content::ContentBrowserTest {
diff --git a/content/browser/host_zoom_map_impl.h b/content/browser/host_zoom_map_impl.h
index ce8124bc..1add4f65 100644
--- a/content/browser/host_zoom_map_impl.h
+++ b/content/browser/host_zoom_map_impl.h
@@ -23,6 +23,10 @@
 class CONTENT_EXPORT HostZoomMapImpl : public HostZoomMap {
  public:
   HostZoomMapImpl();
+
+  HostZoomMapImpl(const HostZoomMapImpl&) = delete;
+  HostZoomMapImpl& operator=(const HostZoomMapImpl&) = delete;
+
   ~HostZoomMapImpl() override;
 
   // HostZoomMap implementation:
@@ -135,8 +139,6 @@
   TemporaryZoomLevels temporary_zoom_levels_;
 
   base::Clock* clock_;
-
-  DISALLOW_COPY_AND_ASSIGN(HostZoomMapImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/hyphenation/hyphenation_impl.h b/content/browser/hyphenation/hyphenation_impl.h
index f163eb4b..2b55e2e 100644
--- a/content/browser/hyphenation/hyphenation_impl.h
+++ b/content/browser/hyphenation/hyphenation_impl.h
@@ -16,6 +16,10 @@
 class HyphenationImpl : public blink::mojom::Hyphenation {
  public:
   HyphenationImpl();
+
+  HyphenationImpl(const HyphenationImpl&) = delete;
+  HyphenationImpl& operator=(const HyphenationImpl&) = delete;
+
   ~HyphenationImpl() override;
 
   static void Create(mojo::PendingReceiver<blink::mojom::Hyphenation>);
@@ -34,8 +38,6 @@
 #if !defined(OS_ANDROID)
   static void SetDirectory(const base::FilePath& dir);
 #endif
-
-  DISALLOW_COPY_AND_ASSIGN(HyphenationImpl);
 };
 
 }  // namespace hyphenation
diff --git a/content/browser/idle/idle_monitor.h b/content/browser/idle/idle_monitor.h
index 362c085..6522861 100644
--- a/content/browser/idle/idle_monitor.h
+++ b/content/browser/idle/idle_monitor.h
@@ -20,6 +20,10 @@
   IdleMonitor(mojo::PendingRemote<blink::mojom::IdleMonitor> monitor,
               blink::mojom::IdleStatePtr last_state,
               base::TimeDelta threshold);
+
+  IdleMonitor(const IdleMonitor&) = delete;
+  IdleMonitor& operator=(const IdleMonitor&) = delete;
+
   ~IdleMonitor();
 
   const blink::mojom::IdleState& last_state() const {
@@ -35,8 +39,6 @@
   blink::mojom::IdleMonitorPtr client_;
   blink::mojom::IdleStatePtr last_state_;
   base::TimeDelta threshold_;
-
-  DISALLOW_COPY_AND_ASSIGN(IdleMonitor);
 };
 
 }  // namespace content
diff --git a/content/browser/indexed_db/cursor_impl.h b/content/browser/indexed_db/cursor_impl.h
index 9f2ee29..68a5c63 100644
--- a/content/browser/indexed_db/cursor_impl.h
+++ b/content/browser/indexed_db/cursor_impl.h
@@ -28,6 +28,10 @@
              const blink::StorageKey& storage_key,
              IndexedDBDispatcherHost* dispatcher_host,
              scoped_refptr<base::SequencedTaskRunner> idb_runner);
+
+  CursorImpl(const CursorImpl&) = delete;
+  CursorImpl& operator=(const CursorImpl&) = delete;
+
   ~CursorImpl() override;
 
   // blink::mojom::IDBCursor implementation
@@ -53,8 +57,6 @@
   std::unique_ptr<IndexedDBCursor> cursor_;
 
   SEQUENCE_CHECKER(sequence_checker_);
-
-  DISALLOW_COPY_AND_ASSIGN(CursorImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/indexed_db/database_impl.h b/content/browser/indexed_db/database_impl.h
index b0d7f3e..79b1ad6c 100644
--- a/content/browser/indexed_db/database_impl.h
+++ b/content/browser/indexed_db/database_impl.h
@@ -38,6 +38,10 @@
                         const blink::StorageKey& storage_key,
                         IndexedDBDispatcherHost* dispatcher_host,
                         scoped_refptr<base::SequencedTaskRunner> idb_runner);
+
+  DatabaseImpl(const DatabaseImpl&) = delete;
+  DatabaseImpl& operator=(const DatabaseImpl&) = delete;
+
   ~DatabaseImpl() override;
 
   // blink::mojom::IDBDatabase implementation
@@ -129,8 +133,6 @@
   scoped_refptr<base::SequencedTaskRunner> idb_runner_;
 
   SEQUENCE_CHECKER(sequence_checker_);
-
-  DISALLOW_COPY_AND_ASSIGN(DatabaseImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/indexed_db/fake_indexed_db_metadata_coding.h b/content/browser/indexed_db/fake_indexed_db_metadata_coding.h
index 49ee343..682d181 100644
--- a/content/browser/indexed_db/fake_indexed_db_metadata_coding.h
+++ b/content/browser/indexed_db/fake_indexed_db_metadata_coding.h
@@ -29,6 +29,11 @@
 class FakeIndexedDBMetadataCoding : public IndexedDBMetadataCoding {
  public:
   FakeIndexedDBMetadataCoding();
+
+  FakeIndexedDBMetadataCoding(const FakeIndexedDBMetadataCoding&) = delete;
+  FakeIndexedDBMetadataCoding& operator=(const FakeIndexedDBMetadataCoding&) =
+      delete;
+
   ~FakeIndexedDBMetadataCoding() override;
 
   leveldb::Status ReadDatabaseNames(
@@ -104,9 +109,6 @@
       int64_t database_id,
       int64_t object_store_id,
       const blink::IndexedDBIndexMetadata& metadata) override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(FakeIndexedDBMetadataCoding);
 };
 
 }  // namespace content
diff --git a/content/browser/indexed_db/indexed_db_active_blob_registry.h b/content/browser/indexed_db/indexed_db_active_blob_registry.h
index 38104679..4a3150a 100644
--- a/content/browser/indexed_db/indexed_db_active_blob_registry.h
+++ b/content/browser/indexed_db/indexed_db_active_blob_registry.h
@@ -35,6 +35,11 @@
   explicit IndexedDBActiveBlobRegistry(
       ReportOutstandingBlobsCallback report_outstanding_blobs,
       ReportUnusedBlobCallback report_unused_blob);
+
+  IndexedDBActiveBlobRegistry(const IndexedDBActiveBlobRegistry&) = delete;
+  IndexedDBActiveBlobRegistry& operator=(const IndexedDBActiveBlobRegistry&) =
+      delete;
+
   ~IndexedDBActiveBlobRegistry();
 
   // Most methods of this class, and the closure returned by
@@ -91,8 +96,6 @@
   ReportOutstandingBlobsCallback report_outstanding_blobs_;
   ReportUnusedBlobCallback report_unused_blob_;
   base::WeakPtrFactory<IndexedDBActiveBlobRegistry> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(IndexedDBActiveBlobRegistry);
 };
 
 }  // namespace content
diff --git a/content/browser/indexed_db/indexed_db_callback_helpers.h b/content/browser/indexed_db/indexed_db_callback_helpers.h
index a0b75fc..f342ee1 100644
--- a/content/browser/indexed_db/indexed_db_callback_helpers.h
+++ b/content/browser/indexed_db/indexed_db_callback_helpers.h
@@ -67,6 +67,10 @@
       : callback_(std::move(callback)),
         args_at_destroy_(CreateAbortCallback<R>(transaction)),
         called_(false) {}
+
+  CallbackAbortOnDestruct(const CallbackAbortOnDestruct&) = delete;
+  CallbackAbortOnDestruct& operator=(const CallbackAbortOnDestruct&) = delete;
+
   ~CallbackAbortOnDestruct() {
     if (called_)
       return;
@@ -83,7 +87,6 @@
   T callback_;
   base::OnceCallback<R()> args_at_destroy_;
   bool called_;
-  DISALLOW_COPY_AND_ASSIGN(CallbackAbortOnDestruct);
 };
 
 }  //  namespace indexed_db_callback_helpers_internal
diff --git a/content/browser/indexed_db/indexed_db_callbacks.cc b/content/browser/indexed_db/indexed_db_callbacks.cc
index e5dfd5d..8a6f741b 100644
--- a/content/browser/indexed_db/indexed_db_callbacks.cc
+++ b/content/browser/indexed_db/indexed_db_callbacks.cc
@@ -44,6 +44,10 @@
       std::unique_ptr<IndexedDBConnection> connection)
       : connection_(std::move(connection)),
         idb_runner_(base::SequencedTaskRunnerHandle::Get()) {}
+
+  SafeConnectionWrapper(const SafeConnectionWrapper&) = delete;
+  SafeConnectionWrapper& operator=(const SafeConnectionWrapper&) = delete;
+
   ~SafeConnectionWrapper() {
     if (connection_) {
       idb_runner_->PostTask(
@@ -58,9 +62,6 @@
 
   std::unique_ptr<IndexedDBConnection> connection_;
   scoped_refptr<base::SequencedTaskRunner> idb_runner_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(SafeConnectionWrapper);
 };
 
 class SafeCursorWrapper {
@@ -68,6 +69,10 @@
   explicit SafeCursorWrapper(std::unique_ptr<IndexedDBCursor> cursor)
       : cursor_(std::move(cursor)),
         idb_runner_(base::SequencedTaskRunnerHandle::Get()) {}
+
+  SafeCursorWrapper(const SafeCursorWrapper&) = delete;
+  SafeCursorWrapper& operator=(const SafeCursorWrapper&) = delete;
+
   ~SafeCursorWrapper() {
     if (cursor_)
       idb_runner_->DeleteSoon(FROM_HERE, cursor_.release());
@@ -76,9 +81,6 @@
 
   std::unique_ptr<IndexedDBCursor> cursor_;
   scoped_refptr<base::SequencedTaskRunner> idb_runner_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(SafeCursorWrapper);
 };
 
 }  // namespace
diff --git a/content/browser/indexed_db/indexed_db_connection.h b/content/browser/indexed_db/indexed_db_connection.h
index ec8d4269..82e2b4e 100644
--- a/content/browser/indexed_db/indexed_db_connection.h
+++ b/content/browser/indexed_db/indexed_db_connection.h
@@ -31,6 +31,10 @@
                       base::RepeatingClosure on_version_change_ignored,
                       base::OnceCallback<void(IndexedDBConnection*)> on_close,
                       scoped_refptr<IndexedDBDatabaseCallbacks> callbacks);
+
+  IndexedDBConnection(const IndexedDBConnection&) = delete;
+  IndexedDBConnection& operator=(const IndexedDBConnection&) = delete;
+
   virtual ~IndexedDBConnection();
 
   enum class CloseErrorHandling {
@@ -111,8 +115,6 @@
   SEQUENCE_CHECKER(sequence_checker_);
 
   base::WeakPtrFactory<IndexedDBConnection> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(IndexedDBConnection);
 };
 
 }  // namespace content
diff --git a/content/browser/indexed_db/indexed_db_connection_coordinator.cc b/content/browser/indexed_db/indexed_db_connection_coordinator.cc
index ab9626ba..8ee7e5c 100644
--- a/content/browser/indexed_db/indexed_db_connection_coordinator.cc
+++ b/content/browser/indexed_db/indexed_db_connection_coordinator.cc
@@ -62,6 +62,9 @@
         connection_coordinator_(connection_coordinator),
         tasks_available_callback_(std::move(tasks_available_callback)) {}
 
+  ConnectionRequest(const ConnectionRequest&) = delete;
+  ConnectionRequest& operator=(const ConnectionRequest&) = delete;
+
   virtual ~ConnectionRequest() {}
 
   // Called when the request makes it to the front of the queue. The state()
@@ -114,9 +117,6 @@
   TasksAvailableCallback tasks_available_callback_;
 
   leveldb::Status saved_leveldb_status_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(ConnectionRequest);
 };
 
 class IndexedDBConnectionCoordinator::OpenRequest
diff --git a/content/browser/indexed_db/indexed_db_connection_coordinator.h b/content/browser/indexed_db/indexed_db_connection_coordinator.h
index ded572f..61276fb 100644
--- a/content/browser/indexed_db/indexed_db_connection_coordinator.h
+++ b/content/browser/indexed_db/indexed_db_connection_coordinator.h
@@ -32,6 +32,12 @@
   IndexedDBConnectionCoordinator(
       IndexedDBDatabase* db,
       TasksAvailableCallback tasks_available_callback);
+
+  IndexedDBConnectionCoordinator(const IndexedDBConnectionCoordinator&) =
+      delete;
+  IndexedDBConnectionCoordinator& operator=(
+      const IndexedDBConnectionCoordinator&) = delete;
+
   ~IndexedDBConnectionCoordinator();
 
   void ScheduleOpenConnection(
@@ -105,8 +111,6 @@
 
   // |weak_factory_| is used for all callback uses.
   base::WeakPtrFactory<IndexedDBConnectionCoordinator> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(IndexedDBConnectionCoordinator);
 };
 
 }  // namespace content
diff --git a/content/browser/indexed_db/indexed_db_control_wrapper.h b/content/browser/indexed_db/indexed_db_control_wrapper.h
index b0e61ee5..f8aa5270 100644
--- a/content/browser/indexed_db/indexed_db_control_wrapper.h
+++ b/content/browser/indexed_db/indexed_db_control_wrapper.h
@@ -32,6 +32,10 @@
           file_system_access_context,
       scoped_refptr<base::SequencedTaskRunner> io_task_runner,
       scoped_refptr<base::SequencedTaskRunner> custom_task_runner);
+
+  IndexedDBControlWrapper(const IndexedDBControlWrapper&) = delete;
+  IndexedDBControlWrapper& operator=(const IndexedDBControlWrapper&) = delete;
+
   ~IndexedDBControlWrapper() override;
 
   // mojom::IndexedDBControl implementation:
@@ -72,8 +76,6 @@
 
   SEQUENCE_CHECKER(sequence_checker_);
   base::WeakPtrFactory<IndexedDBControlWrapper> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(IndexedDBControlWrapper);
 };
 
 }  // namespace content
diff --git a/content/browser/indexed_db/indexed_db_cursor.h b/content/browser/indexed_db/indexed_db_cursor.h
index 61c09ce..c387d5e 100644
--- a/content/browser/indexed_db/indexed_db_cursor.h
+++ b/content/browser/indexed_db/indexed_db_cursor.h
@@ -27,6 +27,10 @@
                   indexed_db::CursorType cursor_type,
                   blink::mojom::IDBTaskType task_type,
                   base::WeakPtr<IndexedDBTransaction> transaction);
+
+  IndexedDBCursor(const IndexedDBCursor&) = delete;
+  IndexedDBCursor& operator=(const IndexedDBCursor&) = delete;
+
   ~IndexedDBCursor();
 
   void Advance(uint32_t count,
@@ -92,8 +96,6 @@
   bool closed_;
 
   base::WeakPtrFactory<IndexedDBCursor> ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(IndexedDBCursor);
 };
 
 }  // namespace content
diff --git a/content/browser/indexed_db/indexed_db_database.h b/content/browser/indexed_db/indexed_db_database.h
index f9de7662..4625976 100644
--- a/content/browser/indexed_db/indexed_db_database.h
+++ b/content/browser/indexed_db/indexed_db_database.h
@@ -68,6 +68,9 @@
   static const int64_t kInvalidId = 0;
   static const int64_t kMinimumIndexId = 30;
 
+  IndexedDBDatabase(const IndexedDBDatabase&) = delete;
+  IndexedDBDatabase& operator=(const IndexedDBDatabase&) = delete;
+
   virtual ~IndexedDBDatabase();
 
   const Identifier& identifier() const { return identifier_; }
@@ -215,6 +218,10 @@
 
   struct CONTENT_EXPORT PutOperationParams {
     PutOperationParams();
+
+    PutOperationParams(const PutOperationParams&) = delete;
+    PutOperationParams& operator=(const PutOperationParams&) = delete;
+
     ~PutOperationParams();
     int64_t object_store_id;
     IndexedDBValue value;
@@ -222,22 +229,20 @@
     blink::mojom::IDBPutMode put_mode;
     blink::mojom::IDBTransaction::PutCallback callback;
     std::vector<blink::IndexedDBIndexKeys> index_keys;
-
-   private:
-    DISALLOW_COPY_AND_ASSIGN(PutOperationParams);
   };
   leveldb::Status PutOperation(std::unique_ptr<PutOperationParams> params,
                                IndexedDBTransaction* transaction);
 
   struct CONTENT_EXPORT PutAllOperationParams {
     PutAllOperationParams();
+
+    PutAllOperationParams(const PutAllOperationParams&) = delete;
+    PutAllOperationParams& operator=(const PutAllOperationParams&) = delete;
+
     ~PutAllOperationParams();
     IndexedDBValue value;
     std::unique_ptr<blink::IndexedDBKey> key;
     std::vector<blink::IndexedDBIndexKeys> index_keys;
-
-   private:
-    DISALLOW_COPY_AND_ASSIGN(PutAllOperationParams);
   };
   leveldb::Status PutAllOperation(
       int64_t object_store_id,
@@ -256,6 +261,11 @@
 
   struct OpenCursorOperationParams {
     OpenCursorOperationParams();
+
+    OpenCursorOperationParams(const OpenCursorOperationParams&) = delete;
+    OpenCursorOperationParams& operator=(const OpenCursorOperationParams&) =
+        delete;
+
     ~OpenCursorOperationParams();
     int64_t object_store_id;
     int64_t index_id;
@@ -264,9 +274,6 @@
     indexed_db::CursorType cursor_type;
     blink::mojom::IDBTaskType task_type;
     blink::mojom::IDBDatabase::OpenCursorCallback callback;
-
-   private:
-    DISALLOW_COPY_AND_ASSIGN(OpenCursorOperationParams);
   };
   leveldb::Status OpenCursorOperation(
       std::unique_ptr<OpenCursorOperationParams> params,
@@ -398,8 +405,6 @@
 
   // |weak_factory_| is used for all callback uses.
   base::WeakPtrFactory<IndexedDBDatabase> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(IndexedDBDatabase);
 };
 
 }  // namespace content
diff --git a/content/browser/indexed_db/indexed_db_dispatcher_host.cc b/content/browser/indexed_db/indexed_db_dispatcher_host.cc
index fd4c3c9..7dbaae0d 100644
--- a/content/browser/indexed_db/indexed_db_dispatcher_host.cc
+++ b/content/browser/indexed_db/indexed_db_dispatcher_host.cc
@@ -100,6 +100,9 @@
                             base::Unretained(this)));
   }
 
+  IndexedDBDataItemReader(const IndexedDBDataItemReader&) = delete;
+  IndexedDBDataItemReader& operator=(const IndexedDBDataItemReader&) = delete;
+
   ~IndexedDBDataItemReader() override {
     DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
     release_callback_.Run();
@@ -191,8 +194,6 @@
   scoped_refptr<base::TaskRunner> io_task_runner_;
 
   SEQUENCE_CHECKER(sequence_checker_);
-
-  DISALLOW_COPY_AND_ASSIGN(IndexedDBDataItemReader);
 };
 
 IndexedDBDispatcherHost::IndexedDBDispatcherHost(
diff --git a/content/browser/indexed_db/indexed_db_external_object_storage.h b/content/browser/indexed_db/indexed_db_external_object_storage.h
index 7dd58230..8361230 100644
--- a/content/browser/indexed_db/indexed_db_external_object_storage.h
+++ b/content/browser/indexed_db/indexed_db_external_object_storage.h
@@ -52,6 +52,12 @@
 class IndexedDBExternalObjectChangeRecord {
  public:
   IndexedDBExternalObjectChangeRecord(const std::string& object_store_data_key);
+
+  IndexedDBExternalObjectChangeRecord(
+      const IndexedDBExternalObjectChangeRecord&) = delete;
+  IndexedDBExternalObjectChangeRecord& operator=(
+      const IndexedDBExternalObjectChangeRecord&) = delete;
+
   ~IndexedDBExternalObjectChangeRecord();
 
   const std::string& object_store_data_key() const {
@@ -70,7 +76,6 @@
  private:
   std::string object_store_data_key_;
   std::vector<IndexedDBExternalObject> external_objects_;
-  DISALLOW_COPY_AND_ASSIGN(IndexedDBExternalObjectChangeRecord);
 };
 
 // Reports that the recovery and/or active journals have been processed, and
diff --git a/content/browser/indexed_db/indexed_db_factory.h b/content/browser/indexed_db/indexed_db_factory.h
index c3a1cdc..6ac58bb 100644
--- a/content/browser/indexed_db/indexed_db_factory.h
+++ b/content/browser/indexed_db/indexed_db_factory.h
@@ -33,6 +33,9 @@
 // TODO(dmurph): Remove this interface.
 class CONTENT_EXPORT IndexedDBFactory {
  public:
+  IndexedDBFactory(const IndexedDBFactory&) = delete;
+  IndexedDBFactory& operator=(const IndexedDBFactory&) = delete;
+
   virtual ~IndexedDBFactory() = default;
 
   virtual void GetDatabaseInfo(scoped_refptr<IndexedDBCallbacks> callbacks,
@@ -102,9 +105,6 @@
 
  protected:
   IndexedDBFactory() {}
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(IndexedDBFactory);
 };
 
 }  // namespace content
diff --git a/content/browser/indexed_db/indexed_db_factory_impl.h b/content/browser/indexed_db/indexed_db_factory_impl.h
index 359d178..7b07fa3 100644
--- a/content/browser/indexed_db/indexed_db_factory_impl.h
+++ b/content/browser/indexed_db/indexed_db_factory_impl.h
@@ -55,6 +55,10 @@
   IndexedDBFactoryImpl(IndexedDBContextImpl* context,
                        IndexedDBClassFactory* indexed_db_class_factory,
                        base::Clock* clock);
+
+  IndexedDBFactoryImpl(const IndexedDBFactoryImpl&) = delete;
+  IndexedDBFactoryImpl& operator=(const IndexedDBFactoryImpl&) = delete;
+
   ~IndexedDBFactoryImpl() override;
 
   // content::IndexedDBFactory overrides:
@@ -244,7 +248,6 @@
   base::WeakPtrFactory<IndexedDBFactoryImpl>
       storage_key_state_destruction_weak_factory_{this};
   base::WeakPtrFactory<IndexedDBFactoryImpl> weak_factory_{this};
-  DISALLOW_COPY_AND_ASSIGN(IndexedDBFactoryImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/indexed_db/indexed_db_fake_backing_store.h b/content/browser/indexed_db/indexed_db_fake_backing_store.h
index 9ee2c77..eb765eae 100644
--- a/content/browser/indexed_db/indexed_db_fake_backing_store.h
+++ b/content/browser/indexed_db/indexed_db_fake_backing_store.h
@@ -31,6 +31,11 @@
       BlobFilesCleanedCallback blob_files_cleaned,
       ReportOutstandingBlobsCallback report_outstanding_blobs,
       scoped_refptr<base::SequencedTaskRunner> task_runner);
+
+  IndexedDBFakeBackingStore(const IndexedDBFakeBackingStore&) = delete;
+  IndexedDBFakeBackingStore& operator=(const IndexedDBFakeBackingStore&) =
+      delete;
+
   ~IndexedDBFakeBackingStore() override;
 
   leveldb::Status DeleteDatabase(
@@ -134,8 +139,6 @@
       blink::mojom::IDBTransactionMode mode) override;
 
  protected:
- private:
-  DISALLOW_COPY_AND_ASSIGN(IndexedDBFakeBackingStore);
 };
 
 }  // namespace content
diff --git a/content/browser/indexed_db/indexed_db_index_writer.h b/content/browser/indexed_db/indexed_db_index_writer.h
index 9de4d57a..b988373 100644
--- a/content/browser/indexed_db/indexed_db_index_writer.h
+++ b/content/browser/indexed_db/indexed_db_index_writer.h
@@ -48,6 +48,9 @@
       int64_t database_id,
       int64_t object_store_id) const;
 
+  IndexWriter(const IndexWriter&) = delete;
+  IndexWriter& operator=(const IndexWriter&) = delete;
+
   ~IndexWriter();
 
  private:
@@ -62,8 +65,6 @@
 
   const blink::IndexedDBIndexMetadata index_metadata_;
   const std::vector<blink::IndexedDBKey> keys_;
-
-  DISALLOW_COPY_AND_ASSIGN(IndexWriter);
 };
 
 bool MakeIndexWriters(IndexedDBTransaction* transaction,
diff --git a/content/browser/indexed_db/indexed_db_internals_ui.cc b/content/browser/indexed_db/indexed_db_internals_ui.cc
index db76503dd..bf45357 100644
--- a/content/browser/indexed_db/indexed_db_internals_ui.cc
+++ b/content/browser/indexed_db/indexed_db_internals_ui.cc
@@ -314,6 +314,10 @@
 class FileDeleter : public download::DownloadItem::Observer {
  public:
   explicit FileDeleter(const base::FilePath& temp_dir) : temp_dir_(temp_dir) {}
+
+  FileDeleter(const FileDeleter&) = delete;
+  FileDeleter& operator=(const FileDeleter&) = delete;
+
   ~FileDeleter() override;
 
   void OnDownloadUpdated(download::DownloadItem* download) override;
@@ -323,8 +327,6 @@
 
  private:
   const base::FilePath temp_dir_;
-
-  DISALLOW_COPY_AND_ASSIGN(FileDeleter);
 };
 
 void FileDeleter::OnDownloadUpdated(download::DownloadItem* item) {
diff --git a/content/browser/indexed_db/indexed_db_internals_ui.h b/content/browser/indexed_db/indexed_db_internals_ui.h
index 72bd267..13c3103 100644
--- a/content/browser/indexed_db/indexed_db_internals_ui.h
+++ b/content/browser/indexed_db/indexed_db_internals_ui.h
@@ -32,16 +32,24 @@
 class IndexedDBInternalsUI : public WebUIController {
  public:
   explicit IndexedDBInternalsUI(WebUI* web_ui);
+
+  IndexedDBInternalsUI(const IndexedDBInternalsUI&) = delete;
+  IndexedDBInternalsUI& operator=(const IndexedDBInternalsUI&) = delete;
+
   ~IndexedDBInternalsUI() override;
 
  private:
   base::WeakPtrFactory<IndexedDBInternalsUI> weak_factory_{this};
-  DISALLOW_COPY_AND_ASSIGN(IndexedDBInternalsUI);
 };
 
 class IndexedDBInternalsHandler : public WebUIMessageHandler {
  public:
   IndexedDBInternalsHandler();
+
+  IndexedDBInternalsHandler(const IndexedDBInternalsHandler&) = delete;
+  IndexedDBInternalsHandler& operator=(const IndexedDBInternalsHandler&) =
+      delete;
+
   ~IndexedDBInternalsHandler() override;
 
   // WebUIMessageHandler implementation.
@@ -78,7 +86,6 @@
                          storage::mojom::IndexedDBControl** control);
 
   base::WeakPtrFactory<IndexedDBInternalsHandler> weak_factory_{this};
-  DISALLOW_COPY_AND_ASSIGN(IndexedDBInternalsHandler);
 };
 
 }  // namespace content
diff --git a/content/browser/indexed_db/indexed_db_leveldb_coding.h b/content/browser/indexed_db/indexed_db_leveldb_coding.h
index 35e2e2ea..35277dfa 100644
--- a/content/browser/indexed_db/indexed_db_leveldb_coding.h
+++ b/content/browser/indexed_db/indexed_db_leveldb_coding.h
@@ -476,6 +476,10 @@
 class ExistsEntryKey {
  public:
   ExistsEntryKey();
+
+  ExistsEntryKey(const ExistsEntryKey&) = delete;
+  ExistsEntryKey& operator=(const ExistsEntryKey&) = delete;
+
   ~ExistsEntryKey();
 
   static bool Decode(base::StringPiece* slice, ExistsEntryKey* result);
@@ -493,7 +497,6 @@
   static const int64_t kSpecialIndexNumber;
 
   std::string encoded_user_key_;
-  DISALLOW_COPY_AND_ASSIGN(ExistsEntryKey);
 };
 
 class CONTENT_EXPORT BlobEntryKey {
diff --git a/content/browser/indexed_db/indexed_db_metadata_coding.h b/content/browser/indexed_db/indexed_db_metadata_coding.h
index 15e4714..a6dde013 100644
--- a/content/browser/indexed_db/indexed_db_metadata_coding.h
+++ b/content/browser/indexed_db/indexed_db_metadata_coding.h
@@ -35,6 +35,10 @@
 class CONTENT_EXPORT IndexedDBMetadataCoding {
  public:
   IndexedDBMetadataCoding();
+
+  IndexedDBMetadataCoding(const IndexedDBMetadataCoding&) = delete;
+  IndexedDBMetadataCoding& operator=(const IndexedDBMetadataCoding&) = delete;
+
   virtual ~IndexedDBMetadataCoding();
 
   // Reads the list of database names for the given origin.
@@ -142,9 +146,6 @@
       std::u16string new_name,
       std::u16string* old_name,
       blink::IndexedDBIndexMetadata* metadata);
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(IndexedDBMetadataCoding);
 };
 
 }  // namespace content
diff --git a/content/browser/indexed_db/indexed_db_quota_client_unittest.cc b/content/browser/indexed_db/indexed_db_quota_client_unittest.cc
index ae894222..6ed83c3d 100644
--- a/content/browser/indexed_db/indexed_db_quota_client_unittest.cc
+++ b/content/browser/indexed_db/indexed_db_quota_client_unittest.cc
@@ -73,6 +73,9 @@
     ASSERT_TRUE(base::CreateDirectory(idb_context_->data_path()));
   }
 
+  IndexedDBQuotaClientTest(const IndexedDBQuotaClientTest&) = delete;
+  IndexedDBQuotaClientTest& operator=(const IndexedDBQuotaClientTest&) = delete;
+
   ~IndexedDBQuotaClientTest() override {
     base::RunLoop().RunUntilIdle();
     idb_context_ = nullptr;
@@ -182,8 +185,6 @@
   base::ScopedTempDir temp_dir_;
   scoped_refptr<IndexedDBContextImpl> idb_context_;
   base::WeakPtrFactory<IndexedDBQuotaClientTest> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(IndexedDBQuotaClientTest);
 };
 
 TEST_F(IndexedDBQuotaClientTest, GetStorageKeyUsage) {
diff --git a/content/browser/indexed_db/indexed_db_storage_key_state.h b/content/browser/indexed_db/indexed_db_storage_key_state.h
index cfba2c22..2e208f4 100644
--- a/content/browser/indexed_db/indexed_db_storage_key_state.h
+++ b/content/browser/indexed_db/indexed_db_storage_key_state.h
@@ -103,6 +103,10 @@
       TasksAvailableCallback notify_tasks_callback,
       TearDownCallback tear_down_callback,
       std::unique_ptr<IndexedDBBackingStore> backing_store);
+
+  IndexedDBStorageKeyState(const IndexedDBStorageKeyState&) = delete;
+  IndexedDBStorageKeyState& operator=(const IndexedDBStorageKeyState&) = delete;
+
   ~IndexedDBStorageKeyState();
 
   void AbortAllTransactions(bool compact);
@@ -246,8 +250,6 @@
   TearDownCallback tear_down_callback_;
 
   base::WeakPtrFactory<IndexedDBStorageKeyState> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(IndexedDBStorageKeyState);
 };
 
 }  // namespace content
diff --git a/content/browser/indexed_db/indexed_db_storage_key_state_handle.h b/content/browser/indexed_db/indexed_db_storage_key_state_handle.h
index 6daff41..397a7f1 100644
--- a/content/browser/indexed_db/indexed_db_storage_key_state_handle.h
+++ b/content/browser/indexed_db/indexed_db_storage_key_state_handle.h
@@ -24,6 +24,12 @@
       base::WeakPtr<IndexedDBStorageKeyState> storage_key_state);
   IndexedDBStorageKeyStateHandle(IndexedDBStorageKeyStateHandle&&);
   IndexedDBStorageKeyStateHandle& operator=(IndexedDBStorageKeyStateHandle&&);
+
+  IndexedDBStorageKeyStateHandle(const IndexedDBStorageKeyStateHandle&) =
+      delete;
+  IndexedDBStorageKeyStateHandle& operator=(
+      const IndexedDBStorageKeyStateHandle&) = delete;
+
   ~IndexedDBStorageKeyStateHandle();
 
   bool IsHeld() const;
@@ -38,8 +44,6 @@
 
  private:
   base::WeakPtr<IndexedDBStorageKeyState> storage_key_state_;
-
-  DISALLOW_COPY_AND_ASSIGN(IndexedDBStorageKeyStateHandle);
 };
 
 }  // namespace content
diff --git a/content/browser/indexed_db/indexed_db_tombstone_sweeper.h b/content/browser/indexed_db/indexed_db_tombstone_sweeper.h
index e389b9f4..4ad1314 100644
--- a/content/browser/indexed_db/indexed_db_tombstone_sweeper.h
+++ b/content/browser/indexed_db/indexed_db_tombstone_sweeper.h
@@ -82,6 +82,11 @@
   IndexedDBTombstoneSweeper(int round_iterations,
                             int max_iterations,
                             leveldb::DB* database);
+
+  IndexedDBTombstoneSweeper(const IndexedDBTombstoneSweeper&) = delete;
+  IndexedDBTombstoneSweeper& operator=(const IndexedDBTombstoneSweeper&) =
+      delete;
+
   ~IndexedDBTombstoneSweeper() override;
 
   bool RequiresMetadata() const override;
@@ -192,7 +197,6 @@
   SweepMetrics metrics_;
 
   base::WeakPtrFactory<IndexedDBTombstoneSweeper> ptr_factory_{this};
-  DISALLOW_COPY_AND_ASSIGN(IndexedDBTombstoneSweeper);
 };
 
 }  // namespace content
diff --git a/content/browser/indexed_db/indexed_db_transaction.h b/content/browser/indexed_db/indexed_db_transaction.h
index 7536d35..572ffe8 100644
--- a/content/browser/indexed_db/indexed_db_transaction.h
+++ b/content/browser/indexed_db/indexed_db_transaction.h
@@ -237,6 +237,10 @@
   class TaskQueue {
    public:
     TaskQueue();
+
+    TaskQueue(const TaskQueue&) = delete;
+    TaskQueue& operator=(const TaskQueue&) = delete;
+
     ~TaskQueue();
     bool empty() const { return queue_.empty(); }
     void push(Operation task) { queue_.push(std::move(task)); }
@@ -245,13 +249,15 @@
 
    private:
     base::queue<Operation> queue_;
-
-    DISALLOW_COPY_AND_ASSIGN(TaskQueue);
   };
 
   class TaskStack {
    public:
     TaskStack();
+
+    TaskStack(const TaskStack&) = delete;
+    TaskStack& operator=(const TaskStack&) = delete;
+
     ~TaskStack();
     bool empty() const { return stack_.empty(); }
     void push(AbortOperation task) { stack_.push(std::move(task)); }
@@ -260,8 +266,6 @@
 
    private:
     base::stack<AbortOperation> stack_;
-
-    DISALLOW_COPY_AND_ASSIGN(TaskStack);
   };
 
   TaskQueue task_queue_;
diff --git a/content/browser/indexed_db/indexed_db_unittest.cc b/content/browser/indexed_db/indexed_db_unittest.cc
index 228b362..d31452b 100644
--- a/content/browser/indexed_db/indexed_db_unittest.cc
+++ b/content/browser/indexed_db/indexed_db_unittest.cc
@@ -50,6 +50,10 @@
   LevelDBLock() = default;
   LevelDBLock(leveldb::Env* env, leveldb::FileLock* lock)
       : env_(env), lock_(lock) {}
+
+  LevelDBLock(const LevelDBLock&) = delete;
+  LevelDBLock& operator=(const LevelDBLock&) = delete;
+
   ~LevelDBLock() {
     if (env_)
       env_->UnlockFile(lock_);
@@ -58,8 +62,6 @@
  private:
   leveldb::Env* env_ = nullptr;
   leveldb::FileLock* lock_ = nullptr;
-
-  DISALLOW_COPY_AND_ASSIGN(LevelDBLock);
 };
 
 std::unique_ptr<LevelDBLock> LockForTesting(const base::FilePath& file_name) {
@@ -103,6 +105,10 @@
         kSessionOnlyStorageKey.origin(), should_purge_on_shutdown));
     context_->ApplyPolicyUpdates(std::move(policy_updates));
   }
+
+  IndexedDBTest(const IndexedDBTest&) = delete;
+  IndexedDBTest& operator=(const IndexedDBTest&) = delete;
+
   ~IndexedDBTest() override = default;
 
   void RunPostedTasks() {
@@ -157,8 +163,6 @@
   base::ScopedTempDir temp_dir_;
   scoped_refptr<storage::MockQuotaManagerProxy> quota_manager_proxy_;
   scoped_refptr<IndexedDBContextImpl> context_;
-
-  DISALLOW_COPY_AND_ASSIGN(IndexedDBTest);
 };
 
 TEST_F(IndexedDBTest, ClearSessionOnlyDatabases) {
diff --git a/content/browser/indexed_db/mock_indexed_db_factory.h b/content/browser/indexed_db/mock_indexed_db_factory.h
index d25fd661..2882337 100644
--- a/content/browser/indexed_db/mock_indexed_db_factory.h
+++ b/content/browser/indexed_db/mock_indexed_db_factory.h
@@ -19,6 +19,10 @@
 class MockIndexedDBFactory : public IndexedDBFactory {
  public:
   MockIndexedDBFactory();
+
+  MockIndexedDBFactory(const MockIndexedDBFactory&) = delete;
+  MockIndexedDBFactory& operator=(const MockIndexedDBFactory&) = delete;
+
   ~MockIndexedDBFactory() override;
   MOCK_METHOD3(GetDatabaseNames,
                void(scoped_refptr<IndexedDBCallbacks> callbacks,
@@ -104,9 +108,6 @@
                void(const blink::StorageKey& storage_key,
                     const std::u16string& database_name,
                     const std::u16string& object_store_name));
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(MockIndexedDBFactory);
 };
 
 }  // namespace content
diff --git a/content/browser/indexed_db/mock_mojo_indexed_db_callbacks.h b/content/browser/indexed_db/mock_mojo_indexed_db_callbacks.h
index 9c4d9a7e..eceaccd 100644
--- a/content/browser/indexed_db/mock_mojo_indexed_db_callbacks.h
+++ b/content/browser/indexed_db/mock_mojo_indexed_db_callbacks.h
@@ -24,6 +24,11 @@
 class MockMojoIndexedDBCallbacks : public blink::mojom::IDBCallbacks {
  public:
   explicit MockMojoIndexedDBCallbacks();
+
+  MockMojoIndexedDBCallbacks(const MockMojoIndexedDBCallbacks&) = delete;
+  MockMojoIndexedDBCallbacks& operator=(const MockMojoIndexedDBCallbacks&) =
+      delete;
+
   ~MockMojoIndexedDBCallbacks() override;
 
   mojo::PendingAssociatedRemote<blink::mojom::IDBCallbacks>
@@ -75,8 +80,6 @@
 
  private:
   mojo::AssociatedReceiver<blink::mojom::IDBCallbacks> receiver_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(MockMojoIndexedDBCallbacks);
 };
 
 }  // namespace content
diff --git a/content/browser/indexed_db/mock_mojo_indexed_db_database_callbacks.h b/content/browser/indexed_db/mock_mojo_indexed_db_database_callbacks.h
index 5c16eef..b116a6dd 100644
--- a/content/browser/indexed_db/mock_mojo_indexed_db_database_callbacks.h
+++ b/content/browser/indexed_db/mock_mojo_indexed_db_database_callbacks.h
@@ -19,6 +19,12 @@
     : public blink::mojom::IDBDatabaseCallbacks {
  public:
   MockMojoIndexedDBDatabaseCallbacks();
+
+  MockMojoIndexedDBDatabaseCallbacks(
+      const MockMojoIndexedDBDatabaseCallbacks&) = delete;
+  MockMojoIndexedDBDatabaseCallbacks& operator=(
+      const MockMojoIndexedDBDatabaseCallbacks&) = delete;
+
   ~MockMojoIndexedDBDatabaseCallbacks() override;
 
   mojo::PendingAssociatedRemote<blink::mojom::IDBDatabaseCallbacks>
@@ -34,8 +40,6 @@
 
  private:
   mojo::AssociatedReceiver<blink::mojom::IDBDatabaseCallbacks> receiver_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(MockMojoIndexedDBDatabaseCallbacks);
 };
 
 }  // namespace content
diff --git a/content/browser/indexed_db/transaction_impl.h b/content/browser/indexed_db/transaction_impl.h
index ae2446a9..8180f67 100644
--- a/content/browser/indexed_db/transaction_impl.h
+++ b/content/browser/indexed_db/transaction_impl.h
@@ -33,6 +33,10 @@
       const blink::StorageKey& storage_key,
       base::WeakPtr<IndexedDBDispatcherHost> dispatcher_host,
       scoped_refptr<base::SequencedTaskRunner> idb_runner);
+
+  TransactionImpl(const TransactionImpl&) = delete;
+  TransactionImpl& operator=(const TransactionImpl&) = delete;
+
   ~TransactionImpl() override;
 
   // blink::mojom::IDBTransaction implementation
@@ -72,8 +76,6 @@
   SEQUENCE_CHECKER(sequence_checker_);
 
   base::WeakPtrFactory<TransactionImpl> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(TransactionImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/keyboard_lock_browsertest.cc b/content/browser/keyboard_lock_browsertest.cc
index dd1c2bd8..9b42043 100644
--- a/content/browser/keyboard_lock_browsertest.cc
+++ b/content/browser/keyboard_lock_browsertest.cc
@@ -143,6 +143,12 @@
 class FakeKeyboardLockWebContentsDelegate : public WebContentsDelegate {
  public:
   FakeKeyboardLockWebContentsDelegate() {}
+
+  FakeKeyboardLockWebContentsDelegate(
+      const FakeKeyboardLockWebContentsDelegate&) = delete;
+  FakeKeyboardLockWebContentsDelegate& operator=(
+      const FakeKeyboardLockWebContentsDelegate&) = delete;
+
   ~FakeKeyboardLockWebContentsDelegate() override {}
 
   // WebContentsDelegate overrides.
@@ -158,8 +164,6 @@
  private:
   bool is_fullscreen_ = false;
   bool keyboard_lock_requested_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(FakeKeyboardLockWebContentsDelegate);
 };
 
 void FakeKeyboardLockWebContentsDelegate::EnterFullscreenModeForTab(
diff --git a/content/browser/loader/cors_file_origin_browsertest.cc b/content/browser/loader/cors_file_origin_browsertest.cc
index b3b9439..bea518c 100644
--- a/content/browser/loader/cors_file_origin_browsertest.cc
+++ b/content/browser/loader/cors_file_origin_browsertest.cc
@@ -52,6 +52,11 @@
 class CorsFileOriginBrowserTest : public ContentBrowserTest {
  public:
   CorsFileOriginBrowserTest() : pass_string_(u"PASS"), fail_string_(u"FAIL") {}
+
+  CorsFileOriginBrowserTest(const CorsFileOriginBrowserTest&) = delete;
+  CorsFileOriginBrowserTest& operator=(const CorsFileOriginBrowserTest&) =
+      delete;
+
   ~CorsFileOriginBrowserTest() override = default;
 
  protected:
@@ -174,8 +179,6 @@
 
   const std::u16string pass_string_;
   const std::u16string fail_string_;
-
-  DISALLOW_COPY_AND_ASSIGN(CorsFileOriginBrowserTest);
 };
 
 // Tests end to end Origin header and CORS check behaviors with
diff --git a/content/browser/loader/cross_origin_read_blocking_checker.h b/content/browser/loader/cross_origin_read_blocking_checker.h
index fd54c7c1..f7151dbf 100644
--- a/content/browser/loader/cross_origin_read_blocking_checker.h
+++ b/content/browser/loader/cross_origin_read_blocking_checker.h
@@ -43,6 +43,12 @@
       const network::mojom::URLResponseHead& response,
       const storage::BlobDataHandle& blob_data_handle,
       base::OnceCallback<void(Result)> callback);
+
+  CrossOriginReadBlockingChecker(const CrossOriginReadBlockingChecker&) =
+      delete;
+  CrossOriginReadBlockingChecker& operator=(
+      const CrossOriginReadBlockingChecker&) = delete;
+
   ~CrossOriginReadBlockingChecker();
 
   int GetNetError();
@@ -64,8 +70,6 @@
   int net_error_ = net::OK;
 
   base::WeakPtrFactory<CrossOriginReadBlockingChecker> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(CrossOriginReadBlockingChecker);
 };
 
 }  // namespace content
diff --git a/content/browser/loader/file_url_loader_factory_browsertest.cc b/content/browser/loader/file_url_loader_factory_browsertest.cc
index f85951c..a33b7d7 100644
--- a/content/browser/loader/file_url_loader_factory_browsertest.cc
+++ b/content/browser/loader/file_url_loader_factory_browsertest.cc
@@ -74,6 +74,11 @@
     blocked_path_ = AbsoluteFilePath(blocked_path);
   }
 
+  TestFileAccessContentBrowserClient(
+      const TestFileAccessContentBrowserClient&) = delete;
+  TestFileAccessContentBrowserClient& operator=(
+      const TestFileAccessContentBrowserClient&) = delete;
+
   ~TestFileAccessContentBrowserClient() override {
     EXPECT_EQ(this, SetBrowserClientForTesting(old_content_browser_client_));
   }
@@ -100,8 +105,6 @@
   base::FilePath blocked_path_;
 
   std::vector<FileAccessAllowedArgs> access_allowed_args_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestFileAccessContentBrowserClient);
 };
 
 // This class contains integration tests for file URLs.
diff --git a/content/browser/loader/loader_browsertest.cc b/content/browser/loader/loader_browsertest.cc
index 4b182ed6..b99fa5f 100644
--- a/content/browser/loader/loader_browsertest.cc
+++ b/content/browser/loader/loader_browsertest.cc
@@ -1091,6 +1091,10 @@
  public:
   URLModifyingThrottle(bool modify_start, bool modify_redirect)
       : modify_start_(modify_start), modify_redirect_(modify_redirect) {}
+
+  URLModifyingThrottle(const URLModifyingThrottle&) = delete;
+  URLModifyingThrottle& operator=(const URLModifyingThrottle&) = delete;
+
   ~URLModifyingThrottle() override = default;
 
   void WillStartRequest(network::ResourceRequest* request,
@@ -1133,8 +1137,6 @@
   bool modify_start_;
   bool modify_redirect_;
   bool modified_redirect_url_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(URLModifyingThrottle);
 };
 
 class ThrottleContentBrowserClient : public TestContentBrowserClient {
@@ -1143,6 +1145,11 @@
       : TestContentBrowserClient(),
         modify_start_(modify_start),
         modify_redirect_(modify_redirect) {}
+
+  ThrottleContentBrowserClient(const ThrottleContentBrowserClient&) = delete;
+  ThrottleContentBrowserClient& operator=(const ThrottleContentBrowserClient&) =
+      delete;
+
   ~ThrottleContentBrowserClient() override {}
 
   // ContentBrowserClient overrides:
@@ -1163,8 +1170,6 @@
  private:
   bool modify_start_;
   bool modify_redirect_;
-
-  DISALLOW_COPY_AND_ASSIGN(ThrottleContentBrowserClient);
 };
 
 // Ensures if a URLLoaderThrottle modifies a URL in WillStartRequest the
diff --git a/content/browser/loader/merkle_integrity_source_stream.h b/content/browser/loader/merkle_integrity_source_stream.h
index 7fe7e4f..0a09d12d 100644
--- a/content/browser/loader/merkle_integrity_source_stream.h
+++ b/content/browser/loader/merkle_integrity_source_stream.h
@@ -26,6 +26,11 @@
  public:
   MerkleIntegritySourceStream(base::StringPiece digest_header_value,
                               std::unique_ptr<SourceStream> upstream);
+
+  MerkleIntegritySourceStream(const MerkleIntegritySourceStream&) = delete;
+  MerkleIntegritySourceStream& operator=(const MerkleIntegritySourceStream&) =
+      delete;
+
   ~MerkleIntegritySourceStream() override;
 
   // net::FilterSourceStream
@@ -80,8 +85,6 @@
   bool failed_ = false;
   // Whether the final record has been processed.
   bool final_record_done_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(MerkleIntegritySourceStream);
 };
 
 }  // namespace content
diff --git a/content/browser/loader/navigation_url_loader.h b/content/browser/loader/navigation_url_loader.h
index 90e61af..dede0be 100644
--- a/content/browser/loader/navigation_url_loader.h
+++ b/content/browser/loader/navigation_url_loader.h
@@ -86,6 +86,9 @@
   // BackForwardCache when it also starts depending on the requirement.
   static void SetFactoryForTesting(NavigationURLLoaderFactory* factory);
 
+  NavigationURLLoader(const NavigationURLLoader&) = delete;
+  NavigationURLLoader& operator=(const NavigationURLLoader&) = delete;
+
   virtual ~NavigationURLLoader() {}
 
   // Called right after the loader is constructed.
@@ -103,9 +106,6 @@
 
  protected:
   NavigationURLLoader() {}
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(NavigationURLLoader);
 };
 
 }  // namespace content
diff --git a/content/browser/loader/navigation_url_loader_impl.h b/content/browser/loader/navigation_url_loader_impl.h
index 5e45787..e9161bd 100644
--- a/content/browser/loader/navigation_url_loader_impl.h
+++ b/content/browser/loader/navigation_url_loader_impl.h
@@ -62,6 +62,10 @@
       mojo::PendingRemote<network::mojom::DevToolsObserver> devtools_observer,
       std::vector<std::unique_ptr<NavigationLoaderInterceptor>>
           initial_interceptors);
+
+  NavigationURLLoaderImpl(const NavigationURLLoaderImpl&) = delete;
+  NavigationURLLoaderImpl& operator=(const NavigationURLLoaderImpl&) = delete;
+
   ~NavigationURLLoaderImpl() override;
 
   // TODO(kinuko): Make most of these methods private.
@@ -318,8 +322,6 @@
   base::OnceClosure start_closure_;
 
   base::WeakPtrFactory<NavigationURLLoaderImpl> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(NavigationURLLoaderImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/loader/prefetch_browsertest.cc b/content/browser/loader/prefetch_browsertest.cc
index 90da853..4f3cc0f 100644
--- a/content/browser/loader/prefetch_browsertest.cc
+++ b/content/browser/loader/prefetch_browsertest.cc
@@ -43,6 +43,10 @@
         signed_exchange_enabled_(std::get<0>(GetParam())),
         split_cache_enabled_(std::get<1>(GetParam())),
         split_cache_by_credentials_enabled_(std::get<2>(GetParam())) {}
+
+  PrefetchBrowserTest(const PrefetchBrowserTest&) = delete;
+  PrefetchBrowserTest& operator=(const PrefetchBrowserTest&) = delete;
+
   ~PrefetchBrowserTest() override = default;
 
   void SetUpOnMainThread() override {
@@ -73,8 +77,6 @@
 
  private:
   base::test::ScopedFeatureList feature_list_;
-
-  DISALLOW_COPY_AND_ASSIGN(PrefetchBrowserTest);
 };
 
 class PrefetchBrowserTestPrivacyChanges
@@ -84,6 +86,12 @@
   PrefetchBrowserTestPrivacyChanges()
       : privacy_changes_enabled_(GetParam()),
         cross_origin_server_(std::make_unique<net::EmbeddedTestServer>()) {}
+
+  PrefetchBrowserTestPrivacyChanges(const PrefetchBrowserTestPrivacyChanges&) =
+      delete;
+  PrefetchBrowserTestPrivacyChanges& operator=(
+      const PrefetchBrowserTestPrivacyChanges&) = delete;
+
   ~PrefetchBrowserTestPrivacyChanges() override = default;
 
   void SetUp() override {
@@ -104,8 +112,6 @@
 
  private:
   base::test::ScopedFeatureList feature_list_;
-
-  DISALLOW_COPY_AND_ASSIGN(PrefetchBrowserTestPrivacyChanges);
 };
 
 IN_PROC_BROWSER_TEST_P(PrefetchBrowserTestPrivacyChanges, RedirectNotFollowed) {
diff --git a/content/browser/loader/prefetch_browsertest_base.h b/content/browser/loader/prefetch_browsertest_base.h
index 7d81544c..bea06b13 100644
--- a/content/browser/loader/prefetch_browsertest_base.h
+++ b/content/browser/loader/prefetch_browsertest_base.h
@@ -56,6 +56,10 @@
   };
 
   PrefetchBrowserTestBase();
+
+  PrefetchBrowserTestBase(const PrefetchBrowserTestBase&) = delete;
+  PrefetchBrowserTestBase& operator=(const PrefetchBrowserTestBase&) = delete;
+
   ~PrefetchBrowserTestBase() override;
 
   void SetUpOnMainThread() override;
@@ -108,8 +112,6 @@
 
   int prefetch_url_loader_called_ GUARDED_BY(lock_) = 0;
   base::Lock lock_;
-
-  DISALLOW_COPY_AND_ASSIGN(PrefetchBrowserTestBase);
 };
 
 }  // namespace content
diff --git a/content/browser/loader/prefetch_url_loader.h b/content/browser/loader/prefetch_url_loader.h
index 4fe4c6c..45485b0 100644
--- a/content/browser/loader/prefetch_url_loader.h
+++ b/content/browser/loader/prefetch_url_loader.h
@@ -77,6 +77,10 @@
           prefetched_signed_exchange_cache,
       const std::string& accept_langs,
       RecursivePrefetchTokenGenerator recursive_prefetch_token_generator);
+
+  PrefetchURLLoader(const PrefetchURLLoader&) = delete;
+  PrefetchURLLoader& operator=(const PrefetchURLLoader&) = delete;
+
   ~PrefetchURLLoader() override;
 
   // Sends an empty response's body to |forwarding_client_|. If failed to create
@@ -158,8 +162,6 @@
   // TODO(kinuko): This value can become stale if the preference is updated.
   // Make this listen to the changes if it becomes a real concern.
   bool is_signed_exchange_handling_enabled_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(PrefetchURLLoader);
 };
 
 }  // namespace content
diff --git a/content/browser/loader/single_request_url_loader_factory.cc b/content/browser/loader/single_request_url_loader_factory.cc
index eddcb04..8f49cb18 100644
--- a/content/browser/loader/single_request_url_loader_factory.cc
+++ b/content/browser/loader/single_request_url_loader_factory.cc
@@ -66,6 +66,10 @@
  public:
   explicit PendingFactory(scoped_refptr<HandlerState> state)
       : state_(std::move(state)) {}
+
+  PendingFactory(const PendingFactory&) = delete;
+  PendingFactory& operator=(const PendingFactory&) = delete;
+
   ~PendingFactory() override = default;
 
   // PendingSharedURLLoaderFactory:
@@ -75,8 +79,6 @@
 
  private:
   scoped_refptr<HandlerState> state_;
-
-  DISALLOW_COPY_AND_ASSIGN(PendingFactory);
 };
 
 SingleRequestURLLoaderFactory::SingleRequestURLLoaderFactory(
diff --git a/content/browser/locks/lock_manager.cc b/content/browser/locks/lock_manager.cc
index 905b25d5..ac289a3 100644
--- a/content/browser/locks/lock_manager.cc
+++ b/content/browser/locks/lock_manager.cc
@@ -51,6 +51,9 @@
                  int64_t lock_id)
       : context_(context), origin_(origin), lock_id_(lock_id) {}
 
+  LockHandleImpl(const LockHandleImpl&) = delete;
+  LockHandleImpl& operator=(const LockHandleImpl&) = delete;
+
   ~LockHandleImpl() override {
     if (context_)
       context_->ReleaseLock(origin_, lock_id_);
@@ -64,8 +67,6 @@
   base::WeakPtr<LockManager> context_;
   const url::Origin origin_;
   const int64_t lock_id_;
-
-  DISALLOW_COPY_AND_ASSIGN(LockHandleImpl);
 };
 
 }  // namespace
diff --git a/content/browser/manifest/manifest_manager_host.h b/content/browser/manifest/manifest_manager_host.h
index 0086dbb2..b628bc88 100644
--- a/content/browser/manifest/manifest_manager_host.h
+++ b/content/browser/manifest/manifest_manager_host.h
@@ -27,6 +27,9 @@
     : public RenderDocumentHostUserData<ManifestManagerHost>,
       public blink::mojom::ManifestUrlChangeObserver {
  public:
+  ManifestManagerHost(const ManifestManagerHost&) = delete;
+  ManifestManagerHost& operator=(const ManifestManagerHost&) = delete;
+
   ~ManifestManagerHost() override;
 
   using GetManifestCallback =
@@ -71,7 +74,6 @@
       manifest_url_change_observer_receiver_{this};
 
   RENDER_DOCUMENT_HOST_USER_DATA_KEY_DECL();
-  DISALLOW_COPY_AND_ASSIGN(ManifestManagerHost);
 };
 
 }  // namespace content
diff --git a/content/browser/media/android/browser_gpu_video_accelerator_factories.h b/content/browser/media/android/browser_gpu_video_accelerator_factories.h
index 6a023ffb..a118bffe 100644
--- a/content/browser/media/android/browser_gpu_video_accelerator_factories.h
+++ b/content/browser/media/android/browser_gpu_video_accelerator_factories.h
@@ -22,6 +22,12 @@
  public:
   explicit BrowserGpuVideoAcceleratorFactories(
       scoped_refptr<viz::ContextProviderCommandBuffer>);
+
+  BrowserGpuVideoAcceleratorFactories(
+      const BrowserGpuVideoAcceleratorFactories&) = delete;
+  BrowserGpuVideoAcceleratorFactories& operator=(
+      const BrowserGpuVideoAcceleratorFactories&) = delete;
+
   ~BrowserGpuVideoAcceleratorFactories() override;
 
  private:
@@ -68,8 +74,6 @@
   base::UnguessableToken channel_token_;
   base::OnceCallbackList<void(const base::UnguessableToken&)>
       channel_token_callbacks_;
-
-  DISALLOW_COPY_AND_ASSIGN(BrowserGpuVideoAcceleratorFactories);
 };
 
 }  // namespace content
diff --git a/content/browser/media/android/media_player_renderer.h b/content/browser/media/android/media_player_renderer.h
index 05a38631..220fe63 100644
--- a/content/browser/media/android/media_player_renderer.h
+++ b/content/browser/media/android/media_player_renderer.h
@@ -53,6 +53,9 @@
       mojo::PendingReceiver<RendererExtension> renderer_extension_receiver,
       mojo::PendingRemote<ClientExtension> client_extension_remote);
 
+  MediaPlayerRenderer(const MediaPlayerRenderer&) = delete;
+  MediaPlayerRenderer& operator=(const MediaPlayerRenderer&) = delete;
+
   ~MediaPlayerRenderer() override;
 
   // media::Renderer implementation
@@ -138,8 +141,6 @@
 
   // NOTE: Weak pointers must be invalidated before all other member variables.
   base::WeakPtrFactory<MediaPlayerRenderer> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(MediaPlayerRenderer);
 };
 
 }  // namespace content
diff --git a/content/browser/media/android/media_player_renderer_web_contents_observer.h b/content/browser/media/android/media_player_renderer_web_contents_observer.h
index 643b764..1f85c9b 100644
--- a/content/browser/media/android/media_player_renderer_web_contents_observer.h
+++ b/content/browser/media/android/media_player_renderer_web_contents_observer.h
@@ -22,6 +22,11 @@
     : public WebContentsObserver,
       public WebContentsUserData<MediaPlayerRendererWebContentsObserver> {
  public:
+  MediaPlayerRendererWebContentsObserver(
+      const MediaPlayerRendererWebContentsObserver&) = delete;
+  MediaPlayerRendererWebContentsObserver& operator=(
+      const MediaPlayerRendererWebContentsObserver&) = delete;
+
   ~MediaPlayerRendererWebContentsObserver() override;
 
   void AddMediaPlayerRenderer(MediaPlayerRenderer* player);
@@ -38,8 +43,6 @@
   base::flat_set<MediaPlayerRenderer*> players_;
 
   WEB_CONTENTS_USER_DATA_KEY_DECL();
-
-  DISALLOW_COPY_AND_ASSIGN(MediaPlayerRendererWebContentsObserver);
 };
 
 }  // namespace content
diff --git a/content/browser/media/android/media_resource_getter_impl.h b/content/browser/media/android/media_resource_getter_impl.h
index b7a65fe..55f5b099 100644
--- a/content/browser/media/android/media_resource_getter_impl.h
+++ b/content/browser/media/android/media_resource_getter_impl.h
@@ -39,6 +39,10 @@
                           storage::FileSystemContext* file_system_context,
                           int render_process_id,
                           int render_frame_id);
+
+  MediaResourceGetterImpl(const MediaResourceGetterImpl&) = delete;
+  MediaResourceGetterImpl& operator=(const MediaResourceGetterImpl&) = delete;
+
   ~MediaResourceGetterImpl() override;
 
   // media::MediaResourceGetter implementation.
@@ -76,8 +80,6 @@
 
   // NOTE: Weak pointers must be invalidated before all other member variables.
   base::WeakPtrFactory<MediaResourceGetterImpl> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(MediaResourceGetterImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/media/audible_metrics.h b/content/browser/media/audible_metrics.h
index fa2397d..5989641 100644
--- a/content/browser/media/audible_metrics.h
+++ b/content/browser/media/audible_metrics.h
@@ -37,6 +37,10 @@
   };
 
   AudibleMetrics();
+
+  AudibleMetrics(const AudibleMetrics&) = delete;
+  AudibleMetrics& operator=(const AudibleMetrics&) = delete;
+
   ~AudibleMetrics();
 
   void UpdateAudibleWebContentsState(const WebContents* web_contents,
@@ -67,8 +71,6 @@
   // contents to the set when it becomes currently audible and remove it when it
   // is no longer audible.
   std::set<const WebContents*> audible_web_contents_;
-
-  DISALLOW_COPY_AND_ASSIGN(AudibleMetrics);
 };
 
 }  // namespace content
diff --git a/content/browser/media/audio_input_stream_broker.h b/content/browser/media/audio_input_stream_broker.h
index 1619eb2..9d113d4 100644
--- a/content/browser/media/audio_input_stream_broker.h
+++ b/content/browser/media/audio_input_stream_broker.h
@@ -46,6 +46,9 @@
       mojo::PendingRemote<blink::mojom::RendererAudioInputStreamFactoryClient>
           renderer_factory_client);
 
+  AudioInputStreamBroker(const AudioInputStreamBroker&) = delete;
+  AudioInputStreamBroker& operator=(const AudioInputStreamBroker&) = delete;
+
   ~AudioInputStreamBroker() final;
 
   // Creates the stream.
@@ -86,8 +89,6 @@
           kDocumentDestroyed;
 
   base::WeakPtrFactory<AudioInputStreamBroker> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(AudioInputStreamBroker);
 };
 
 }  // namespace content
diff --git a/content/browser/media/audio_input_stream_broker_unittest.cc b/content/browser/media/audio_input_stream_broker_unittest.cc
index 8f6151a..a7381dc5 100644
--- a/content/browser/media/audio_input_stream_broker_unittest.cc
+++ b/content/browser/media/audio_input_stream_broker_unittest.cc
@@ -47,6 +47,12 @@
     : public blink::mojom::RendererAudioInputStreamFactoryClient {
  public:
   MockRendererAudioInputStreamFactoryClient() = default;
+
+  MockRendererAudioInputStreamFactoryClient(
+      const MockRendererAudioInputStreamFactoryClient&) = delete;
+  MockRendererAudioInputStreamFactoryClient& operator=(
+      const MockRendererAudioInputStreamFactoryClient&) = delete;
+
   ~MockRendererAudioInputStreamFactoryClient() override = default;
 
   mojo::PendingRemote<blink::mojom::RendererAudioInputStreamFactoryClient>
@@ -81,12 +87,15 @@
       this};
   mojo::Remote<media::mojom::AudioInputStream> input_stream_;
   mojo::PendingReceiver<media::mojom::AudioInputStreamClient> client_receiver_;
-  DISALLOW_COPY_AND_ASSIGN(MockRendererAudioInputStreamFactoryClient);
 };
 
 class MockStreamFactory final : public audio::FakeStreamFactory {
  public:
   MockStreamFactory() = default;
+
+  MockStreamFactory(const MockStreamFactory&) = delete;
+  MockStreamFactory& operator=(const MockStreamFactory&) = delete;
+
   ~MockStreamFactory() override = default;
 
   // State of an expected stream creation. |device_id| and |params| are set
@@ -143,7 +152,6 @@
   }
 
   StreamRequestData* stream_request_data_;
-  DISALLOW_COPY_AND_ASSIGN(MockStreamFactory);
 };
 
 struct TestEnvironment {
diff --git a/content/browser/media/audio_log_factory.h b/content/browser/media/audio_log_factory.h
index 15c3958d..d1bc7c9 100644
--- a/content/browser/media/audio_log_factory.h
+++ b/content/browser/media/audio_log_factory.h
@@ -13,6 +13,10 @@
 class AudioLogFactory : public media::mojom::AudioLogFactory {
  public:
   AudioLogFactory();
+
+  AudioLogFactory(const AudioLogFactory&) = delete;
+  AudioLogFactory& operator=(const AudioLogFactory&) = delete;
+
   ~AudioLogFactory() override;
 
   // media::mojom::AudioLogFactory implementation.
@@ -20,9 +24,6 @@
                       int32_t component_id,
                       mojo::PendingReceiver<media::mojom::AudioLog>
                           audio_log_receiver) override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(AudioLogFactory);
 };
 
 }  // namespace content
diff --git a/content/browser/media/audio_loopback_stream_broker.h b/content/browser/media/audio_loopback_stream_broker.h
index 0218939..946dfa0 100644
--- a/content/browser/media/audio_loopback_stream_broker.h
+++ b/content/browser/media/audio_loopback_stream_broker.h
@@ -47,6 +47,10 @@
       mojo::PendingRemote<blink::mojom::RendererAudioInputStreamFactoryClient>
           renderer_factory_client);
 
+  AudioLoopbackStreamBroker(const AudioLoopbackStreamBroker&) = delete;
+  AudioLoopbackStreamBroker& operator=(const AudioLoopbackStreamBroker&) =
+      delete;
+
   ~AudioLoopbackStreamBroker() final;
 
   // Creates the stream.
@@ -81,8 +85,6 @@
   mojo::PendingReceiver<media::mojom::AudioInputStreamClient> client_receiver_;
 
   base::WeakPtrFactory<AudioLoopbackStreamBroker> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(AudioLoopbackStreamBroker);
 };
 
 }  // namespace content
diff --git a/content/browser/media/audio_loopback_stream_broker_unittest.cc b/content/browser/media/audio_loopback_stream_broker_unittest.cc
index b4c1088..da78b27 100644
--- a/content/browser/media/audio_loopback_stream_broker_unittest.cc
+++ b/content/browser/media/audio_loopback_stream_broker_unittest.cc
@@ -43,6 +43,10 @@
 class MockSource : public AudioStreamBroker::LoopbackSource {
  public:
   MockSource() : group_id_(base::UnguessableToken::Create()) {}
+
+  MockSource(const MockSource&) = delete;
+  MockSource& operator=(const MockSource&) = delete;
+
   ~MockSource() override {}
 
   // AudioStreamBrokerFactory::LoopbackSource mocking.
@@ -52,7 +56,6 @@
 
  private:
   base::UnguessableToken group_id_;
-  DISALLOW_COPY_AND_ASSIGN(MockSource);
 };
 
 using MockDeleterCallback = StrictMock<
@@ -97,6 +100,10 @@
 class MockStreamFactory final : public audio::FakeStreamFactory {
  public:
   MockStreamFactory() = default;
+
+  MockStreamFactory(const MockStreamFactory&) = delete;
+  MockStreamFactory& operator=(const MockStreamFactory&) = delete;
+
   ~MockStreamFactory() override = default;
 
   // State of an expected stream creation. |device_id| and |params| are set
@@ -154,8 +161,6 @@
   }
 
   StreamRequestData* stream_request_data_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockStreamFactory);
 };
 
 const bool kMuteSource = true;
diff --git a/content/browser/media/audio_muting_session.h b/content/browser/media/audio_muting_session.h
index e0c0d034..439938be 100644
--- a/content/browser/media/audio_muting_session.h
+++ b/content/browser/media/audio_muting_session.h
@@ -15,6 +15,10 @@
 class CONTENT_EXPORT AudioMutingSession {
  public:
   explicit AudioMutingSession(const base::UnguessableToken& group_id);
+
+  AudioMutingSession(const AudioMutingSession&) = delete;
+  AudioMutingSession& operator=(const AudioMutingSession&) = delete;
+
   ~AudioMutingSession();
 
   void Connect(media::mojom::AudioStreamFactory* factory);
@@ -22,8 +26,6 @@
  private:
   const base::UnguessableToken group_id_;
   mojo::AssociatedRemote<media::mojom::LocalMuter> muter_;
-
-  DISALLOW_COPY_AND_ASSIGN(AudioMutingSession);
 };
 
 }  // namespace content
diff --git a/content/browser/media/audio_output_stream_broker.h b/content/browser/media/audio_output_stream_broker.h
index 0cfea8af..04f9bb3 100644
--- a/content/browser/media/audio_output_stream_broker.h
+++ b/content/browser/media/audio_output_stream_broker.h
@@ -40,6 +40,9 @@
       mojo::PendingRemote<media::mojom::AudioOutputStreamProviderClient>
           client);
 
+  AudioOutputStreamBroker(const AudioOutputStreamBroker&) = delete;
+  AudioOutputStreamBroker& operator=(const AudioOutputStreamBroker&) = delete;
+
   ~AudioOutputStreamBroker() final;
 
   // Creates the stream.
@@ -76,8 +79,6 @@
   DisconnectReason disconnect_reason_ = DisconnectReason::kDocumentDestroyed;
 
   base::WeakPtrFactory<AudioOutputStreamBroker> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(AudioOutputStreamBroker);
 };
 
 }  // namespace content
diff --git a/content/browser/media/audio_output_stream_broker_unittest.cc b/content/browser/media/audio_output_stream_broker_unittest.cc
index 882e97ed..d69b26a 100644
--- a/content/browser/media/audio_output_stream_broker_unittest.cc
+++ b/content/browser/media/audio_output_stream_broker_unittest.cc
@@ -52,6 +52,12 @@
     : public media::mojom::AudioOutputStreamProviderClient {
  public:
   MockAudioOutputStreamProviderClient() = default;
+
+  MockAudioOutputStreamProviderClient(
+      const MockAudioOutputStreamProviderClient&) = delete;
+  MockAudioOutputStreamProviderClient& operator=(
+      const MockAudioOutputStreamProviderClient&) = delete;
+
   ~MockAudioOutputStreamProviderClient() override {}
 
   void Created(mojo::PendingRemote<media::mojom::AudioOutputStream>,
@@ -78,12 +84,15 @@
 
  private:
   mojo::Receiver<media::mojom::AudioOutputStreamProviderClient> receiver_{this};
-  DISALLOW_COPY_AND_ASSIGN(MockAudioOutputStreamProviderClient);
 };
 
 class MockStreamFactory final : public audio::FakeStreamFactory {
  public:
   MockStreamFactory() = default;
+
+  MockStreamFactory(const MockStreamFactory&) = delete;
+  MockStreamFactory& operator=(const MockStreamFactory&) = delete;
+
   ~MockStreamFactory() override = default;
 
   // State of an expected stream creation. |output_device_id|, |params|,
@@ -135,7 +144,6 @@
   }
 
   StreamRequestData* stream_request_data_;
-  DISALLOW_COPY_AND_ASSIGN(MockStreamFactory);
 };
 
 // This struct collects test state we need without doing anything fancy.
diff --git a/content/browser/media/audio_stream_broker.h b/content/browser/media/audio_stream_broker.h
index ad410b1..efdb1ba 100644
--- a/content/browser/media/audio_stream_broker.h
+++ b/content/browser/media/audio_stream_broker.h
@@ -40,28 +40,34 @@
   class CONTENT_EXPORT LoopbackSink {
    public:
     LoopbackSink();
+
+    LoopbackSink(const LoopbackSink&) = delete;
+    LoopbackSink& operator=(const LoopbackSink&) = delete;
+
     virtual ~LoopbackSink();
     virtual void OnSourceGone() = 0;
-
-   private:
-    DISALLOW_COPY_AND_ASSIGN(LoopbackSink);
   };
 
   class CONTENT_EXPORT LoopbackSource {
    public:
     LoopbackSource();
+
+    LoopbackSource(const LoopbackSource&) = delete;
+    LoopbackSource& operator=(const LoopbackSource&) = delete;
+
     virtual ~LoopbackSource();
     virtual void AddLoopbackSink(LoopbackSink* sink) = 0;
     virtual void RemoveLoopbackSink(LoopbackSink* sink) = 0;
     virtual const base::UnguessableToken& GetGroupID() = 0;
-
-   private:
-    DISALLOW_COPY_AND_ASSIGN(LoopbackSource);
   };
 
   using DeleterCallback = base::OnceCallback<void(AudioStreamBroker*)>;
 
   AudioStreamBroker(int render_process_id, int render_frame_id);
+
+  AudioStreamBroker(const AudioStreamBroker&) = delete;
+  AudioStreamBroker& operator=(const AudioStreamBroker&) = delete;
+
   virtual ~AudioStreamBroker();
 
   virtual void CreateStream(media::mojom::AudioStreamFactory* factory) = 0;
@@ -79,9 +85,6 @@
  protected:
   const int render_process_id_;
   const int render_frame_id_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(AudioStreamBroker);
 };
 
 // Used for dependency injection into ForwardingAudioStreamFactory. Used on the
@@ -91,6 +94,10 @@
   static std::unique_ptr<AudioStreamBrokerFactory> CreateImpl();
 
   AudioStreamBrokerFactory();
+
+  AudioStreamBrokerFactory(const AudioStreamBrokerFactory&) = delete;
+  AudioStreamBrokerFactory& operator=(const AudioStreamBrokerFactory&) = delete;
+
   virtual ~AudioStreamBrokerFactory();
 
   virtual std::unique_ptr<AudioStreamBroker> CreateAudioInputStreamBroker(
@@ -126,9 +133,6 @@
       AudioStreamBroker::DeleterCallback deleter,
       mojo::PendingRemote<media::mojom::AudioOutputStreamProviderClient>
           client) = 0;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(AudioStreamBrokerFactory);
 };
 
 }  // namespace content
diff --git a/content/browser/media/audio_stream_monitor.h b/content/browser/media/audio_stream_monitor.h
index 242b21d..e15b8cf 100644
--- a/content/browser/media/audio_stream_monitor.h
+++ b/content/browser/media/audio_stream_monitor.h
@@ -38,6 +38,10 @@
 class CONTENT_EXPORT AudioStreamMonitor : public WebContentsObserver {
  public:
   explicit AudioStreamMonitor(WebContents* contents);
+
+  AudioStreamMonitor(const AudioStreamMonitor&) = delete;
+  AudioStreamMonitor& operator=(const AudioStreamMonitor&) = delete;
+
   ~AudioStreamMonitor() override;
 
   // Returns true if audio has recently been audible from the tab.  This is
@@ -164,8 +168,6 @@
   // Started only when an indicator is toggled on, to turn it off again in the
   // future.
   base::OneShotTimer off_timer_;
-
-  DISALLOW_COPY_AND_ASSIGN(AudioStreamMonitor);
 };
 
 }  // namespace content
diff --git a/content/browser/media/capture/aura_window_video_capture_device.cc b/content/browser/media/capture/aura_window_video_capture_device.cc
index 947367f0..2db1cba6 100644
--- a/content/browser/media/capture/aura_window_video_capture_device.cc
+++ b/content/browser/media/capture/aura_window_video_capture_device.cc
@@ -55,6 +55,9 @@
         base::BindOnce(&WindowTracker::ResolveTarget, AsWeakPtr(), source_id));
   }
 
+  WindowTracker(const WindowTracker&) = delete;
+  WindowTracker& operator=(const WindowTracker&) = delete;
+
   ~WindowTracker() final {
     DCHECK_CURRENTLY_ON(BrowserThread::UI);
 
@@ -182,8 +185,6 @@
 
   aura::ScopedWindowCaptureRequest capture_request_;
   FrameSinkVideoCaptureDevice::VideoCaptureTarget target_;
-
-  DISALLOW_COPY_AND_ASSIGN(WindowTracker);
 };
 
 AuraWindowVideoCaptureDevice::AuraWindowVideoCaptureDevice(
diff --git a/content/browser/media/capture/aura_window_video_capture_device.h b/content/browser/media/capture/aura_window_video_capture_device.h
index d316819..670ed3d9 100644
--- a/content/browser/media/capture/aura_window_video_capture_device.h
+++ b/content/browser/media/capture/aura_window_video_capture_device.h
@@ -31,6 +31,11 @@
       public base::SupportsWeakPtr<AuraWindowVideoCaptureDevice> {
  public:
   explicit AuraWindowVideoCaptureDevice(const DesktopMediaID& source_id);
+
+  AuraWindowVideoCaptureDevice(const AuraWindowVideoCaptureDevice&) = delete;
+  AuraWindowVideoCaptureDevice& operator=(const AuraWindowVideoCaptureDevice&) =
+      delete;
+
   ~AuraWindowVideoCaptureDevice() final;
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
@@ -53,8 +58,6 @@
   // post a notification if it is destroyed.
   const std::unique_ptr<WindowTracker, BrowserThread::DeleteOnUIThread>
       tracker_;
-
-  DISALLOW_COPY_AND_ASSIGN(AuraWindowVideoCaptureDevice);
 };
 
 }  // namespace content
diff --git a/content/browser/media/capture/aura_window_video_capture_device_browsertest.cc b/content/browser/media/capture/aura_window_video_capture_device_browsertest.cc
index 7a4a3ca5f..2eff036e 100644
--- a/content/browser/media/capture/aura_window_video_capture_device_browsertest.cc
+++ b/content/browser/media/capture/aura_window_video_capture_device_browsertest.cc
@@ -37,6 +37,12 @@
       public FrameTestUtil {
  public:
   AuraWindowVideoCaptureDeviceBrowserTest() = default;
+
+  AuraWindowVideoCaptureDeviceBrowserTest(
+      const AuraWindowVideoCaptureDeviceBrowserTest&) = delete;
+  AuraWindowVideoCaptureDeviceBrowserTest& operator=(
+      const AuraWindowVideoCaptureDeviceBrowserTest&) = delete;
+
   ~AuraWindowVideoCaptureDeviceBrowserTest() override = default;
 
   aura::Window* GetCapturedWindow() const {
@@ -184,9 +190,6 @@
   }
 
   void WaitForFirstFrame() final { WaitForFrameWithColor(SK_ColorBLACK); }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(AuraWindowVideoCaptureDeviceBrowserTest);
 };
 
 // Tests that the device refuses to start if the target window was destroyed
diff --git a/content/browser/media/capture/content_capture_device_browsertest_base.h b/content/browser/media/capture/content_capture_device_browsertest_base.h
index 0bab553..fa890aec1 100644
--- a/content/browser/media/capture/content_capture_device_browsertest_base.h
+++ b/content/browser/media/capture/content_capture_device_browsertest_base.h
@@ -34,6 +34,12 @@
 class ContentCaptureDeviceBrowserTestBase : public ContentBrowserTest {
  public:
   ContentCaptureDeviceBrowserTestBase();
+
+  ContentCaptureDeviceBrowserTestBase(
+      const ContentCaptureDeviceBrowserTestBase&) = delete;
+  ContentCaptureDeviceBrowserTestBase& operator=(
+      const ContentCaptureDeviceBrowserTestBase&) = delete;
+
   ~ContentCaptureDeviceBrowserTestBase() override;
 
   FakeVideoCaptureStack* capture_stack() { return &capture_stack_; }
@@ -132,8 +138,6 @@
   static constexpr char kSingleFramePath[] = "/single.html";
   static constexpr char kAlternateHostname[] = "alternate.com";
   static constexpr char kAlternatePath[] = "/alternate.html";
-
-  DISALLOW_COPY_AND_ASSIGN(ContentCaptureDeviceBrowserTestBase);
 };
 
 }  // namespace content
diff --git a/content/browser/media/capture/desktop_capture_device.cc b/content/browser/media/capture/desktop_capture_device.cc
index 186afe5..547edad 100644
--- a/content/browser/media/capture/desktop_capture_device.cc
+++ b/content/browser/media/capture/desktop_capture_device.cc
@@ -114,6 +114,10 @@
   Core(scoped_refptr<base::SingleThreadTaskRunner> task_runner,
        std::unique_ptr<webrtc::DesktopCapturer> capturer,
        DesktopMediaID::Type type);
+
+  Core(const Core&) = delete;
+  Core& operator=(const Core&) = delete;
+
   ~Core() override;
 
   // Implementation of VideoCaptureDevice methods.
@@ -210,8 +214,6 @@
   mojo::Remote<device::mojom::WakeLock> wake_lock_;
 
   base::WeakPtrFactory<Core> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(Core);
 };
 
 DesktopCaptureDevice::Core::Core(
diff --git a/content/browser/media/capture/desktop_capture_device.h b/content/browser/media/capture/desktop_capture_device.h
index 58f14fb..330f2c0 100644
--- a/content/browser/media/capture/desktop_capture_device.h
+++ b/content/browser/media/capture/desktop_capture_device.h
@@ -41,6 +41,9 @@
   static std::unique_ptr<media::VideoCaptureDevice> Create(
       const DesktopMediaID& source);
 
+  DesktopCaptureDevice(const DesktopCaptureDevice&) = delete;
+  DesktopCaptureDevice& operator=(const DesktopCaptureDevice&) = delete;
+
   ~DesktopCaptureDevice() override;
 
   // VideoCaptureDevice interface.
@@ -68,8 +71,6 @@
 
   base::Thread thread_;
   std::unique_ptr<Core> core_;
-
-  DISALLOW_COPY_AND_ASSIGN(DesktopCaptureDevice);
 };
 
 }  // namespace content
diff --git a/content/browser/media/capture/desktop_capture_device_mac.cc b/content/browser/media/capture/desktop_capture_device_mac.cc
index 01460cb..56762f4 100644
--- a/content/browser/media/capture/desktop_capture_device_mac.cc
+++ b/content/browser/media/capture/desktop_capture_device_mac.cc
@@ -22,6 +22,9 @@
         device_task_runner_(base::ThreadTaskRunnerHandle::Get()),
         weak_factory_(this) {}
 
+  DesktopCaptureDeviceMac(const DesktopCaptureDeviceMac&) = delete;
+  DesktopCaptureDeviceMac& operator=(const DesktopCaptureDeviceMac&) = delete;
+
   ~DesktopCaptureDeviceMac() override = default;
 
   static float ComputeMinFrameRate(float requested_frame_rate) {
@@ -192,7 +195,6 @@
   std::unique_ptr<base::RepeatingTimer> min_frame_rate_enforcement_timer_;
 
   base::WeakPtrFactory<DesktopCaptureDeviceMac> weak_factory_;
-  DISALLOW_COPY_AND_ASSIGN(DesktopCaptureDeviceMac);
 };
 
 }  // namespace
diff --git a/content/browser/media/capture/desktop_capture_device_unittest.cc b/content/browser/media/capture/desktop_capture_device_unittest.cc
index a8d2eca9..af2ad99 100644
--- a/content/browser/media/capture/desktop_capture_device_unittest.cc
+++ b/content/browser/media/capture/desktop_capture_device_unittest.cc
@@ -99,12 +99,14 @@
     mutable_updated_region()->Swap(frame->mutable_updated_region());
     original_frame_ = std::move(frame);
   }
+
+  InvertedDesktopFrame(const InvertedDesktopFrame&) = delete;
+  InvertedDesktopFrame& operator=(const InvertedDesktopFrame&) = delete;
+
   ~InvertedDesktopFrame() override {}
 
  private:
   std::unique_ptr<webrtc::DesktopFrame> original_frame_;
-
-  DISALLOW_COPY_AND_ASSIGN(InvertedDesktopFrame);
 };
 
 // DesktopFrame wrapper that copies the input frame and doubles the stride.
@@ -121,12 +123,13 @@
     CopyPixelsFrom(*frame, webrtc::DesktopVector(),
                    webrtc::DesktopRect::MakeSize(size()));
   }
+
+  UnpackedDesktopFrame(const UnpackedDesktopFrame&) = delete;
+  UnpackedDesktopFrame& operator=(const UnpackedDesktopFrame&) = delete;
+
   ~UnpackedDesktopFrame() override {
     delete[] data_;
   }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(UnpackedDesktopFrame);
 };
 
 // TODO(sergeyu): Move this to a separate file where it can be reused.
diff --git a/content/browser/media/capture/desktop_streams_registry_impl.h b/content/browser/media/capture/desktop_streams_registry_impl.h
index ef094eb..736f964 100644
--- a/content/browser/media/capture/desktop_streams_registry_impl.h
+++ b/content/browser/media/capture/desktop_streams_registry_impl.h
@@ -19,6 +19,11 @@
     : public DesktopStreamsRegistry {
  public:
   DesktopStreamsRegistryImpl();
+
+  DesktopStreamsRegistryImpl(const DesktopStreamsRegistryImpl&) = delete;
+  DesktopStreamsRegistryImpl& operator=(const DesktopStreamsRegistryImpl&) =
+      delete;
+
   ~DesktopStreamsRegistryImpl() override;
 
   // Returns the DesktopStreamRegistryImpl singleton.
@@ -57,8 +62,6 @@
   void CleanupStream(const std::string& id);
 
   StreamsMap approved_streams_;
-
-  DISALLOW_COPY_AND_ASSIGN(DesktopStreamsRegistryImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/media/capture/fake_video_capture_stack.cc b/content/browser/media/capture/fake_video_capture_stack.cc
index 835e50f..051df3a 100644
--- a/content/browser/media/capture/fake_video_capture_stack.cc
+++ b/content/browser/media/capture/fake_video_capture_stack.cc
@@ -33,6 +33,10 @@
  public:
   explicit Receiver(FakeVideoCaptureStack* capture_stack)
       : capture_stack_(capture_stack) {}
+
+  Receiver(const Receiver&) = delete;
+  Receiver& operator=(const Receiver&) = delete;
+
   ~Receiver() override = default;
 
  private:
@@ -108,8 +112,6 @@
 
   FakeVideoCaptureStack* const capture_stack_;
   base::flat_map<int, media::mojom::VideoBufferHandlePtr> buffers_;
-
-  DISALLOW_COPY_AND_ASSIGN(Receiver);
 };
 
 std::unique_ptr<media::VideoFrameReceiver>
diff --git a/content/browser/media/capture/frame_sink_video_capture_device.h b/content/browser/media/capture/frame_sink_video_capture_device.h
index d20a8cd..4058e79 100644
--- a/content/browser/media/capture/frame_sink_video_capture_device.h
+++ b/content/browser/media/capture/frame_sink_video_capture_device.h
@@ -51,6 +51,11 @@
       public viz::mojom::FrameSinkVideoConsumer {
  public:
   FrameSinkVideoCaptureDevice();
+
+  FrameSinkVideoCaptureDevice(const FrameSinkVideoCaptureDevice&) = delete;
+  FrameSinkVideoCaptureDevice& operator=(const FrameSinkVideoCaptureDevice&) =
+      delete;
+
   ~FrameSinkVideoCaptureDevice() override;
 
   // Deviation from the VideoCaptureDevice interface: Since the memory pooling
@@ -200,8 +205,6 @@
 
   // Creates WeakPtrs for use on the device thread.
   base::WeakPtrFactory<FrameSinkVideoCaptureDevice> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(FrameSinkVideoCaptureDevice);
 };
 
 }  // namespace content
diff --git a/content/browser/media/capture/mouse_cursor_overlay_controller.h b/content/browser/media/capture/mouse_cursor_overlay_controller.h
index 823aca3..96d0414 100644
--- a/content/browser/media/capture/mouse_cursor_overlay_controller.h
+++ b/content/browser/media/capture/mouse_cursor_overlay_controller.h
@@ -37,6 +37,11 @@
   using Overlay = viz::mojom::FrameSinkVideoCaptureOverlay;
 
   MouseCursorOverlayController();
+
+  MouseCursorOverlayController(const MouseCursorOverlayController&) = delete;
+  MouseCursorOverlayController& operator=(const MouseCursorOverlayController&) =
+      delete;
+
   ~MouseCursorOverlayController();
 
   // Sets a new target view to monitor for mouse cursor updates.
@@ -170,8 +175,6 @@
   // stop showing.
   static constexpr base::TimeDelta kIdleTimeout =
       base::TimeDelta::FromSeconds(2);
-
-  DISALLOW_COPY_AND_ASSIGN(MouseCursorOverlayController);
 };
 
 }  // namespace content
diff --git a/content/browser/media/capture/mouse_cursor_overlay_controller_aura.cc b/content/browser/media/capture/mouse_cursor_overlay_controller_aura.cc
index 50c27549..1397d0b 100644
--- a/content/browser/media/capture/mouse_cursor_overlay_controller_aura.cc
+++ b/content/browser/media/capture/mouse_cursor_overlay_controller_aura.cc
@@ -30,6 +30,9 @@
     window_->AddPreTargetHandler(this);
   }
 
+  Observer(const Observer&) = delete;
+  Observer& operator=(const Observer&) = delete;
+
   ~Observer() final {
     if (window_) {
       OnWindowDestroying(window_);
@@ -114,8 +117,6 @@
 
   MouseCursorOverlayController* const controller_;
   aura::Window* window_;
-
-  DISALLOW_COPY_AND_ASSIGN(Observer);
 };
 
 MouseCursorOverlayController::MouseCursorOverlayController()
diff --git a/content/browser/media/capture/mouse_cursor_overlay_controller_browsertest.cc b/content/browser/media/capture/mouse_cursor_overlay_controller_browsertest.cc
index f7c1f10..e0067a1 100644
--- a/content/browser/media/capture/mouse_cursor_overlay_controller_browsertest.cc
+++ b/content/browser/media/capture/mouse_cursor_overlay_controller_browsertest.cc
@@ -25,6 +25,10 @@
 class FakeOverlay final : public MouseCursorOverlayController::Overlay {
  public:
   FakeOverlay() = default;
+
+  FakeOverlay(const FakeOverlay&) = delete;
+  FakeOverlay& operator=(const FakeOverlay&) = delete;
+
   ~FakeOverlay() override = default;
 
   const SkBitmap& image() const { return image_; }
@@ -41,8 +45,6 @@
  private:
   SkBitmap image_;
   gfx::RectF bounds_;
-
-  DISALLOW_COPY_AND_ASSIGN(FakeOverlay);
 };
 
 }  // namespace
@@ -50,6 +52,12 @@
 class MouseCursorOverlayControllerBrowserTest : public ContentBrowserTest {
  public:
   MouseCursorOverlayControllerBrowserTest() = default;
+
+  MouseCursorOverlayControllerBrowserTest(
+      const MouseCursorOverlayControllerBrowserTest&) = delete;
+  MouseCursorOverlayControllerBrowserTest& operator=(
+      const MouseCursorOverlayControllerBrowserTest&) = delete;
+
   ~MouseCursorOverlayControllerBrowserTest() override = default;
 
   void SetUpOnMainThread() final {
@@ -169,8 +177,6 @@
   }
 
   MouseCursorOverlayController controller_;
-
-  DISALLOW_COPY_AND_ASSIGN(MouseCursorOverlayControllerBrowserTest);
 };
 
 IN_PROC_BROWSER_TEST_F(MouseCursorOverlayControllerBrowserTest,
diff --git a/content/browser/media/capture/mouse_cursor_overlay_controller_mac.mm b/content/browser/media/capture/mouse_cursor_overlay_controller_mac.mm
index 4d1a3c4..024fb026 100644
--- a/content/browser/media/capture/mouse_cursor_overlay_controller_mac.mm
+++ b/content/browser/media/capture/mouse_cursor_overlay_controller_mac.mm
@@ -84,6 +84,9 @@
                  andView:view_.get()]);
   }
 
+  Observer(const Observer&) = delete;
+  Observer& operator=(const Observer&) = delete;
+
   ~Observer() { StopTracking(); }
 
   void StopTracking() {
@@ -117,8 +120,6 @@
   MouseCursorOverlayController* const controller_;
   base::scoped_nsobject<NSView> view_;
   base::scoped_nsobject<MouseCursorOverlayTracker> mouse_tracker_;
-
-  DISALLOW_COPY_AND_ASSIGN(Observer);
 };
 
 MouseCursorOverlayController::MouseCursorOverlayController()
diff --git a/content/browser/media/capture/screen_capture_device_android.h b/content/browser/media/capture/screen_capture_device_android.h
index dda6b802..9294af99 100644
--- a/content/browser/media/capture/screen_capture_device_android.h
+++ b/content/browser/media/capture/screen_capture_device_android.h
@@ -22,6 +22,11 @@
     : public media::VideoCaptureDevice {
  public:
   ScreenCaptureDeviceAndroid();
+
+  ScreenCaptureDeviceAndroid(const ScreenCaptureDeviceAndroid&) = delete;
+  ScreenCaptureDeviceAndroid& operator=(const ScreenCaptureDeviceAndroid&) =
+      delete;
+
   ~ScreenCaptureDeviceAndroid() override;
 
   // VideoCaptureDevice implementation.
@@ -37,8 +42,6 @@
 
   media::ScreenCaptureMachineAndroid capture_machine_;
   scoped_refptr<media::ThreadSafeCaptureOracle> oracle_proxy_;
-
-  DISALLOW_COPY_AND_ASSIGN(ScreenCaptureDeviceAndroid);
 };
 
 }  // namespace content
diff --git a/content/browser/media/capture/slow_window_capturer_chromeos.cc b/content/browser/media/capture/slow_window_capturer_chromeos.cc
index 2e7cfd3..c200014 100644
--- a/content/browser/media/capture/slow_window_capturer_chromeos.cc
+++ b/content/browser/media/capture/slow_window_capturer_chromeos.cc
@@ -158,6 +158,9 @@
                 base::MappedReadOnlyRegion buffer)
       : capturer_(std::move(capturer)), buffer_(std::move(buffer)) {}
 
+  InFlightFrame(const InFlightFrame&) = delete;
+  InFlightFrame& operator=(const InFlightFrame&) = delete;
+
   ~InFlightFrame() final { Done(); }
 
   base::ReadOnlySharedMemoryRegion CloneBufferHandle() {
@@ -207,8 +210,6 @@
   scoped_refptr<VideoFrame> video_frame_;
   gfx::Rect content_rect_;
   SlowCaptureOverlayChromeOS::OnceRenderer overlay_renderer_;
-
-  DISALLOW_COPY_AND_ASSIGN(InFlightFrame);
 };
 
 void SlowWindowCapturerChromeOS::OnOverlayConnectionLost(
diff --git a/content/browser/media/capture/slow_window_capturer_chromeos.h b/content/browser/media/capture/slow_window_capturer_chromeos.h
index b019e7e..b32a5864 100644
--- a/content/browser/media/capture/slow_window_capturer_chromeos.h
+++ b/content/browser/media/capture/slow_window_capturer_chromeos.h
@@ -56,6 +56,11 @@
       public aura::WindowObserver {
  public:
   explicit SlowWindowCapturerChromeOS(aura::Window* target);
+
+  SlowWindowCapturerChromeOS(const SlowWindowCapturerChromeOS&) = delete;
+  SlowWindowCapturerChromeOS& operator=(const SlowWindowCapturerChromeOS&) =
+      delete;
+
   ~SlowWindowCapturerChromeOS() final;
 
   // viz::mojom::FrameSinkVideoCapturer implementation.
@@ -148,8 +153,6 @@
 
   // The maximum number of frames in-flight at any one time.
   static constexpr int kMaxFramesInFlight = 3;
-
-  DISALLOW_COPY_AND_ASSIGN(SlowWindowCapturerChromeOS);
 };
 
 }  // namespace content
diff --git a/content/browser/media/capture/web_contents_video_capture_device_browsertest.cc b/content/browser/media/capture/web_contents_video_capture_device_browsertest.cc
index d1f3d0b..9432a26 100644
--- a/content/browser/media/capture/web_contents_video_capture_device_browsertest.cc
+++ b/content/browser/media/capture/web_contents_video_capture_device_browsertest.cc
@@ -39,6 +39,12 @@
       public FrameTestUtil {
  public:
   WebContentsVideoCaptureDeviceBrowserTest() = default;
+
+  WebContentsVideoCaptureDeviceBrowserTest(
+      const WebContentsVideoCaptureDeviceBrowserTest&) = delete;
+  WebContentsVideoCaptureDeviceBrowserTest& operator=(
+      const WebContentsVideoCaptureDeviceBrowserTest&) = delete;
+
   ~WebContentsVideoCaptureDeviceBrowserTest() override = default;
 
   // Runs the browser until a frame whose content matches the given |color| is
@@ -178,9 +184,6 @@
   }
 
   void WaitForFirstFrame() final { WaitForFrameWithColor(SK_ColorBLACK); }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(WebContentsVideoCaptureDeviceBrowserTest);
 };
 
 // Tests that the device refuses to start if the WebContents target was
diff --git a/content/browser/media/cdm_file_impl.cc b/content/browser/media/cdm_file_impl.cc
index 7c9f965..ee72142 100644
--- a/content/browser/media/cdm_file_impl.cc
+++ b/content/browser/media/cdm_file_impl.cc
@@ -78,6 +78,10 @@
 class FileLockMap {
  public:
   FileLockMap() = default;
+
+  FileLockMap(const FileLockMap&) = delete;
+  FileLockMap& operator=(const FileLockMap&) = delete;
+
   ~FileLockMap() = default;
 
   // Acquire a lock on the file represented by |key|. Returns true if |key|
@@ -112,7 +116,6 @@
   std::set<FileLockKey> file_lock_map_;
 
   THREAD_CHECKER(thread_checker_);
-  DISALLOW_COPY_AND_ASSIGN(FileLockMap);
 };
 
 // The FileLockMap is a global lock map shared by all CdmFileImpl instances.
diff --git a/content/browser/media/cdm_file_impl.h b/content/browser/media/cdm_file_impl.h
index a0889c0..e0e0ad7 100644
--- a/content/browser/media/cdm_file_impl.h
+++ b/content/browser/media/cdm_file_impl.h
@@ -40,6 +40,10 @@
               const std::string& file_system_id,
               const std::string& file_system_root_uri,
               scoped_refptr<storage::FileSystemContext> file_system_context);
+
+  CdmFileImpl(const CdmFileImpl&) = delete;
+  CdmFileImpl& operator=(const CdmFileImpl&) = delete;
+
   ~CdmFileImpl() final;
 
   // Called to grab a lock on the file. Returns false if the file is in use by
@@ -119,8 +123,6 @@
 
   THREAD_CHECKER(thread_checker_);
   base::WeakPtrFactory<CdmFileImpl> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(CdmFileImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/media/cdm_storage_impl_unittest.cc b/content/browser/media/cdm_storage_impl_unittest.cc
index bb07995..1809138 100644
--- a/content/browser/media/cdm_storage_impl_unittest.cc
+++ b/content/browser/media/cdm_storage_impl_unittest.cc
@@ -47,6 +47,10 @@
 class RunLoopWithExpectedCount {
  public:
   RunLoopWithExpectedCount() = default;
+
+  RunLoopWithExpectedCount(const RunLoopWithExpectedCount&) = delete;
+  RunLoopWithExpectedCount& operator=(const RunLoopWithExpectedCount&) = delete;
+
   ~RunLoopWithExpectedCount() { DCHECK_EQ(0, remaining_quit_calls_); }
 
   void Run(int expected_quit_calls) {
@@ -66,8 +70,6 @@
  private:
   std::unique_ptr<base::RunLoop> run_loop_;
   int remaining_quit_calls_ = 0;
-
-  DISALLOW_COPY_AND_ASSIGN(RunLoopWithExpectedCount);
 };
 
 }  // namespace
diff --git a/content/browser/media/desktop_media_window_registry.h b/content/browser/media/desktop_media_window_registry.h
index 0411c1f..05a6bddb 100644
--- a/content/browser/media/desktop_media_window_registry.h
+++ b/content/browser/media/desktop_media_window_registry.h
@@ -15,6 +15,11 @@
   using Id = intptr_t;
 
   static DesktopMediaWindowRegistry* GetInstance();
+
+  DesktopMediaWindowRegistry(const DesktopMediaWindowRegistry&) = delete;
+  DesktopMediaWindowRegistry& operator=(const DesktopMediaWindowRegistry&) =
+      delete;
+
   virtual ~DesktopMediaWindowRegistry();
 
   virtual Id RegisterWindow(gfx::NativeWindow window) = 0;
@@ -22,8 +27,6 @@
 
  protected:
   DesktopMediaWindowRegistry();
-
-  DISALLOW_COPY_AND_ASSIGN(DesktopMediaWindowRegistry);
 };
 
 }  // namespace content
diff --git a/content/browser/media/flinging_renderer.h b/content/browser/media/flinging_renderer.h
index 36161ea..8f0937b0 100644
--- a/content/browser/media/flinging_renderer.h
+++ b/content/browser/media/flinging_renderer.h
@@ -41,6 +41,9 @@
       const std::string& presentation_id,
       mojo::PendingRemote<ClientExtension> client_extension);
 
+  FlingingRenderer(const FlingingRenderer&) = delete;
+  FlingingRenderer& operator=(const FlingingRenderer&) = delete;
+
   ~FlingingRenderer() override;
 
   // media::Renderer implementation
@@ -84,8 +87,6 @@
   mojo::Remote<ClientExtension> client_extension_;
 
   std::unique_ptr<media::FlingingController> controller_;
-
-  DISALLOW_COPY_AND_ASSIGN(FlingingRenderer);
 };
 
 }  // namespace content
diff --git a/content/browser/media/forwarding_audio_stream_factory.h b/content/browser/media/forwarding_audio_stream_factory.h
index 051ed68..f31ded2 100644
--- a/content/browser/media/forwarding_audio_stream_factory.h
+++ b/content/browser/media/forwarding_audio_stream_factory.h
@@ -58,6 +58,10 @@
     Core(base::WeakPtr<ForwardingAudioStreamFactory> owner,
          media::UserInputMonitorBase* user_input_monitor,
          std::unique_ptr<AudioStreamBrokerFactory> factory);
+
+    Core(const Core&) = delete;
+    Core& operator=(const Core&) = delete;
+
     ~Core() final;
 
     const base::UnguessableToken& group_id() const { return group_id_; }
@@ -158,8 +162,6 @@
 
     base::WeakPtrFactory<ForwardingAudioStreamFactory::Core> weak_ptr_factory_{
         this};
-
-    DISALLOW_COPY_AND_ASSIGN(Core);
   };
 
   // Returns the ForwardingAudioStreamFactory which takes care of stream
diff --git a/content/browser/media/forwarding_audio_stream_factory_unittest.cc b/content/browser/media/forwarding_audio_stream_factory_unittest.cc
index cebb945..db22bd6 100644
--- a/content/browser/media/forwarding_audio_stream_factory_unittest.cc
+++ b/content/browser/media/forwarding_audio_stream_factory_unittest.cc
@@ -41,6 +41,10 @@
                                 public media::mojom::LocalMuter {
  public:
   MockStreamFactory() = default;
+
+  MockStreamFactory(const MockStreamFactory&) = delete;
+  MockStreamFactory& operator=(const MockStreamFactory&) = delete;
+
   ~MockStreamFactory() override = default;
 
   bool IsConnected() const { return receiver_.is_bound(); }
@@ -57,7 +61,6 @@
   void MuterDisconnected() { muter_receiver_.reset(); }
 
   mojo::AssociatedReceiver<media::mojom::LocalMuter> muter_receiver_{this};
-  DISALLOW_COPY_AND_ASSIGN(MockStreamFactory);
 };
 
 class MockBroker : public AudioStreamBroker {
@@ -65,6 +68,9 @@
   explicit MockBroker(RenderFrameHost* rfh)
       : AudioStreamBroker(rfh->GetProcess()->GetID(), rfh->GetRoutingID()) {}
 
+  MockBroker(const MockBroker&) = delete;
+  MockBroker& operator=(const MockBroker&) = delete;
+
   ~MockBroker() override {}
 
   MOCK_METHOD1(CreateStream, void(media::mojom::AudioStreamFactory* factory));
@@ -76,12 +82,15 @@
 
  private:
   base::WeakPtrFactory<MockBroker> weak_factory_{this};
-  DISALLOW_COPY_AND_ASSIGN(MockBroker);
 };
 
 class MockBrokerFactory final : public AudioStreamBrokerFactory {
  public:
   MockBrokerFactory() = default;
+
+  MockBrokerFactory(const MockBrokerFactory&) = delete;
+  MockBrokerFactory& operator=(const MockBrokerFactory&) = delete;
+
   ~MockBrokerFactory() override {
     EXPECT_TRUE(prepared_input_stream_brokers_.empty())
         << "Input broker creation was expected but didn't happen";
@@ -166,18 +175,18 @@
   base::queue<std::unique_ptr<MockBroker>> prepared_loopback_stream_brokers_;
   base::queue<std::unique_ptr<MockBroker>> prepared_input_stream_brokers_;
   base::queue<std::unique_ptr<MockBroker>> prepared_output_stream_brokers_;
-  DISALLOW_COPY_AND_ASSIGN(MockBrokerFactory);
 };
 
 class MockLoopbackSink : public AudioStreamBroker::LoopbackSink {
  public:
   MockLoopbackSink() {}
+
+  MockLoopbackSink(const MockLoopbackSink&) = delete;
+  MockLoopbackSink& operator=(const MockLoopbackSink&) = delete;
+
   ~MockLoopbackSink() override {}
 
   MOCK_METHOD0(OnSourceGone, void());
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(MockLoopbackSink);
 };
 
 class ForwardingAudioStreamFactoryTest : public RenderViewHostTestHarness {
diff --git a/content/browser/media/frameless_media_interface_proxy.h b/content/browser/media/frameless_media_interface_proxy.h
index 1d4a81bc..fca3978 100644
--- a/content/browser/media/frameless_media_interface_proxy.h
+++ b/content/browser/media/frameless_media_interface_proxy.h
@@ -33,6 +33,11 @@
     : public media::mojom::InterfaceFactory {
  public:
   FramelessMediaInterfaceProxy();
+
+  FramelessMediaInterfaceProxy(const FramelessMediaInterfaceProxy&) = delete;
+  FramelessMediaInterfaceProxy& operator=(const FramelessMediaInterfaceProxy&) =
+      delete;
+
   ~FramelessMediaInterfaceProxy() final;
 
   void Add(mojo::PendingReceiver<media::mojom::InterfaceFactory> receiver);
@@ -86,7 +91,6 @@
   mojo::ReceiverSet<media::mojom::InterfaceFactory> receivers_;
 
   THREAD_CHECKER(thread_checker_);
-  DISALLOW_COPY_AND_ASSIGN(FramelessMediaInterfaceProxy);
 };
 
 }  // namespace content
diff --git a/content/browser/media/keyboard_mic_registration.h b/content/browser/media/keyboard_mic_registration.h
index 267d0de..f007301e 100644
--- a/content/browser/media/keyboard_mic_registration.h
+++ b/content/browser/media/keyboard_mic_registration.h
@@ -15,6 +15,10 @@
 class KeyboardMicRegistration {
  public:
   KeyboardMicRegistration();
+
+  KeyboardMicRegistration(const KeyboardMicRegistration&) = delete;
+  KeyboardMicRegistration& operator=(const KeyboardMicRegistration&) = delete;
+
   ~KeyboardMicRegistration();
 
   void Register();
@@ -22,8 +26,6 @@
 
  private:
   int register_count_ = 0;
-
-  DISALLOW_COPY_AND_ASSIGN(KeyboardMicRegistration);
 };
 
 }  // namespace content
diff --git a/content/browser/media/media_interface_factory_holder.h b/content/browser/media/media_interface_factory_holder.h
index b4673a5..4c7f3342e 100644
--- a/content/browser/media/media_interface_factory_holder.h
+++ b/content/browser/media/media_interface_factory_holder.h
@@ -28,6 +28,11 @@
   // |media_service_getter| will be called from the UI thread.
   MediaInterfaceFactoryHolder(MediaServiceGetter media_service_getter,
                               FrameServicesGetter frame_services_getter);
+
+  MediaInterfaceFactoryHolder(const MediaInterfaceFactoryHolder&) = delete;
+  MediaInterfaceFactoryHolder& operator=(const MediaInterfaceFactoryHolder&) =
+      delete;
+
   ~MediaInterfaceFactoryHolder();
 
   // Gets the MediaService |interface_factory_remote_|. The returned pointer is
@@ -42,8 +47,6 @@
   mojo::Remote<media::mojom::InterfaceFactory> interface_factory_remote_;
 
   THREAD_CHECKER(thread_checker_);
-
-  DISALLOW_COPY_AND_ASSIGN(MediaInterfaceFactoryHolder);
 };
 
 }  // namespace content
diff --git a/content/browser/media/media_internals.cc b/content/browser/media/media_internals.cc
index 4f811566..f54127c 100644
--- a/content/browser/media/media_internals.cc
+++ b/content/browser/media/media_internals.cc
@@ -124,13 +124,17 @@
  public:
   MediaInternalLogRecordsImpl(content::MediaInternals* media_internals,
                               int render_process_id);
+
+  MediaInternalLogRecordsImpl(const MediaInternalLogRecordsImpl&) = delete;
+  MediaInternalLogRecordsImpl& operator=(const MediaInternalLogRecordsImpl&) =
+      delete;
+
   ~MediaInternalLogRecordsImpl() override = default;
   void Log(const std::vector<::media::MediaLogRecord>& arr) override;
 
  private:
   content::MediaInternals* const media_internals_;
   const int render_process_id_;
-  DISALLOW_COPY_AND_ASSIGN(MediaInternalLogRecordsImpl);
 };
 
 MediaInternals::MediaInternalLogRecordsImpl::MediaInternalLogRecordsImpl(
@@ -153,6 +157,10 @@
                int component_id,
                int render_process_id,
                int render_frame_id);
+
+  AudioLogImpl(const AudioLogImpl&) = delete;
+  AudioLogImpl& operator=(const AudioLogImpl&) = delete;
+
   ~AudioLogImpl() override;
 
   void OnCreated(const media::AudioParameters& params,
@@ -188,8 +196,6 @@
   const int component_id_;
   const int render_process_id_;
   const int render_frame_id_;
-
-  DISALLOW_COPY_AND_ASSIGN(AudioLogImpl);
 };
 
 MediaInternals::AudioLogImpl::AudioLogImpl(
diff --git a/content/browser/media/media_internals.h b/content/browser/media/media_internals.h
index 8840c90..a5660f3 100644
--- a/content/browser/media/media_internals.h
+++ b/content/browser/media/media_internals.h
@@ -54,6 +54,9 @@
 
   static MediaInternals* GetInstance();
 
+  MediaInternals(const MediaInternals&) = delete;
+  MediaInternals& operator=(const MediaInternals&) = delete;
+
   ~MediaInternals() override;
 
   // NotificationObserver implementation.
@@ -182,8 +185,6 @@
   bool can_update_;
   base::DictionaryValue audio_streams_cached_data_;
   int owner_ids_[media::AudioLogFactory::AUDIO_COMPONENT_MAX];
-
-  DISALLOW_COPY_AND_ASSIGN(MediaInternals);
 };
 
 }  // namespace content
diff --git a/content/browser/media/media_internals_audio_focus_helper.h b/content/browser/media/media_internals_audio_focus_helper.h
index c6dc9fd..a0975212 100644
--- a/content/browser/media/media_internals_audio_focus_helper.h
+++ b/content/browser/media/media_internals_audio_focus_helper.h
@@ -21,6 +21,12 @@
     : public media_session::mojom::AudioFocusObserver {
  public:
   MediaInternalsAudioFocusHelper();
+
+  MediaInternalsAudioFocusHelper(const MediaInternalsAudioFocusHelper&) =
+      delete;
+  MediaInternalsAudioFocusHelper& operator=(
+      const MediaInternalsAudioFocusHelper&) = delete;
+
   ~MediaInternalsAudioFocusHelper() override;
 
   // Sends all audio focus information to media internals.
@@ -76,8 +82,6 @@
   bool enabled_ = false;
 
   mojo::Receiver<media_session::mojom::AudioFocusObserver> receiver_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(MediaInternalsAudioFocusHelper);
 };
 
 }  // namespace content
diff --git a/content/browser/media/media_internals_handler.h b/content/browser/media/media_internals_handler.h
index 71a53abf..696885d 100644
--- a/content/browser/media/media_internals_handler.h
+++ b/content/browser/media/media_internals_handler.h
@@ -22,6 +22,11 @@
 class MediaInternalsMessageHandler : public WebUIMessageHandler {
  public:
   MediaInternalsMessageHandler();
+
+  MediaInternalsMessageHandler(const MediaInternalsMessageHandler&) = delete;
+  MediaInternalsMessageHandler& operator=(const MediaInternalsMessageHandler&) =
+      delete;
+
   ~MediaInternalsMessageHandler() override;
 
   // WebUIMessageHandler implementation.
@@ -39,8 +44,6 @@
   // Reflects whether the chrome://media-internals HTML+JS has finished loading.
   // If not, it's not safe to send JavaScript calls targeting the page yet.
   bool page_load_complete_;
-
-  DISALLOW_COPY_AND_ASSIGN(MediaInternalsMessageHandler);
 };
 
 }  // namespace content
diff --git a/content/browser/media/media_keys_listener_manager_impl_browsertest.cc b/content/browser/media/media_keys_listener_manager_impl_browsertest.cc
index 9accbb4..f443fa9 100644
--- a/content/browser/media/media_keys_listener_manager_impl_browsertest.cc
+++ b/content/browser/media/media_keys_listener_manager_impl_browsertest.cc
@@ -35,6 +35,10 @@
  public:
   explicit MockMediaKeysListener(ui::MediaKeysListener::Delegate* delegate)
       : delegate_(delegate) {}
+
+  MockMediaKeysListener(const MockMediaKeysListener&) = delete;
+  MockMediaKeysListener& operator=(const MockMediaKeysListener&) = delete;
+
   ~MockMediaKeysListener() override = default;
 
   // MediaKeysListener implementation.
@@ -58,13 +62,16 @@
  private:
   ui::MediaKeysListener::Delegate* delegate_;
   base::flat_set<ui::KeyboardCode> key_codes_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockMediaKeysListener);
 };
 
 class MockMediaKeysListenerDelegate : public ui::MediaKeysListener::Delegate {
  public:
   MockMediaKeysListenerDelegate() = default;
+
+  MockMediaKeysListenerDelegate(const MockMediaKeysListenerDelegate&) = delete;
+  MockMediaKeysListenerDelegate& operator=(
+      const MockMediaKeysListenerDelegate&) = delete;
+
   ~MockMediaKeysListenerDelegate() override = default;
 
   // MediaKeysListener::Delegate implementation.
@@ -85,8 +92,6 @@
 
  private:
   std::vector<ui::KeyboardCode> received_keys_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockMediaKeysListenerDelegate);
 };
 
 }  // anonymous namespace
@@ -94,6 +99,12 @@
 class MediaKeysListenerManagerImplTest : public ContentBrowserTest {
  public:
   MediaKeysListenerManagerImplTest() = default;
+
+  MediaKeysListenerManagerImplTest(const MediaKeysListenerManagerImplTest&) =
+      delete;
+  MediaKeysListenerManagerImplTest& operator=(
+      const MediaKeysListenerManagerImplTest&) = delete;
+
   ~MediaKeysListenerManagerImplTest() override = default;
 
  protected:
@@ -145,8 +156,6 @@
   MediaKeysListenerManagerImpl* media_keys_listener_manager_;
   MockMediaKeysListener* media_keys_listener_;
   std::unique_ptr<TestMediaController> media_controller_;
-
-  DISALLOW_COPY_AND_ASSIGN(MediaKeysListenerManagerImplTest);
 };
 
 IN_PROC_BROWSER_TEST_F(MediaKeysListenerManagerImplTest, PressPlayPauseKey) {
diff --git a/content/browser/media/media_power_experiment_manager.h b/content/browser/media/media_power_experiment_manager.h
index bbc5effb..47a4b7a0 100644
--- a/content/browser/media/media_power_experiment_manager.h
+++ b/content/browser/media/media_power_experiment_manager.h
@@ -40,6 +40,11 @@
   };
 
   MediaPowerExperimentManager();
+
+  MediaPowerExperimentManager(const MediaPowerExperimentManager&) = delete;
+  MediaPowerExperimentManager& operator=(const MediaPowerExperimentManager&) =
+      delete;
+
   virtual ~MediaPowerExperimentManager();
 
   // May return nullptr if experiments aren't enabled.
@@ -71,8 +76,6 @@
 
   scoped_refptr<base::SequencedTaskRunner> task_runner_;
   SEQUENCE_CHECKER(sequence_checker_);
-
-  DISALLOW_COPY_AND_ASSIGN(MediaPowerExperimentManager);
 };
 
 }  // namespace content
diff --git a/content/browser/media/media_web_contents_observer.h b/content/browser/media/media_web_contents_observer.h
index 210bbf35..a064962 100644
--- a/content/browser/media/media_web_contents_observer.h
+++ b/content/browser/media/media_web_contents_observer.h
@@ -64,6 +64,10 @@
 class CONTENT_EXPORT MediaWebContentsObserver : public WebContentsObserver {
  public:
   explicit MediaWebContentsObserver(WebContentsImpl* web_contents);
+
+  MediaWebContentsObserver(const MediaWebContentsObserver&) = delete;
+  MediaWebContentsObserver& operator=(const MediaWebContentsObserver&) = delete;
+
   ~MediaWebContentsObserver() override;
 
   // Called by WebContentsImpl when the audible state may have changed.
@@ -305,7 +309,6 @@
   MediaPlayerRemotesMap media_player_remotes_;
 
   base::WeakPtrFactory<MediaWebContentsObserver> weak_ptr_factory_{this};
-  DISALLOW_COPY_AND_ASSIGN(MediaWebContentsObserver);
 };
 
 }  // namespace content
diff --git a/content/browser/media/midi_host.h b/content/browser/media/midi_host.h
index d9c5fef..0ae388a 100644
--- a/content/browser/media/midi_host.h
+++ b/content/browser/media/midi_host.h
@@ -41,6 +41,9 @@
                                 public midi::mojom::MidiSession,
                                 public base::SupportsWeakPtr<MidiHost> {
  public:
+  MidiHost(const MidiHost&) = delete;
+  MidiHost& operator=(const MidiHost&) = delete;
+
   ~MidiHost() override;
 
   // Creates an instance of MidiHost and binds |receiver| to the instance using
@@ -130,8 +133,6 @@
   // Bound on the IO thread and should only be called there. Use CallClient to
   // call midi::mojom::MidiSessionClient methods.
   mojo::Remote<midi::mojom::MidiSessionClient> midi_client_;
-
-  DISALLOW_COPY_AND_ASSIGN(MidiHost);
 };
 
 }  // namespace content
diff --git a/content/browser/media/midi_host_unittest.cc b/content/browser/media/midi_host_unittest.cc
index 6296720..284263b 100644
--- a/content/browser/media/midi_host_unittest.cc
+++ b/content/browser/media/midi_host_unittest.cc
@@ -52,6 +52,10 @@
 class FakeMidiManager : public midi::MidiManager {
  public:
   explicit FakeMidiManager(midi::MidiService* service) : MidiManager(service) {}
+
+  FakeMidiManager(const FakeMidiManager&) = delete;
+  FakeMidiManager& operator=(const FakeMidiManager&) = delete;
+
   ~FakeMidiManager() override = default;
 
   base::WeakPtr<FakeMidiManager> GetWeakPtr() {
@@ -68,13 +72,15 @@
   std::vector<MidiEvent> events_;
 
   base::WeakPtrFactory<FakeMidiManager> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(FakeMidiManager);
 };
 
 class FakeMidiManagerFactory : public midi::MidiService::ManagerFactory {
  public:
   FakeMidiManagerFactory() {}
+
+  FakeMidiManagerFactory(const FakeMidiManagerFactory&) = delete;
+  FakeMidiManagerFactory& operator=(const FakeMidiManagerFactory&) = delete;
+
   ~FakeMidiManagerFactory() override = default;
   std::unique_ptr<midi::MidiManager> Create(
       midi::MidiService* service) override {
@@ -94,18 +100,17 @@
   base::WeakPtr<FakeMidiManager> manager_;
 
   base::WeakPtrFactory<FakeMidiManagerFactory> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(FakeMidiManagerFactory);
 };
 
 class MidiHostForTesting : public MidiHost {
  public:
   MidiHostForTesting(int renderer_process_id, midi::MidiService* midi_service)
       : MidiHost(renderer_process_id, midi_service) {}
-  ~MidiHostForTesting() override {}
 
- private:
-  DISALLOW_COPY_AND_ASSIGN(MidiHostForTesting);
+  MidiHostForTesting(const MidiHostForTesting&) = delete;
+  MidiHostForTesting& operator=(const MidiHostForTesting&) = delete;
+
+  ~MidiHostForTesting() override {}
 };
 
 class MidiSessionClientForTesting : public midi::mojom::MidiSessionClient {
@@ -140,6 +145,10 @@
     host_->StartSession(session_.BindNewPipeAndPassReceiver(),
                         std::move(client_remote));
   }
+
+  MidiHostTest(const MidiHostTest&) = delete;
+  MidiHostTest& operator=(const MidiHostTest&) = delete;
+
   ~MidiHostTest() override {
     session_.reset();
     service_->Shutdown();
@@ -195,8 +204,6 @@
   std::unique_ptr<midi::MidiService> service_;
   std::unique_ptr<MidiHostForTesting> host_;
   mojo::Remote<midi::mojom::MidiSession> session_;
-
-  DISALLOW_COPY_AND_ASSIGN(MidiHostTest);
 };
 
 }  // namespace
diff --git a/content/browser/media/session/audio_focus_delegate_android.h b/content/browser/media/session/audio_focus_delegate_android.h
index 8fe9f26..1b8cfe3 100644
--- a/content/browser/media/session/audio_focus_delegate_android.h
+++ b/content/browser/media/session/audio_focus_delegate_android.h
@@ -23,6 +23,11 @@
 class AudioFocusDelegateAndroid : public AudioFocusDelegate {
  public:
   explicit AudioFocusDelegateAndroid(MediaSessionImpl* media_session);
+
+  AudioFocusDelegateAndroid(const AudioFocusDelegateAndroid&) = delete;
+  AudioFocusDelegateAndroid& operator=(const AudioFocusDelegateAndroid&) =
+      delete;
+
   ~AudioFocusDelegateAndroid() override;
 
   void Initialize();
@@ -64,7 +69,6 @@
   // Weak pointer because |this| is owned by |media_session_|.
   MediaSessionImpl* media_session_;
   base::android::ScopedJavaGlobalRef<jobject> j_media_session_delegate_;
-  DISALLOW_COPY_AND_ASSIGN(AudioFocusDelegateAndroid);
 };
 
 }  // namespace content
diff --git a/content/browser/media/session/media_session_android.h b/content/browser/media/session/media_session_android.h
index 0e0995d..d55b5c9 100644
--- a/content/browser/media/session/media_session_android.h
+++ b/content/browser/media/session/media_session_android.h
@@ -31,6 +31,10 @@
   struct JavaObjectGetter;
 
   explicit MediaSessionAndroid(MediaSessionImpl* session);
+
+  MediaSessionAndroid(const MediaSessionAndroid&) = delete;
+  MediaSessionAndroid& operator=(const MediaSessionAndroid&) = delete;
+
   ~MediaSessionAndroid() override;
 
   // media_session::mojom::MediaSessionObserver implementation:
@@ -82,8 +86,6 @@
 
   mojo::Receiver<media_session::mojom::MediaSessionObserver> observer_receiver_{
       this};
-
-  DISALLOW_COPY_AND_ASSIGN(MediaSessionAndroid);
 };
 
 }  // namespace content
diff --git a/content/browser/media/session/media_session_controller.h b/content/browser/media/session/media_session_controller.h
index ae06260..5b93bd56 100644
--- a/content/browser/media/session/media_session_controller.h
+++ b/content/browser/media/session/media_session_controller.h
@@ -34,6 +34,10 @@
  public:
   MediaSessionController(const MediaPlayerId& id,
                          WebContentsImpl* web_contents);
+
+  MediaSessionController(const MediaSessionController&) = delete;
+  MediaSessionController& operator=(const MediaSessionController&) = delete;
+
   ~MediaSessionController() override;
 
   // Must be called when media player metadata changes.
@@ -126,8 +130,6 @@
   bool supports_audio_output_device_switching_ = true;
   media::MediaContentType media_content_type_ =
       media::MediaContentType::Persistent;
-
-  DISALLOW_COPY_AND_ASSIGN(MediaSessionController);
 };
 
 }  // namespace content
diff --git a/content/browser/media/session/media_session_controllers_manager.h b/content/browser/media/session/media_session_controllers_manager.h
index 59db437..9a6359ec 100644
--- a/content/browser/media/session/media_session_controllers_manager.h
+++ b/content/browser/media/session/media_session_controllers_manager.h
@@ -32,6 +32,12 @@
 class CONTENT_EXPORT MediaSessionControllersManager {
  public:
   explicit MediaSessionControllersManager(WebContentsImpl* web_contents);
+
+  MediaSessionControllersManager(const MediaSessionControllersManager&) =
+      delete;
+  MediaSessionControllersManager& operator=(
+      const MediaSessionControllersManager&) = delete;
+
   ~MediaSessionControllersManager();
 
   // Clear all the MediaSessionController associated with the given
@@ -94,8 +100,6 @@
   WebContentsImpl* const web_contents_;
 
   ControllersMap controllers_map_;
-
-  DISALLOW_COPY_AND_ASSIGN(MediaSessionControllersManager);
 };
 
 }  // namespace content
diff --git a/content/browser/media/session/media_session_impl.cc b/content/browser/media/session/media_session_impl.cc
index e69a150..36c44be 100644
--- a/content/browser/media/session/media_session_impl.cc
+++ b/content/browser/media/session/media_session_impl.cc
@@ -1369,13 +1369,15 @@
 
 void MediaSessionImpl::OnMediaSessionPlaybackStateChanged(
     MediaSessionServiceImpl* service) {
-  // Even though the back-forward cache is allowed at OnServiceCreated, it is
-  // disabled when the playback state is changed as this affects the visible UI
-  // for MediaSession.
-  BackForwardCache::DisableForRenderFrameHost(
-      service->GetRenderFrameHostId(),
-      BackForwardCacheDisable::DisabledReason(
-          BackForwardCacheDisable::DisabledReasonId::kMediaSession));
+  if (!BackForwardCacheImpl::IsMediaSessionPlaybackStateChangedAllowed()) {
+    // Even though the back-forward cache is allowed at OnServiceCreated, it is
+    // disabled when the playback state is changed as this affects the visible
+    // UI for MediaSession.
+    BackForwardCache::DisableForRenderFrameHost(
+        service->GetRenderFrameHostId(),
+        BackForwardCacheDisable::DisabledReason(
+            BackForwardCacheDisable::DisabledReasonId::kMediaSession));
+  }
 
   if (service != routed_service_)
     return;
@@ -1473,6 +1475,17 @@
   RebuildAndNotifyActionsChanged();
   RebuildAndNotifyMediaSessionInfoChanged();
   RebuildAndNotifyMediaPositionChanged();
+
+  if (routed_service_ &&
+      !BackForwardCacheImpl::IsMediaSessionServiceAllowed()) {
+    // A page in the back-forward cache may affect the media control UI
+    // displayed to users. So it is marked as ineligible as soon as a
+    // MediaSession service is associated with it.
+    BackForwardCache::DisableForRenderFrameHost(
+        routed_service_->GetRenderFrameHostId(),
+        BackForwardCacheDisable::DisabledReason(
+            BackForwardCacheDisable::DisabledReasonId::kMediaSessionService));
+  }
 }
 
 MediaSessionServiceImpl* MediaSessionImpl::ComputeServiceForRouting() {
diff --git a/content/browser/media/session/media_session_impl.h b/content/browser/media/session/media_session_impl.h
index cd5b1ed..a3204341 100644
--- a/content/browser/media/session/media_session_impl.h
+++ b/content/browser/media/session/media_session_impl.h
@@ -81,6 +81,9 @@
   // none is currently available.
   CONTENT_EXPORT static MediaSessionImpl* Get(WebContents* web_contents);
 
+  MediaSessionImpl(const MediaSessionImpl&) = delete;
+  MediaSessionImpl& operator=(const MediaSessionImpl&) = delete;
+
   ~MediaSessionImpl() override;
 
   CONTENT_EXPORT void SetDelegateForTests(
@@ -561,8 +564,6 @@
   absl::optional<PlayerIdentifier> guarding_player_id_;
 
   WEB_CONTENTS_USER_DATA_KEY_DECL();
-
-  DISALLOW_COPY_AND_ASSIGN(MediaSessionImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/media/session/media_session_impl_unittest.cc b/content/browser/media/session/media_session_impl_unittest.cc
index 8e996df2..6b14410 100644
--- a/content/browser/media/session/media_session_impl_unittest.cc
+++ b/content/browser/media/session/media_session_impl_unittest.cc
@@ -42,6 +42,10 @@
 class MockAudioFocusDelegate : public AudioFocusDelegate {
  public:
   MockAudioFocusDelegate() = default;
+
+  MockAudioFocusDelegate(const MockAudioFocusDelegate&) = delete;
+  MockAudioFocusDelegate& operator=(const MockAudioFocusDelegate&) = delete;
+
   ~MockAudioFocusDelegate() override = default;
 
   void AbandonAudioFocus() override {}
@@ -75,8 +79,6 @@
   int request_audio_focus_count_ = 0;
 
   MediaSessionInfoPtr session_info_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockAudioFocusDelegate);
 };
 
 // A mock WebContentsDelegate which listens to |ActivateContents()| calls.
diff --git a/content/browser/media/session/media_session_impl_visibility_browsertest.cc b/content/browser/media/session/media_session_impl_visibility_browsertest.cc
index 3add367..de008e03 100644
--- a/content/browser/media/session/media_session_impl_visibility_browsertest.cc
+++ b/content/browser/media/session/media_session_impl_visibility_browsertest.cc
@@ -69,6 +69,11 @@
                                           BackgroundResuming::ENABLED);
   }
 
+  MediaSessionImplVisibilityBrowserTest(
+      const MediaSessionImplVisibilityBrowserTest&) = delete;
+  MediaSessionImplVisibilityBrowserTest& operator=(
+      const MediaSessionImplVisibilityBrowserTest&) = delete;
+
   ~MediaSessionImplVisibilityBrowserTest() override = default;
 
   void SetUpOnMainThread() override {
@@ -170,8 +175,6 @@
 
   WebContents* web_contents_;
   MediaSessionImpl* media_session_;
-
-  DISALLOW_COPY_AND_ASSIGN(MediaSessionImplVisibilityBrowserTest);
 };
 
 namespace {
diff --git a/content/browser/media/session/media_session_service_impl.h b/content/browser/media/session/media_session_service_impl.h
index b422106..1257b8f 100644
--- a/content/browser/media/session/media_session_service_impl.h
+++ b/content/browser/media/session/media_session_service_impl.h
@@ -24,6 +24,9 @@
 class CONTENT_EXPORT MediaSessionServiceImpl
     : public blink::mojom::MediaSessionService {
  public:
+  MediaSessionServiceImpl(const MediaSessionServiceImpl&) = delete;
+  MediaSessionServiceImpl& operator=(const MediaSessionServiceImpl&) = delete;
+
   ~MediaSessionServiceImpl() override;
 
   static void Create(
@@ -95,8 +98,6 @@
   // Tracks whether the camera is turned on in a WebRTC session.
   media_session::mojom::CameraState camera_state_ =
       media_session::mojom::CameraState::kUnknown;
-
-  DISALLOW_COPY_AND_ASSIGN(MediaSessionServiceImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/media/session/mock_media_session_service_impl.h b/content/browser/media/session/mock_media_session_service_impl.h
index d4a7111..3bb83a4 100644
--- a/content/browser/media/session/mock_media_session_service_impl.h
+++ b/content/browser/media/session/mock_media_session_service_impl.h
@@ -14,6 +14,10 @@
 class MockMediaSessionClient : public blink::mojom::MediaSessionClient {
  public:
   MockMediaSessionClient();
+
+  MockMediaSessionClient(const MockMediaSessionClient&) = delete;
+  MockMediaSessionClient& operator=(const MockMediaSessionClient&) = delete;
+
   ~MockMediaSessionClient() override;
 
   mojo::PendingRemote<blink::mojom::MediaSessionClient>
@@ -25,8 +29,6 @@
 
  private:
   mojo::Receiver<blink::mojom::MediaSessionClient> receiver_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(MockMediaSessionClient);
 };
 
 class MockMediaSessionServiceImpl : public content::MediaSessionServiceImpl {
diff --git a/content/browser/media/session/pepper_playback_observer.h b/content/browser/media/session/pepper_playback_observer.h
index 7641918..db3fd04 100644
--- a/content/browser/media/session/pepper_playback_observer.h
+++ b/content/browser/media/session/pepper_playback_observer.h
@@ -24,6 +24,10 @@
 class PepperPlaybackObserver {
  public:
   explicit PepperPlaybackObserver(WebContents* contents);
+
+  PepperPlaybackObserver(const PepperPlaybackObserver&) = delete;
+  PepperPlaybackObserver& operator=(const PepperPlaybackObserver&) = delete;
+
   virtual ~PepperPlaybackObserver();
 
   void RenderFrameDeleted(RenderFrameHost* render_frame_host);
@@ -57,8 +61,6 @@
 
   // Weak reference to WebContents.
   WebContents* contents_;
-
-  DISALLOW_COPY_AND_ASSIGN(PepperPlaybackObserver);
 };
 
 }  // namespace content
diff --git a/content/browser/media/session/pepper_player_delegate.h b/content/browser/media/session/pepper_player_delegate.h
index 2e595a1c..ab41235 100644
--- a/content/browser/media/session/pepper_player_delegate.h
+++ b/content/browser/media/session/pepper_player_delegate.h
@@ -21,6 +21,10 @@
   static const int kPlayerId;
 
   PepperPlayerDelegate(RenderFrameHost* render_frame_host, int32_t pp_instance);
+
+  PepperPlayerDelegate(const PepperPlayerDelegate&) = delete;
+  PepperPlayerDelegate& operator=(const PepperPlayerDelegate&) = delete;
+
   ~PepperPlayerDelegate() override;
 
   // MediaSessionPlayerObserver implementation.
@@ -49,8 +53,6 @@
 
   RenderFrameHost* render_frame_host_;
   int32_t pp_instance_;
-
-  DISALLOW_COPY_AND_ASSIGN(PepperPlayerDelegate);
 };
 
 }  // namespace content
diff --git a/content/browser/media/system_media_controls_notifier.h b/content/browser/media/system_media_controls_notifier.h
index c62c694..5a74cb4 100644
--- a/content/browser/media/system_media_controls_notifier.h
+++ b/content/browser/media/system_media_controls_notifier.h
@@ -35,6 +35,11 @@
  public:
   explicit SystemMediaControlsNotifier(
       system_media_controls::SystemMediaControls* system_media_controls);
+
+  SystemMediaControlsNotifier(const SystemMediaControlsNotifier&) = delete;
+  SystemMediaControlsNotifier& operator=(const SystemMediaControlsNotifier&) =
+      delete;
+
   ~SystemMediaControlsNotifier() override;
 
   // media_session::mojom::MediaControllerObserver implementation.
@@ -96,8 +101,6 @@
       media_controller_image_observer_receiver_{this};
 
   SEQUENCE_CHECKER(sequence_checker_);
-
-  DISALLOW_COPY_AND_ASSIGN(SystemMediaControlsNotifier);
 };
 
 }  // namespace content
diff --git a/content/browser/media/system_media_controls_notifier_unittest.cc b/content/browser/media/system_media_controls_notifier_unittest.cc
index 546212b3..c94ae75f 100644
--- a/content/browser/media/system_media_controls_notifier_unittest.cc
+++ b/content/browser/media/system_media_controls_notifier_unittest.cc
@@ -32,6 +32,12 @@
 class SystemMediaControlsNotifierTest : public testing::Test {
  public:
   SystemMediaControlsNotifierTest() = default;
+
+  SystemMediaControlsNotifierTest(const SystemMediaControlsNotifierTest&) =
+      delete;
+  SystemMediaControlsNotifierTest& operator=(
+      const SystemMediaControlsNotifierTest&) = delete;
+
   ~SystemMediaControlsNotifierTest() override = default;
 
   void SetUp() override {
@@ -96,8 +102,6 @@
   std::unique_ptr<SystemMediaControlsNotifier> notifier_;
   system_media_controls::testing::MockSystemMediaControls
       mock_system_media_controls_;
-
-  DISALLOW_COPY_AND_ASSIGN(SystemMediaControlsNotifierTest);
 };
 
 TEST_F(SystemMediaControlsNotifierTest, ProperlyUpdatesPlaybackState) {
diff --git a/content/browser/media/url_provision_fetcher.h b/content/browser/media/url_provision_fetcher.h
index ba413621..9344a225 100644
--- a/content/browser/media/url_provision_fetcher.h
+++ b/content/browser/media/url_provision_fetcher.h
@@ -21,6 +21,10 @@
  public:
   explicit URLProvisionFetcher(
       scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory);
+
+  URLProvisionFetcher(const URLProvisionFetcher&) = delete;
+  URLProvisionFetcher& operator=(const URLProvisionFetcher&) = delete;
+
   ~URLProvisionFetcher() override;
 
   // media::ProvisionFetcher implementation.
@@ -34,8 +38,6 @@
   scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_;
   std::unique_ptr<network::SimpleURLLoader> simple_url_loader_;
   media::ProvisionFetcher::ResponseCB response_cb_;
-
-  DISALLOW_COPY_AND_ASSIGN(URLProvisionFetcher);
 };
 
 }  // namespace content
diff --git a/content/browser/media/webaudio/audio_context_manager_impl.h b/content/browser/media/webaudio/audio_context_manager_impl.h
index b0c495b0..f13c4df 100644
--- a/content/browser/media/webaudio/audio_context_manager_impl.h
+++ b/content/browser/media/webaudio/audio_context_manager_impl.h
@@ -31,6 +31,10 @@
   explicit AudioContextManagerImpl(
       RenderFrameHost* render_frame_host,
       mojo::PendingReceiver<blink::mojom::AudioContextManager> receiver);
+
+  AudioContextManagerImpl(const AudioContextManagerImpl&) = delete;
+  AudioContextManagerImpl& operator=(const AudioContextManagerImpl&) = delete;
+
   ~AudioContextManagerImpl() override;
 
   static void Create(
@@ -58,8 +62,6 @@
   // by tests.
   // It is not owned by the implementation.
   const base::TickClock* clock_;
-
-  DISALLOW_COPY_AND_ASSIGN(AudioContextManagerImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/memory/swap_metrics_driver_impl.h b/content/browser/memory/swap_metrics_driver_impl.h
index b9c406a..71c2c2c3 100644
--- a/content/browser/memory/swap_metrics_driver_impl.h
+++ b/content/browser/memory/swap_metrics_driver_impl.h
@@ -20,6 +20,9 @@
 // SwapMetricsDriver implementation.
 class CONTENT_EXPORT SwapMetricsDriverImpl : public SwapMetricsDriver {
  public:
+  SwapMetricsDriverImpl(const SwapMetricsDriverImpl&) = delete;
+  SwapMetricsDriverImpl& operator=(const SwapMetricsDriverImpl&) = delete;
+
   ~SwapMetricsDriverImpl() override;
 
   // SwapMetricsDriver
@@ -69,8 +72,6 @@
   // Updating metrics is not thread safe, and this checks that
   // UpdateMetricsImpl() is always called on the same sequence.
   SEQUENCE_CHECKER(sequence_checker_);
-
-  DISALLOW_COPY_AND_ASSIGN(SwapMetricsDriverImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/memory/swap_metrics_driver_impl_unittest.cc b/content/browser/memory/swap_metrics_driver_impl_unittest.cc
index 0e68b89..116b8fa 100644
--- a/content/browser/memory/swap_metrics_driver_impl_unittest.cc
+++ b/content/browser/memory/swap_metrics_driver_impl_unittest.cc
@@ -63,6 +63,10 @@
         num_compressed_updates_(0),
         num_updates_failed_(0) {}
 
+  SwapMetricsDelegateCounter(const SwapMetricsDelegateCounter&) = delete;
+  SwapMetricsDelegateCounter& operator=(const SwapMetricsDelegateCounter&) =
+      delete;
+
   ~SwapMetricsDelegateCounter() override = default;
 
   void OnSwapInCount(uint64_t count, base::TimeDelta interval) override {
@@ -97,8 +101,6 @@
   size_t num_decompressed_updates_;
   size_t num_compressed_updates_;
   size_t num_updates_failed_;
-
-  DISALLOW_COPY_AND_ASSIGN(SwapMetricsDelegateCounter);
 };
 
 // The time delta between updates must non-zero for the delegate callbacks to be
diff --git a/content/browser/metrics/histogram_controller.h b/content/browser/metrics/histogram_controller.h
index 5b52739..7150345 100644
--- a/content/browser/metrics/histogram_controller.h
+++ b/content/browser/metrics/histogram_controller.h
@@ -33,6 +33,10 @@
   // Normally instantiated when the child process is launched. Only one instance
   // should be created per process.
   HistogramController();
+
+  HistogramController(const HistogramController&) = delete;
+  HistogramController& operator=(const HistogramController&) = delete;
+
   virtual ~HistogramController();
 
   // Register the subscriber so that it will be called when for example
@@ -102,8 +106,6 @@
 
   ChildHistogramFetcherMap<RenderProcessHost> renderer_histogram_fetchers_;
   ChildHistogramFetcherMap<ChildProcessHost> child_histogram_fetchers_;
-
-  DISALLOW_COPY_AND_ASSIGN(HistogramController);
 };
 
 }  // namespace content
diff --git a/content/browser/metrics/histograms_internals_ui.cc b/content/browser/metrics/histograms_internals_ui.cc
index e7e2144..88c86447 100644
--- a/content/browser/metrics/histograms_internals_ui.cc
+++ b/content/browser/metrics/histograms_internals_ui.cc
@@ -56,6 +56,10 @@
 class HistogramsMessageHandler : public WebUIMessageHandler {
  public:
   HistogramsMessageHandler();
+
+  HistogramsMessageHandler(const HistogramsMessageHandler&) = delete;
+  HistogramsMessageHandler& operator=(const HistogramsMessageHandler&) = delete;
+
   ~HistogramsMessageHandler() override;
 
   // WebUIMessageHandler:
@@ -70,7 +74,6 @@
   JsParams AllowJavascriptAndUnpackParams(const base::ListValue& args);
 
   HistogramsMonitor histogram_monitor_;
-  DISALLOW_COPY_AND_ASSIGN(HistogramsMessageHandler);
 };
 
 HistogramsMessageHandler::HistogramsMessageHandler() {}
diff --git a/content/browser/mime_registry_impl.h b/content/browser/mime_registry_impl.h
index 84399cf..05617c1 100644
--- a/content/browser/mime_registry_impl.h
+++ b/content/browser/mime_registry_impl.h
@@ -15,6 +15,10 @@
 class MimeRegistryImpl : public blink::mojom::MimeRegistry {
  public:
   MimeRegistryImpl();
+
+  MimeRegistryImpl(const MimeRegistryImpl&) = delete;
+  MimeRegistryImpl& operator=(const MimeRegistryImpl&) = delete;
+
   ~MimeRegistryImpl() override;
 
   static void Create(
@@ -26,8 +30,6 @@
       GetMimeTypeFromExtensionCallback callback) override;
 
   SEQUENCE_CHECKER(sequence_checker_);
-
-  DISALLOW_COPY_AND_ASSIGN(MimeRegistryImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/navigation_browsertest.cc b/content/browser/navigation_browsertest.cc
index c87edc9..d68af121 100644
--- a/content/browser/navigation_browsertest.cc
+++ b/content/browser/navigation_browsertest.cc
@@ -1566,6 +1566,11 @@
         determine_allowed_previews_called_(false),
         determine_committed_previews_called_(false) {}
 
+  PreviewsStateContentBrowserClient(const PreviewsStateContentBrowserClient&) =
+      delete;
+  PreviewsStateContentBrowserClient& operator=(
+      const PreviewsStateContentBrowserClient&) = delete;
+
   ~PreviewsStateContentBrowserClient() override {}
 
   blink::PreviewsState DetermineAllowedPreviews(
@@ -1617,8 +1622,6 @@
   blink::PreviewsState previews_state_;
   bool determine_allowed_previews_called_;
   bool determine_committed_previews_called_;
-
-  DISALLOW_COPY_AND_ASSIGN(PreviewsStateContentBrowserClient);
 };
 
 }  // namespace
diff --git a/content/browser/navigation_mhtml_browsertest.cc b/content/browser/navigation_mhtml_browsertest.cc
index 17e523a1..d83f03a 100644
--- a/content/browser/navigation_mhtml_browsertest.cc
+++ b/content/browser/navigation_mhtml_browsertest.cc
@@ -62,6 +62,10 @@
 class MhtmlArchive {
  public:
   MhtmlArchive() = default;
+
+  MhtmlArchive(const MhtmlArchive&) = delete;
+  MhtmlArchive& operator=(const MhtmlArchive&) = delete;
+
   ~MhtmlArchive() {
     base::ScopedAllowBlockingForTesting allow_blocking_;
     EXPECT_TRUE(file_directory_.Delete());
@@ -127,8 +131,6 @@
  private:
   base::ScopedTempDir file_directory_;
   std::string content_;
-
-  DISALLOW_COPY_AND_ASSIGN(MhtmlArchive);
 };
 
 }  // namespace
diff --git a/content/browser/net/browser_online_state_observer.h b/content/browser/net/browser_online_state_observer.h
index 10eb28a..b530ee4 100644
--- a/content/browser/net/browser_online_state_observer.h
+++ b/content/browser/net/browser_online_state_observer.h
@@ -19,6 +19,11 @@
       public content::NotificationObserver {
  public:
   BrowserOnlineStateObserver();
+
+  BrowserOnlineStateObserver(const BrowserOnlineStateObserver&) = delete;
+  BrowserOnlineStateObserver& operator=(const BrowserOnlineStateObserver&) =
+      delete;
+
   ~BrowserOnlineStateObserver() override;
 
   // MaxBandwidthObserver implementation
@@ -33,8 +38,6 @@
 
  private:
   content::NotificationRegistrar registrar_;
-
-  DISALLOW_COPY_AND_ASSIGN(BrowserOnlineStateObserver);
 };
 
 }  // namespace content
diff --git a/content/browser/net/network_errors_listing_ui.h b/content/browser/net/network_errors_listing_ui.h
index cd4eb86..174f3d8 100644
--- a/content/browser/net/network_errors_listing_ui.h
+++ b/content/browser/net/network_errors_listing_ui.h
@@ -14,10 +14,11 @@
 class NetworkErrorsListingUI : public WebUIController {
  public:
   explicit NetworkErrorsListingUI(WebUI* web_ui);
-  ~NetworkErrorsListingUI() override {}
 
- private:
-  DISALLOW_COPY_AND_ASSIGN(NetworkErrorsListingUI);
+  NetworkErrorsListingUI(const NetworkErrorsListingUI&) = delete;
+  NetworkErrorsListingUI& operator=(const NetworkErrorsListingUI&) = delete;
+
+  ~NetworkErrorsListingUI() override {}
 };
 
 }  // namespace content
diff --git a/content/browser/net/network_field_trial_browsertest.cc b/content/browser/net/network_field_trial_browsertest.cc
index 0e957cdf..2b6b96e 100644
--- a/content/browser/net/network_field_trial_browsertest.cc
+++ b/content/browser/net/network_field_trial_browsertest.cc
@@ -26,6 +26,10 @@
  public:
   TestFieldTrialListObserver() { base::FieldTrialList::AddObserver(this); }
 
+  TestFieldTrialListObserver(const TestFieldTrialListObserver&) = delete;
+  TestFieldTrialListObserver& operator=(const TestFieldTrialListObserver&) =
+      delete;
+
   ~TestFieldTrialListObserver() override {
     base::FieldTrialList::RemoveObserver(this);
   }
@@ -43,8 +47,6 @@
 
  private:
   base::RunLoop run_loop_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestFieldTrialListObserver);
 };
 
 }  // namespace
@@ -65,12 +67,14 @@
     EXPECT_TRUE(trial);
   }
 
+  NetworkFieldTrialBrowserTest(const NetworkFieldTrialBrowserTest&) = delete;
+  NetworkFieldTrialBrowserTest& operator=(const NetworkFieldTrialBrowserTest&) =
+      delete;
+
   ~NetworkFieldTrialBrowserTest() override = default;
 
  private:
   std::unique_ptr<base::FieldTrialList> field_trial_list_;
-
-  DISALLOW_COPY_AND_ASSIGN(NetworkFieldTrialBrowserTest);
 };
 
 // Test that when the network process activates a field trial, the browser
diff --git a/content/browser/net/network_quality_observer_impl.h b/content/browser/net/network_quality_observer_impl.h
index e169a241..303d783 100644
--- a/content/browser/net/network_quality_observer_impl.h
+++ b/content/browser/net/network_quality_observer_impl.h
@@ -29,6 +29,10 @@
   explicit NetworkQualityObserverImpl(
       network::NetworkQualityTracker* network_quality_tracker);
 
+  NetworkQualityObserverImpl(const NetworkQualityObserverImpl&) = delete;
+  NetworkQualityObserverImpl& operator=(const NetworkQualityObserverImpl&) =
+      delete;
+
   ~NetworkQualityObserverImpl() override;
 
  private:
@@ -58,8 +62,6 @@
   content::NotificationRegistrar registrar_;
 
   base::ThreadChecker thread_checker_;
-
-  DISALLOW_COPY_AND_ASSIGN(NetworkQualityObserverImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/network_service_browsertest.cc b/content/browser/network_service_browsertest.cc
index a2055d159..280a740 100644
--- a/content/browser/network_service_browsertest.cc
+++ b/content/browser/network_service_browsertest.cc
@@ -148,6 +148,10 @@
 class TestWebUIDataSource : public URLDataSource {
  public:
   TestWebUIDataSource() {}
+
+  TestWebUIDataSource(const TestWebUIDataSource&) = delete;
+  TestWebUIDataSource& operator=(const TestWebUIDataSource&) = delete;
+
   ~TestWebUIDataSource() override {}
 
   std::string GetSource() override { return "webui"; }
@@ -164,9 +168,6 @@
   std::string GetMimeType(const std::string& path) override {
     return "text/html";
   }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(TestWebUIDataSource);
 };
 
 class NetworkServiceBrowserTest : public ContentBrowserTest {
diff --git a/content/browser/network_service_client.h b/content/browser/network_service_client.h
index 3683d963e..3b948d4 100644
--- a/content/browser/network_service_client.h
+++ b/content/browser/network_service_client.h
@@ -43,6 +43,10 @@
       public net::CertDatabase::Observer {
  public:
   NetworkServiceClient();
+
+  NetworkServiceClient(const NetworkServiceClient&) = delete;
+  NetworkServiceClient& operator=(const NetworkServiceClient&) = delete;
+
   ~NetworkServiceClient() override;
 
   mojo::PendingRemote<network::mojom::URLLoaderNetworkServiceObserver>
@@ -123,8 +127,6 @@
 
   mojo::ReceiverSet<network::mojom::URLLoaderNetworkServiceObserver>
       url_loader_network_service_observers_;
-
-  DISALLOW_COPY_AND_ASSIGN(NetworkServiceClient);
 };
 
 }  // namespace content
diff --git a/content/browser/notification_service_impl.h b/content/browser/notification_service_impl.h
index e74801f3..a69fc1a9 100644
--- a/content/browser/notification_service_impl.h
+++ b/content/browser/notification_service_impl.h
@@ -24,6 +24,10 @@
   // Normally instantiated when the thread is created.  Not all threads have
   // a NotificationService.  Only one instance should be created per thread.
   NotificationServiceImpl();
+
+  NotificationServiceImpl(const NotificationServiceImpl&) = delete;
+  NotificationServiceImpl& operator=(const NotificationServiceImpl&) = delete;
+
   ~NotificationServiceImpl() override;
 
   // NotificationService:
@@ -88,8 +92,6 @@
   // balanced.
   NotificationObserverCount observer_counts_;
 #endif
-
-  DISALLOW_COPY_AND_ASSIGN(NotificationServiceImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/notifications/blink_notification_service_impl.h b/content/browser/notifications/blink_notification_service_impl.h
index 19c2beb1..e4b630b 100644
--- a/content/browser/notifications/blink_notification_service_impl.h
+++ b/content/browser/notifications/blink_notification_service_impl.h
@@ -44,6 +44,11 @@
       const url::Origin& origin,
       const GURL& document_url,
       mojo::PendingReceiver<blink::mojom::NotificationService> receiver);
+
+  BlinkNotificationServiceImpl(const BlinkNotificationServiceImpl&) = delete;
+  BlinkNotificationServiceImpl& operator=(const BlinkNotificationServiceImpl&) =
+      delete;
+
   ~BlinkNotificationServiceImpl() override;
 
   // blink::mojom::NotificationService implementation.
@@ -110,8 +115,6 @@
 
   base::WeakPtrFactory<BlinkNotificationServiceImpl> weak_factory_for_io_{this};
   base::WeakPtrFactory<BlinkNotificationServiceImpl> weak_factory_for_ui_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(BlinkNotificationServiceImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/notifications/blink_notification_service_impl_unittest.cc b/content/browser/notifications/blink_notification_service_impl_unittest.cc
index 740b591e..153bd2b6 100644
--- a/content/browser/notifications/blink_notification_service_impl_unittest.cc
+++ b/content/browser/notifications/blink_notification_service_impl_unittest.cc
@@ -106,6 +106,11 @@
         std::make_unique<MockPlatformNotificationService>(&browser_context_));
   }
 
+  BlinkNotificationServiceImplTest(const BlinkNotificationServiceImplTest&) =
+      delete;
+  BlinkNotificationServiceImplTest& operator=(
+      const BlinkNotificationServiceImplTest&) = delete;
+
   ~BlinkNotificationServiceImplTest() override = default;
 
   // ::testing::Test overrides.
@@ -437,8 +442,6 @@
   absl::optional<blink::NotificationResources> get_notification_resources_;
 
   bool read_notification_data_callback_result_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(BlinkNotificationServiceImplTest);
 };
 
 TEST_F(BlinkNotificationServiceImplTest, GetPermissionStatus) {
diff --git a/content/browser/notifications/notification_database.h b/content/browser/notifications/notification_database.h
index 3c4ad19..e1b8274 100644
--- a/content/browser/notifications/notification_database.h
+++ b/content/browser/notifications/notification_database.h
@@ -81,6 +81,9 @@
 
   NotificationDatabase(const base::FilePath& path, UkmCallback callback);
 
+  NotificationDatabase(const NotificationDatabase&) = delete;
+  NotificationDatabase& operator=(const NotificationDatabase&) = delete;
+
   ~NotificationDatabase();
 
   // Opens the database. If |path| is non-empty, it will be created on the given
@@ -263,8 +266,6 @@
 
   // Callback to use for recording UKM metrics. Must be posted to the UI thread.
   UkmCallback record_notification_to_ukm_callback_;
-
-  DISALLOW_COPY_AND_ASSIGN(NotificationDatabase);
 };
 
 }  // namespace content
diff --git a/content/browser/notifications/notification_event_dispatcher_impl_unittest.cc b/content/browser/notifications/notification_event_dispatcher_impl_unittest.cc
index dfed3a4..ea0222d 100644
--- a/content/browser/notifications/notification_event_dispatcher_impl_unittest.cc
+++ b/content/browser/notifications/notification_event_dispatcher_impl_unittest.cc
@@ -30,6 +30,10 @@
     : public blink::mojom::NonPersistentNotificationListener {
  public:
   TestNotificationListener() = default;
+
+  TestNotificationListener(const TestNotificationListener&) = delete;
+  TestNotificationListener& operator=(const TestNotificationListener&) = delete;
+
   ~TestNotificationListener() override = default;
 
   // Closes the bindings associated with this listener.
@@ -69,8 +73,6 @@
   int on_close_count_ = 0;
   mojo::Receiver<blink::mojom::NonPersistentNotificationListener> receiver_{
       this};
-
-  DISALLOW_COPY_AND_ASSIGN(TestNotificationListener);
 };
 
 }  // anonymous namespace
@@ -80,6 +82,11 @@
   NotificationEventDispatcherImplTest()
       : dispatcher_(new NotificationEventDispatcherImpl()) {}
 
+  NotificationEventDispatcherImplTest(
+      const NotificationEventDispatcherImplTest&) = delete;
+  NotificationEventDispatcherImplTest& operator=(
+      const NotificationEventDispatcherImplTest&) = delete;
+
   ~NotificationEventDispatcherImplTest() override { delete dispatcher_; }
 
   // Waits until the task runner managing the Mojo connection has finished.
@@ -91,9 +98,6 @@
   // Using a raw pointer because NotificationEventDispatcherImpl is a singleton
   // with private constructor and destructor, so unique_ptr is not an option.
   NotificationEventDispatcherImpl* dispatcher_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(NotificationEventDispatcherImplTest);
 };
 
 TEST_F(NotificationEventDispatcherImplTest,
diff --git a/content/browser/notifications/platform_notification_service_proxy.h b/content/browser/notifications/platform_notification_service_proxy.h
index 4c7c7c2..4b5e0ff3 100644
--- a/content/browser/notifications/platform_notification_service_proxy.h
+++ b/content/browser/notifications/platform_notification_service_proxy.h
@@ -43,6 +43,11 @@
       scoped_refptr<ServiceWorkerContextWrapper> service_worker_context,
       BrowserContext* browser_context);
 
+  PlatformNotificationServiceProxy(const PlatformNotificationServiceProxy&) =
+      delete;
+  PlatformNotificationServiceProxy& operator=(
+      const PlatformNotificationServiceProxy&) = delete;
+
   ~PlatformNotificationServiceProxy();
 
   // To be called when the |browser_context_| has been shutdown. This
@@ -118,8 +123,6 @@
       this};
   base::WeakPtrFactory<PlatformNotificationServiceProxy> weak_ptr_factory_io_{
       this};
-
-  DISALLOW_COPY_AND_ASSIGN(PlatformNotificationServiceProxy);
 };
 
 }  // namespace content
diff --git a/content/browser/origin_trials/origin_trials_browsertest.cc b/content/browser/origin_trials/origin_trials_browsertest.cc
index 7011089..b6d6931f 100644
--- a/content/browser/origin_trials/origin_trials_browsertest.cc
+++ b/content/browser/origin_trials/origin_trials_browsertest.cc
@@ -41,6 +41,10 @@
 class OriginTrialsBrowserTest : public content::ContentBrowserTest {
  public:
   OriginTrialsBrowserTest() : ContentBrowserTest() {}
+
+  OriginTrialsBrowserTest(const OriginTrialsBrowserTest&) = delete;
+  OriginTrialsBrowserTest& operator=(const OriginTrialsBrowserTest&) = delete;
+
   ~OriginTrialsBrowserTest() override {}
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
@@ -99,8 +103,6 @@
 
  private:
   std::unique_ptr<URLLoaderInterceptor> url_loader_interceptor_;
-
-  DISALLOW_COPY_AND_ASSIGN(OriginTrialsBrowserTest);
 };
 
 IN_PROC_BROWSER_TEST_F(OriginTrialsBrowserTest, Basic) {
diff --git a/content/browser/payments/payment_app_browsertest.cc b/content/browser/payments/payment_app_browsertest.cc
index 48af249..6b2de30 100644
--- a/content/browser/payments/payment_app_browsertest.cc
+++ b/content/browser/payments/payment_app_browsertest.cc
@@ -74,6 +74,10 @@
 class PaymentAppBrowserTest : public ContentBrowserTest {
  public:
   PaymentAppBrowserTest() {}
+
+  PaymentAppBrowserTest(const PaymentAppBrowserTest&) = delete;
+  PaymentAppBrowserTest& operator=(const PaymentAppBrowserTest&) = delete;
+
   ~PaymentAppBrowserTest() override {}
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
@@ -251,8 +255,6 @@
   }
 
   std::unique_ptr<net::EmbeddedTestServer> https_server_;
-
-  DISALLOW_COPY_AND_ASSIGN(PaymentAppBrowserTest);
 };
 
 // TODO(crbug.com/869790) Flakes on linux-chromeos-dbg
diff --git a/content/browser/payments/payment_app_content_unittest_base.cc b/content/browser/payments/payment_app_content_unittest_base.cc
index 6df1dfaa..ef0e918 100644
--- a/content/browser/payments/payment_app_content_unittest_base.cc
+++ b/content/browser/payments/payment_app_content_unittest_base.cc
@@ -63,6 +63,11 @@
       : EmbeddedWorkerTestHelper(base::FilePath()),
         last_sw_registration_id_(
             blink::mojom::kInvalidServiceWorkerRegistrationId) {}
+
+  PaymentAppForWorkerTestHelper(const PaymentAppForWorkerTestHelper&) = delete;
+  PaymentAppForWorkerTestHelper& operator=(
+      const PaymentAppForWorkerTestHelper&) = delete;
+
   ~PaymentAppForWorkerTestHelper() override {}
 
   class EmbeddedWorkerInstanceClient : public FakeEmbeddedWorkerInstanceClient {
@@ -71,6 +76,11 @@
         PaymentAppForWorkerTestHelper* worker_helper)
         : FakeEmbeddedWorkerInstanceClient(worker_helper),
           worker_helper_(worker_helper) {}
+
+    EmbeddedWorkerInstanceClient(const EmbeddedWorkerInstanceClient&) = delete;
+    EmbeddedWorkerInstanceClient& operator=(
+        const EmbeddedWorkerInstanceClient&) = delete;
+
     ~EmbeddedWorkerInstanceClient() override = default;
 
     void StartWorker(
@@ -85,14 +95,16 @@
 
    private:
     PaymentAppForWorkerTestHelper* const worker_helper_;
-
-    DISALLOW_COPY_AND_ASSIGN(EmbeddedWorkerInstanceClient);
   };
 
   class ServiceWorker : public FakeServiceWorker {
    public:
     explicit ServiceWorker(PaymentAppForWorkerTestHelper* worker_helper)
         : FakeServiceWorker(worker_helper), worker_helper_(worker_helper) {}
+
+    ServiceWorker(const ServiceWorker&) = delete;
+    ServiceWorker& operator=(const ServiceWorker&) = delete;
+
     ~ServiceWorker() override = default;
 
     void DispatchCanMakePaymentEvent(
@@ -139,8 +151,6 @@
 
    private:
     PaymentAppForWorkerTestHelper* const worker_helper_;
-
-    DISALLOW_COPY_AND_ASSIGN(ServiceWorker);
   };
 
   std::unique_ptr<FakeEmbeddedWorkerInstanceClient> CreateInstanceClient()
@@ -159,9 +169,6 @@
   bool respond_payment_request_immediately_ = true;
   mojo::Remote<payments::mojom::PaymentHandlerResponseCallback>
       response_callback_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(PaymentAppForWorkerTestHelper);
 };
 
 PaymentAppContentUnitTestBase::PaymentAppContentUnitTestBase()
diff --git a/content/browser/payments/payment_app_database.h b/content/browser/payments/payment_app_database.h
index e70e211..2b4b515 100644
--- a/content/browser/payments/payment_app_database.h
+++ b/content/browser/payments/payment_app_database.h
@@ -52,6 +52,10 @@
 
   explicit PaymentAppDatabase(
       scoped_refptr<ServiceWorkerContextWrapper> service_worker_context);
+
+  PaymentAppDatabase(const PaymentAppDatabase&) = delete;
+  PaymentAppDatabase& operator=(const PaymentAppDatabase&) = delete;
+
   ~PaymentAppDatabase();
 
   void ReadAllPaymentApps(ReadAllPaymentAppsCallback callback);
@@ -248,8 +252,6 @@
 
   scoped_refptr<ServiceWorkerContextWrapper> service_worker_context_;
   base::WeakPtrFactory<PaymentAppDatabase> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(PaymentAppDatabase);
 };
 
 }  // namespace content
diff --git a/content/browser/payments/payment_app_info_fetcher.h b/content/browser/payments/payment_app_info_fetcher.h
index 2a835e9a..d9566019 100644
--- a/content/browser/payments/payment_app_info_fetcher.h
+++ b/content/browser/payments/payment_app_info_fetcher.h
@@ -50,6 +50,10 @@
   class SelfDeleteFetcher {
    public:
     explicit SelfDeleteFetcher(PaymentAppInfoFetchCallback callback);
+
+    SelfDeleteFetcher(const SelfDeleteFetcher&) = delete;
+    SelfDeleteFetcher& operator=(const SelfDeleteFetcher&) = delete;
+
     ~SelfDeleteFetcher();
 
     void Start(const GURL& context_url,
@@ -76,8 +80,6 @@
     std::unique_ptr<PaymentAppInfo> fetched_payment_app_info_;
     PaymentAppInfoFetchCallback callback_;
     base::WeakPtrFactory<SelfDeleteFetcher> weak_ptr_factory_{this};
-
-    DISALLOW_COPY_AND_ASSIGN(SelfDeleteFetcher);
   };
 
   DISALLOW_IMPLICIT_CONSTRUCTORS(PaymentAppInfoFetcher);
diff --git a/content/browser/payments/payment_app_provider_impl_unittest.cc b/content/browser/payments/payment_app_provider_impl_unittest.cc
index ea41438..b55aac5 100644
--- a/content/browser/payments/payment_app_provider_impl_unittest.cc
+++ b/content/browser/payments/payment_app_provider_impl_unittest.cc
@@ -83,6 +83,10 @@
     web_contents_ =
         test_web_contents_factory_.CreateWebContents(browser_context());
   }
+
+  PaymentAppProviderTest(const PaymentAppProviderTest&) = delete;
+  PaymentAppProviderTest& operator=(const PaymentAppProviderTest&) = delete;
+
   ~PaymentAppProviderTest() override {}
 
   void SetPaymentInstrument(
@@ -142,8 +146,6 @@
  private:
   TestWebContentsFactory test_web_contents_factory_;
   WebContents* web_contents_;
-
-  DISALLOW_COPY_AND_ASSIGN(PaymentAppProviderTest);
 };
 
 TEST_F(PaymentAppProviderTest, AbortPaymentTest) {
diff --git a/content/browser/payments/payment_manager.h b/content/browser/payments/payment_manager.h
index 8c0b89b..8f61991 100644
--- a/content/browser/payments/payment_manager.h
+++ b/content/browser/payments/payment_manager.h
@@ -27,6 +27,9 @@
       const url::Origin& origin,
       mojo::PendingReceiver<payments::mojom::PaymentManager> receiver);
 
+  PaymentManager(const PaymentManager&) = delete;
+  PaymentManager& operator=(const PaymentManager&) = delete;
+
   ~PaymentManager() override;
 
  private:
@@ -69,7 +72,6 @@
   GURL context_url_;
   GURL scope_;
   base::WeakPtrFactory<PaymentManager> weak_ptr_factory_{this};
-  DISALLOW_COPY_AND_ASSIGN(PaymentManager);
 };
 
 }  // namespace content
diff --git a/content/browser/permissions/permission_controller_impl.h b/content/browser/permissions/permission_controller_impl.h
index 21e1c43..42d9ed4 100644
--- a/content/browser/permissions/permission_controller_impl.h
+++ b/content/browser/permissions/permission_controller_impl.h
@@ -22,6 +22,10 @@
 class CONTENT_EXPORT PermissionControllerImpl : public PermissionController {
  public:
   explicit PermissionControllerImpl(BrowserContext* browser_context);
+
+  PermissionControllerImpl(const PermissionControllerImpl&) = delete;
+  PermissionControllerImpl& operator=(const PermissionControllerImpl&) = delete;
+
   ~PermissionControllerImpl() override;
 
   static PermissionControllerImpl* FromBrowserContext(
@@ -107,8 +111,6 @@
   SubscriptionId::Generator subscription_id_generator_;
 
   BrowserContext* browser_context_;
-
-  DISALLOW_COPY_AND_ASSIGN(PermissionControllerImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/permissions/permission_controller_impl_unittest.cc b/content/browser/permissions/permission_controller_impl_unittest.cc
index 748a88c..c0eb6dea 100644
--- a/content/browser/permissions/permission_controller_impl_unittest.cc
+++ b/content/browser/permissions/permission_controller_impl_unittest.cc
@@ -32,6 +32,10 @@
 class MockManagerWithRequests : public MockPermissionManager {
  public:
   MockManagerWithRequests() {}
+
+  MockManagerWithRequests(const MockManagerWithRequests&) = delete;
+  MockManagerWithRequests& operator=(const MockManagerWithRequests&) = delete;
+
   ~MockManagerWithRequests() override {}
   MOCK_METHOD(
       void,
@@ -53,9 +57,6 @@
               IsPermissionOverridableByDevTools,
               (PermissionType, const absl::optional<url::Origin>&),
               (override));
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(MockManagerWithRequests);
 };
 
 class PermissionControllerImplTest : public ::testing::Test {
@@ -66,6 +67,11 @@
     permission_controller_ =
         std::make_unique<PermissionControllerImpl>(&browser_context_);
   }
+
+  PermissionControllerImplTest(const PermissionControllerImplTest&) = delete;
+  PermissionControllerImplTest& operator=(const PermissionControllerImplTest&) =
+      delete;
+
   ~PermissionControllerImplTest() override {}
 
   void SetUp() override {
@@ -88,8 +94,6 @@
   content::BrowserTaskEnvironment task_environment_;
   TestBrowserContext browser_context_;
   std::unique_ptr<PermissionControllerImpl> permission_controller_;
-
-  DISALLOW_COPY_AND_ASSIGN(PermissionControllerImplTest);
 };
 
 TEST_F(PermissionControllerImplTest, ResettingOverridesForwardsReset) {
diff --git a/content/browser/permissions/permission_service_impl.h b/content/browser/permissions/permission_service_impl.h
index 9f7d6c11..44b4a942 100644
--- a/content/browser/permissions/permission_service_impl.h
+++ b/content/browser/permissions/permission_service_impl.h
@@ -31,6 +31,10 @@
  public:
   PermissionServiceImpl(PermissionServiceContext* context,
                         const url::Origin& origin);
+
+  PermissionServiceImpl(const PermissionServiceImpl&) = delete;
+  PermissionServiceImpl& operator=(const PermissionServiceImpl&) = delete;
+
   ~PermissionServiceImpl() override;
 
  private:
@@ -75,8 +79,6 @@
   PermissionServiceContext* context_;
   const url::Origin origin_;
   base::WeakPtrFactory<PermissionServiceImpl> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(PermissionServiceImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/picture_in_picture/picture_in_picture_content_browsertest.cc b/content/browser/picture_in_picture/picture_in_picture_content_browsertest.cc
index 75f3a3f..1340026 100644
--- a/content/browser/picture_in_picture/picture_in_picture_content_browsertest.cc
+++ b/content/browser/picture_in_picture/picture_in_picture_content_browsertest.cc
@@ -28,6 +28,10 @@
 class TestOverlayWindow : public OverlayWindow {
  public:
   TestOverlayWindow() = default;
+
+  TestOverlayWindow(const TestOverlayWindow&) = delete;
+  TestOverlayWindow& operator=(const TestOverlayWindow&) = delete;
+
   ~TestOverlayWindow() override = default;
 
   bool IsActive() override { return false; }
@@ -99,8 +103,6 @@
 
   absl::optional<bool> play_pause_button_visible_;
   absl::optional<bool> next_track_button_visible_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestOverlayWindow);
 };
 
 class TestContentBrowserClient : public ContentBrowserClient {
diff --git a/content/browser/picture_in_picture/picture_in_picture_service_impl_unittest.cc b/content/browser/picture_in_picture/picture_in_picture_service_impl_unittest.cc
index 3245e7a2e..9c446816 100644
--- a/content/browser/picture_in_picture/picture_in_picture_service_impl_unittest.cc
+++ b/content/browser/picture_in_picture/picture_in_picture_service_impl_unittest.cc
@@ -33,14 +33,17 @@
     : public blink::mojom::PictureInPictureSessionObserver {
  public:
   DummyPictureInPictureSessionObserver() = default;
+
+  DummyPictureInPictureSessionObserver(
+      const DummyPictureInPictureSessionObserver&) = delete;
+  DummyPictureInPictureSessionObserver& operator=(
+      const DummyPictureInPictureSessionObserver&) = delete;
+
   ~DummyPictureInPictureSessionObserver() override = default;
 
   // Implementation of PictureInPictureSessionObserver.
   void OnWindowSizeChanged(const gfx::Size&) override {}
   void OnStopped() override {}
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(DummyPictureInPictureSessionObserver);
 };
 
 class PictureInPictureDelegate : public WebContentsDelegate {
@@ -59,6 +62,10 @@
 class TestOverlayWindow : public OverlayWindow {
  public:
   TestOverlayWindow() = default;
+
+  TestOverlayWindow(const TestOverlayWindow&) = delete;
+  TestOverlayWindow& operator=(const TestOverlayWindow&) = delete;
+
   ~TestOverlayWindow() override {}
 
   static std::unique_ptr<OverlayWindow> Create(
@@ -91,8 +98,6 @@
 
  private:
   gfx::Size size_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestOverlayWindow);
 };
 
 class PictureInPictureTestBrowserClient : public TestContentBrowserClient {
diff --git a/content/browser/picture_in_picture/picture_in_picture_window_controller_impl.h b/content/browser/picture_in_picture/picture_in_picture_window_controller_impl.h
index ac1f5e2..1f4b5f13 100644
--- a/content/browser/picture_in_picture/picture_in_picture_window_controller_impl.h
+++ b/content/browser/picture_in_picture/picture_in_picture_window_controller_impl.h
@@ -52,6 +52,11 @@
   static PictureInPictureWindowControllerImpl* GetOrCreateForWebContents(
       WebContents* web_contents);
 
+  PictureInPictureWindowControllerImpl(
+      const PictureInPictureWindowControllerImpl&) = delete;
+  PictureInPictureWindowControllerImpl& operator=(
+      const PictureInPictureWindowControllerImpl&) = delete;
+
   ~PictureInPictureWindowControllerImpl() override;
 
   using PlayerSet = std::set<int>;
@@ -191,8 +196,6 @@
   absl::optional<media_session::MediaPosition> media_position_;
 
   WEB_CONTENTS_USER_DATA_KEY_DECL();
-
-  DISALLOW_COPY_AND_ASSIGN(PictureInPictureWindowControllerImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/power_monitor_browsertest.cc b/content/browser/power_monitor_browsertest.cc
index 18d06ad..6c1a850 100644
--- a/content/browser/power_monitor_browsertest.cc
+++ b/content/browser/power_monitor_browsertest.cc
@@ -68,6 +68,12 @@
 class MockPowerMonitorMessageBroadcaster : public device::mojom::PowerMonitor {
  public:
   MockPowerMonitorMessageBroadcaster() = default;
+
+  MockPowerMonitorMessageBroadcaster(
+      const MockPowerMonitorMessageBroadcaster&) = delete;
+  MockPowerMonitorMessageBroadcaster& operator=(
+      const MockPowerMonitorMessageBroadcaster&) = delete;
+
   ~MockPowerMonitorMessageBroadcaster() override = default;
 
   void Bind(mojo::PendingReceiver<device::mojom::PowerMonitor> receiver) {
@@ -94,8 +100,6 @@
 
   mojo::ReceiverSet<device::mojom::PowerMonitor> receivers_;
   mojo::RemoteSet<device::mojom::PowerMonitorClient> clients_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockPowerMonitorMessageBroadcaster);
 };
 
 class PowerMonitorTest : public ContentBrowserTest {
@@ -110,6 +114,9 @@
                             base::Unretained(this)));
   }
 
+  PowerMonitorTest(const PowerMonitorTest&) = delete;
+  PowerMonitorTest& operator=(const PowerMonitorTest&) = delete;
+
   ~PowerMonitorTest() override {
     RenderProcessHost::InterceptBindHostReceiverForTesting(
         base::NullCallback());
@@ -223,8 +230,6 @@
   base::OnceClosure utility_bound_closure_;
 
   MockPowerMonitorMessageBroadcaster power_monitor_message_broadcaster_;
-
-  DISALLOW_COPY_AND_ASSIGN(PowerMonitorTest);
 };
 
 IN_PROC_BROWSER_TEST_F(PowerMonitorTest, TestRendererProcess) {
diff --git a/content/browser/ppapi_plugin_process_host.cc b/content/browser/ppapi_plugin_process_host.cc
index bebe914..3946e2d5 100644
--- a/content/browser/ppapi_plugin_process_host.cc
+++ b/content/browser/ppapi_plugin_process_host.cc
@@ -68,6 +68,11 @@
   {
   }
 
+  PpapiPluginSandboxedProcessLauncherDelegate(
+      const PpapiPluginSandboxedProcessLauncherDelegate&) = delete;
+  PpapiPluginSandboxedProcessLauncherDelegate& operator=(
+      const PpapiPluginSandboxedProcessLauncherDelegate&) = delete;
+
   ~PpapiPluginSandboxedProcessLauncherDelegate() override {}
 
 #if defined(OS_WIN)
@@ -132,8 +137,6 @@
 #if defined(OS_WIN)
   const ppapi::PpapiPermissions permissions_;
 #endif
-
-  DISALLOW_COPY_AND_ASSIGN(PpapiPluginSandboxedProcessLauncherDelegate);
 };
 
 class PpapiPluginProcessHost::PluginNetworkObserver
diff --git a/content/browser/presentation/presentation_service_impl.h b/content/browser/presentation/presentation_service_impl.h
index 4a072a1..94992c79 100644
--- a/content/browser/presentation/presentation_service_impl.h
+++ b/content/browser/presentation/presentation_service_impl.h
@@ -61,6 +61,9 @@
   static std::unique_ptr<PresentationServiceImpl> Create(
       RenderFrameHost* render_frame_host);
 
+  PresentationServiceImpl(const PresentationServiceImpl&) = delete;
+  PresentationServiceImpl& operator=(const PresentationServiceImpl&) = delete;
+
   ~PresentationServiceImpl() override;
 
   // Creates a binding between this object and |receiver|. Note that a
@@ -139,6 +142,12 @@
   class NewPresentationCallbackWrapper {
    public:
     explicit NewPresentationCallbackWrapper(NewPresentationCallback callback);
+
+    NewPresentationCallbackWrapper(const NewPresentationCallbackWrapper&) =
+        delete;
+    NewPresentationCallbackWrapper& operator=(
+        const NewPresentationCallbackWrapper&) = delete;
+
     ~NewPresentationCallbackWrapper();
 
     void Run(blink::mojom::PresentationConnectionResultPtr result,
@@ -146,8 +155,6 @@
 
    private:
     NewPresentationCallback callback_;
-
-    DISALLOW_COPY_AND_ASSIGN(NewPresentationCallbackWrapper);
   };
 
   // Note: Use |PresentationServiceImpl::Create| instead. This constructor
@@ -294,8 +301,6 @@
 
   // NOTE: Weak pointers must be invalidated before all other member variables.
   base::WeakPtrFactory<PresentationServiceImpl> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(PresentationServiceImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/process_internals/process_internals_handler_impl.h b/content/browser/process_internals/process_internals_handler_impl.h
index b594e6f..784db69 100644
--- a/content/browser/process_internals/process_internals_handler_impl.h
+++ b/content/browser/process_internals/process_internals_handler_impl.h
@@ -20,6 +20,11 @@
   ProcessInternalsHandlerImpl(
       BrowserContext* browser_context,
       mojo::PendingReceiver<::mojom::ProcessInternalsHandler> receiver);
+
+  ProcessInternalsHandlerImpl(const ProcessInternalsHandlerImpl&) = delete;
+  ProcessInternalsHandlerImpl& operator=(const ProcessInternalsHandlerImpl&) =
+      delete;
+
   ~ProcessInternalsHandlerImpl() override;
 
   // mojom::ProcessInternalsHandler overrides:
@@ -35,8 +40,6 @@
  private:
   BrowserContext* browser_context_;
   mojo::Receiver<::mojom::ProcessInternalsHandler> receiver_;
-
-  DISALLOW_COPY_AND_ASSIGN(ProcessInternalsHandlerImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/push_messaging/push_messaging_context.h b/content/browser/push_messaging/push_messaging_context.h
index cf73d143..50e5ef6 100644
--- a/content/browser/push_messaging/push_messaging_context.h
+++ b/content/browser/push_messaging/push_messaging_context.h
@@ -28,6 +28,10 @@
   PushMessagingContext(
       BrowserContext* browser_context,
       const scoped_refptr<ServiceWorkerContextWrapper>& service_worker_context);
+
+  PushMessagingContext(const PushMessagingContext&) = delete;
+  PushMessagingContext& operator=(const PushMessagingContext&) = delete;
+
   ~PushMessagingContext() override;
 
   // ServiceWorkerContextCoreObserver methods
@@ -40,8 +44,6 @@
   BrowserContext* browser_context_;
 
   scoped_refptr<ServiceWorkerContextWrapper> service_worker_context_;
-
-  DISALLOW_COPY_AND_ASSIGN(PushMessagingContext);
 };
 
 }  // namespace content
diff --git a/content/browser/push_messaging/push_messaging_manager.h b/content/browser/push_messaging/push_messaging_manager.h
index a5c9316..247cfc9be 100644
--- a/content/browser/push_messaging/push_messaging_manager.h
+++ b/content/browser/push_messaging/push_messaging_manager.h
@@ -47,6 +47,10 @@
       RenderProcessHost& render_process_host,
       int render_frame_id,
       scoped_refptr<ServiceWorkerContextWrapper> service_worker_context);
+
+  PushMessagingManager(const PushMessagingManager&) = delete;
+  PushMessagingManager& operator=(const PushMessagingManager&) = delete;
+
   ~PushMessagingManager() override;
 
   void AddPushMessagingReceiver(
@@ -174,8 +178,6 @@
   mojo::ReceiverSet<blink::mojom::PushMessaging> receivers_;
 
   base::WeakPtrFactory<PushMessagingManager> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(PushMessagingManager);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/accessibility_object_lifetime_win_browsertest.cc b/content/browser/renderer_host/accessibility_object_lifetime_win_browsertest.cc
index 0076517..3fd30a5 100644
--- a/content/browser/renderer_host/accessibility_object_lifetime_win_browsertest.cc
+++ b/content/browser/renderer_host/accessibility_object_lifetime_win_browsertest.cc
@@ -19,6 +19,12 @@
     : public content::ContentBrowserTest {
  public:
   AccessibilityObjectLifetimeWinBrowserTest() = default;
+
+  AccessibilityObjectLifetimeWinBrowserTest(
+      const AccessibilityObjectLifetimeWinBrowserTest&) = delete;
+  AccessibilityObjectLifetimeWinBrowserTest& operator=(
+      const AccessibilityObjectLifetimeWinBrowserTest&) = delete;
+
   ~AccessibilityObjectLifetimeWinBrowserTest() override = default;
 
  protected:
@@ -46,9 +52,6 @@
   HWND GetHwnd() { return GetView()->AccessibilityGetAcceleratedWidget(); }
 
   Microsoft::WRL::ComPtr<ui::AXPlatformNodeWin> test_node_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(AccessibilityObjectLifetimeWinBrowserTest);
 };
 
 IN_PROC_BROWSER_TEST_F(AccessibilityObjectLifetimeWinBrowserTest,
@@ -148,15 +151,18 @@
     : public AccessibilityObjectLifetimeWinBrowserTest {
  public:
   AccessibilityObjectLifetimeUiaWinBrowserTest() = default;
+
+  AccessibilityObjectLifetimeUiaWinBrowserTest(
+      const AccessibilityObjectLifetimeUiaWinBrowserTest&) = delete;
+  AccessibilityObjectLifetimeUiaWinBrowserTest& operator=(
+      const AccessibilityObjectLifetimeUiaWinBrowserTest&) = delete;
+
   ~AccessibilityObjectLifetimeUiaWinBrowserTest() override = default;
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
     base::CommandLine::ForCurrentProcess()->AppendSwitch(
         ::switches::kEnableExperimentalUIAutomation);
   }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(AccessibilityObjectLifetimeUiaWinBrowserTest);
 };
 
 IN_PROC_BROWSER_TEST_F(AccessibilityObjectLifetimeUiaWinBrowserTest,
diff --git a/content/browser/renderer_host/accessibility_tree_linkage_win_browsertest.cc b/content/browser/renderer_host/accessibility_tree_linkage_win_browsertest.cc
index f185ce0e..d0b91bd 100644
--- a/content/browser/renderer_host/accessibility_tree_linkage_win_browsertest.cc
+++ b/content/browser/renderer_host/accessibility_tree_linkage_win_browsertest.cc
@@ -34,6 +34,11 @@
     dummy_ax_platform_node_ = ui::AXPlatformNode::Create(&dummy_ax_node_);
   }
 
+  AccessibilityTreeLinkageWinBrowserTest(
+      const AccessibilityTreeLinkageWinBrowserTest&) = delete;
+  AccessibilityTreeLinkageWinBrowserTest& operator=(
+      const AccessibilityTreeLinkageWinBrowserTest&) = delete;
+
   ~AccessibilityTreeLinkageWinBrowserTest() override {
     dummy_ax_platform_node_->Destroy();
     dummy_ax_platform_node_ = nullptr;
@@ -62,9 +67,6 @@
  protected:
   ui::AXPlatformNodeDelegateBase dummy_ax_node_;
   ui::AXPlatformNode* dummy_ax_platform_node_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(AccessibilityTreeLinkageWinBrowserTest);
 };
 
 IN_PROC_BROWSER_TEST_P(AccessibilityTreeLinkageWinBrowserTest, Linkage) {
diff --git a/content/browser/renderer_host/ancestor_throttle.h b/content/browser/renderer_host/ancestor_throttle.h
index 08290c4f..2489cef 100644
--- a/content/browser/renderer_host/ancestor_throttle.h
+++ b/content/browser/renderer_host/ancestor_throttle.h
@@ -29,6 +29,9 @@
   static std::unique_ptr<NavigationThrottle> MaybeCreateThrottleFor(
       NavigationHandle* handle);
 
+  AncestorThrottle(const AncestorThrottle&) = delete;
+  AncestorThrottle& operator=(const AncestorThrottle&) = delete;
+
   ~AncestorThrottle() override;
 
   NavigationThrottle::ThrottleCheckResult WillRedirectRequest() override;
@@ -60,8 +63,6 @@
       const std::vector<network::mojom::ContentSecurityPolicyPtr>&
           content_security_policy);
   CheckResult EvaluateEmbeddingOptIn(LoggingDisposition logging);
-
-  DISALLOW_COPY_AND_ASSIGN(AncestorThrottle);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/back_forward_cache_commit_deferring_condition.h b/content/browser/renderer_host/back_forward_cache_commit_deferring_condition.h
index ac361cca..3ad2b60 100644
--- a/content/browser/renderer_host/back_forward_cache_commit_deferring_condition.h
+++ b/content/browser/renderer_host/back_forward_cache_commit_deferring_condition.h
@@ -25,6 +25,11 @@
   static std::unique_ptr<CommitDeferringCondition> MaybeCreate(
       NavigationRequest& navigation_request);
 
+  BackForwardCacheCommitDeferringCondition(
+      const BackForwardCacheCommitDeferringCondition&) = delete;
+  BackForwardCacheCommitDeferringCondition& operator=(
+      const BackForwardCacheCommitDeferringCondition&) = delete;
+
   ~BackForwardCacheCommitDeferringCondition() override;
 
   Result WillCommitNavigation(base::OnceClosure resume) override;
@@ -34,8 +39,6 @@
       NavigationRequest& navigation_request);
 
   NavigationRequest& navigation_request_;
-
-  DISALLOW_COPY_AND_ASSIGN(BackForwardCacheCommitDeferringCondition);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/back_forward_cache_disable.cc b/content/browser/renderer_host/back_forward_cache_disable.cc
index 479ff12..adf2c0c 100644
--- a/content/browser/renderer_host/back_forward_cache_disable.cc
+++ b/content/browser/renderer_host/back_forward_cache_disable.cc
@@ -30,6 +30,8 @@
       return "WebUSB";
     case BackForwardCacheDisable::DisabledReasonId::kMediaSession:
       return "MediaSession";
+    case BackForwardCacheDisable::DisabledReasonId::kMediaSessionService:
+      return "MediaSessionService";
   }
 }
 
diff --git a/content/browser/renderer_host/back_forward_cache_disable.h b/content/browser/renderer_host/back_forward_cache_disable.h
index b6ce9fe..13ae625f 100644
--- a/content/browser/renderer_host/back_forward_cache_disable.h
+++ b/content/browser/renderer_host/back_forward_cache_disable.h
@@ -34,6 +34,9 @@
     // MediaSession's playback state is changed (crbug.com/1177661).
     kMediaSession = 10,
 
+    // MediaSession's service is used (crbug.com/1243599).
+    kMediaSessionService = 11,
+
     // New reasons should be accompanied by a comment as to why BackForwardCache
     // cannot be used in this case and a link to a bug to fix that if it is
     // fixable.
diff --git a/content/browser/renderer_host/back_forward_cache_impl.cc b/content/browser/renderer_host/back_forward_cache_impl.cc
index 1818d5ab..2e76d97 100644
--- a/content/browser/renderer_host/back_forward_cache_impl.cc
+++ b/content/browser/renderer_host/back_forward_cache_impl.cc
@@ -1274,6 +1274,15 @@
   return false;
 }
 
+bool BackForwardCacheImpl::IsMediaSessionPlaybackStateChangedAllowed() {
+  return base::FeatureList::IsEnabled(
+      kBackForwardCacheMediaSessionPlaybackStateChange);
+}
+
+bool BackForwardCacheImpl::IsMediaSessionServiceAllowed() {
+  return base::FeatureList::IsEnabled(kBackForwardCacheMediaSessionService);
+}
+
 bool BackForwardCache::DisabledReason::operator<(
     const DisabledReason& other) const {
   return std::tie(source, id) < std::tie(other.source, other.id);
diff --git a/content/browser/renderer_host/back_forward_cache_impl.h b/content/browser/renderer_host/back_forward_cache_impl.h
index 7e551dfb3..e5ffcc4 100644
--- a/content/browser/renderer_host/back_forward_cache_impl.h
+++ b/content/browser/renderer_host/back_forward_cache_impl.h
@@ -67,6 +67,17 @@
         "CacheControlNoStoreRestoreFromBackForwardCache",
         base::FEATURE_DISABLED_BY_DEFAULT};
 
+// Allows pages with MediaSession's playback state change to stay eligible for
+// the back/forward cache.
+const base::Feature kBackForwardCacheMediaSessionPlaybackStateChange{
+    "BackForwardCacheMediaSessionPlaybackStateChange",
+    base::FEATURE_DISABLED_BY_DEFAULT};
+
+// Allows pages that created a MediaSession service to stay eligible for the
+// back/forward cache.
+const base::Feature kBackForwardCacheMediaSessionService{
+    "BackForwardCacheMediaSessionService", base::FEATURE_DISABLED_BY_DEFAULT};
+
 // BackForwardCache:
 //
 // After the user navigates away from a document, the old one goes into the
diff --git a/content/browser/renderer_host/blocked_scheme_navigation_browsertest.cc b/content/browser/renderer_host/blocked_scheme_navigation_browsertest.cc
index b36823e..d11af98 100644
--- a/content/browser/renderer_host/blocked_scheme_navigation_browsertest.cc
+++ b/content/browser/renderer_host/blocked_scheme_navigation_browsertest.cc
@@ -629,12 +629,16 @@
     scoped_feature_list_.InitAndEnableFeature(
         features::kAllowContentInitiatedDataUrlNavigations);
   }
+
+  DataUrlNavigationBrowserTestWithFeatureFlag(
+      const DataUrlNavigationBrowserTestWithFeatureFlag&) = delete;
+  DataUrlNavigationBrowserTestWithFeatureFlag& operator=(
+      const DataUrlNavigationBrowserTestWithFeatureFlag&) = delete;
+
   ~DataUrlNavigationBrowserTestWithFeatureFlag() override {}
 
  private:
   base::test::ScopedFeatureList scoped_feature_list_;
-
-  DISALLOW_COPY_AND_ASSIGN(DataUrlNavigationBrowserTestWithFeatureFlag);
 };
 
 // Tests that a content initiated navigation to a data URL is allowed if
diff --git a/content/browser/renderer_host/blocked_scheme_navigation_throttle.h b/content/browser/renderer_host/blocked_scheme_navigation_throttle.h
index 6757969..0a2ac4f 100644
--- a/content/browser/renderer_host/blocked_scheme_navigation_throttle.h
+++ b/content/browser/renderer_host/blocked_scheme_navigation_throttle.h
@@ -17,6 +17,12 @@
 class BlockedSchemeNavigationThrottle : public NavigationThrottle {
  public:
   explicit BlockedSchemeNavigationThrottle(NavigationHandle* navigation_handle);
+
+  BlockedSchemeNavigationThrottle(const BlockedSchemeNavigationThrottle&) =
+      delete;
+  BlockedSchemeNavigationThrottle& operator=(
+      const BlockedSchemeNavigationThrottle&) = delete;
+
   ~BlockedSchemeNavigationThrottle() override;
 
   // NavigationThrottle method:
@@ -25,9 +31,6 @@
 
   static std::unique_ptr<NavigationThrottle> CreateThrottleForNavigation(
       NavigationHandle* navigation_handle);
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(BlockedSchemeNavigationThrottle);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/commit_deferring_condition_runner.h b/content/browser/renderer_host/commit_deferring_condition_runner.h
index 1047df8..bd3f920 100644
--- a/content/browser/renderer_host/commit_deferring_condition_runner.h
+++ b/content/browser/renderer_host/commit_deferring_condition_runner.h
@@ -64,6 +64,11 @@
       CommitDeferringCondition::NavigationType navigation_type,
       absl::optional<int> candidate_prerender_frame_tree_node_id);
 
+  CommitDeferringConditionRunner(const CommitDeferringConditionRunner&) =
+      delete;
+  CommitDeferringConditionRunner& operator=(
+      const CommitDeferringConditionRunner&) = delete;
+
   ~CommitDeferringConditionRunner();
 
   // Call to start iterating through registered CommitDeferringConditions. This
@@ -137,7 +142,6 @@
   bool is_deferred_ = false;
 
   base::WeakPtrFactory<CommitDeferringConditionRunner> weak_factory_{this};
-  DISALLOW_COPY_AND_ASSIGN(CommitDeferringConditionRunner);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/compositor_impl_android.h b/content/browser/renderer_host/compositor_impl_android.h
index 53d6c25..32107f5 100644
--- a/content/browser/renderer_host/compositor_impl_android.h
+++ b/content/browser/renderer_host/compositor_impl_android.h
@@ -69,6 +69,10 @@
       public display::DisplayObserver {
  public:
   CompositorImpl(CompositorClient* client, gfx::NativeWindow root_window);
+
+  CompositorImpl(const CompositorImpl&) = delete;
+  CompositorImpl& operator=(const CompositorImpl&) = delete;
+
   ~CompositorImpl() override;
 
   static bool IsInitialized();
@@ -279,8 +283,6 @@
   display::ScopedDisplayObserver display_observer_{this};
 
   base::WeakPtrFactory<CompositorImpl> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(CompositorImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/compositor_impl_android_browsertest.cc b/content/browser/renderer_host/compositor_impl_android_browsertest.cc
index 7052499..e0e5bed 100644
--- a/content/browser/renderer_host/compositor_impl_android_browsertest.cc
+++ b/content/browser/renderer_host/compositor_impl_android_browsertest.cc
@@ -124,6 +124,10 @@
       : context_provider_(context_provider) {
     context_provider_->AddObserver(this);
   }
+
+  ContextLostRunLoop(const ContextLostRunLoop&) = delete;
+  ContextLostRunLoop& operator=(const ContextLostRunLoop&) = delete;
+
   ~ContextLostRunLoop() override { context_provider_->RemoveObserver(this); }
 
   void RunUntilContextLost() {
@@ -151,8 +155,6 @@
   viz::ContextProvider* const context_provider_;
   bool did_lose_context_ = false;
   base::RunLoop run_loop_;
-
-  DISALLOW_COPY_AND_ASSIGN(ContextLostRunLoop);
 };
 
 // RunLoop implementation that runs until it observes a swap with size.
@@ -162,6 +164,10 @@
     compositor_->SetSwapCompletedWithSizeCallbackForTesting(base::BindRepeating(
         &CompositorSwapRunLoop::DidSwap, base::Unretained(this)));
   }
+
+  CompositorSwapRunLoop(const CompositorSwapRunLoop&) = delete;
+  CompositorSwapRunLoop& operator=(const CompositorSwapRunLoop&) = delete;
+
   ~CompositorSwapRunLoop() {
     compositor_->SetSwapCompletedWithSizeCallbackForTesting(base::DoNothing());
   }
@@ -176,8 +182,6 @@
 
   CompositorImpl* compositor_;
   base::RunLoop run_loop_;
-
-  DISALLOW_COPY_AND_ASSIGN(CompositorSwapRunLoop);
 };
 
 IN_PROC_BROWSER_TEST_P(CompositorImplLowEndBrowserTest,
diff --git a/content/browser/renderer_host/cross_process_frame_connector.h b/content/browser/renderer_host/cross_process_frame_connector.h
index 165f1cce..3d9debc 100644
--- a/content/browser/renderer_host/cross_process_frame_connector.h
+++ b/content/browser/renderer_host/cross_process_frame_connector.h
@@ -84,6 +84,11 @@
   // |frame_proxy_in_parent_renderer| corresponds to A2 in the example above.
   explicit CrossProcessFrameConnector(
       RenderFrameProxyHost* frame_proxy_in_parent_renderer);
+
+  CrossProcessFrameConnector(const CrossProcessFrameConnector&) = delete;
+  CrossProcessFrameConnector& operator=(const CrossProcessFrameConnector&) =
+      delete;
+
   virtual ~CrossProcessFrameConnector();
 
   // |view| corresponds to B2's RenderWidgetHostViewChildFrame in the example
@@ -428,8 +433,6 @@
   // Closure that will be run whenever a sad frame is shown and its visibility
   // metrics have been logged. Used for testing only.
   base::OnceClosure child_frame_crash_shown_closure_for_testing_;
-
-  DISALLOW_COPY_AND_ASSIGN(CrossProcessFrameConnector);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/delegated_frame_host_client_android.h b/content/browser/renderer_host/delegated_frame_host_client_android.h
index 185cf711..0cacff6 100644
--- a/content/browser/renderer_host/delegated_frame_host_client_android.h
+++ b/content/browser/renderer_host/delegated_frame_host_client_android.h
@@ -20,6 +20,12 @@
  public:
   explicit DelegatedFrameHostClientAndroid(
       RenderWidgetHostViewAndroid* render_widget_host_view);
+
+  DelegatedFrameHostClientAndroid(const DelegatedFrameHostClientAndroid&) =
+      delete;
+  DelegatedFrameHostClientAndroid& operator=(
+      const DelegatedFrameHostClientAndroid&) = delete;
+
   ~DelegatedFrameHostClientAndroid() override;
 
  private:
@@ -30,8 +36,6 @@
   void OnSurfaceIdChanged() override;
 
   RenderWidgetHostViewAndroid* render_widget_host_view_;
-
-  DISALLOW_COPY_AND_ASSIGN(DelegatedFrameHostClientAndroid);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/delegated_frame_host_client_aura.h b/content/browser/renderer_host/delegated_frame_host_client_aura.h
index e89af88..d2e45ac 100644
--- a/content/browser/renderer_host/delegated_frame_host_client_aura.h
+++ b/content/browser/renderer_host/delegated_frame_host_client_aura.h
@@ -20,6 +20,11 @@
  public:
   explicit DelegatedFrameHostClientAura(
       RenderWidgetHostViewAura* render_widget_host_view);
+
+  DelegatedFrameHostClientAura(const DelegatedFrameHostClientAura&) = delete;
+  DelegatedFrameHostClientAura& operator=(const DelegatedFrameHostClientAura&) =
+      delete;
+
   ~DelegatedFrameHostClientAura() override;
 
  protected:
@@ -40,8 +45,6 @@
 
  private:
   RenderWidgetHostViewAura* render_widget_host_view_;
-
-  DISALLOW_COPY_AND_ASSIGN(DelegatedFrameHostClientAura);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/direct_manipulation_helper_win.h b/content/browser/renderer_host/direct_manipulation_helper_win.h
index bc3f3d13..97cd425 100644
--- a/content/browser/renderer_host/direct_manipulation_helper_win.h
+++ b/content/browser/renderer_host/direct_manipulation_helper_win.h
@@ -62,6 +62,9 @@
       ui::WindowEventTarget* event_target,
       Microsoft::WRL::ComPtr<IDirectManipulationViewport> viewport);
 
+  DirectManipulationHelper(const DirectManipulationHelper&) = delete;
+  DirectManipulationHelper& operator=(const DirectManipulationHelper&) = delete;
+
   ~DirectManipulationHelper() override;
 
   // CompositorAnimationObserver implements.
@@ -104,8 +107,6 @@
   ui::Compositor* compositor_ = nullptr;
   DWORD view_port_handler_cookie_;
   bool has_animation_observer_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(DirectManipulationHelper);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/direct_manipulation_test_helper_win.h b/content/browser/renderer_host/direct_manipulation_test_helper_win.h
index 73b622b..df576dc 100644
--- a/content/browser/renderer_host/direct_manipulation_test_helper_win.h
+++ b/content/browser/renderer_host/direct_manipulation_test_helper_win.h
@@ -35,6 +35,10 @@
  public:
   MockDirectManipulationContent();
 
+  MockDirectManipulationContent(const MockDirectManipulationContent&) = delete;
+  MockDirectManipulationContent& operator=(
+      const MockDirectManipulationContent&) = delete;
+
   // IDirectManipulationContent:
   ~MockDirectManipulationContent() override;
 
@@ -76,8 +80,6 @@
   // (3,1) - x offset
   // (3,2) - y offset.
   std::array<float, kTransformMatrixSize> transforms_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockDirectManipulationContent);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/direct_manipulation_win_browsertest.cc b/content/browser/renderer_host/direct_manipulation_win_browsertest.cc
index 6d8dd8d5..8a6881d 100644
--- a/content/browser/renderer_host/direct_manipulation_win_browsertest.cc
+++ b/content/browser/renderer_host/direct_manipulation_win_browsertest.cc
@@ -113,6 +113,10 @@
 class EventLogger : public ui::EventRewriter {
  public:
   EventLogger() {}
+
+  EventLogger(const EventLogger&) = delete;
+  EventLogger& operator=(const EventLogger&) = delete;
+
   ~EventLogger() override {}
 
   std::unique_ptr<ui::Event> ReleaseLastEvent() {
@@ -130,8 +134,6 @@
   }
 
   std::unique_ptr<ui::Event> last_event_;
-
-  DISALLOW_COPY_AND_ASSIGN(EventLogger);
 };
 
 // Check DirectManipulation events convert to ui::event correctly.
diff --git a/content/browser/renderer_host/direct_manipulation_win_unittest.cc b/content/browser/renderer_host/direct_manipulation_win_unittest.cc
index 5a169f62..3cd9cf83 100644
--- a/content/browser/renderer_host/direct_manipulation_win_unittest.cc
+++ b/content/browser/renderer_host/direct_manipulation_win_unittest.cc
@@ -28,6 +28,11 @@
  public:
   MockDirectManipulationViewport() {}
 
+  MockDirectManipulationViewport(const MockDirectManipulationViewport&) =
+      delete;
+  MockDirectManipulationViewport& operator=(
+      const MockDirectManipulationViewport&) = delete;
+
   ~MockDirectManipulationViewport() override {}
 
   bool WasZoomToRectCalled() {
@@ -168,8 +173,6 @@
 
  private:
   bool zoom_to_rect_called_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(MockDirectManipulationViewport);
 };
 
 enum class EventGesture {
@@ -202,6 +205,9 @@
  public:
   MockWindowEventTarget() {}
 
+  MockWindowEventTarget(const MockWindowEventTarget&) = delete;
+  MockWindowEventTarget& operator=(const MockWindowEventTarget&) = delete;
+
   ~MockWindowEventTarget() override {}
 
   void ApplyPinchZoomScale(float scale) override {
@@ -300,8 +306,6 @@
 
  private:
   std::vector<Event> events_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockWindowEventTarget);
 };
 
 }  //  namespace
@@ -316,6 +320,10 @@
                                                            viewport_);
   }
 
+  DirectManipulationUnitTest(const DirectManipulationUnitTest&) = delete;
+  DirectManipulationUnitTest& operator=(const DirectManipulationUnitTest&) =
+      delete;
+
   ~DirectManipulationUnitTest() override {}
 
   DirectManipulationHelper* GetDirectManipulationHelper() {
@@ -347,8 +355,6 @@
   Microsoft::WRL::ComPtr<MockDirectManipulationViewport> viewport_;
   Microsoft::WRL::ComPtr<MockDirectManipulationContent> content_;
   MockWindowEventTarget event_target_;
-
-  DISALLOW_COPY_AND_ASSIGN(DirectManipulationUnitTest);
 };
 
 TEST_F(DirectManipulationUnitTest, HelperShouldCreateForWin10) {
diff --git a/content/browser/renderer_host/dwrite_font_proxy_impl_win.h b/content/browser/renderer_host/dwrite_font_proxy_impl_win.h
index d271cad..fd72e5c 100644
--- a/content/browser/renderer_host/dwrite_font_proxy_impl_win.h
+++ b/content/browser/renderer_host/dwrite_font_proxy_impl_win.h
@@ -32,6 +32,10 @@
     : public blink::mojom::DWriteFontProxy {
  public:
   DWriteFontProxyImpl();
+
+  DWriteFontProxyImpl(const DWriteFontProxyImpl&) = delete;
+  DWriteFontProxyImpl& operator=(const DWriteFontProxyImpl&) = delete;
+
   ~DWriteFontProxyImpl() override;
 
   static void Create(
@@ -88,8 +92,6 @@
 
   // Temp code to help track down crbug.com/561873
   std::vector<uint32_t> last_resort_fonts_;
-
-  DISALLOW_COPY_AND_ASSIGN(DWriteFontProxyImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/embedded_frame_sink_impl.h b/content/browser/renderer_host/embedded_frame_sink_impl.h
index 9730f41..acd87d3 100644
--- a/content/browser/renderer_host/embedded_frame_sink_impl.h
+++ b/content/browser/renderer_host/embedded_frame_sink_impl.h
@@ -39,6 +39,10 @@
       const viz::FrameSinkId& frame_sink_id,
       mojo::PendingRemote<blink::mojom::EmbeddedFrameSinkClient> client,
       DestroyCallback destroy_callback);
+
+  EmbeddedFrameSinkImpl(const EmbeddedFrameSinkImpl&) = delete;
+  EmbeddedFrameSinkImpl& operator=(const EmbeddedFrameSinkImpl&) = delete;
+
   ~EmbeddedFrameSinkImpl() override;
 
   const viz::FrameSinkId& frame_sink_id() const { return frame_sink_id_; }
@@ -86,8 +90,6 @@
   viz::LocalSurfaceId local_surface_id_;
 
   bool has_created_compositor_frame_sink_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(EmbeddedFrameSinkImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/embedded_frame_sink_provider_impl.h b/content/browser/renderer_host/embedded_frame_sink_provider_impl.h
index 3fd1b99..f6e0eb99 100644
--- a/content/browser/renderer_host/embedded_frame_sink_provider_impl.h
+++ b/content/browser/renderer_host/embedded_frame_sink_provider_impl.h
@@ -30,6 +30,11 @@
   EmbeddedFrameSinkProviderImpl(
       viz::HostFrameSinkManager* host_frame_sink_manager,
       uint32_t renderer_client_id);
+
+  EmbeddedFrameSinkProviderImpl(const EmbeddedFrameSinkProviderImpl&) = delete;
+  EmbeddedFrameSinkProviderImpl& operator=(
+      const EmbeddedFrameSinkProviderImpl&) = delete;
+
   ~EmbeddedFrameSinkProviderImpl() override;
 
   void Add(
@@ -85,8 +90,6 @@
 
   base::flat_map<viz::FrameSinkId, std::unique_ptr<EmbeddedFrameSinkImpl>>
       frame_sink_map_;
-
-  DISALLOW_COPY_AND_ASSIGN(EmbeddedFrameSinkProviderImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/embedded_frame_sink_provider_impl_unittest.cc b/content/browser/renderer_host/embedded_frame_sink_provider_impl_unittest.cc
index 1ee0103..adb0125 100644
--- a/content/browser/renderer_host/embedded_frame_sink_provider_impl_unittest.cc
+++ b/content/browser/renderer_host/embedded_frame_sink_provider_impl_unittest.cc
@@ -57,6 +57,11 @@
       public blink::mojom::SurfaceEmbedder {
  public:
   StubEmbeddedFrameSinkClient() = default;
+
+  StubEmbeddedFrameSinkClient(const StubEmbeddedFrameSinkClient&) = delete;
+  StubEmbeddedFrameSinkClient& operator=(const StubEmbeddedFrameSinkClient&) =
+      delete;
+
   ~StubEmbeddedFrameSinkClient() override = default;
 
   mojo::PendingRemote<blink::mojom::EmbeddedFrameSinkClient>
@@ -94,8 +99,6 @@
   mojo::Receiver<blink::mojom::EmbeddedFrameSinkClient> receiver_{this};
   viz::LocalSurfaceId last_received_local_surface_id_;
   bool connection_error_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(StubEmbeddedFrameSinkClient);
 };
 
 }  // namespace
diff --git a/content/browser/renderer_host/frame_token_message_queue.h b/content/browser/renderer_host/frame_token_message_queue.h
index 273c8276..bde283f 100644
--- a/content/browser/renderer_host/frame_token_message_queue.h
+++ b/content/browser/renderer_host/frame_token_message_queue.h
@@ -37,6 +37,10 @@
     virtual void OnInvalidFrameToken(uint32_t frame_token) = 0;
   };
   FrameTokenMessageQueue();
+
+  FrameTokenMessageQueue(const FrameTokenMessageQueue&) = delete;
+  FrameTokenMessageQueue& operator=(const FrameTokenMessageQueue&) = delete;
+
   virtual ~FrameTokenMessageQueue();
 
   // Initializes this instance. This should always be the first method called
@@ -78,8 +82,6 @@
   // The frame token last seen when Reset() is called. To determine if we are
   // getting delayed frame acknowledgements after a reset.
   uint32_t last_received_frame_token_reset_ = 0u;
-
-  DISALLOW_COPY_AND_ASSIGN(FrameTokenMessageQueue);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/frame_token_message_queue_unittest.cc b/content/browser/renderer_host/frame_token_message_queue_unittest.cc
index 4b312b9b..3d44831 100644
--- a/content/browser/renderer_host/frame_token_message_queue_unittest.cc
+++ b/content/browser/renderer_host/frame_token_message_queue_unittest.cc
@@ -20,6 +20,12 @@
 class TestFrameTokenMessageQueueClient : public FrameTokenMessageQueue::Client {
  public:
   TestFrameTokenMessageQueueClient() {}
+
+  TestFrameTokenMessageQueueClient(const TestFrameTokenMessageQueueClient&) =
+      delete;
+  TestFrameTokenMessageQueueClient& operator=(
+      const TestFrameTokenMessageQueueClient&) = delete;
+
   ~TestFrameTokenMessageQueueClient() {}
 
   // Resets all method counters.
@@ -36,7 +42,6 @@
  private:
   bool invalid_frame_token_called_ = false;
   uint32_t invalid_frame_token_ = 0u;
-  DISALLOW_COPY_AND_ASSIGN(TestFrameTokenMessageQueueClient);
 };
 
 void TestFrameTokenMessageQueueClient::Reset() {
@@ -55,6 +60,11 @@
 class TestNonIPCMessageEnqueuer {
  public:
   TestNonIPCMessageEnqueuer() {}
+
+  TestNonIPCMessageEnqueuer(const TestNonIPCMessageEnqueuer&) = delete;
+  TestNonIPCMessageEnqueuer& operator=(const TestNonIPCMessageEnqueuer&) =
+      delete;
+
   ~TestNonIPCMessageEnqueuer() {}
 
   void FrameTokenCallback(base::TimeTicks activation_time);
@@ -65,7 +75,6 @@
 
  private:
   bool frame_token_callback_called_ = false;
-  DISALLOW_COPY_AND_ASSIGN(TestNonIPCMessageEnqueuer);
 };
 
 void TestNonIPCMessageEnqueuer::FrameTokenCallback(
@@ -78,6 +87,11 @@
 class FrameTokenMessageQueueTest : public testing::Test {
  public:
   FrameTokenMessageQueueTest();
+
+  FrameTokenMessageQueueTest(const FrameTokenMessageQueueTest&) = delete;
+  FrameTokenMessageQueueTest& operator=(const FrameTokenMessageQueueTest&) =
+      delete;
+
   ~FrameTokenMessageQueueTest() override {}
 
   TestFrameTokenMessageQueueClient* test_client() { return &test_client_; }
@@ -92,7 +106,6 @@
   TestFrameTokenMessageQueueClient test_client_;
   TestNonIPCMessageEnqueuer test_non_ipc_enqueuer_;
   FrameTokenMessageQueue frame_token_message_queue_;
-  DISALLOW_COPY_AND_ASSIGN(FrameTokenMessageQueueTest);
 };
 
 FrameTokenMessageQueueTest::FrameTokenMessageQueueTest() {
diff --git a/content/browser/renderer_host/frame_tree.h b/content/browser/renderer_host/frame_tree.h
index e2f539a..020a243 100644
--- a/content/browser/renderer_host/frame_tree.h
+++ b/content/browser/renderer_host/frame_tree.h
@@ -186,6 +186,10 @@
             RenderFrameHostManager::Delegate* manager_delegate,
             PageDelegate* page_delegate,
             Type type);
+
+  FrameTree(const FrameTree&) = delete;
+  FrameTree& operator=(const FrameTree&) = delete;
+
   ~FrameTree();
 
   // Initializes the main frame for this FrameTree. That is it creates the
@@ -478,8 +482,6 @@
   // Whether Shutdown() was called.
   bool was_shut_down_ = false;
 #endif
-
-  DISALLOW_COPY_AND_ASSIGN(FrameTree);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/frame_tree_node.h b/content/browser/renderer_host/frame_tree_node.h
index 32382cb2b..95b47dd 100644
--- a/content/browser/renderer_host/frame_tree_node.h
+++ b/content/browser/renderer_host/frame_tree_node.h
@@ -89,6 +89,9 @@
       blink::mojom::FrameOwnerElementType owner_type,
       const blink::FramePolicy& frame_owner);
 
+  FrameTreeNode(const FrameTreeNode&) = delete;
+  FrameTreeNode& operator=(const FrameTreeNode&) = delete;
+
   ~FrameTreeNode();
 
   void AddObserver(Observer* observer);
@@ -725,8 +728,6 @@
   // before the RenderFrameHostManager's destructor runs.  See also
   // https://crbug.com/1157988.
   RenderFrameHostManager render_manager_;
-
-  DISALLOW_COPY_AND_ASSIGN(FrameTreeNode);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/frame_tree_node_blame_context.h b/content/browser/renderer_host/frame_tree_node_blame_context.h
index f028cb6..a4481eb8 100644
--- a/content/browser/renderer_host/frame_tree_node_blame_context.h
+++ b/content/browser/renderer_host/frame_tree_node_blame_context.h
@@ -26,12 +26,15 @@
 class FrameTreeNodeBlameContext : public base::trace_event::BlameContext {
  public:
   FrameTreeNodeBlameContext(int node_id, FrameTreeNode* parent);
+
+  FrameTreeNodeBlameContext(const FrameTreeNodeBlameContext&) = delete;
+  FrameTreeNodeBlameContext& operator=(const FrameTreeNodeBlameContext&) =
+      delete;
+
   ~FrameTreeNodeBlameContext() override;
 
  private:
   void AsValueInto(base::trace_event::TracedValue* value) override;
-
-  DISALLOW_COPY_AND_ASSIGN(FrameTreeNodeBlameContext);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/frame_tree_unittest.cc b/content/browser/renderer_host/frame_tree_unittest.cc
index d8bd5fd..77f94db9 100644
--- a/content/browser/renderer_host/frame_tree_unittest.cc
+++ b/content/browser/renderer_host/frame_tree_unittest.cc
@@ -75,6 +75,10 @@
   explicit TreeWalkingWebContentsLogger(WebContents* web_contents)
       : WebContentsObserver(web_contents) {}
 
+  TreeWalkingWebContentsLogger(const TreeWalkingWebContentsLogger&) = delete;
+  TreeWalkingWebContentsLogger& operator=(const TreeWalkingWebContentsLogger&) =
+      delete;
+
   ~TreeWalkingWebContentsLogger() override {
     EXPECT_EQ("", log_) << "Activity logged that was not expected";
   }
@@ -123,8 +127,6 @@
   }
 
   std::string log_;
-
-  DISALLOW_COPY_AND_ASSIGN(TreeWalkingWebContentsLogger);
 };
 
 }  // namespace
diff --git a/content/browser/renderer_host/input/autoscroll_browsertest.cc b/content/browser/renderer_host/input/autoscroll_browsertest.cc
index 3d7d8b7..b508890 100644
--- a/content/browser/renderer_host/input/autoscroll_browsertest.cc
+++ b/content/browser/renderer_host/input/autoscroll_browsertest.cc
@@ -89,6 +89,10 @@
 class AutoscrollBrowserTest : public ContentBrowserTest {
  public:
   AutoscrollBrowserTest() {}
+
+  AutoscrollBrowserTest(const AutoscrollBrowserTest&) = delete;
+  AutoscrollBrowserTest& operator=(const AutoscrollBrowserTest&) = delete;
+
   ~AutoscrollBrowserTest() override {}
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
@@ -166,9 +170,6 @@
       observer.WaitForMetadataChange();
     }
   }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(AutoscrollBrowserTest);
 };
 
 // We don't plan on supporting middle click autoscroll on Android.
diff --git a/content/browser/renderer_host/input/composited_scrolling_browsertest.cc b/content/browser/renderer_host/input/composited_scrolling_browsertest.cc
index 95382e9..06570788 100644
--- a/content/browser/renderer_host/input/composited_scrolling_browsertest.cc
+++ b/content/browser/renderer_host/input/composited_scrolling_browsertest.cc
@@ -72,6 +72,11 @@
         blink::features::kResamplingScrollEvents);
   }
 
+  CompositedScrollingBrowserTest(const CompositedScrollingBrowserTest&) =
+      delete;
+  CompositedScrollingBrowserTest& operator=(
+      const CompositedScrollingBrowserTest&) = delete;
+
   ~CompositedScrollingBrowserTest() override = default;
 
   void SetUpCommandLine(base::CommandLine* cmd) override {
@@ -163,8 +168,6 @@
  private:
   base::test::ScopedFeatureList scoped_feature_list_;
   scoped_refptr<MessageLoopRunner> runner_;
-
-  DISALLOW_COPY_AND_ASSIGN(CompositedScrollingBrowserTest);
 };
 
 // Verify transforming a scroller doesn't prevent it from scrolling. See
diff --git a/content/browser/renderer_host/input/compositor_event_ack_browsertest.cc b/content/browser/renderer_host/input/compositor_event_ack_browsertest.cc
index ecdbec25..8eb7a5bc 100644
--- a/content/browser/renderer_host/input/compositor_event_ack_browsertest.cc
+++ b/content/browser/renderer_host/input/compositor_event_ack_browsertest.cc
@@ -110,6 +110,11 @@
 class CompositorEventAckBrowserTest : public ContentBrowserTest {
  public:
   CompositorEventAckBrowserTest() {}
+
+  CompositorEventAckBrowserTest(const CompositorEventAckBrowserTest&) = delete;
+  CompositorEventAckBrowserTest& operator=(
+      const CompositorEventAckBrowserTest&) = delete;
+
   ~CompositorEventAckBrowserTest() override {}
 
   RenderWidgetHostImpl* GetWidgetHost() {
@@ -231,9 +236,6 @@
       observer.WaitForMetadataChange();
     }
   }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(CompositorEventAckBrowserTest);
 };
 
 IN_PROC_BROWSER_TEST_F(CompositorEventAckBrowserTest, MouseWheel) {
diff --git a/content/browser/renderer_host/input/fling_browsertest.cc b/content/browser/renderer_host/input/fling_browsertest.cc
index 8ab8be8..24d1c0e 100644
--- a/content/browser/renderer_host/input/fling_browsertest.cc
+++ b/content/browser/renderer_host/input/fling_browsertest.cc
@@ -57,6 +57,11 @@
 class BrowserSideFlingBrowserTest : public ContentBrowserTest {
  public:
   BrowserSideFlingBrowserTest() {}
+
+  BrowserSideFlingBrowserTest(const BrowserSideFlingBrowserTest&) = delete;
+  BrowserSideFlingBrowserTest& operator=(const BrowserSideFlingBrowserTest&) =
+      delete;
+
   ~BrowserSideFlingBrowserTest() override {}
 
   void OnSyntheticGestureCompleted(SyntheticGesture::Result result) {
@@ -297,9 +302,6 @@
   std::unique_ptr<base::RunLoop> run_loop_;
   RenderWidgetHostViewBase* child_view_ = nullptr;
   RenderWidgetHostViewBase* root_view_ = nullptr;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(BrowserSideFlingBrowserTest);
 };
 
 // On Mac we don't have any touchscreen/touchpad fling events (GFS/GFC).
@@ -546,6 +548,12 @@
 class PhysicsBasedFlingCurveBrowserTest : public BrowserSideFlingBrowserTest {
  public:
   PhysicsBasedFlingCurveBrowserTest() {}
+
+  PhysicsBasedFlingCurveBrowserTest(const PhysicsBasedFlingCurveBrowserTest&) =
+      delete;
+  PhysicsBasedFlingCurveBrowserTest& operator=(
+      const PhysicsBasedFlingCurveBrowserTest&) = delete;
+
   ~PhysicsBasedFlingCurveBrowserTest() override {}
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
@@ -556,7 +564,6 @@
 
  private:
   base::test::ScopedFeatureList scoped_feature_list_;
-  DISALLOW_COPY_AND_ASSIGN(PhysicsBasedFlingCurveBrowserTest);
 };
 
 IN_PROC_BROWSER_TEST_F(PhysicsBasedFlingCurveBrowserTest,
diff --git a/content/browser/renderer_host/input/fling_controller.h b/content/browser/renderer_host/input/fling_controller.h
index 98bd3f7..b1b84341 100644
--- a/content/browser/renderer_host/input/fling_controller.h
+++ b/content/browser/renderer_host/input/fling_controller.h
@@ -75,6 +75,9 @@
                   FlingControllerSchedulerClient* scheduler_client,
                   const Config& config);
 
+  FlingController(const FlingController&) = delete;
+  FlingController& operator=(const FlingController&) = delete;
+
   ~FlingController();
 
   // Used to progress an active fling on every begin frame.
@@ -191,8 +194,6 @@
   bool last_wheel_event_consumed_ = false;
 
   base::WeakPtrFactory<FlingController> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(FlingController);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/fling_controller_unittest.cc b/content/browser/renderer_host/input/fling_controller_unittest.cc
index f308e0f..353d2f0 100644
--- a/content/browser/renderer_host/input/fling_controller_unittest.cc
+++ b/content/browser/renderer_host/input/fling_controller_unittest.cc
@@ -50,6 +50,9 @@
       : needs_begin_frame_for_fling_progress_(GetParam()),
         task_environment_(base::test::TaskEnvironment::MainThreadType::UI) {}
 
+  FlingControllerTest(const FlingControllerTest&) = delete;
+  FlingControllerTest& operator=(const FlingControllerTest&) = delete;
+
   ~FlingControllerTest() override {}
 
   void SetUp() override {
@@ -226,7 +229,6 @@
   // https://crrev.com/c/1181521.
   bool needs_begin_frame_for_fling_progress_;
   base::test::TaskEnvironment task_environment_;
-  DISALLOW_COPY_AND_ASSIGN(FlingControllerTest);
 };
 
 INSTANTIATE_TEST_SUITE_P(All, FlingControllerTest, testing::Bool());
@@ -760,11 +762,15 @@
         features::kExperimentalFlingAnimation);
   }
 
+  FlingControllerWithPhysicsBasedFlingTest(
+      const FlingControllerWithPhysicsBasedFlingTest&) = delete;
+  FlingControllerWithPhysicsBasedFlingTest& operator=(
+      const FlingControllerWithPhysicsBasedFlingTest&) = delete;
+
   ~FlingControllerWithPhysicsBasedFlingTest() override = default;
 
  private:
   base::test::ScopedFeatureList scoped_feature_list_;
-  DISALLOW_COPY_AND_ASSIGN(FlingControllerWithPhysicsBasedFlingTest);
 };
 
 INSTANTIATE_TEST_SUITE_P(All,
diff --git a/content/browser/renderer_host/input/fling_scheduler.h b/content/browser/renderer_host/input/fling_scheduler.h
index 7e263503..4380bbe 100644
--- a/content/browser/renderer_host/input/fling_scheduler.h
+++ b/content/browser/renderer_host/input/fling_scheduler.h
@@ -21,6 +21,10 @@
                                       private ui::CompositorAnimationObserver {
  public:
   FlingScheduler(RenderWidgetHostImpl* host);
+
+  FlingScheduler(const FlingScheduler&) = delete;
+  FlingScheduler& operator=(const FlingScheduler&) = delete;
+
   ~FlingScheduler() override;
 
   // FlingControllerSchedulerClient
@@ -43,8 +47,6 @@
   // ui::CompositorAnimationObserver
   void OnAnimationStep(base::TimeTicks timestamp) override;
   void OnCompositingShuttingDown(ui::Compositor* compositor) override;
-
-  DISALLOW_COPY_AND_ASSIGN(FlingScheduler);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/fling_scheduler_android.h b/content/browser/renderer_host/input/fling_scheduler_android.h
index 3b54e4e..6eefd17 100644
--- a/content/browser/renderer_host/input/fling_scheduler_android.h
+++ b/content/browser/renderer_host/input/fling_scheduler_android.h
@@ -18,6 +18,10 @@
                                              public ui::WindowAndroidObserver {
  public:
   explicit FlingSchedulerAndroid(RenderWidgetHostImpl* host);
+
+  FlingSchedulerAndroid(const FlingSchedulerAndroid&) = delete;
+  FlingSchedulerAndroid& operator=(const FlingSchedulerAndroid&) = delete;
+
   ~FlingSchedulerAndroid() override;
 
   // FlingControllerSchedulerClient
@@ -47,8 +51,6 @@
   void OnActivityStarted() override {}
 
   ui::WindowAndroid* observed_window_ = nullptr;
-
-  DISALLOW_COPY_AND_ASSIGN(FlingSchedulerAndroid);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/fling_scheduler_mac.h b/content/browser/renderer_host/input/fling_scheduler_mac.h
index 21c180c..d84d7d4 100644
--- a/content/browser/renderer_host/input/fling_scheduler_mac.h
+++ b/content/browser/renderer_host/input/fling_scheduler_mac.h
@@ -14,12 +14,14 @@
 class CONTENT_EXPORT FlingSchedulerMac : public FlingScheduler {
  public:
   FlingSchedulerMac(RenderWidgetHostImpl* host);
+
+  FlingSchedulerMac(const FlingSchedulerMac&) = delete;
+  FlingSchedulerMac& operator=(const FlingSchedulerMac&) = delete;
+
   ~FlingSchedulerMac() override;
 
  private:
   ui::Compositor* GetCompositor() override;
-
-  DISALLOW_COPY_AND_ASSIGN(FlingSchedulerMac);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/gesture_event_queue.h b/content/browser/renderer_host/input/gesture_event_queue.h
index d5d5eff..683480b7 100644
--- a/content/browser/renderer_host/input/gesture_event_queue.h
+++ b/content/browser/renderer_host/input/gesture_event_queue.h
@@ -76,6 +76,10 @@
                     FlingControllerEventSenderClient* fling_event_sender_client,
                     FlingControllerSchedulerClient* fling_scheduler_client,
                     const Config& config);
+
+  GestureEventQueue(const GestureEventQueue&) = delete;
+  GestureEventQueue& operator=(const GestureEventQueue&) = delete;
+
   ~GestureEventQueue();
 
   // Allow the fling controller to observe the gesture event. Returns true if
@@ -215,8 +219,6 @@
   // True when the last GSE event is either in the debouncing_deferral_queue_ or
   // pushed to the queue and dropped from it later on.
   bool scroll_end_filtered_by_deboucing_deferral_queue_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(GestureEventQueue);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/input_device_change_observer.h b/content/browser/renderer_host/input/input_device_change_observer.h
index f595896..41642c85 100644
--- a/content/browser/renderer_host/input/input_device_change_observer.h
+++ b/content/browser/renderer_host/input/input_device_change_observer.h
@@ -22,6 +22,11 @@
     : public ui::InputDeviceEventObserver {
  public:
   InputDeviceChangeObserver(RenderViewHostImpl* rvh);
+
+  InputDeviceChangeObserver(const InputDeviceChangeObserver&) = delete;
+  InputDeviceChangeObserver& operator=(const InputDeviceChangeObserver&) =
+      delete;
+
   ~InputDeviceChangeObserver() override;
 
   // InputDeviceEventObserver public overrides.
@@ -29,7 +34,6 @@
 
  private:
   RenderViewHostImpl* render_view_host_impl_;
-  DISALLOW_COPY_AND_ASSIGN(InputDeviceChangeObserver);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/input_event_browsertest.cc b/content/browser/renderer_host/input/input_event_browsertest.cc
index dc08a47..01d9428 100644
--- a/content/browser/renderer_host/input/input_event_browsertest.cc
+++ b/content/browser/renderer_host/input/input_event_browsertest.cc
@@ -64,6 +64,10 @@
 class InputEventBrowserTest : public ContentBrowserTest {
  public:
   InputEventBrowserTest() = default;
+
+  InputEventBrowserTest(const InputEventBrowserTest&) = delete;
+  InputEventBrowserTest& operator=(const InputEventBrowserTest&) = delete;
+
   ~InputEventBrowserTest() override = default;
 
   RenderWidgetHostImpl* GetWidgetHost() {
@@ -204,8 +208,6 @@
 
  private:
   std::unique_ptr<RenderFrameSubmissionObserver> frame_observer_;
-
-  DISALLOW_COPY_AND_ASSIGN(InputEventBrowserTest);
 };
 
 #if defined(OS_ANDROID)
diff --git a/content/browser/renderer_host/input/input_injector_impl.h b/content/browser/renderer_host/input/input_injector_impl.h
index 812a05f..6595ce8 100644
--- a/content/browser/renderer_host/input/input_injector_impl.h
+++ b/content/browser/renderer_host/input/input_injector_impl.h
@@ -18,6 +18,10 @@
 class CONTENT_EXPORT InputInjectorImpl : public mojom::InputInjector {
  public:
   explicit InputInjectorImpl(base::WeakPtr<RenderFrameHostImpl> frame_host);
+
+  InputInjectorImpl(const InputInjectorImpl&) = delete;
+  InputInjectorImpl& operator=(const InputInjectorImpl&) = delete;
+
   ~InputInjectorImpl() override;
 
   static void Create(base::WeakPtr<RenderFrameHostImpl> frame_host,
@@ -44,8 +48,6 @@
       base::OnceCallback<void(SyntheticGesture::Result)> callback);
 
   base::WeakPtr<RenderFrameHostImpl> frame_host_;
-
-  DISALLOW_COPY_AND_ASSIGN(InputInjectorImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/input_router_impl.h b/content/browser/renderer_host/input/input_router_impl.h
index aea19ed..cbfb8ca9 100644
--- a/content/browser/renderer_host/input/input_router_impl.h
+++ b/content/browser/renderer_host/input/input_router_impl.h
@@ -62,6 +62,10 @@
                   InputDispositionHandler* disposition_handler,
                   FlingControllerSchedulerClient* fling_scheduler_client,
                   const Config& config);
+
+  InputRouterImpl(const InputRouterImpl&) = delete;
+  InputRouterImpl& operator=(const InputRouterImpl&) = delete;
+
   ~InputRouterImpl() override;
 
   // InputRouter
@@ -256,8 +260,6 @@
 
   base::WeakPtr<InputRouterImpl> weak_this_;
   base::WeakPtrFactory<InputRouterImpl> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(InputRouterImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/input_router_impl_unittest.cc b/content/browser/renderer_host/input/input_router_impl_unittest.cc
index 78e7ec5d..2c1cdb6a 100644
--- a/content/browser/renderer_host/input/input_router_impl_unittest.cc
+++ b/content/browser/renderer_host/input/input_router_impl_unittest.cc
@@ -1834,13 +1834,18 @@
           features::kTouchpadAsyncPinchEvents);
     }
   }
+
+  TouchpadPinchInputRouterImplTest(const TouchpadPinchInputRouterImplTest&) =
+      delete;
+  TouchpadPinchInputRouterImplTest& operator=(
+      const TouchpadPinchInputRouterImplTest&) = delete;
+
   ~TouchpadPinchInputRouterImplTest() = default;
 
   const bool async_events_enabled_;
 
  private:
   base::test::ScopedFeatureList scoped_feature_list_;
-  DISALLOW_COPY_AND_ASSIGN(TouchpadPinchInputRouterImplTest);
 };
 
 INSTANTIATE_TEST_SUITE_P(All,
diff --git a/content/browser/renderer_host/input/main_thread_event_queue_browsertest.cc b/content/browser/renderer_host/input/main_thread_event_queue_browsertest.cc
index e6f0f168e..e502b9e7 100644
--- a/content/browser/renderer_host/input/main_thread_event_queue_browsertest.cc
+++ b/content/browser/renderer_host/input/main_thread_event_queue_browsertest.cc
@@ -75,6 +75,12 @@
 class MainThreadEventQueueBrowserTest : public ContentBrowserTest {
  public:
   MainThreadEventQueueBrowserTest() {}
+
+  MainThreadEventQueueBrowserTest(const MainThreadEventQueueBrowserTest&) =
+      delete;
+  MainThreadEventQueueBrowserTest& operator=(
+      const MainThreadEventQueueBrowserTest&) = delete;
+
   ~MainThreadEventQueueBrowserTest() override {}
 
   RenderWidgetHostImpl* GetWidgetHost() {
@@ -188,9 +194,6 @@
     EXPECT_EQ(35, last_touch_x);
     EXPECT_EQ(40, last_touch_y);
   }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(MainThreadEventQueueBrowserTest);
 };
 
 // Disabled due to flaky test results: crbug.com/805666.
diff --git a/content/browser/renderer_host/input/mock_input_router.h b/content/browser/renderer_host/input/mock_input_router.h
index 255d81a..d2b54df 100644
--- a/content/browser/renderer_host/input/mock_input_router.h
+++ b/content/browser/renderer_host/input/mock_input_router.h
@@ -26,6 +26,10 @@
         send_touch_event_not_cancelled_(false),
         has_handlers_(false),
         client_(client) {}
+
+  MockInputRouter(const MockInputRouter&) = delete;
+  MockInputRouter& operator=(const MockInputRouter&) = delete;
+
   ~MockInputRouter() override {}
 
   // InputRouter:
@@ -62,8 +66,6 @@
 
  private:
   InputRouterClient* client_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockInputRouter);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/motion_event_web.h b/content/browser/renderer_host/input/motion_event_web.h
index 4a453b4..5da484e 100644
--- a/content/browser/renderer_host/input/motion_event_web.h
+++ b/content/browser/renderer_host/input/motion_event_web.h
@@ -19,6 +19,10 @@
 class CONTENT_EXPORT MotionEventWeb : public ui::MotionEvent {
  public:
   explicit MotionEventWeb(const blink::WebTouchEvent& event);
+
+  MotionEventWeb(const MotionEventWeb&) = delete;
+  MotionEventWeb& operator=(const MotionEventWeb&) = delete;
+
   ~MotionEventWeb() override;
 
   // ui::MotionEvent
@@ -49,8 +53,6 @@
   Action cached_action_;
   int cached_action_index_;
   const uint32_t unique_event_id_;
-
-  DISALLOW_COPY_AND_ASSIGN(MotionEventWeb);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/mouse_latency_browsertest.cc b/content/browser/renderer_host/input/mouse_latency_browsertest.cc
index f9e922c5b5..ad881ea 100644
--- a/content/browser/renderer_host/input/mouse_latency_browsertest.cc
+++ b/content/browser/renderer_host/input/mouse_latency_browsertest.cc
@@ -104,6 +104,11 @@
     RenderWidgetHostFactory::RegisterFactory(this);
   }
 
+  TracingRenderWidgetHostFactory(const TracingRenderWidgetHostFactory&) =
+      delete;
+  TracingRenderWidgetHostFactory& operator=(
+      const TracingRenderWidgetHostFactory&) = delete;
+
   ~TracingRenderWidgetHostFactory() override {
     RenderWidgetHostFactory::UnregisterFactory();
   }
@@ -117,14 +122,15 @@
     return std::make_unique<TracingRenderWidgetHost>(
         frame_tree, delegate, agent_scheduling_group, routing_id, hidden);
   }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(TracingRenderWidgetHostFactory);
 };
 
 class MouseLatencyBrowserTest : public ContentBrowserTest {
  public:
   MouseLatencyBrowserTest() {}
+
+  MouseLatencyBrowserTest(const MouseLatencyBrowserTest&) = delete;
+  MouseLatencyBrowserTest& operator=(const MouseLatencyBrowserTest&) = delete;
+
   ~MouseLatencyBrowserTest() override {}
 
   RenderWidgetHostImpl* GetWidgetHost() {
@@ -301,8 +307,6 @@
   std::unique_ptr<base::RunLoop> runner_;
   base::Value trace_data_;
   TracingRenderWidgetHostFactory widget_factory_;
-
-  DISALLOW_COPY_AND_ASSIGN(MouseLatencyBrowserTest);
 };
 
 // Ensures that LatencyInfo async slices are reported correctly for MouseUp and
diff --git a/content/browser/renderer_host/input/mouse_wheel_event_queue.h b/content/browser/renderer_host/input/mouse_wheel_event_queue.h
index c77ddcd5..396a1cf 100644
--- a/content/browser/renderer_host/input/mouse_wheel_event_queue.h
+++ b/content/browser/renderer_host/input/mouse_wheel_event_queue.h
@@ -26,12 +26,12 @@
     TRACE_EVENT_ASYNC_BEGIN0("input", "MouseWheelEventQueue::QueueEvent", this);
   }
 
+  QueuedWebMouseWheelEvent(const QueuedWebMouseWheelEvent&) = delete;
+  QueuedWebMouseWheelEvent& operator=(const QueuedWebMouseWheelEvent&) = delete;
+
   ~QueuedWebMouseWheelEvent() {
     TRACE_EVENT_ASYNC_END0("input", "MouseWheelEventQueue::QueueEvent", this);
   }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(QueuedWebMouseWheelEvent);
 };
 
 // Interface with which MouseWheelEventQueue can forward mouse wheel events,
@@ -77,6 +77,9 @@
   // generate Scroll[Begin|Update|End] on unhandled acknowledge events.
   MouseWheelEventQueue(MouseWheelEventQueueClient* client);
 
+  MouseWheelEventQueue(const MouseWheelEventQueue&) = delete;
+  MouseWheelEventQueue& operator=(const MouseWheelEventQueue&) = delete;
+
   ~MouseWheelEventQueue();
 
   // Adds an event to the queue. The event may be coalesced with previously
@@ -128,8 +131,6 @@
   bool send_wheel_events_async_;
 
   blink::WebGestureDevice scrolling_device_;
-
-  DISALLOW_COPY_AND_ASSIGN(MouseWheelEventQueue);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/mouse_wheel_phase_handler.h b/content/browser/renderer_host/input/mouse_wheel_phase_handler.h
index 873173f5..7334a2a 100644
--- a/content/browser/renderer_host/input/mouse_wheel_phase_handler.h
+++ b/content/browser/renderer_host/input/mouse_wheel_phase_handler.h
@@ -53,6 +53,10 @@
 class CONTENT_EXPORT MouseWheelPhaseHandler {
  public:
   MouseWheelPhaseHandler(RenderWidgetHostViewBase* const host_view);
+
+  MouseWheelPhaseHandler(const MouseWheelPhaseHandler&) = delete;
+  MouseWheelPhaseHandler& operator=(const MouseWheelPhaseHandler&) = delete;
+
   ~MouseWheelPhaseHandler() {}
 
   void AddPhaseIfNeededAndScheduleEndEvent(
@@ -128,8 +132,6 @@
   // phase = kPhaseEnded.
   base::TimeDelta max_time_between_phase_ended_and_momentum_phase_began_ =
       base::TimeDelta::FromMilliseconds(100);
-
-  DISALLOW_COPY_AND_ASSIGN(MouseWheelPhaseHandler);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/one_shot_timeout_monitor.h b/content/browser/renderer_host/input/one_shot_timeout_monitor.h
index 77643e8..8ca82fc 100644
--- a/content/browser/renderer_host/input/one_shot_timeout_monitor.h
+++ b/content/browser/renderer_host/input/one_shot_timeout_monitor.h
@@ -23,6 +23,10 @@
   // The timer starts upon construction.
   explicit OneShotTimeoutMonitor(TimeoutHandler timeout_handler,
                                  base::TimeDelta delay);
+
+  OneShotTimeoutMonitor(const OneShotTimeoutMonitor&) = delete;
+  OneShotTimeoutMonitor& operator=(const OneShotTimeoutMonitor&) = delete;
+
   ~OneShotTimeoutMonitor();
 
  private:
@@ -34,8 +38,6 @@
 
   // This timer runs to check if |time_when_considered_timed_out_| has past.
   base::OneShotTimer timeout_timer_;
-
-  DISALLOW_COPY_AND_ASSIGN(OneShotTimeoutMonitor);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/passthrough_touch_event_queue.h b/content/browser/renderer_host/input/passthrough_touch_event_queue.h
index caa3b58..960d362 100644
--- a/content/browser/renderer_host/input/passthrough_touch_event_queue.h
+++ b/content/browser/renderer_host/input/passthrough_touch_event_queue.h
@@ -91,6 +91,10 @@
   PassthroughTouchEventQueue(PassthroughTouchEventQueueClient* client,
                              const Config& config);
 
+  PassthroughTouchEventQueue(const PassthroughTouchEventQueue&) = delete;
+  PassthroughTouchEventQueue& operator=(const PassthroughTouchEventQueue&) =
+      delete;
+
   ~PassthroughTouchEventQueue();
 
   void QueueEvent(const TouchEventWithLatencyInfo& event);
@@ -272,8 +276,6 @@
   // What events types are allowed to bypass the filter.
   const std::string events_to_always_forward_;
   static const base::FeatureParam<std::string> kSkipTouchEventFilterType;
-
-  DISALLOW_COPY_AND_ASSIGN(PassthroughTouchEventQueue);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/render_widget_host_latency_tracker.h b/content/browser/renderer_host/input/render_widget_host_latency_tracker.h
index 9b6a53a..477de55 100644
--- a/content/browser/renderer_host/input/render_widget_host_latency_tracker.h
+++ b/content/browser/renderer_host/input/render_widget_host_latency_tracker.h
@@ -23,6 +23,12 @@
 class CONTENT_EXPORT RenderWidgetHostLatencyTracker {
  public:
   explicit RenderWidgetHostLatencyTracker(RenderWidgetHostDelegate* delegate);
+
+  RenderWidgetHostLatencyTracker(const RenderWidgetHostLatencyTracker&) =
+      delete;
+  RenderWidgetHostLatencyTracker& operator=(
+      const RenderWidgetHostLatencyTracker&) = delete;
+
   virtual ~RenderWidgetHostLatencyTracker();
 
   // Populates the LatencyInfo with relevant entries for latency tracking.
@@ -56,8 +62,6 @@
   bool touch_start_default_prevented_;
 
   RenderWidgetHostDelegate* render_widget_host_delegate_;
-
-  DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostLatencyTracker);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/render_widget_host_latency_tracker_unittest.cc b/content/browser/renderer_host/input/render_widget_host_latency_tracker_unittest.cc
index eafdf6d..87bd94f 100644
--- a/content/browser/renderer_host/input/render_widget_host_latency_tracker_unittest.cc
+++ b/content/browser/renderer_host/input/render_widget_host_latency_tracker_unittest.cc
@@ -79,13 +79,18 @@
     : public TestContentBrowserClient {
  public:
   RenderWidgetHostLatencyTrackerTestBrowserClient() {}
+
+  RenderWidgetHostLatencyTrackerTestBrowserClient(
+      const RenderWidgetHostLatencyTrackerTestBrowserClient&) = delete;
+  RenderWidgetHostLatencyTrackerTestBrowserClient& operator=(
+      const RenderWidgetHostLatencyTrackerTestBrowserClient&) = delete;
+
   ~RenderWidgetHostLatencyTrackerTestBrowserClient() override {}
 
   ukm::TestUkmRecorder* GetTestUkmRecorder() { return &test_ukm_recorder_; }
 
  private:
   ukm::TestAutoSetUkmRecorder test_ukm_recorder_;
-  DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostLatencyTrackerTestBrowserClient);
 };
 
 class RenderWidgetHostLatencyTrackerTest
diff --git a/content/browser/renderer_host/input/scroll_behavior_browsertest.cc b/content/browser/renderer_host/input/scroll_behavior_browsertest.cc
index f9e24af..f64c46c 100644
--- a/content/browser/renderer_host/input/scroll_behavior_browsertest.cc
+++ b/content/browser/renderer_host/input/scroll_behavior_browsertest.cc
@@ -118,6 +118,10 @@
  public:
   ScrollBehaviorBrowserTest() : disable_threaded_scrolling_(GetParam()) {}
 
+  ScrollBehaviorBrowserTest(const ScrollBehaviorBrowserTest&) = delete;
+  ScrollBehaviorBrowserTest& operator=(const ScrollBehaviorBrowserTest&) =
+      delete;
+
   ~ScrollBehaviorBrowserTest() override = default;
 
   RenderWidgetHostImpl* GetWidgetHost() {
@@ -239,8 +243,6 @@
 
   std::unique_ptr<base::RunLoop> run_loop_;
   bool disable_threaded_scrolling_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(ScrollBehaviorBrowserTest);
 };
 
 INSTANTIATE_TEST_SUITE_P(All, ScrollBehaviorBrowserTest, ::testing::Bool());
diff --git a/content/browser/renderer_host/input/scroll_latency_browsertest.cc b/content/browser/renderer_host/input/scroll_latency_browsertest.cc
index 6792c7b..bffffa5 100644
--- a/content/browser/renderer_host/input/scroll_latency_browsertest.cc
+++ b/content/browser/renderer_host/input/scroll_latency_browsertest.cc
@@ -75,6 +75,10 @@
 class ScrollLatencyBrowserTest : public ContentBrowserTest {
  public:
   ScrollLatencyBrowserTest() {}
+
+  ScrollLatencyBrowserTest(const ScrollLatencyBrowserTest&) = delete;
+  ScrollLatencyBrowserTest& operator=(const ScrollLatencyBrowserTest&) = delete;
+
   ~ScrollLatencyBrowserTest() override {}
 
   RenderWidgetHostImpl* GetWidgetHost() {
@@ -204,8 +208,6 @@
  protected:
   base::HistogramTester histogram_tester_;
   uint32_t visual_state_callback_count_ = 0;
-
-  DISALLOW_COPY_AND_ASSIGN(ScrollLatencyBrowserTest);
 };
 
 // Disabled due to flakiness https://crbug.com/1163246.
diff --git a/content/browser/renderer_host/input/stylus_text_selector.h b/content/browser/renderer_host/input/stylus_text_selector.h
index 96142c3..9ec28dcf 100644
--- a/content/browser/renderer_host/input/stylus_text_selector.h
+++ b/content/browser/renderer_host/input/stylus_text_selector.h
@@ -43,6 +43,10 @@
 class CONTENT_EXPORT StylusTextSelector : public ui::SimpleGestureListener {
  public:
   explicit StylusTextSelector(StylusTextSelectorClient* client);
+
+  StylusTextSelector(const StylusTextSelector&) = delete;
+  StylusTextSelector& operator=(const StylusTextSelector&) = delete;
+
   ~StylusTextSelector() override;
 
   // This should be called before |event| is seen by the platform gesture
@@ -75,8 +79,6 @@
   float anchor_x_;
   float anchor_y_;
   std::unique_ptr<ui::GestureDetector> gesture_detector_;
-
-  DISALLOW_COPY_AND_ASSIGN(StylusTextSelector);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/synthetic_gesture.h b/content/browser/renderer_host/input/synthetic_gesture.h
index e6f8bb5..15e33d25 100644
--- a/content/browser/renderer_host/input/synthetic_gesture.h
+++ b/content/browser/renderer_host/input/synthetic_gesture.h
@@ -31,6 +31,10 @@
 class CONTENT_EXPORT SyntheticGesture {
  public:
   SyntheticGesture();
+
+  SyntheticGesture(const SyntheticGesture&) = delete;
+  SyntheticGesture& operator=(const SyntheticGesture&) = delete;
+
   virtual ~SyntheticGesture();
 
   static std::unique_ptr<SyntheticGesture> Create(
@@ -62,7 +66,6 @@
   virtual bool AllowHighFrequencyDispatch() const;
 
  protected:
-  DISALLOW_COPY_AND_ASSIGN(SyntheticGesture);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/synthetic_gesture_controller.h b/content/browser/renderer_host/input/synthetic_gesture_controller.h
index 4765002..45f80ee 100644
--- a/content/browser/renderer_host/input/synthetic_gesture_controller.h
+++ b/content/browser/renderer_host/input/synthetic_gesture_controller.h
@@ -39,6 +39,11 @@
   SyntheticGestureController(
       Delegate* delegate,
       std::unique_ptr<SyntheticGestureTarget> gesture_target);
+
+  SyntheticGestureController(const SyntheticGestureController&) = delete;
+  SyntheticGestureController& operator=(const SyntheticGestureController&) =
+      delete;
+
   virtual ~SyntheticGestureController();
 
   typedef base::OnceCallback<void(SyntheticGesture::Result)>
@@ -84,6 +89,10 @@
   class GestureAndCallbackQueue {
   public:
     GestureAndCallbackQueue();
+
+    GestureAndCallbackQueue(const GestureAndCallbackQueue&) = delete;
+    GestureAndCallbackQueue& operator=(const GestureAndCallbackQueue&) = delete;
+
     ~GestureAndCallbackQueue();
     void Push(std::unique_ptr<SyntheticGesture> gesture,
               OnGestureCompleteCallback callback,
@@ -132,8 +141,6 @@
     std::vector<std::unique_ptr<SyntheticGesture>> gestures_;
     base::queue<OnGestureCompleteCallback> callbacks_;
     base::queue<bool> complete_immediately_;
-
-    DISALLOW_COPY_AND_ASSIGN(GestureAndCallbackQueue);
   } pending_gesture_queue_;
 
   // The first time we start sending a gesture, the renderer may not yet be
@@ -150,8 +157,6 @@
 
   base::RepeatingTimer dispatch_timer_;
   base::WeakPtrFactory<SyntheticGestureController> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(SyntheticGestureController);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/synthetic_gesture_controller_unittest.cc b/content/browser/renderer_host/input/synthetic_gesture_controller_unittest.cc
index f532add..e82fd57 100644
--- a/content/browser/renderer_host/input/synthetic_gesture_controller_unittest.cc
+++ b/content/browser/renderer_host/input/synthetic_gesture_controller_unittest.cc
@@ -750,13 +750,17 @@
     : public SyntheticGestureController::Delegate {
  public:
   DummySyntheticGestureControllerDelegate() {}
+
+  DummySyntheticGestureControllerDelegate(
+      const DummySyntheticGestureControllerDelegate&) = delete;
+  DummySyntheticGestureControllerDelegate& operator=(
+      const DummySyntheticGestureControllerDelegate&) = delete;
+
   ~DummySyntheticGestureControllerDelegate() override {}
 
  private:
   // SyntheticGestureController::Delegate:
   bool HasGestureStopped() override { return true; }
-
-  DISALLOW_COPY_AND_ASSIGN(DummySyntheticGestureControllerDelegate);
 };
 
 }  // namespace
diff --git a/content/browser/renderer_host/input/synthetic_gesture_target_android.h b/content/browser/renderer_host/input/synthetic_gesture_target_android.h
index 51011e3e..1131b268 100644
--- a/content/browser/renderer_host/input/synthetic_gesture_target_android.h
+++ b/content/browser/renderer_host/input/synthetic_gesture_target_android.h
@@ -24,6 +24,11 @@
  public:
   SyntheticGestureTargetAndroid(RenderWidgetHostImpl* host,
                                 ui::ViewAndroid* view);
+
+  SyntheticGestureTargetAndroid(const SyntheticGestureTargetAndroid&) = delete;
+  SyntheticGestureTargetAndroid& operator=(
+      const SyntheticGestureTargetAndroid&) = delete;
+
   ~SyntheticGestureTargetAndroid() override;
 
   // SyntheticGestureTargetBase:
@@ -57,8 +62,6 @@
 
   ui::ViewAndroid* const view_;
   base::android::ScopedJavaGlobalRef<jobject> java_ref_;
-
-  DISALLOW_COPY_AND_ASSIGN(SyntheticGestureTargetAndroid);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/synthetic_gesture_target_base.h b/content/browser/renderer_host/input/synthetic_gesture_target_base.h
index eef661b3..1f05fa3 100644
--- a/content/browser/renderer_host/input/synthetic_gesture_target_base.h
+++ b/content/browser/renderer_host/input/synthetic_gesture_target_base.h
@@ -29,6 +29,11 @@
 class SyntheticGestureTargetBase : public SyntheticGestureTarget {
  public:
   explicit SyntheticGestureTargetBase(RenderWidgetHostImpl* host);
+
+  SyntheticGestureTargetBase(const SyntheticGestureTargetBase&) = delete;
+  SyntheticGestureTargetBase& operator=(const SyntheticGestureTargetBase&) =
+      delete;
+
   ~SyntheticGestureTargetBase() override;
 
   virtual void DispatchWebTouchEventToPlatform(
@@ -67,8 +72,6 @@
   bool PointIsWithinContents(gfx::PointF point) const;
 
   RenderWidgetHostImpl* host_;
-
-  DISALLOW_COPY_AND_ASSIGN(SyntheticGestureTargetBase);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/synthetic_mouse_driver.h b/content/browser/renderer_host/input/synthetic_mouse_driver.h
index 5f316d6e..bc6ffe2 100644
--- a/content/browser/renderer_host/input/synthetic_mouse_driver.h
+++ b/content/browser/renderer_host/input/synthetic_mouse_driver.h
@@ -14,6 +14,10 @@
 class CONTENT_EXPORT SyntheticMouseDriver : public SyntheticPointerDriver {
  public:
   SyntheticMouseDriver();
+
+  SyntheticMouseDriver(const SyntheticMouseDriver&) = delete;
+  SyntheticMouseDriver& operator=(const SyntheticMouseDriver&) = delete;
+
   ~SyntheticMouseDriver() override;
 
   void DispatchEvent(SyntheticGestureTarget* target,
@@ -73,8 +77,6 @@
   base::TimeTicks last_mouse_click_time_ = base::TimeTicks::Now();
   float last_x_ = 0;
   float last_y_ = 0;
-
-  DISALLOW_COPY_AND_ASSIGN(SyntheticMouseDriver);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/synthetic_pen_driver.h b/content/browser/renderer_host/input/synthetic_pen_driver.h
index 428aaba..322dc9c 100644
--- a/content/browser/renderer_host/input/synthetic_pen_driver.h
+++ b/content/browser/renderer_host/input/synthetic_pen_driver.h
@@ -14,12 +14,13 @@
 class CONTENT_EXPORT SyntheticPenDriver : public SyntheticMouseDriver {
  public:
   SyntheticPenDriver();
+
+  SyntheticPenDriver(const SyntheticPenDriver&) = delete;
+  SyntheticPenDriver& operator=(const SyntheticPenDriver&) = delete;
+
   ~SyntheticPenDriver() override;
 
   void Leave(int index = 0) override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(SyntheticPenDriver);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/synthetic_pinch_gesture.h b/content/browser/renderer_host/input/synthetic_pinch_gesture.h
index f68000d..5e30569f 100644
--- a/content/browser/renderer_host/input/synthetic_pinch_gesture.h
+++ b/content/browser/renderer_host/input/synthetic_pinch_gesture.h
@@ -22,6 +22,10 @@
 class CONTENT_EXPORT SyntheticPinchGesture : public SyntheticGesture {
  public:
   explicit SyntheticPinchGesture(const SyntheticPinchGestureParams& params);
+
+  SyntheticPinchGesture(const SyntheticPinchGesture&) = delete;
+  SyntheticPinchGesture& operator=(const SyntheticPinchGesture&) = delete;
+
   ~SyntheticPinchGesture() override;
 
   SyntheticGesture::Result ForwardInputEvents(
@@ -33,8 +37,6 @@
  private:
   SyntheticPinchGestureParams params_;
   std::unique_ptr<SyntheticGesture> lazy_gesture_;
-
-  DISALLOW_COPY_AND_ASSIGN(SyntheticPinchGesture);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/synthetic_pointer_action.h b/content/browser/renderer_host/input/synthetic_pointer_action.h
index 5036d4c..1e4e322 100644
--- a/content/browser/renderer_host/input/synthetic_pointer_action.h
+++ b/content/browser/renderer_host/input/synthetic_pointer_action.h
@@ -24,6 +24,10 @@
  public:
   explicit SyntheticPointerAction(
       const SyntheticPointerActionListParams& params);
+
+  SyntheticPointerAction(const SyntheticPointerAction&) = delete;
+  SyntheticPointerAction& operator=(const SyntheticPointerAction&) = delete;
+
   ~SyntheticPointerAction() override;
 
   SyntheticGesture::Result ForwardInputEvents(
@@ -59,8 +63,6 @@
   content::mojom::GestureSourceType gesture_source_type_;
   GestureState state_;
   size_t num_actions_dispatched_;
-
-  DISALLOW_COPY_AND_ASSIGN(SyntheticPointerAction);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/synthetic_pointer_driver.h b/content/browser/renderer_host/input/synthetic_pointer_driver.h
index 4bd49d8..9eeb621 100644
--- a/content/browser/renderer_host/input/synthetic_pointer_driver.h
+++ b/content/browser/renderer_host/input/synthetic_pointer_driver.h
@@ -19,6 +19,10 @@
 class CONTENT_EXPORT SyntheticPointerDriver {
  public:
   SyntheticPointerDriver();
+
+  SyntheticPointerDriver(const SyntheticPointerDriver&) = delete;
+  SyntheticPointerDriver& operator=(const SyntheticPointerDriver&) = delete;
+
   virtual ~SyntheticPointerDriver();
 
   static std::unique_ptr<SyntheticPointerDriver> Create(
@@ -69,9 +73,6 @@
   // a valid sequence of pointer actions.
   virtual bool UserInputCheck(
       const SyntheticPointerActionParams& params) const = 0;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(SyntheticPointerDriver);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/synthetic_smooth_move_gesture.h b/content/browser/renderer_host/input/synthetic_smooth_move_gesture.h
index c6b35af..f85e5e7 100644
--- a/content/browser/renderer_host/input/synthetic_smooth_move_gesture.h
+++ b/content/browser/renderer_host/input/synthetic_smooth_move_gesture.h
@@ -56,6 +56,11 @@
 class CONTENT_EXPORT SyntheticSmoothMoveGesture : public SyntheticGesture {
  public:
   explicit SyntheticSmoothMoveGesture(SyntheticSmoothMoveGestureParams params);
+
+  SyntheticSmoothMoveGesture(const SyntheticSmoothMoveGesture&) = delete;
+  SyntheticSmoothMoveGesture& operator=(const SyntheticSmoothMoveGesture&) =
+      delete;
+
   ~SyntheticSmoothMoveGesture() override;
 
   // SyntheticGesture implementation:
@@ -116,8 +121,6 @@
   base::TimeTicks current_move_segment_stop_time_;
   // Used to set phase information for synthetic wheel events.
   bool needs_scroll_begin_ = true;
-
-  DISALLOW_COPY_AND_ASSIGN(SyntheticSmoothMoveGesture);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/synthetic_tap_gesture.h b/content/browser/renderer_host/input/synthetic_tap_gesture.h
index 94ec1c5..739fd4ec 100644
--- a/content/browser/renderer_host/input/synthetic_tap_gesture.h
+++ b/content/browser/renderer_host/input/synthetic_tap_gesture.h
@@ -17,6 +17,10 @@
 class CONTENT_EXPORT SyntheticTapGesture : public SyntheticGesture {
  public:
   explicit SyntheticTapGesture(const SyntheticTapGestureParams& params);
+
+  SyntheticTapGesture(const SyntheticTapGesture&) = delete;
+  SyntheticTapGesture& operator=(const SyntheticTapGesture&) = delete;
+
   ~SyntheticTapGesture() override;
 
   SyntheticGesture::Result ForwardInputEvents(
@@ -44,8 +48,6 @@
   base::TimeTicks start_time_;
   content::mojom::GestureSourceType gesture_source_type_;
   GestureState state_;
-
-  DISALLOW_COPY_AND_ASSIGN(SyntheticTapGesture);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/synthetic_touch_driver.h b/content/browser/renderer_host/input/synthetic_touch_driver.h
index 394fbede..ae83862d 100644
--- a/content/browser/renderer_host/input/synthetic_touch_driver.h
+++ b/content/browser/renderer_host/input/synthetic_touch_driver.h
@@ -17,6 +17,10 @@
  public:
   SyntheticTouchDriver();
   explicit SyntheticTouchDriver(blink::SyntheticWebTouchEvent touch_event);
+
+  SyntheticTouchDriver(const SyntheticTouchDriver&) = delete;
+  SyntheticTouchDriver& operator=(const SyntheticTouchDriver&) = delete;
+
   ~SyntheticTouchDriver() override;
 
   void DispatchEvent(SyntheticGestureTarget* target,
@@ -71,8 +75,6 @@
 
   blink::SyntheticWebTouchEvent touch_event_;
   PointerIdIndexMap pointer_id_map_;
-
-  DISALLOW_COPY_AND_ASSIGN(SyntheticTouchDriver);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/synthetic_touchpad_pinch_gesture.h b/content/browser/renderer_host/input/synthetic_touchpad_pinch_gesture.h
index d098339..feec79d7a 100644
--- a/content/browser/renderer_host/input/synthetic_touchpad_pinch_gesture.h
+++ b/content/browser/renderer_host/input/synthetic_touchpad_pinch_gesture.h
@@ -20,6 +20,11 @@
  public:
   explicit SyntheticTouchpadPinchGesture(
       const SyntheticPinchGestureParams& params);
+
+  SyntheticTouchpadPinchGesture(const SyntheticTouchpadPinchGesture&) = delete;
+  SyntheticTouchpadPinchGesture& operator=(
+      const SyntheticTouchpadPinchGesture&) = delete;
+
   ~SyntheticTouchpadPinchGesture() override;
 
   SyntheticGesture::Result ForwardInputEvents(
@@ -47,9 +52,6 @@
   base::TimeTicks start_time_;
   base::TimeTicks stop_time_;
   float current_scale_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(SyntheticTouchpadPinchGesture);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/synthetic_touchscreen_pinch_gesture.h b/content/browser/renderer_host/input/synthetic_touchscreen_pinch_gesture.h
index aa48b48..9aa478e 100644
--- a/content/browser/renderer_host/input/synthetic_touchscreen_pinch_gesture.h
+++ b/content/browser/renderer_host/input/synthetic_touchscreen_pinch_gesture.h
@@ -22,6 +22,12 @@
  public:
   explicit SyntheticTouchscreenPinchGesture(
       const SyntheticPinchGestureParams& params);
+
+  SyntheticTouchscreenPinchGesture(const SyntheticTouchscreenPinchGesture&) =
+      delete;
+  SyntheticTouchscreenPinchGesture& operator=(
+      const SyntheticTouchscreenPinchGesture&) = delete;
+
   ~SyntheticTouchscreenPinchGesture() override;
 
   SyntheticGesture::Result ForwardInputEvents(
@@ -58,9 +64,6 @@
   GestureState state_;
   base::TimeTicks start_time_;
   base::TimeTicks stop_time_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(SyntheticTouchscreenPinchGesture);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/tap_suppression_controller.h b/content/browser/renderer_host/input/tap_suppression_controller.h
index bcd8ba3..5239f91 100644
--- a/content/browser/renderer_host/input/tap_suppression_controller.h
+++ b/content/browser/renderer_host/input/tap_suppression_controller.h
@@ -30,6 +30,10 @@
   };
 
   TapSuppressionController(const Config& config);
+
+  TapSuppressionController(const TapSuppressionController&) = delete;
+  TapSuppressionController& operator=(const TapSuppressionController&) = delete;
+
   virtual ~TapSuppressionController();
 
   // Should be called whenever a GestureFlingCancel actually stopped a fling and
@@ -69,8 +73,6 @@
   // Replace the use of base::TimeTicks with an accurate event time when they
   // become available post http://crbug.com/119556.
   base::TimeTicks fling_cancel_time_;
-
-  DISALLOW_COPY_AND_ASSIGN(TapSuppressionController);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/tap_suppression_controller_unittest.cc b/content/browser/renderer_host/input/tap_suppression_controller_unittest.cc
index 502898b7..3867bd1 100644
--- a/content/browser/renderer_host/input/tap_suppression_controller_unittest.cc
+++ b/content/browser/renderer_host/input/tap_suppression_controller_unittest.cc
@@ -29,6 +29,10 @@
   MockTapSuppressionController(const TapSuppressionController::Config& config)
       : TapSuppressionController(config), last_actions_(NONE), time_() {}
 
+  MockTapSuppressionController(const MockTapSuppressionController&) = delete;
+  MockTapSuppressionController& operator=(const MockTapSuppressionController&) =
+      delete;
+
   ~MockTapSuppressionController() override {}
 
   void NotifyGestureFlingCancelStoppedFling() {
@@ -75,8 +79,6 @@
   int last_actions_;
 
   base::TimeTicks time_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockTapSuppressionController);
 };
 
 class TapSuppressionControllerTest : public testing::Test {
diff --git a/content/browser/renderer_host/input/timeout_monitor.h b/content/browser/renderer_host/input/timeout_monitor.h
index ff7ae6dc..1b62568 100644
--- a/content/browser/renderer_host/input/timeout_monitor.h
+++ b/content/browser/renderer_host/input/timeout_monitor.h
@@ -19,6 +19,10 @@
   typedef base::RepeatingClosure TimeoutHandler;
 
   explicit TimeoutMonitor(const TimeoutHandler& timeout_handler);
+
+  TimeoutMonitor(const TimeoutMonitor&) = delete;
+  TimeoutMonitor& operator=(const TimeoutMonitor&) = delete;
+
   ~TimeoutMonitor();
 
   // Schedule the timeout timer to fire at |delay| into the future. If a timeout
@@ -44,8 +48,6 @@
 
   // This timer runs to check if |time_when_considered_timed_out_| has past.
   base::OneShotTimer timeout_timer_;
-
-  DISALLOW_COPY_AND_ASSIGN(TimeoutMonitor);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/touch_action_browsertest.cc b/content/browser/renderer_host/input/touch_action_browsertest.cc
index c857333..0fabb4e3 100644
--- a/content/browser/renderer_host/input/touch_action_browsertest.cc
+++ b/content/browser/renderer_host/input/touch_action_browsertest.cc
@@ -141,6 +141,10 @@
 class TouchActionBrowserTest : public ContentBrowserTest {
  public:
   TouchActionBrowserTest() = default;
+
+  TouchActionBrowserTest(const TouchActionBrowserTest&) = delete;
+  TouchActionBrowserTest& operator=(const TouchActionBrowserTest&) = delete;
+
   ~TouchActionBrowserTest() override = default;
 
   RenderWidgetHostImpl* GetWidgetHost() {
@@ -472,8 +476,6 @@
  private:
   std::unique_ptr<RenderFrameSubmissionObserver> frame_observer_;
   std::unique_ptr<base::RunLoop> run_loop_;
-
-  DISALLOW_COPY_AND_ASSIGN(TouchActionBrowserTest);
 };
 
 #if !defined(NDEBUG) || defined(ADDRESS_SANITIZER) ||       \
diff --git a/content/browser/renderer_host/input/touch_action_filter.h b/content/browser/renderer_host/input/touch_action_filter.h
index 68446903..6c153b4f 100644
--- a/content/browser/renderer_host/input/touch_action_filter.h
+++ b/content/browser/renderer_host/input/touch_action_filter.h
@@ -33,6 +33,10 @@
 class CONTENT_EXPORT TouchActionFilter {
  public:
   TouchActionFilter();
+
+  TouchActionFilter(const TouchActionFilter&) = delete;
+  TouchActionFilter& operator=(const TouchActionFilter&) = delete;
+
   ~TouchActionFilter();
 
   // Returns kFilterGestureEventFiltered if the supplied gesture event should be
@@ -151,8 +155,6 @@
 
   // Debugging only.
   std::string gesture_sequence_;
-
-  DISALLOW_COPY_AND_ASSIGN(TouchActionFilter);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/touch_emulator.h b/content/browser/renderer_host/input/touch_emulator.h
index 7d6fd395..6a07eb0 100644
--- a/content/browser/renderer_host/input/touch_emulator.h
+++ b/content/browser/renderer_host/input/touch_emulator.h
@@ -41,6 +41,10 @@
   };
 
   TouchEmulator(TouchEmulatorClient* client, float device_scale_factor);
+
+  TouchEmulator(const TouchEmulator&) = delete;
+  TouchEmulator& operator=(const TouchEmulator&) = delete;
+
   ~TouchEmulator() override;
 
   void Enable(Mode mode, ui::GestureProviderConfigType config_type);
@@ -177,8 +181,6 @@
   bool pinch_gesture_active_;
 
   base::queue<base::OnceClosure> injected_touch_completion_callbacks_;
-
-  DISALLOW_COPY_AND_ASSIGN(TouchEmulator);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/touch_selection_controller_client_aura.cc b/content/browser/renderer_host/input/touch_selection_controller_client_aura.cc
index 10ef2b2..87c854e 100644
--- a/content/browser/renderer_host/input/touch_selection_controller_client_aura.cc
+++ b/content/browser/renderer_host/input/touch_selection_controller_client_aura.cc
@@ -67,6 +67,9 @@
     env->AddEventObserver(this, env, types);
   }
 
+  EnvEventObserver(const EnvEventObserver&) = delete;
+  EnvEventObserver& operator=(const EnvEventObserver&) = delete;
+
   ~EnvEventObserver() override {
     aura::Env::GetInstance()->RemoveEventObserver(this);
   }
@@ -99,8 +102,6 @@
 
   ui::TouchSelectionController* selection_controller_;
   aura::Window* window_;
-
-  DISALLOW_COPY_AND_ASSIGN(EnvEventObserver);
 };
 
 TouchSelectionControllerClientAura::TouchSelectionControllerClientAura(
diff --git a/content/browser/renderer_host/input/touch_selection_controller_client_aura.h b/content/browser/renderer_host/input/touch_selection_controller_client_aura.h
index f7551e7c..334ad348 100644
--- a/content/browser/renderer_host/input/touch_selection_controller_client_aura.h
+++ b/content/browser/renderer_host/input/touch_selection_controller_client_aura.h
@@ -27,6 +27,12 @@
       public TouchSelectionControllerClientManager {
  public:
   explicit TouchSelectionControllerClientAura(RenderWidgetHostViewAura* rwhva);
+
+  TouchSelectionControllerClientAura(
+      const TouchSelectionControllerClientAura&) = delete;
+  TouchSelectionControllerClientAura& operator=(
+      const TouchSelectionControllerClientAura&) = delete;
+
   ~TouchSelectionControllerClientAura() override;
 
   // Called when |rwhva_|'s window is moved, to update the quick menu's
@@ -140,8 +146,6 @@
 
   // An event observer that deactivates touch selection on certain input events.
   std::unique_ptr<EnvEventObserver> env_event_observer_;
-
-  DISALLOW_COPY_AND_ASSIGN(TouchSelectionControllerClientAura);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/touch_selection_controller_client_aura_browsertest.cc b/content/browser/renderer_host/input/touch_selection_controller_client_aura_browsertest.cc
index 4c6b0c47..6b124c3 100644
--- a/content/browser/renderer_host/input/touch_selection_controller_client_aura_browsertest.cc
+++ b/content/browser/renderer_host/input/touch_selection_controller_client_aura_browsertest.cc
@@ -63,6 +63,11 @@
 class TestTouchSelectionMenuRunner : public ui::TouchSelectionMenuRunner {
  public:
   TestTouchSelectionMenuRunner() : menu_opened_(false) {}
+
+  TestTouchSelectionMenuRunner(const TestTouchSelectionMenuRunner&) = delete;
+  TestTouchSelectionMenuRunner& operator=(const TestTouchSelectionMenuRunner&) =
+      delete;
+
   ~TestTouchSelectionMenuRunner() override {}
 
  private:
@@ -83,8 +88,6 @@
   bool IsRunning() const override { return menu_opened_; }
 
   bool menu_opened_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestTouchSelectionMenuRunner);
 };
 
 }  // namespace
@@ -99,6 +102,11 @@
     show_quick_menu_immediately_for_test_ = true;
   }
 
+  TestTouchSelectionControllerClientAura(
+      const TestTouchSelectionControllerClientAura&) = delete;
+  TestTouchSelectionControllerClientAura& operator=(
+      const TestTouchSelectionControllerClientAura&) = delete;
+
   ~TestTouchSelectionControllerClientAura() override {}
 
   void InitWaitForSelectionEvent(ui::SelectionEventType expected_event) {
@@ -128,13 +136,17 @@
 
   ui::SelectionEventType expected_event_;
   std::unique_ptr<base::RunLoop> run_loop_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestTouchSelectionControllerClientAura);
 };
 
 class TouchSelectionControllerClientAuraTest : public ContentBrowserTest {
  public:
   TouchSelectionControllerClientAuraTest() {}
+
+  TouchSelectionControllerClientAuraTest(
+      const TouchSelectionControllerClientAuraTest&) = delete;
+  TouchSelectionControllerClientAuraTest& operator=(
+      const TouchSelectionControllerClientAuraTest&) = delete;
+
   ~TouchSelectionControllerClientAuraTest() override {}
 
  protected:
@@ -204,8 +216,6 @@
 
   TestTouchSelectionControllerClientAura* selection_controller_client_ =
       nullptr;
-
-  DISALLOW_COPY_AND_ASSIGN(TouchSelectionControllerClientAuraTest);
 };
 
 class TouchSelectionControllerClientAuraCAPFeatureTest
diff --git a/content/browser/renderer_host/input/touch_selection_controller_client_child_frame.h b/content/browser/renderer_host/input/touch_selection_controller_client_child_frame.h
index d1bc279..f52face 100644
--- a/content/browser/renderer_host/input/touch_selection_controller_client_child_frame.h
+++ b/content/browser/renderer_host/input/touch_selection_controller_client_child_frame.h
@@ -31,6 +31,12 @@
   TouchSelectionControllerClientChildFrame(
       RenderWidgetHostViewChildFrame* rwhv,
       TouchSelectionControllerClientManager* manager);
+
+  TouchSelectionControllerClientChildFrame(
+      const TouchSelectionControllerClientChildFrame&) = delete;
+  TouchSelectionControllerClientChildFrame& operator=(
+      const TouchSelectionControllerClientChildFrame&) = delete;
+
   ~TouchSelectionControllerClientChildFrame() override;
 
   void DidStopFlinging();
@@ -71,8 +77,6 @@
   // The last selection bounds reported by the view, in view coordinates.
   gfx::SelectionBound selection_start_;
   gfx::SelectionBound selection_end_;
-
-  DISALLOW_COPY_AND_ASSIGN(TouchSelectionControllerClientChildFrame);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/touch_selection_controller_client_manager_android.h b/content/browser/renderer_host/input/touch_selection_controller_client_manager_android.h
index df312425..56d4c52 100644
--- a/content/browser/renderer_host/input/touch_selection_controller_client_manager_android.h
+++ b/content/browser/renderer_host/input/touch_selection_controller_client_manager_android.h
@@ -31,6 +31,12 @@
   explicit TouchSelectionControllerClientManagerAndroid(
       RenderWidgetHostViewAndroid* rwhv,
       viz::HostFrameSinkManager* frame_host_sink_manager);
+
+  TouchSelectionControllerClientManagerAndroid(
+      const TouchSelectionControllerClientManagerAndroid&) = delete;
+  TouchSelectionControllerClientManagerAndroid& operator=(
+      const TouchSelectionControllerClientManagerAndroid&) = delete;
+
   ~TouchSelectionControllerClientManagerAndroid() override;
 
   // TouchSelectionControllerClientManager implementation.
@@ -83,8 +89,6 @@
   gfx::SelectionBound manager_selection_end_;
   base::ObserverList<TouchSelectionControllerClientManager::Observer>
       observers_;
-
-  DISALLOW_COPY_AND_ASSIGN(TouchSelectionControllerClientManagerAndroid);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/touchpad_pinch_browsertest.cc b/content/browser/renderer_host/input/touchpad_pinch_browsertest.cc
index 54e8155..2507fe98 100644
--- a/content/browser/renderer_host/input/touchpad_pinch_browsertest.cc
+++ b/content/browser/renderer_host/input/touchpad_pinch_browsertest.cc
@@ -101,6 +101,10 @@
           features::kTouchpadAsyncPinchEvents);
     }
   }
+
+  TouchpadPinchBrowserTest(const TouchpadPinchBrowserTest&) = delete;
+  TouchpadPinchBrowserTest& operator=(const TouchpadPinchBrowserTest&) = delete;
+
   ~TouchpadPinchBrowserTest() override = default;
 
  protected:
@@ -131,7 +135,6 @@
 
  private:
   base::test::ScopedFeatureList scoped_feature_list_;
-  DISALLOW_COPY_AND_ASSIGN(TouchpadPinchBrowserTest);
 };
 
 INSTANTIATE_TEST_SUITE_P(All, TouchpadPinchBrowserTest, testing::Bool());
diff --git a/content/browser/renderer_host/input/touchpad_pinch_event_queue.cc b/content/browser/renderer_host/input/touchpad_pinch_event_queue.cc
index 7a4af66..e618f456 100644
--- a/content/browser/renderer_host/input/touchpad_pinch_event_queue.cc
+++ b/content/browser/renderer_host/input/touchpad_pinch_event_queue.cc
@@ -83,13 +83,13 @@
                              this);
   }
 
+  QueuedTouchpadPinchEvent(const QueuedTouchpadPinchEvent&) = delete;
+  QueuedTouchpadPinchEvent& operator=(const QueuedTouchpadPinchEvent&) = delete;
+
   ~QueuedTouchpadPinchEvent() {
     TRACE_EVENT_ASYNC_END0("input", "TouchpadPinchEventQueue::QueueEvent",
                            this);
   }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(QueuedTouchpadPinchEvent);
 };
 
 TouchpadPinchEventQueue::TouchpadPinchEventQueue(
diff --git a/content/browser/renderer_host/input/touchpad_pinch_event_queue.h b/content/browser/renderer_host/input/touchpad_pinch_event_queue.h
index 63f2124..0414327 100644
--- a/content/browser/renderer_host/input/touchpad_pinch_event_queue.h
+++ b/content/browser/renderer_host/input/touchpad_pinch_event_queue.h
@@ -48,6 +48,10 @@
  public:
   // The |client| must outlive the TouchpadPinchEventQueue.
   TouchpadPinchEventQueue(TouchpadPinchEventQueueClient* client);
+
+  TouchpadPinchEventQueue(const TouchpadPinchEventQueue&) = delete;
+  TouchpadPinchEventQueue& operator=(const TouchpadPinchEventQueue&) = delete;
+
   ~TouchpadPinchEventQueue();
 
   // Adds the given touchpad pinch |event| to the queue. The event may be
@@ -71,8 +75,6 @@
   base::circular_deque<std::unique_ptr<QueuedTouchpadPinchEvent>> pinch_queue_;
   std::unique_ptr<QueuedTouchpadPinchEvent> pinch_event_awaiting_ack_;
   absl::optional<bool> first_event_prevented_;
-
-  DISALLOW_COPY_AND_ASSIGN(TouchpadPinchEventQueue);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/touchpad_tap_suppression_controller.h b/content/browser/renderer_host/input/touchpad_tap_suppression_controller.h
index 945ed116..f86ff03 100644
--- a/content/browser/renderer_host/input/touchpad_tap_suppression_controller.h
+++ b/content/browser/renderer_host/input/touchpad_tap_suppression_controller.h
@@ -20,6 +20,12 @@
   // The |client| must outlive the TouchpadTapSupressionController.
   TouchpadTapSuppressionController(
       const TapSuppressionController::Config& config);
+
+  TouchpadTapSuppressionController(const TouchpadTapSuppressionController&) =
+      delete;
+  TouchpadTapSuppressionController& operator=(
+      const TouchpadTapSuppressionController&) = delete;
+
   ~TouchpadTapSuppressionController() override;
 
   // Should be called on arrival of MouseDown events. Returns true if the caller
@@ -32,8 +38,6 @@
 
  private:
   friend class MockRenderWidgetHost;
-
-  DISALLOW_COPY_AND_ASSIGN(TouchpadTapSuppressionController);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/touchscreen_tap_suppression_controller.h b/content/browser/renderer_host/input/touchscreen_tap_suppression_controller.h
index f077fa1..9d8b298e 100644
--- a/content/browser/renderer_host/input/touchscreen_tap_suppression_controller.h
+++ b/content/browser/renderer_host/input/touchscreen_tap_suppression_controller.h
@@ -17,15 +17,17 @@
  public:
   TouchscreenTapSuppressionController(
       const TapSuppressionController::Config& config);
+
+  TouchscreenTapSuppressionController(
+      const TouchscreenTapSuppressionController&) = delete;
+  TouchscreenTapSuppressionController& operator=(
+      const TouchscreenTapSuppressionController&) = delete;
+
   ~TouchscreenTapSuppressionController() override;
 
   // Should be called on arrival of any tap-related events. Returns true if the
   // caller should stop normal handling of the gesture.
   bool FilterTapEvent(const GestureEventWithLatencyInfo& event);
-
- private:
-
-  DISALLOW_COPY_AND_ASSIGN(TouchscreenTapSuppressionController);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/wheel_event_listener_browsertest.cc b/content/browser/renderer_host/input/wheel_event_listener_browsertest.cc
index feb46e74c..7bbc226 100644
--- a/content/browser/renderer_host/input/wheel_event_listener_browsertest.cc
+++ b/content/browser/renderer_host/input/wheel_event_listener_browsertest.cc
@@ -53,6 +53,11 @@
 class WheelEventListenerBrowserTest : public ContentBrowserTest {
  public:
   WheelEventListenerBrowserTest() = default;
+
+  WheelEventListenerBrowserTest(const WheelEventListenerBrowserTest&) = delete;
+  WheelEventListenerBrowserTest& operator=(
+      const WheelEventListenerBrowserTest&) = delete;
+
   ~WheelEventListenerBrowserTest() override = default;
 
  protected:
@@ -108,7 +113,6 @@
 
  private:
   base::test::ScopedFeatureList feature_list_;
-  DISALLOW_COPY_AND_ASSIGN(WheelEventListenerBrowserTest);
 };
 
 IN_PROC_BROWSER_TEST_F(WheelEventListenerBrowserTest,
diff --git a/content/browser/renderer_host/media/aec_dump_manager_impl.h b/content/browser/renderer_host/media/aec_dump_manager_impl.h
index f7a79a6..fb8d80a 100644
--- a/content/browser/renderer_host/media/aec_dump_manager_impl.h
+++ b/content/browser/renderer_host/media/aec_dump_manager_impl.h
@@ -23,6 +23,10 @@
 class AecDumpManagerImpl : public blink::mojom::AecDumpManager {
  public:
   AecDumpManagerImpl();
+
+  AecDumpManagerImpl(const AecDumpManagerImpl&) = delete;
+  AecDumpManagerImpl& operator=(const AecDumpManagerImpl&) = delete;
+
   ~AecDumpManagerImpl() override;
 
   void AddReceiver(
@@ -53,8 +57,6 @@
   mojo::ReceiverSet<blink::mojom::AecDumpManager> receiver_set_;
 
   base::WeakPtrFactory<AecDumpManagerImpl> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(AecDumpManagerImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/media/audio_input_device_manager_unittest.cc b/content/browser/renderer_host/media/audio_input_device_manager_unittest.cc
index 412478b..c13ad654 100644
--- a/content/browser/renderer_host/media/audio_input_device_manager_unittest.cc
+++ b/content/browser/renderer_host/media/audio_input_device_manager_unittest.cc
@@ -37,6 +37,12 @@
     : public MediaStreamProviderListener {
  public:
   MockAudioInputDeviceManagerListener() {}
+
+  MockAudioInputDeviceManagerListener(
+      const MockAudioInputDeviceManagerListener&) = delete;
+  MockAudioInputDeviceManagerListener& operator=(
+      const MockAudioInputDeviceManagerListener&) = delete;
+
   ~MockAudioInputDeviceManagerListener() override {}
 
   MOCK_METHOD2(Opened,
@@ -48,9 +54,6 @@
   MOCK_METHOD2(Aborted,
                void(blink::mojom::MediaStreamType,
                     const base::UnguessableToken&));
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(MockAudioInputDeviceManagerListener);
 };
 
 // TODO(henrika): there are special restrictions for Android since
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 b8dd45b2..43ea6af 100644
--- a/content/browser/renderer_host/media/audio_input_stream_handle.h
+++ b/content/browser/renderer_host/media/audio_input_stream_handle.h
@@ -36,6 +36,9 @@
           create_delegate_callback,
       DeleterCallback deleter_callback);
 
+  AudioInputStreamHandle(const AudioInputStreamHandle&) = delete;
+  AudioInputStreamHandle& operator=(const AudioInputStreamHandle&) = delete;
+
   ~AudioInputStreamHandle();
 
   const base::UnguessableToken& id() const { return stream_id_; }
@@ -55,8 +58,6 @@
   mojo::PendingReceiver<media::mojom::AudioInputStreamClient>
       pending_stream_client_;
   media::MojoAudioInputStream stream_;
-
-  DISALLOW_COPY_AND_ASSIGN(AudioInputStreamHandle);
 };
 
 }  // namespace content
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 1bec2c8..5a5d672 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
@@ -32,15 +32,15 @@
  public:
   FakeAudioInputDelegate() {}
 
+  FakeAudioInputDelegate(const FakeAudioInputDelegate&) = delete;
+  FakeAudioInputDelegate& operator=(const FakeAudioInputDelegate&) = delete;
+
   ~FakeAudioInputDelegate() override {}
 
   int GetStreamId() override { return 0; }
   void OnRecordStream() override {}
   void OnSetVolume(double volume) override {}
   void OnSetOutputDeviceForAec(const std::string& output_device_id) override {}
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(FakeAudioInputDelegate);
 };
 
 class MockRendererAudioInputStreamFactoryClient
diff --git a/content/browser/renderer_host/media/audio_output_authorization_handler.cc b/content/browser/renderer_host/media/audio_output_authorization_handler.cc
index 9cf06d6..152f809 100644
--- a/content/browser/renderer_host/media/audio_output_authorization_handler.cc
+++ b/content/browser/renderer_host/media/audio_output_authorization_handler.cc
@@ -73,6 +73,9 @@
                                       "device id", device_id);
   }
 
+  TraceScope(const TraceScope&) = delete;
+  TraceScope& operator=(const TraceScope&) = delete;
+
   ~TraceScope() {
     if (waiting_for_params_) {
       TRACE_EVENT_NESTABLE_ASYNC_END1("audio", "Getting audio parameters", this,
@@ -124,8 +127,6 @@
  private:
   bool checking_access_ = false;
   bool waiting_for_params_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(TraceScope);
 };
 
 AudioOutputAuthorizationHandler::AudioOutputAuthorizationHandler(
diff --git a/content/browser/renderer_host/media/audio_output_authorization_handler.h b/content/browser/renderer_host/media/audio_output_authorization_handler.h
index 90dfadb..701c4892 100644
--- a/content/browser/renderer_host/media/audio_output_authorization_handler.h
+++ b/content/browser/renderer_host/media/audio_output_authorization_handler.h
@@ -47,6 +47,11 @@
                                   MediaStreamManager* media_stream_manager,
                                   int render_process_id_);
 
+  AudioOutputAuthorizationHandler(const AudioOutputAuthorizationHandler&) =
+      delete;
+  AudioOutputAuthorizationHandler& operator=(
+      const AudioOutputAuthorizationHandler&) = delete;
+
   ~AudioOutputAuthorizationHandler();
 
   // Checks authorization of the device with the hashed id |device_id| for the
@@ -117,8 +122,6 @@
   // const, so this can be mutable.
   mutable base::WeakPtrFactory<const AudioOutputAuthorizationHandler>
       weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(AudioOutputAuthorizationHandler);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/media/audio_output_authorization_handler_unittest.cc b/content/browser/renderer_host/media/audio_output_authorization_handler_unittest.cc
index 306b92e6..e350450 100644
--- a/content/browser/renderer_host/media/audio_output_authorization_handler_unittest.cc
+++ b/content/browser/renderer_host/media/audio_output_authorization_handler_unittest.cc
@@ -74,6 +74,11 @@
         switches::kUseFakeDeviceForMediaStream);
   }
 
+  AudioOutputAuthorizationHandlerTest(
+      const AudioOutputAuthorizationHandlerTest&) = delete;
+  AudioOutputAuthorizationHandlerTest& operator=(
+      const AudioOutputAuthorizationHandlerTest&) = delete;
+
   ~AudioOutputAuthorizationHandlerTest() override {
     audio_manager_->Shutdown();
   }
@@ -173,8 +178,6 @@
   std::unique_ptr<media::AudioManager> audio_manager_;
   std::unique_ptr<media::AudioSystem> audio_system_;
   std::unique_ptr<MediaStreamManager> media_stream_manager_;
-
-  DISALLOW_COPY_AND_ASSIGN(AudioOutputAuthorizationHandlerTest);
 };
 
 TEST_F(AudioOutputAuthorizationHandlerTest, DoNothing) {}
diff --git a/content/browser/renderer_host/media/audio_output_stream_observer_impl.h b/content/browser/renderer_host/media/audio_output_stream_observer_impl.h
index 0f5e587..b5c5438 100644
--- a/content/browser/renderer_host/media/audio_output_stream_observer_impl.h
+++ b/content/browser/renderer_host/media/audio_output_stream_observer_impl.h
@@ -17,6 +17,11 @@
   AudioOutputStreamObserverImpl(int render_process_id,
                                 int render_frame_id,
                                 int stream_id);
+
+  AudioOutputStreamObserverImpl(const AudioOutputStreamObserverImpl&) = delete;
+  AudioOutputStreamObserverImpl& operator=(
+      const AudioOutputStreamObserverImpl&) = delete;
+
   ~AudioOutputStreamObserverImpl() override;
 
   // media::mojom::AudioOutputStreamObserver implementation
@@ -31,8 +36,6 @@
   bool did_start_playing_ = false;
 
   SEQUENCE_CHECKER(sequence_checker_);
-
-  DISALLOW_COPY_AND_ASSIGN(AudioOutputStreamObserverImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/media/audio_service_listener.h b/content/browser/renderer_host/media/audio_service_listener.h
index 8043fe1..9f6adaf 100644
--- a/content/browser/renderer_host/media/audio_service_listener.h
+++ b/content/browser/renderer_host/media/audio_service_listener.h
@@ -22,6 +22,10 @@
     : public ServiceProcessHost::Observer {
  public:
   AudioServiceListener();
+
+  AudioServiceListener(const AudioServiceListener&) = delete;
+  AudioServiceListener& operator=(const AudioServiceListener&) = delete;
+
   ~AudioServiceListener() override;
 
   base::ProcessId GetProcessId() const;
@@ -50,8 +54,6 @@
   base::ProcessId process_id_ = base::kNullProcessId;
   bool log_factory_is_set_ = false;
   SEQUENCE_CHECKER(owning_sequence_);
-
-  DISALLOW_COPY_AND_ASSIGN(AudioServiceListener);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/media/media_devices_dispatcher_host.h b/content/browser/renderer_host/media/media_devices_dispatcher_host.h
index 196efc4..5ebf9a6 100644
--- a/content/browser/renderer_host/media/media_devices_dispatcher_host.h
+++ b/content/browser/renderer_host/media/media_devices_dispatcher_host.h
@@ -32,6 +32,11 @@
   MediaDevicesDispatcherHost(int render_process_id,
                              int render_frame_id,
                              MediaStreamManager* media_stream_manager);
+
+  MediaDevicesDispatcherHost(const MediaDevicesDispatcherHost&) = delete;
+  MediaDevicesDispatcherHost& operator=(const MediaDevicesDispatcherHost&) =
+      delete;
+
   ~MediaDevicesDispatcherHost() override;
 
   static void Create(
@@ -157,8 +162,6 @@
       capture_handle_config_callback_for_testing_;
 
   base::WeakPtrFactory<MediaDevicesDispatcherHost> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(MediaDevicesDispatcherHost);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/media/media_devices_manager.cc b/content/browser/renderer_host/media/media_devices_manager.cc
index ed797f8..7caefbe1 100644
--- a/content/browser/renderer_host/media/media_devices_manager.cc
+++ b/content/browser/renderer_host/media/media_devices_manager.cc
@@ -324,6 +324,11 @@
     : public audio::mojom::DeviceListener {
  public:
   AudioServiceDeviceListener() { ConnectToService(); }
+
+  AudioServiceDeviceListener(const AudioServiceDeviceListener&) = delete;
+  AudioServiceDeviceListener& operator=(const AudioServiceDeviceListener&) =
+      delete;
+
   ~AudioServiceDeviceListener() override = default;
 
   void DevicesChanged() override {
@@ -367,8 +372,6 @@
   SEQUENCE_CHECKER(sequence_checker_);
 
   base::WeakPtrFactory<AudioServiceDeviceListener> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(AudioServiceDeviceListener);
 };
 
 MediaDevicesManager::MediaDevicesManager(
diff --git a/content/browser/renderer_host/media/media_devices_manager.h b/content/browser/renderer_host/media/media_devices_manager.h
index ba5b6a8b..b04f066 100644
--- a/content/browser/renderer_host/media/media_devices_manager.h
+++ b/content/browser/renderer_host/media/media_devices_manager.h
@@ -80,6 +80,10 @@
       const scoped_refptr<VideoCaptureManager>& video_capture_manager,
       StopRemovedInputDeviceCallback stop_removed_input_device_cb,
       UIInputDeviceChangeCallback ui_input_device_change_cb);
+
+  MediaDevicesManager(const MediaDevicesManager&) = delete;
+  MediaDevicesManager& operator=(const MediaDevicesManager&) = delete;
+
   ~MediaDevicesManager() override;
 
   // Performs a possibly cached device enumeration for the requested device
@@ -334,8 +338,6 @@
   uint32_t next_enumeration_state_id_ = 0;
 
   base::WeakPtrFactory<MediaDevicesManager> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(MediaDevicesManager);
 };
 
 // This function uses a heuristic to guess the group ID for a video device with
diff --git a/content/browser/renderer_host/media/media_devices_manager_unittest.cc b/content/browser/renderer_host/media/media_devices_manager_unittest.cc
index 52b85431..305bcd9 100644
--- a/content/browser/renderer_host/media/media_devices_manager_unittest.cc
+++ b/content/browser/renderer_host/media/media_devices_manager_unittest.cc
@@ -72,6 +72,10 @@
                          &fake_audio_log_factory_),
         num_output_devices_(2),
         num_input_devices_(kNumAudioInputDevices) {}
+
+  MockAudioManager(const MockAudioManager&) = delete;
+  MockAudioManager& operator=(const MockAudioManager&) = delete;
+
   ~MockAudioManager() override {}
 
   MOCK_METHOD1(MockGetAudioInputDeviceNames, void(media::AudioDeviceNames*));
@@ -167,7 +171,6 @@
   std::string default_device_id_;
   std::string communications_device_id_;
   std::set<std::string> removed_input_audio_device_ids_;
-  DISALLOW_COPY_AND_ASSIGN(MockAudioManager);
 };
 
 // This class mocks the video capture device factory and overrides some methods
@@ -230,6 +233,10 @@
   MediaDevicesManagerTest()
       : task_environment_(content::BrowserTaskEnvironment::IO_MAINLOOP),
         video_capture_device_factory_(nullptr) {}
+
+  MediaDevicesManagerTest(const MediaDevicesManagerTest&) = delete;
+  MediaDevicesManagerTest& operator=(const MediaDevicesManagerTest&) = delete;
+
   ~MediaDevicesManagerTest() override { audio_manager_->Shutdown(); }
 
   MOCK_METHOD1(MockCallback, void(const MediaDeviceEnumeration&));
@@ -344,9 +351,6 @@
   testing::StrictMock<MockMediaDevicesManagerClient>
       media_devices_manager_client_;
   std::set<std::string> removed_device_ids_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(MediaDevicesManagerTest);
 };
 
 TEST_F(MediaDevicesManagerTest, EnumerateNoCacheAudioInput) {
diff --git a/content/browser/renderer_host/media/media_stream_dispatcher_host.h b/content/browser/renderer_host/media/media_stream_dispatcher_host.h
index 02bc606..8bc001e 100644
--- a/content/browser/renderer_host/media/media_stream_dispatcher_host.h
+++ b/content/browser/renderer_host/media/media_stream_dispatcher_host.h
@@ -35,6 +35,11 @@
   MediaStreamDispatcherHost(int render_process_id,
                             int render_frame_id,
                             MediaStreamManager* media_stream_manager);
+
+  MediaStreamDispatcherHost(const MediaStreamDispatcherHost&) = delete;
+  MediaStreamDispatcherHost& operator=(const MediaStreamDispatcherHost&) =
+      delete;
+
   ~MediaStreamDispatcherHost() override;
   static void Create(
       int render_process_id,
@@ -129,8 +134,6 @@
   scoped_refptr<Broker> broker_;
 
   base::WeakPtrFactory<MediaStreamDispatcherHost> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(MediaStreamDispatcherHost);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/media/media_stream_manager.h b/content/browser/renderer_host/media/media_stream_manager.h
index b5f4f0e..6fb7f07c 100644
--- a/content/browser/renderer_host/media/media_stream_manager.h
+++ b/content/browser/renderer_host/media/media_stream_manager.h
@@ -145,6 +145,9 @@
       scoped_refptr<base::SingleThreadTaskRunner> audio_task_runner,
       std::unique_ptr<VideoCaptureProvider> video_capture_provider);
 
+  MediaStreamManager(const MediaStreamManager&) = delete;
+  MediaStreamManager& operator=(const MediaStreamManager&) = delete;
+
   ~MediaStreamManager() override;
 
   // Used to access VideoCaptureManager.
@@ -680,8 +683,6 @@
   std::unique_ptr<AudioServiceListener> audio_service_listener_;
 
   GenerateStreamTestCallback generate_stream_test_callback_;
-
-  DISALLOW_COPY_AND_ASSIGN(MediaStreamManager);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/media/media_stream_manager_unittest.cc b/content/browser/renderer_host/media/media_stream_manager_unittest.cc
index 80f5638..5a4c1dd9 100644
--- a/content/browser/renderer_host/media/media_stream_manager_unittest.cc
+++ b/content/browser/renderer_host/media/media_stream_manager_unittest.cc
@@ -81,6 +81,10 @@
                              &fake_audio_log_factory_),
         num_output_devices_(2),
         num_input_devices_(2) {}
+
+  MockAudioManager(const MockAudioManager&) = delete;
+  MockAudioManager& operator=(const MockAudioManager&) = delete;
+
   ~MockAudioManager() override {}
 
   void GetAudioInputDeviceNames(
@@ -136,7 +140,6 @@
   media::FakeAudioLogFactory fake_audio_log_factory_;
   size_t num_output_devices_;
   size_t num_input_devices_;
-  DISALLOW_COPY_AND_ASSIGN(MockAudioManager);
 };
 
 class MockMediaObserver : public MediaObserver {
@@ -208,6 +211,9 @@
             }));
   }
 
+  MediaStreamManagerTest(const MediaStreamManagerTest&) = delete;
+  MediaStreamManagerTest& operator=(const MediaStreamManagerTest&) = delete;
+
   ~MediaStreamManagerTest() override { audio_manager_->Shutdown(); }
 
   MOCK_METHOD1(Response, void(int index));
@@ -402,9 +408,6 @@
   std::unique_ptr<media::AudioSystem> audio_system_;
   MockVideoCaptureProvider* video_capture_provider_;
   base::RunLoop run_loop_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(MediaStreamManagerTest);
 };
 
 TEST_F(MediaStreamManagerTest, MakeMediaAccessRequest) {
diff --git a/content/browser/renderer_host/media/media_stream_ui_proxy.cc b/content/browser/renderer_host/media/media_stream_ui_proxy.cc
index 8b4c1e9..c75a4d9 100644
--- a/content/browser/renderer_host/media/media_stream_ui_proxy.cc
+++ b/content/browser/renderer_host/media/media_stream_ui_proxy.cc
@@ -43,6 +43,10 @@
  public:
   explicit Core(const base::WeakPtr<MediaStreamUIProxy>& proxy,
                 RenderFrameHostDelegate* test_render_delegate);
+
+  Core(const Core&) = delete;
+  Core& operator=(const Core&) = delete;
+
   ~Core();
 
   void RequestAccess(std::unique_ptr<MediaStreamRequest> request);
@@ -99,8 +103,6 @@
   // Used for calls supplied to `ui_`. Invalidated every time a new UI is
   // created.
   base::WeakPtrFactory<Core> weak_factory_for_ui_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(Core);
 };
 
 MediaStreamUIProxy::Core::Core(const base::WeakPtr<MediaStreamUIProxy>& proxy,
diff --git a/content/browser/renderer_host/media/media_stream_ui_proxy.h b/content/browser/renderer_host/media/media_stream_ui_proxy.h
index 15bb50d..5d10baf 100644
--- a/content/browser/renderer_host/media/media_stream_ui_proxy.h
+++ b/content/browser/renderer_host/media/media_stream_ui_proxy.h
@@ -38,6 +38,9 @@
   static std::unique_ptr<MediaStreamUIProxy> CreateForTests(
       RenderFrameHostDelegate* render_delegate);
 
+  MediaStreamUIProxy(const MediaStreamUIProxy&) = delete;
+  MediaStreamUIProxy& operator=(const MediaStreamUIProxy&) = delete;
+
   virtual ~MediaStreamUIProxy();
 
   // Requests access for the MediaStream by calling
@@ -112,8 +115,6 @@
   MediaStreamUI::StateChangeCallback state_change_callback_;
 
   base::WeakPtrFactory<MediaStreamUIProxy> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(MediaStreamUIProxy);
 };
 
 class CONTENT_EXPORT FakeMediaStreamUIProxy : public MediaStreamUIProxy {
@@ -122,6 +123,10 @@
   // creating the FakeMediaStreamUIProxy creates real RFH objects or true if it
   // just passes in dummy IDs to refer to RFHs.
   explicit FakeMediaStreamUIProxy(bool tests_use_fake_render_frame_hosts);
+
+  FakeMediaStreamUIProxy(const FakeMediaStreamUIProxy&) = delete;
+  FakeMediaStreamUIProxy& operator=(const FakeMediaStreamUIProxy&) = delete;
+
   ~FakeMediaStreamUIProxy() override;
 
   void SetAvailableDevices(const blink::MediaStreamDevices& devices);
@@ -148,8 +153,6 @@
   // These are used for CheckAccess().
   bool mic_access_;
   bool camera_access_;
-
-  DISALLOW_COPY_AND_ASSIGN(FakeMediaStreamUIProxy);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/media/peer_connection_tracker_host.h b/content/browser/renderer_host/media/peer_connection_tracker_host.h
index df5c43f..77d2f747 100644
--- a/content/browser/renderer_host/media/peer_connection_tracker_host.h
+++ b/content/browser/renderer_host/media/peer_connection_tracker_host.h
@@ -41,6 +41,10 @@
       public base::PowerThermalObserver,
       public blink::mojom::PeerConnectionTrackerHost {
  public:
+  PeerConnectionTrackerHost(const PeerConnectionTrackerHost&) = delete;
+  PeerConnectionTrackerHost& operator=(const PeerConnectionTrackerHost&) =
+      delete;
+
   ~PeerConnectionTrackerHost() override;
 
   // Adds/removes a PeerConnectionTrackerHostObserver.
@@ -95,8 +99,6 @@
   base::ProcessId peer_pid_;
   mojo::Receiver<blink::mojom::PeerConnectionTrackerHost> receiver_{this};
   mojo::Remote<blink::mojom::PeerConnectionManager> tracker_;
-
-  DISALLOW_COPY_AND_ASSIGN(PeerConnectionTrackerHost);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/media/render_frame_audio_input_stream_factory.cc b/content/browser/renderer_host/media/render_frame_audio_input_stream_factory.cc
index ac53406..c4bba5c 100644
--- a/content/browser/renderer_host/media/render_frame_audio_input_stream_factory.cc
+++ b/content/browser/renderer_host/media/render_frame_audio_input_stream_factory.cc
@@ -107,6 +107,9 @@
        MediaStreamManager* media_stream_manager,
        RenderFrameHost* render_frame_host);
 
+  Core(const Core&) = delete;
+  Core& operator=(const Core&) = delete;
+
   ~Core() final;
 
   void Init(mojo::PendingReceiver<blink::mojom::RendererAudioInputStreamFactory>
@@ -153,8 +156,6 @@
   base::WeakPtr<ForwardingAudioStreamFactory::Core> forwarding_factory_;
 
   base::WeakPtrFactory<Core> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(Core);
 };
 
 RenderFrameAudioInputStreamFactory::RenderFrameAudioInputStreamFactory(
diff --git a/content/browser/renderer_host/media/render_frame_audio_input_stream_factory.h b/content/browser/renderer_host/media/render_frame_audio_input_stream_factory.h
index 3ae9d0db..66a90a5 100644
--- a/content/browser/renderer_host/media/render_frame_audio_input_stream_factory.h
+++ b/content/browser/renderer_host/media/render_frame_audio_input_stream_factory.h
@@ -31,13 +31,16 @@
       MediaStreamManager* media_stream_manager,
       RenderFrameHost* render_frame_host);
 
+  RenderFrameAudioInputStreamFactory(
+      const RenderFrameAudioInputStreamFactory&) = delete;
+  RenderFrameAudioInputStreamFactory& operator=(
+      const RenderFrameAudioInputStreamFactory&) = delete;
+
   ~RenderFrameAudioInputStreamFactory();
 
  private:
   class Core;
   std::unique_ptr<Core> core_;
-
-  DISALLOW_COPY_AND_ASSIGN(RenderFrameAudioInputStreamFactory);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/media/render_frame_audio_output_stream_factory.cc b/content/browser/renderer_host/media/render_frame_audio_output_stream_factory.cc
index d05f631..24324552 100644
--- a/content/browser/renderer_host/media/render_frame_audio_output_stream_factory.cc
+++ b/content/browser/renderer_host/media/render_frame_audio_output_stream_factory.cc
@@ -62,6 +62,9 @@
        media::AudioSystem* audio_system,
        MediaStreamManager* media_stream_manager);
 
+  Core(const Core&) = delete;
+  Core& operator=(const Core&) = delete;
+
   ~Core() final = default;
 
   void Init(
@@ -93,6 +96,9 @@
           base::BindOnce(&ProviderImpl::Done, base::Unretained(this)));
     }
 
+    ProviderImpl(const ProviderImpl&) = delete;
+    ProviderImpl& operator=(const ProviderImpl&) = delete;
+
     ~ProviderImpl() final { DCHECK_CURRENTLY_ON(BrowserThread::IO); }
 
     void Acquire(
@@ -124,8 +130,6 @@
     const std::string device_id_;
 
     mojo::Receiver<media::mojom::AudioOutputStreamProvider> receiver_;
-
-    DISALLOW_COPY_AND_ASSIGN(ProviderImpl);
   };
 
   using OutputStreamProviderSet =
@@ -175,8 +179,6 @@
   // Weak pointers are used to cancel device authorizations that are in flight
   // while |this| is destructed.
   base::WeakPtrFactory<Core> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(Core);
 };
 
 class RenderFrameAudioOutputStreamFactory::RestrictedModeCore final
diff --git a/content/browser/renderer_host/media/render_frame_audio_output_stream_factory.h b/content/browser/renderer_host/media/render_frame_audio_output_stream_factory.h
index 95e04d8..d44d241 100644
--- a/content/browser/renderer_host/media/render_frame_audio_output_stream_factory.h
+++ b/content/browser/renderer_host/media/render_frame_audio_output_stream_factory.h
@@ -56,6 +56,11 @@
           receiver,
       absl::optional<base::OnceClosure> restricted_callback);
 
+  RenderFrameAudioOutputStreamFactory(
+      const RenderFrameAudioOutputStreamFactory&) = delete;
+  RenderFrameAudioOutputStreamFactory& operator=(
+      const RenderFrameAudioOutputStreamFactory&) = delete;
+
   ~RenderFrameAudioOutputStreamFactory();
 
   void SetAuthorizedDeviceIdForGlobalMediaControls(
@@ -74,8 +79,6 @@
 
   // Used while the frame is disallowed to request output devices.
   std::unique_ptr<RestrictedModeCore> restricted_mode_core_;
-
-  DISALLOW_COPY_AND_ASSIGN(RenderFrameAudioOutputStreamFactory);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/media/service_video_capture_device_launcher_unittest.cc b/content/browser/renderer_host/media/service_video_capture_device_launcher_unittest.cc
index a6d96dfa..917cbd2 100644
--- a/content/browser/renderer_host/media/service_video_capture_device_launcher_unittest.cc
+++ b/content/browser/renderer_host/media/service_video_capture_device_launcher_unittest.cc
@@ -50,6 +50,12 @@
 class ServiceVideoCaptureDeviceLauncherTest : public testing::Test {
  public:
   ServiceVideoCaptureDeviceLauncherTest() {}
+
+  ServiceVideoCaptureDeviceLauncherTest(
+      const ServiceVideoCaptureDeviceLauncherTest&) = delete;
+  ServiceVideoCaptureDeviceLauncherTest& operator=(
+      const ServiceVideoCaptureDeviceLauncherTest&) = delete;
+
   ~ServiceVideoCaptureDeviceLauncherTest() override {}
 
   void CloseSourceReceiver() { source_receiver_.reset(); }
@@ -146,9 +152,6 @@
   bool launcher_has_connected_to_source_provider_;
   bool launcher_has_released_source_provider_;
   base::RunLoop wait_for_release_connection_cb_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(ServiceVideoCaptureDeviceLauncherTest);
 };
 
 TEST_F(ServiceVideoCaptureDeviceLauncherTest, LaunchingDeviceSucceeds) {
diff --git a/content/browser/renderer_host/media/service_video_capture_provider.cc b/content/browser/renderer_host/media/service_video_capture_provider.cc
index cf0f642..fc5a19f 100644
--- a/content/browser/renderer_host/media/service_video_capture_provider.cc
+++ b/content/browser/renderer_host/media/service_video_capture_provider.cc
@@ -66,6 +66,9 @@
     ServiceProcessHost::AddObserver(this);
   }
 
+  ServiceProcessObserver(const ServiceProcessObserver&) = delete;
+  ServiceProcessObserver& operator=(const ServiceProcessObserver&) = delete;
+
   ~ServiceProcessObserver() override {
     DCHECK_CURRENTLY_ON(BrowserThread::UI);
     ServiceProcessHost::RemoveObserver(this);
@@ -92,8 +95,6 @@
   const scoped_refptr<base::TaskRunner> io_task_runner_;
   const base::RepeatingClosure start_callback_;
   const base::RepeatingClosure stop_callback_;
-
-  DISALLOW_COPY_AND_ASSIGN(ServiceProcessObserver);
 };
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
diff --git a/content/browser/renderer_host/media/service_video_capture_provider_unittest.cc b/content/browser/renderer_host/media/service_video_capture_provider_unittest.cc
index 58c1e1a8..afbf3c5 100644
--- a/content/browser/renderer_host/media/service_video_capture_provider_unittest.cc
+++ b/content/browser/renderer_host/media/service_video_capture_provider_unittest.cc
@@ -62,6 +62,11 @@
     OverrideVideoCaptureServiceForTesting(&mock_video_capture_service_);
   }
 
+  ServiceVideoCaptureProviderTest(const ServiceVideoCaptureProviderTest&) =
+      delete;
+  ServiceVideoCaptureProviderTest& operator=(
+      const ServiceVideoCaptureProviderTest&) = delete;
+
   ~ServiceVideoCaptureProviderTest() override {
     OverrideVideoCaptureServiceForTesting(nullptr);
   }
@@ -143,9 +148,6 @@
       video_capture::mojom::VideoSourceProvider::GetSourceInfosCallback>
       service_cb_;
   base::RunLoop wait_for_connection_to_service_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(ServiceVideoCaptureProviderTest);
 };
 
 // Tests that if connection to the service is lost during an outstanding call
diff --git a/content/browser/renderer_host/media/video_capture_browsertest.cc b/content/browser/renderer_host/media/video_capture_browsertest.cc
index 85136736..c0b7859 100644
--- a/content/browser/renderer_host/media/video_capture_browsertest.cc
+++ b/content/browser/renderer_host/media/video_capture_browsertest.cc
@@ -134,6 +134,9 @@
     }
   }
 
+  VideoCaptureBrowserTest(const VideoCaptureBrowserTest&) = delete;
+  VideoCaptureBrowserTest& operator=(const VideoCaptureBrowserTest&) = delete;
+
   ~VideoCaptureBrowserTest() override {}
 
   void SetUpAndStartCaptureDeviceOnIOThread(base::OnceClosure continuation) {
@@ -241,9 +244,6 @@
   MockMediaStreamProviderListener mock_stream_provider_listener_;
   MockVideoCaptureControllerEventHandler mock_controller_event_handler_;
   base::WeakPtr<VideoCaptureController> controller_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(VideoCaptureBrowserTest);
 };
 
 IN_PROC_BROWSER_TEST_P(VideoCaptureBrowserTest, StartAndImmediatelyStop) {
diff --git a/content/browser/renderer_host/media/video_capture_controller_unittest.cc b/content/browser/renderer_host/media/video_capture_controller_unittest.cc
index 0483400..1f6490e 100644
--- a/content/browser/renderer_host/media/video_capture_controller_unittest.cc
+++ b/content/browser/renderer_host/media/video_capture_controller_unittest.cc
@@ -172,6 +172,11 @@
         arbitrary_color_space_(gfx::ColorSpace::CreateREC709()),
         arbitrary_route_id_(base::UnguessableToken::Create()),
         arbitrary_session_id_(base::UnguessableToken::Create()) {}
+
+  VideoCaptureControllerTest(const VideoCaptureControllerTest&) = delete;
+  VideoCaptureControllerTest& operator=(const VideoCaptureControllerTest&) =
+      delete;
+
   ~VideoCaptureControllerTest() override {}
 
  protected:
@@ -250,9 +255,6 @@
   const gfx::ColorSpace arbitrary_color_space_;
   const VideoCaptureControllerID arbitrary_route_id_;
   const media::VideoCaptureSessionId arbitrary_session_id_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(VideoCaptureControllerTest);
 };
 
 // A simple test of VideoCaptureController's ability to add, remove, and keep
diff --git a/content/browser/renderer_host/media/video_capture_host.cc b/content/browser/renderer_host/media/video_capture_host.cc
index 176bdb0..b4b5072 100644
--- a/content/browser/renderer_host/media/video_capture_host.cc
+++ b/content/browser/renderer_host/media/video_capture_host.cc
@@ -31,6 +31,10 @@
   explicit RenderProcessHostDelegateImpl(uint32_t render_process_id)
       : render_process_id_(render_process_id) {}
 
+  RenderProcessHostDelegateImpl(const RenderProcessHostDelegateImpl&) = delete;
+  RenderProcessHostDelegateImpl& operator=(
+      const RenderProcessHostDelegateImpl&) = delete;
+
   ~RenderProcessHostDelegateImpl() override {
     DCHECK_CURRENTLY_ON(BrowserThread::UI);
   }
@@ -54,7 +58,6 @@
 
  private:
   const uint32_t render_process_id_;
-  DISALLOW_COPY_AND_ASSIGN(RenderProcessHostDelegateImpl);
 };
 
 VideoCaptureHost::VideoCaptureHost(uint32_t render_process_id,
diff --git a/content/browser/renderer_host/media/video_capture_host.h b/content/browser/renderer_host/media/video_capture_host.h
index 16a7ab6f..7c199986 100644
--- a/content/browser/renderer_host/media/video_capture_host.h
+++ b/content/browser/renderer_host/media/video_capture_host.h
@@ -36,6 +36,10 @@
   class RenderProcessHostDelegate;
   VideoCaptureHost(std::unique_ptr<RenderProcessHostDelegate> delegate,
                    MediaStreamManager* media_stream_manager);
+
+  VideoCaptureHost(const VideoCaptureHost&) = delete;
+  VideoCaptureHost& operator=(const VideoCaptureHost&) = delete;
+
   ~VideoCaptureHost() override;
 
   static void Create(
@@ -137,8 +141,6 @@
       device_id_to_observer_map_;
 
   base::WeakPtrFactory<VideoCaptureHost> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(VideoCaptureHost);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/media/video_capture_manager_unittest.cc b/content/browser/renderer_host/media/video_capture_manager_unittest.cc
index f244420c..e4b15f4 100644
--- a/content/browser/renderer_host/media/video_capture_manager_unittest.cc
+++ b/content/browser/renderer_host/media/video_capture_manager_unittest.cc
@@ -63,6 +63,9 @@
       factory_->OnDeviceCreated(this);
     }
 
+    WrappedDevice(const WrappedDevice&) = delete;
+    WrappedDevice& operator=(const WrappedDevice&) = delete;
+
     ~WrappedDevice() override { factory_->OnDeviceDestroyed(this); }
 
     void AllocateAndStart(const media::VideoCaptureParams& params,
@@ -95,8 +98,6 @@
    private:
     const std::unique_ptr<media::VideoCaptureDevice> device_;
     WrappedDeviceFactory* const factory_;
-
-    DISALLOW_COPY_AND_ASSIGN(WrappedDevice);
   };
 
   static const media::VideoFacingMode DEFAULT_FACING =
@@ -218,6 +219,10 @@
 class VideoCaptureManagerTest : public testing::Test {
  public:
   VideoCaptureManagerTest() {}
+
+  VideoCaptureManagerTest(const VideoCaptureManagerTest&) = delete;
+  VideoCaptureManagerTest& operator=(const VideoCaptureManagerTest&) = delete;
+
   ~VideoCaptureManagerTest() override {}
 
   void HandleEnumerationResult(
@@ -356,9 +361,6 @@
   std::unique_ptr<MockFrameObserver> frame_observer_;
   WrappedDeviceFactory* video_capture_device_factory_;
   blink::MediaStreamDevices devices_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(VideoCaptureManagerTest);
 };
 
 // Test cases
diff --git a/content/browser/renderer_host/media/video_capture_unittest.cc b/content/browser/renderer_host/media/video_capture_unittest.cc
index d2dd3fc1..7f2d70e6 100644
--- a/content/browser/renderer_host/media/video_capture_unittest.cc
+++ b/content/browser/renderer_host/media/video_capture_unittest.cc
@@ -100,6 +100,10 @@
         audio_system_(
             std::make_unique<media::AudioSystemImpl>(audio_manager_.get())),
         task_runner_(base::ThreadTaskRunnerHandle::Get()) {}
+
+  VideoCaptureTest(const VideoCaptureTest&) = delete;
+  VideoCaptureTest& operator=(const VideoCaptureTest&) = delete;
+
   ~VideoCaptureTest() override { audio_manager_->Shutdown(); }
 
   void SetUp() override {
@@ -318,8 +322,6 @@
 
   std::unique_ptr<VideoCaptureHost> host_;
   mojo::Receiver<media::mojom::VideoCaptureObserver> observer_receiver_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(VideoCaptureTest);
 };
 
 // Construct and destruct all objects. This is a non trivial sequence.
diff --git a/content/browser/renderer_host/mixed_content_navigation_throttle.h b/content/browser/renderer_host/mixed_content_navigation_throttle.h
index e092d76..bdd2db4 100644
--- a/content/browser/renderer_host/mixed_content_navigation_throttle.h
+++ b/content/browser/renderer_host/mixed_content_navigation_throttle.h
@@ -40,6 +40,12 @@
       NavigationHandle* navigation_handle);
 
   MixedContentNavigationThrottle(NavigationHandle* navigation_handle);
+
+  MixedContentNavigationThrottle(const MixedContentNavigationThrottle&) =
+      delete;
+  MixedContentNavigationThrottle& operator=(
+      const MixedContentNavigationThrottle&) = delete;
+
   ~MixedContentNavigationThrottle() override;
 
   // NavigationThrottle overrides.
@@ -79,8 +85,6 @@
   // navigation throttling steps. These values are reported to the respective
   // renderer process after each mixed content check is finished.
   std::set<blink::mojom::WebFeature> mixed_content_features_;
-
-  DISALLOW_COPY_AND_ASSIGN(MixedContentNavigationThrottle);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/mock_render_widget_host.h b/content/browser/renderer_host/mock_render_widget_host.h
index d8de319..6742d97 100644
--- a/content/browser/renderer_host/mock_render_widget_host.h
+++ b/content/browser/renderer_host/mock_render_widget_host.h
@@ -29,6 +29,9 @@
   using RenderWidgetHostImpl::RendererExited;
   using RenderWidgetHostImpl::visual_properties_ack_pending_;
 
+  MockRenderWidgetHost(const MockRenderWidgetHost&) = delete;
+  MockRenderWidgetHost& operator=(const MockRenderWidgetHost&) = delete;
+
   ~MockRenderWidgetHost() override;
 
   void OnTouchEventAck(const TouchEventWithLatencyInfo& event,
@@ -90,7 +93,6 @@
       mojo::PendingAssociatedRemote<blink::mojom::Widget> pending_blink_widget);
 
   std::unique_ptr<FlingScheduler> fling_scheduler_;
-  DISALLOW_COPY_AND_ASSIGN(MockRenderWidgetHost);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/navigation_controller_android.cc b/content/browser/renderer_host/navigation_controller_android.cc
index a52b1a8..88de47e 100644
--- a/content/browser/renderer_host/navigation_controller_android.cc
+++ b/content/browser/renderer_host/navigation_controller_android.cc
@@ -87,6 +87,10 @@
 class MapData : public base::SupportsUserData::Data {
  public:
   MapData() = default;
+
+  MapData(const MapData&) = delete;
+  MapData& operator=(const MapData&) = delete;
+
   ~MapData() override = default;
 
   static MapData* Get(content::NavigationEntry* entry) {
@@ -110,8 +114,6 @@
 
  private:
   base::flat_map<std::string, std::u16string> map_;
-
-  DISALLOW_COPY_AND_ASSIGN(MapData);
 };
 
 }  // namespace
diff --git a/content/browser/renderer_host/navigation_controller_android.h b/content/browser/renderer_host/navigation_controller_android.h
index 051a551..6339eb4 100644
--- a/content/browser/renderer_host/navigation_controller_android.h
+++ b/content/browser/renderer_host/navigation_controller_android.h
@@ -24,6 +24,11 @@
  public:
   explicit NavigationControllerAndroid(
       NavigationControllerImpl* navigation_controller);
+
+  NavigationControllerAndroid(const NavigationControllerAndroid&) = delete;
+  NavigationControllerAndroid& operator=(const NavigationControllerAndroid&) =
+      delete;
+
   ~NavigationControllerAndroid();
 
   NavigationControllerImpl* navigation_controller() const {
@@ -149,8 +154,6 @@
  private:
   NavigationControllerImpl* navigation_controller_;
   base::android::ScopedJavaGlobalRef<jobject> obj_;
-
-  DISALLOW_COPY_AND_ASSIGN(NavigationControllerAndroid);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/navigation_controller_impl.h b/content/browser/renderer_host/navigation_controller_impl.h
index 9312225a..cfa40fbf 100644
--- a/content/browser/renderer_host/navigation_controller_impl.h
+++ b/content/browser/renderer_host/navigation_controller_impl.h
@@ -73,11 +73,14 @@
    public:
     explicit PendingEntryRef(
         base::WeakPtr<NavigationControllerImpl> controller);
+
+    PendingEntryRef(const PendingEntryRef&) = delete;
+    PendingEntryRef& operator=(const PendingEntryRef&) = delete;
+
     ~PendingEntryRef();
 
    private:
     base::WeakPtr<NavigationControllerImpl> controller_;
-    DISALLOW_COPY_AND_ASSIGN(PendingEntryRef);
   };
 
   NavigationControllerImpl(BrowserContext* browser_context,
diff --git a/content/browser/renderer_host/navigation_controller_impl_browsertest.cc b/content/browser/renderer_host/navigation_controller_impl_browsertest.cc
index c4be789..3954c89 100644
--- a/content/browser/renderer_host/navigation_controller_impl_browsertest.cc
+++ b/content/browser/renderer_host/navigation_controller_impl_browsertest.cc
@@ -11907,6 +11907,12 @@
       : DidCommitNavigationInterceptor(web_contents),
         did_trigger_history_navigation_(false),
         url_(url) {}
+
+  HistoryNavigationBeforeCommitInjector(
+      const HistoryNavigationBeforeCommitInjector&) = delete;
+  HistoryNavigationBeforeCommitInjector& operator=(
+      const HistoryNavigationBeforeCommitInjector&) = delete;
+
   ~HistoryNavigationBeforeCommitInjector() override {}
 
   bool did_trigger_history_navigation() const {
@@ -11930,8 +11936,6 @@
 
   bool did_trigger_history_navigation_;
   GURL url_;
-
-  DISALLOW_COPY_AND_ASSIGN(HistoryNavigationBeforeCommitInjector);
 };
 
 // Test which simulates a race condition between a cross-origin, same-process
diff --git a/content/browser/renderer_host/navigation_entry_impl.h b/content/browser/renderer_host/navigation_entry_impl.h
index 9ab06a1c..c3f4db2 100644
--- a/content/browser/renderer_host/navigation_entry_impl.h
+++ b/content/browser/renderer_host/navigation_entry_impl.h
@@ -108,6 +108,10 @@
       ui::PageTransition transition_type,
       bool is_renderer_initiated,
       scoped_refptr<network::SharedURLLoaderFactory> blob_url_loader_factory);
+
+  NavigationEntryImpl(const NavigationEntryImpl&) = delete;
+  NavigationEntryImpl& operator=(const NavigationEntryImpl&) = delete;
+
   ~NavigationEntryImpl() override;
 
   // NavigationEntry implementation:
@@ -552,8 +556,6 @@
   // with implement back-forward cache.
   // It is preserved at commit but not persisted.
   scoped_refptr<BackForwardCacheMetrics> back_forward_cache_metrics_;
-
-  DISALLOW_COPY_AND_ASSIGN(NavigationEntryImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/navigation_request.cc b/content/browser/renderer_host/navigation_request.cc
index b0fd0e2..73850715 100644
--- a/content/browser/renderer_host/navigation_request.cc
+++ b/content/browser/renderer_host/navigation_request.cc
@@ -5390,7 +5390,7 @@
   previous_main_frame_url_ = previous_main_frame_url;
   navigation_type_ = navigation_type;
 
-  if (net_error_ != net::OK) {
+  if (DidEncounterError()) {
     EnterChildTraceEvent("DidCommitNavigation: error page", this);
     SetState(DID_COMMIT_ERROR_PAGE);
   } else {
diff --git a/content/browser/renderer_host/navigation_request_unittest.cc b/content/browser/renderer_host/navigation_request_unittest.cc
index 495f568..0044df5 100644
--- a/content/browser/renderer_host/navigation_request_unittest.cc
+++ b/content/browser/renderer_host/navigation_request_unittest.cc
@@ -460,6 +460,12 @@
   explicit GetRenderFrameHostOnFailureNavigationThrottle(
       NavigationHandle* handle)
       : NavigationThrottle(handle) {}
+
+  GetRenderFrameHostOnFailureNavigationThrottle(
+      const GetRenderFrameHostOnFailureNavigationThrottle&) = delete;
+  GetRenderFrameHostOnFailureNavigationThrottle& operator=(
+      const GetRenderFrameHostOnFailureNavigationThrottle&) = delete;
+
   ~GetRenderFrameHostOnFailureNavigationThrottle() override = default;
 
   NavigationThrottle::ThrottleCheckResult WillFailRequest() override {
@@ -470,9 +476,6 @@
   const char* GetNameForLogging() override {
     return "GetRenderFrameHostOnFailureNavigationThrottle";
   }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(GetRenderFrameHostOnFailureNavigationThrottle);
 };
 
 class ThrottleTestContentBrowserClient : public ContentBrowserClient {
diff --git a/content/browser/renderer_host/navigation_throttle_runner.h b/content/browser/renderer_host/navigation_throttle_runner.h
index 993d66c..3f1e948 100644
--- a/content/browser/renderer_host/navigation_throttle_runner.h
+++ b/content/browser/renderer_host/navigation_throttle_runner.h
@@ -37,6 +37,10 @@
   };
 
   NavigationThrottleRunner(Delegate* delegate, int64_t navigation_id);
+
+  NavigationThrottleRunner(const NavigationThrottleRunner&) = delete;
+  NavigationThrottleRunner& operator=(const NavigationThrottleRunner&) = delete;
+
   ~NavigationThrottleRunner();
 
   // Will call the appropriate NavigationThrottle function based on |event| on
@@ -88,8 +92,6 @@
   // The event currently being processed.
   Event current_event_ = Event::NoEvent;
   base::WeakPtrFactory<NavigationThrottleRunner> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(NavigationThrottleRunner);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/navigator.h b/content/browser/renderer_host/navigator.h
index 643db85d..6937fb4b 100644
--- a/content/browser/renderer_host/navigator.h
+++ b/content/browser/renderer_host/navigator.h
@@ -56,6 +56,10 @@
             FrameTree& frame_tree,
             NavigatorDelegate* delegate,
             NavigationControllerDelegate* navigation_controller_delegate);
+
+  Navigator(const Navigator&) = delete;
+  Navigator& operator=(const Navigator&) = delete;
+
   ~Navigator();
 
   // This method verifies that a navigation to |url| doesn't commit into a WebUI
@@ -236,8 +240,6 @@
   NavigatorDelegate* delegate_;
 
   std::unique_ptr<Navigator::NavigationMetricsData> navigation_data_;
-
-  DISALLOW_COPY_AND_ASSIGN(Navigator);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/origin_policy_throttle.h b/content/browser/renderer_host/origin_policy_throttle.h
index a742038..27668a4c 100644
--- a/content/browser/renderer_host/origin_policy_throttle.h
+++ b/content/browser/renderer_host/origin_policy_throttle.h
@@ -45,6 +45,9 @@
   // This will exempt the entire origin, rather than only the given URL.
   static void AddExceptionFor(BrowserContext* browser_context, const GURL& url);
 
+  OriginPolicyThrottle(const OriginPolicyThrottle&) = delete;
+  OriginPolicyThrottle& operator=(const OriginPolicyThrottle&) = delete;
+
   ~OriginPolicyThrottle() override;
 
   ThrottleCheckResult WillStartRequest() override;
@@ -59,8 +62,6 @@
   explicit OriginPolicyThrottle(NavigationHandle* handle);
 
   static absl::optional<network::OriginPolicy>& GetTestOriginPolicy();
-
-  DISALLOW_COPY_AND_ASSIGN(OriginPolicyThrottle);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/overscroll_controller.h b/content/browser/renderer_host/overscroll_controller.h
index 64c511d..8c66e7a 100644
--- a/content/browser/renderer_host/overscroll_controller.h
+++ b/content/browser/renderer_host/overscroll_controller.h
@@ -46,6 +46,10 @@
 class CONTENT_EXPORT OverscrollController {
  public:
   OverscrollController();
+
+  OverscrollController(const OverscrollController&) = delete;
+  OverscrollController& operator=(const OverscrollController&) = delete;
+
   virtual ~OverscrollController();
 
   // This must be called when dispatching any event from the
@@ -185,8 +189,6 @@
   // overscroll if it is not completed yet.
   // Timestamp for the first inertial event (fling) in current stream.
   absl::optional<base::TimeTicks> first_inertial_event_time_;
-
-  DISALLOW_COPY_AND_ASSIGN(OverscrollController);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/overscroll_controller_delegate.h b/content/browser/renderer_host/overscroll_controller_delegate.h
index 9495f7b..9fb48a5 100644
--- a/content/browser/renderer_host/overscroll_controller_delegate.h
+++ b/content/browser/renderer_host/overscroll_controller_delegate.h
@@ -21,6 +21,11 @@
 class CONTENT_EXPORT OverscrollControllerDelegate {
  public:
   OverscrollControllerDelegate();
+
+  OverscrollControllerDelegate(const OverscrollControllerDelegate&) = delete;
+  OverscrollControllerDelegate& operator=(const OverscrollControllerDelegate&) =
+      delete;
+
   virtual ~OverscrollControllerDelegate();
 
   // Get the size of the display containing the view corresponding to the
@@ -52,7 +57,6 @@
 
  private:
   base::WeakPtrFactory<OverscrollControllerDelegate> weak_factory_{this};
-  DISALLOW_COPY_AND_ASSIGN(OverscrollControllerDelegate);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/p2p/socket_dispatcher_host.h b/content/browser/renderer_host/p2p/socket_dispatcher_host.h
index 98f7715..c8e3900c 100644
--- a/content/browser/renderer_host/p2p/socket_dispatcher_host.h
+++ b/content/browser/renderer_host/p2p/socket_dispatcher_host.h
@@ -29,6 +29,10 @@
     : public network::mojom::P2PTrustedSocketManagerClient {
  public:
   explicit P2PSocketDispatcherHost(int render_process_id);
+
+  P2PSocketDispatcherHost(const P2PSocketDispatcherHost&) = delete;
+  P2PSocketDispatcherHost& operator=(const P2PSocketDispatcherHost&) = delete;
+
   ~P2PSocketDispatcherHost() override;
 
   // Starts the RTP packet header dumping.
@@ -73,8 +77,6 @@
   network::mojom::P2PNetworkNotificationClientPtr network_notification_client_;
 
   base::WeakPtrFactory<P2PSocketDispatcherHost> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(P2PSocketDispatcherHost);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/pepper/browser_ppapi_host_impl.h b/content/browser/renderer_host/pepper/browser_ppapi_host_impl.h
index 86f10c4..dd2bd73 100644
--- a/content/browser/renderer_host/pepper/browser_ppapi_host_impl.h
+++ b/content/browser/renderer_host/pepper/browser_ppapi_host_impl.h
@@ -52,6 +52,10 @@
                        const base::FilePath& profile_data_directory,
                        bool in_process,
                        bool external_plugin);
+
+  BrowserPpapiHostImpl(const BrowserPpapiHostImpl&) = delete;
+  BrowserPpapiHostImpl& operator=(const BrowserPpapiHostImpl&) = delete;
+
   ~BrowserPpapiHostImpl() override;
 
   // BrowserPpapiHost.
@@ -142,8 +146,6 @@
   std::unordered_map<PP_Instance, std::unique_ptr<InstanceData>> instance_map_;
 
   scoped_refptr<HostMessageFilter> message_filter_;
-
-  DISALLOW_COPY_AND_ASSIGN(BrowserPpapiHostImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/pepper/browser_ppapi_host_test.h b/content/browser/renderer_host/pepper/browser_ppapi_host_test.h
index 4137e75..f4669f9 100644
--- a/content/browser/renderer_host/pepper/browser_ppapi_host_test.h
+++ b/content/browser/renderer_host/pepper/browser_ppapi_host_test.h
@@ -20,6 +20,10 @@
 class BrowserPpapiHostTest {
  public:
   BrowserPpapiHostTest();
+
+  BrowserPpapiHostTest(const BrowserPpapiHostTest&) = delete;
+  BrowserPpapiHostTest& operator=(const BrowserPpapiHostTest&) = delete;
+
   virtual ~BrowserPpapiHostTest();
 
   ppapi::proxy::ResourceMessageTestSink& sink() { return sink_; }
@@ -29,8 +33,6 @@
   ppapi::proxy::ResourceMessageTestSink sink_;
 
   std::unique_ptr<BrowserPpapiHostImpl> ppapi_host_;
-
-  DISALLOW_COPY_AND_ASSIGN(BrowserPpapiHostTest);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/pepper/content_browser_pepper_host_factory.h b/content/browser/renderer_host/pepper/content_browser_pepper_host_factory.h
index 5c1c335..23ef419 100644
--- a/content/browser/renderer_host/pepper/content_browser_pepper_host_factory.h
+++ b/content/browser/renderer_host/pepper/content_browser_pepper_host_factory.h
@@ -31,6 +31,11 @@
   // Non-owning pointer to the filter must outlive this class.
   explicit ContentBrowserPepperHostFactory(BrowserPpapiHostImpl* host);
 
+  ContentBrowserPepperHostFactory(const ContentBrowserPepperHostFactory&) =
+      delete;
+  ContentBrowserPepperHostFactory& operator=(
+      const ContentBrowserPepperHostFactory&) = delete;
+
   ~ContentBrowserPepperHostFactory() override;
 
   std::unique_ptr<ppapi::host::ResourceHost> CreateResourceHost(
@@ -60,8 +65,6 @@
 
   // Non-owning pointer.
   BrowserPpapiHostImpl* host_;
-
-  DISALLOW_COPY_AND_ASSIGN(ContentBrowserPepperHostFactory);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/pepper/pepper_browser_font_singleton_host.h b/content/browser/renderer_host/pepper/pepper_browser_font_singleton_host.h
index b438e00..9ce104e3 100644
--- a/content/browser/renderer_host/pepper/pepper_browser_font_singleton_host.h
+++ b/content/browser/renderer_host/pepper/pepper_browser_font_singleton_host.h
@@ -17,10 +17,13 @@
   PepperBrowserFontSingletonHost(BrowserPpapiHost* host,
                                  PP_Instance instance,
                                  PP_Resource resource);
-  ~PepperBrowserFontSingletonHost() override;
 
- private:
-  DISALLOW_COPY_AND_ASSIGN(PepperBrowserFontSingletonHost);
+  PepperBrowserFontSingletonHost(const PepperBrowserFontSingletonHost&) =
+      delete;
+  PepperBrowserFontSingletonHost& operator=(
+      const PepperBrowserFontSingletonHost&) = delete;
+
+  ~PepperBrowserFontSingletonHost() override;
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/pepper/pepper_external_file_ref_backend.h b/content/browser/renderer_host/pepper/pepper_external_file_ref_backend.h
index 774966b..06529f30 100644
--- a/content/browser/renderer_host/pepper/pepper_external_file_ref_backend.h
+++ b/content/browser/renderer_host/pepper/pepper_external_file_ref_backend.h
@@ -29,6 +29,11 @@
   PepperExternalFileRefBackend(ppapi::host::PpapiHost* host,
                                int render_process_id,
                                const base::FilePath& path);
+
+  PepperExternalFileRefBackend(const PepperExternalFileRefBackend&) = delete;
+  PepperExternalFileRefBackend& operator=(const PepperExternalFileRefBackend&) =
+      delete;
+
   ~PepperExternalFileRefBackend() override;
 
   // PepperFileRefBackend overrides.
@@ -70,8 +75,6 @@
   scoped_refptr<base::SequencedTaskRunner> task_runner_;
 
   base::WeakPtrFactory<PepperExternalFileRefBackend> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(PepperExternalFileRefBackend);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/pepper/pepper_file_io_host.h b/content/browser/renderer_host/pepper/pepper_file_io_host.h
index fb92ba2..e7f480f 100644
--- a/content/browser/renderer_host/pepper/pepper_file_io_host.h
+++ b/content/browser/renderer_host/pepper/pepper_file_io_host.h
@@ -43,6 +43,10 @@
   PepperFileIOHost(BrowserPpapiHostImpl* host,
                    PP_Instance instance,
                    PP_Resource resource);
+
+  PepperFileIOHost(const PepperFileIOHost&) = delete;
+  PepperFileIOHost& operator=(const PepperFileIOHost&) = delete;
+
   ~PepperFileIOHost() override;
 
   // ppapi::host::ResourceHost override.
@@ -147,8 +151,6 @@
   bool check_quota_;
 
   ppapi::FileIOStateManager state_manager_;
-
-  DISALLOW_COPY_AND_ASSIGN(PepperFileIOHost);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/pepper/pepper_file_ref_host.h b/content/browser/renderer_host/pepper/pepper_file_ref_host.h
index 875559b0..1a87c65 100644
--- a/content/browser/renderer_host/pepper/pepper_file_ref_host.h
+++ b/content/browser/renderer_host/pepper/pepper_file_ref_host.h
@@ -68,6 +68,9 @@
                     PP_Resource resource,
                     const base::FilePath& external_path);
 
+  PepperFileRefHost(const PepperFileRefHost&) = delete;
+  PepperFileRefHost& operator=(const PepperFileRefHost&) = delete;
+
   ~PepperFileRefHost() override;
 
   // ResourceHost overrides.
@@ -106,8 +109,6 @@
   std::unique_ptr<PepperFileRefBackend> backend_;
   base::WeakPtr<PepperFileSystemBrowserHost> file_system_host_;
   PP_FileSystemType fs_type_;
-
-  DISALLOW_COPY_AND_ASSIGN(PepperFileRefHost);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/pepper/pepper_file_system_browser_host.h b/content/browser/renderer_host/pepper/pepper_file_system_browser_host.h
index 7f2f945..e24cb2cb 100644
--- a/content/browser/renderer_host/pepper/pepper_file_system_browser_host.h
+++ b/content/browser/renderer_host/pepper/pepper_file_system_browser_host.h
@@ -41,6 +41,11 @@
                               PP_Instance instance,
                               PP_Resource resource,
                               PP_FileSystemType type);
+
+  PepperFileSystemBrowserHost(const PepperFileSystemBrowserHost&) = delete;
+  PepperFileSystemBrowserHost& operator=(const PepperFileSystemBrowserHost&) =
+      delete;
+
   ~PepperFileSystemBrowserHost() override;
 
   // Opens the PepperFileSystemBrowserHost to use an existing file system at the
@@ -243,8 +248,6 @@
   scoped_refptr<IOThreadState> io_thread_state_;
 
   base::WeakPtrFactory<PepperFileSystemBrowserHost> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(PepperFileSystemBrowserHost);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/pepper/pepper_file_system_browser_host_unittest.cc b/content/browser/renderer_host/pepper/pepper_file_system_browser_host_unittest.cc
index 73d079d..30353a1 100644
--- a/content/browser/renderer_host/pepper/pepper_file_system_browser_host_unittest.cc
+++ b/content/browser/renderer_host/pepper/pepper_file_system_browser_host_unittest.cc
@@ -20,6 +20,12 @@
                                         public BrowserPpapiHostTest {
  public:
   PepperFileSystemBrowserHostTest() {}
+
+  PepperFileSystemBrowserHostTest(const PepperFileSystemBrowserHostTest&) =
+      delete;
+  PepperFileSystemBrowserHostTest& operator=(
+      const PepperFileSystemBrowserHostTest&) = delete;
+
   ~PepperFileSystemBrowserHostTest() override {}
 
   void SetUp() override {
@@ -41,8 +47,6 @@
   // Needed because |host_| has checks for UI/IO threads.
   BrowserTaskEnvironment task_environment_;
   std::unique_ptr<PepperFileSystemBrowserHost> host_;
-
-  DISALLOW_COPY_AND_ASSIGN(PepperFileSystemBrowserHostTest);
 };
 
 TEST_F(PepperFileSystemBrowserHostTest, GeneratePluginId) {
diff --git a/content/browser/renderer_host/pepper/pepper_gamepad_host.h b/content/browser/renderer_host/pepper/pepper_gamepad_host.h
index bcc6077..e8dec127d 100644
--- a/content/browser/renderer_host/pepper/pepper_gamepad_host.h
+++ b/content/browser/renderer_host/pepper/pepper_gamepad_host.h
@@ -43,6 +43,9 @@
                     PP_Instance instance,
                     PP_Resource resource);
 
+  PepperGamepadHost(const PepperGamepadHost&) = delete;
+  PepperGamepadHost& operator=(const PepperGamepadHost&) = delete;
+
   ~PepperGamepadHost() override;
 
   int32_t OnResourceMessageReceived(
@@ -65,8 +68,6 @@
   bool is_started_;
 
   base::WeakPtrFactory<PepperGamepadHost> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(PepperGamepadHost);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/pepper/pepper_gamepad_host_unittest.cc b/content/browser/renderer_host/pepper/pepper_gamepad_host_unittest.cc
index 2621058..6985df5e 100644
--- a/content/browser/renderer_host/pepper/pepper_gamepad_host_unittest.cc
+++ b/content/browser/renderer_host/pepper/pepper_gamepad_host_unittest.cc
@@ -32,6 +32,10 @@
                               public BrowserPpapiHostTest {
  public:
   PepperGamepadHostTest() {}
+
+  PepperGamepadHostTest(const PepperGamepadHostTest&) = delete;
+  PepperGamepadHostTest& operator=(const PepperGamepadHostTest&) = delete;
+
   ~PepperGamepadHostTest() override {}
 
   void ConstructService(const device::Gamepads& test_data) {
@@ -45,8 +49,6 @@
 
  protected:
   std::unique_ptr<device::GamepadServiceTestConstructor> service_;
-
-  DISALLOW_COPY_AND_ASSIGN(PepperGamepadHostTest);
 };
 
 }  // namespace
diff --git a/content/browser/renderer_host/pepper/pepper_internal_file_ref_backend.h b/content/browser/renderer_host/pepper/pepper_internal_file_ref_backend.h
index a300722..ecc9a4d 100644
--- a/content/browser/renderer_host/pepper/pepper_internal_file_ref_backend.h
+++ b/content/browser/renderer_host/pepper/pepper_internal_file_ref_backend.h
@@ -31,6 +31,11 @@
       int render_process_id,
       base::WeakPtr<PepperFileSystemBrowserHost> fs_host,
       const std::string& path);
+
+  PepperInternalFileRefBackend(const PepperInternalFileRefBackend&) = delete;
+  PepperInternalFileRefBackend& operator=(const PepperInternalFileRefBackend&) =
+      delete;
+
   ~PepperInternalFileRefBackend() override;
 
   // PepperFileRefBackend overrides.
@@ -102,8 +107,6 @@
   mutable storage::FileSystemURL fs_url_;
 
   base::WeakPtrFactory<PepperInternalFileRefBackend> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(PepperInternalFileRefBackend);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/pepper/pepper_network_monitor_host.h b/content/browser/renderer_host/pepper/pepper_network_monitor_host.h
index 626b76e..9596bc12 100644
--- a/content/browser/renderer_host/pepper/pepper_network_monitor_host.h
+++ b/content/browser/renderer_host/pepper/pepper_network_monitor_host.h
@@ -27,6 +27,9 @@
                            PP_Instance instance,
                            PP_Resource resource);
 
+  PepperNetworkMonitorHost(const PepperNetworkMonitorHost&) = delete;
+  PepperNetworkMonitorHost& operator=(const PepperNetworkMonitorHost&) = delete;
+
   ~PepperNetworkMonitorHost() override;
 
   // network::NetworkConnectionTracker::NetworkConnectionObserver interface.
@@ -45,8 +48,6 @@
   network::NetworkConnectionTracker* network_connection_tracker_;
 
   base::WeakPtrFactory<PepperNetworkMonitorHost> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(PepperNetworkMonitorHost);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/pepper/pepper_network_proxy_host.h b/content/browser/renderer_host/pepper/pepper_network_proxy_host.h
index 3f43756..5f00d57 100644
--- a/content/browser/renderer_host/pepper/pepper_network_proxy_host.h
+++ b/content/browser/renderer_host/pepper/pepper_network_proxy_host.h
@@ -44,6 +44,9 @@
                          PP_Instance instance,
                          PP_Resource resource);
 
+  PepperNetworkProxyHost(const PepperNetworkProxyHost&) = delete;
+  PepperNetworkProxyHost& operator=(const PepperNetworkProxyHost&) = delete;
+
   ~PepperNetworkProxyHost() override;
 
  private:
@@ -104,8 +107,6 @@
       pending_requests_;
 
   base::WeakPtrFactory<PepperNetworkProxyHost> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(PepperNetworkProxyHost);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/pepper/pepper_print_settings_manager.cc b/content/browser/renderer_host/pepper/pepper_print_settings_manager.cc
index 4653987..630ffc9 100644
--- a/content/browser/renderer_host/pepper/pepper_print_settings_manager.cc
+++ b/content/browser/renderer_host/pepper/pepper_print_settings_manager.cc
@@ -84,7 +84,7 @@
   std::unique_ptr<printing::PrintingContext> context(
       printing::PrintingContext::Create(&delegate));
   if (!context.get() ||
-      context->UseDefaultSettings() != printing::PrintingContext::OK) {
+      context->UseDefaultSettings() != printing::mojom::ResultCode::kSuccess) {
     return PepperPrintSettingsManager::Result(PP_PrintSettings_Dev(),
                                               PP_ERROR_FAILED);
   }
diff --git a/content/browser/renderer_host/pepper/pepper_print_settings_manager.h b/content/browser/renderer_host/pepper/pepper_print_settings_manager.h
index c099ee2..b569ea7b 100644
--- a/content/browser/renderer_host/pepper/pepper_print_settings_manager.h
+++ b/content/browser/renderer_host/pepper/pepper_print_settings_manager.h
@@ -35,6 +35,12 @@
     : public PepperPrintSettingsManager {
  public:
   PepperPrintSettingsManagerImpl() {}
+
+  PepperPrintSettingsManagerImpl(const PepperPrintSettingsManagerImpl&) =
+      delete;
+  PepperPrintSettingsManagerImpl& operator=(
+      const PepperPrintSettingsManagerImpl&) = delete;
+
   ~PepperPrintSettingsManagerImpl() override {}
 
   // PepperPrintSettingsManager implementation.
@@ -43,8 +49,6 @@
 
  private:
   static PepperPrintSettingsManager::Result ComputeDefaultPrintSettings();
-
-  DISALLOW_COPY_AND_ASSIGN(PepperPrintSettingsManagerImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/pepper/pepper_printing_host.h b/content/browser/renderer_host/pepper/pepper_printing_host.h
index 88edefa6..e8320ad 100644
--- a/content/browser/renderer_host/pepper/pepper_printing_host.h
+++ b/content/browser/renderer_host/pepper/pepper_printing_host.h
@@ -26,6 +26,10 @@
       PP_Instance instance,
       PP_Resource resource,
       std::unique_ptr<PepperPrintSettingsManager> print_settings_manager);
+
+  PepperPrintingHost(const PepperPrintingHost&) = delete;
+  PepperPrintingHost& operator=(const PepperPrintingHost&) = delete;
+
   ~PepperPrintingHost() override;
 
   // ppapi::host::ResourceHost implementation.
@@ -42,8 +46,6 @@
   std::unique_ptr<PepperPrintSettingsManager> print_settings_manager_;
 
   base::WeakPtrFactory<PepperPrintingHost> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(PepperPrintingHost);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/pepper/pepper_printing_host_unittest.cc b/content/browser/renderer_host/pepper/pepper_printing_host_unittest.cc
index a1275661..532ab8b 100644
--- a/content/browser/renderer_host/pepper/pepper_printing_host_unittest.cc
+++ b/content/browser/renderer_host/pepper/pepper_printing_host_unittest.cc
@@ -27,6 +27,12 @@
 class MockPepperPrintSettingsManager : public PepperPrintSettingsManager {
  public:
   MockPepperPrintSettingsManager(const PP_PrintSettings_Dev& settings);
+
+  MockPepperPrintSettingsManager(const MockPepperPrintSettingsManager&) =
+      delete;
+  MockPepperPrintSettingsManager& operator=(
+      const MockPepperPrintSettingsManager&) = delete;
+
   ~MockPepperPrintSettingsManager() override {}
 
   // PepperPrintSettingsManager implementation.
@@ -35,8 +41,6 @@
 
  private:
   PP_PrintSettings_Dev settings_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockPepperPrintSettingsManager);
 };
 
 MockPepperPrintSettingsManager::MockPepperPrintSettingsManager(
@@ -53,9 +57,10 @@
  public:
   PepperPrintingHostTest() {}
 
-  ~PepperPrintingHostTest() override {}
+  PepperPrintingHostTest(const PepperPrintingHostTest&) = delete;
+  PepperPrintingHostTest& operator=(const PepperPrintingHostTest&) = delete;
 
-  DISALLOW_COPY_AND_ASSIGN(PepperPrintingHostTest);
+  ~PepperPrintingHostTest() override {}
 };
 
 bool PP_SizeEqual(const PP_Size& lhs, const PP_Size& rhs) {
diff --git a/content/browser/renderer_host/pepper/pepper_proxy_lookup_helper.cc b/content/browser/renderer_host/pepper/pepper_proxy_lookup_helper.cc
index ad239ad2..bee6323 100644
--- a/content/browser/renderer_host/pepper/pepper_proxy_lookup_helper.cc
+++ b/content/browser/renderer_host/pepper/pepper_proxy_lookup_helper.cc
@@ -35,6 +35,9 @@
                        url, std::move(look_up_proxy_for_url_callback)));
   }
 
+  UIThreadHelper(const UIThreadHelper&) = delete;
+  UIThreadHelper& operator=(const UIThreadHelper&) = delete;
+
   ~UIThreadHelper() override { DCHECK_CURRENTLY_ON(BrowserThread::UI); }
 
  private:
@@ -68,8 +71,6 @@
 
   LookUpCompleteCallback look_up_complete_callback_;
   scoped_refptr<base::SequencedTaskRunner> callback_task_runner_;
-
-  DISALLOW_COPY_AND_ASSIGN(UIThreadHelper);
 };
 
 PepperProxyLookupHelper::PepperProxyLookupHelper() {}
diff --git a/content/browser/renderer_host/pepper/pepper_proxy_lookup_helper.h b/content/browser/renderer_host/pepper/pepper_proxy_lookup_helper.h
index 28e54b9..9c09833 100644
--- a/content/browser/renderer_host/pepper/pepper_proxy_lookup_helper.h
+++ b/content/browser/renderer_host/pepper/pepper_proxy_lookup_helper.h
@@ -42,6 +42,10 @@
       base::OnceCallback<void(absl::optional<net::ProxyInfo> proxy_info)>;
 
   PepperProxyLookupHelper();
+
+  PepperProxyLookupHelper(const PepperProxyLookupHelper&) = delete;
+  PepperProxyLookupHelper& operator=(const PepperProxyLookupHelper&) = delete;
+
   ~PepperProxyLookupHelper();
 
   // Starts a lookup for |url| on the UI thread. Invokes
@@ -63,8 +67,6 @@
   SEQUENCE_CHECKER(sequence_checker_);
 
   base::WeakPtrFactory<PepperProxyLookupHelper> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(PepperProxyLookupHelper);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/pepper/pepper_truetype_font_host.h b/content/browser/renderer_host/pepper/pepper_truetype_font_host.h
index 2ecd9ba5..f4cd10b 100644
--- a/content/browser/renderer_host/pepper/pepper_truetype_font_host.h
+++ b/content/browser/renderer_host/pepper/pepper_truetype_font_host.h
@@ -31,6 +31,9 @@
                          PP_Resource resource,
                          const ppapi::proxy::SerializedTrueTypeFontDesc& desc);
 
+  PepperTrueTypeFontHost(const PepperTrueTypeFontHost&) = delete;
+  PepperTrueTypeFontHost& operator=(const PepperTrueTypeFontHost&) = delete;
+
   ~PepperTrueTypeFontHost() override;
 
   int32_t OnResourceMessageReceived(
@@ -63,8 +66,6 @@
   bool initialize_completed_;
 
   base::WeakPtrFactory<PepperTrueTypeFontHost> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(PepperTrueTypeFontHost);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/pepper/quota_reservation_unittest.cc b/content/browser/renderer_host/pepper/quota_reservation_unittest.cc
index 7f56f8fa..dd192aa 100644
--- a/content/browser/renderer_host/pepper/quota_reservation_unittest.cc
+++ b/content/browser/renderer_host/pepper/quota_reservation_unittest.cc
@@ -43,6 +43,10 @@
 class FakeBackend : public QuotaReservationManager::QuotaBackend {
  public:
   FakeBackend() {}
+
+  FakeBackend(const FakeBackend&) = delete;
+  FakeBackend& operator=(const FakeBackend&) = delete;
+
   ~FakeBackend() override {}
 
   void ReserveQuota(
@@ -67,9 +71,6 @@
                            storage::FileSystemType type) override {}
   void DecrementDirtyCount(const url::Origin& origin,
                            storage::FileSystemType type) override {}
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(FakeBackend);
 };
 
 }  // namespace
@@ -77,6 +78,10 @@
 class QuotaReservationTest : public testing::Test {
  public:
   QuotaReservationTest() {}
+
+  QuotaReservationTest(const QuotaReservationTest&) = delete;
+  QuotaReservationTest& operator=(const QuotaReservationTest&) = delete;
+
   ~QuotaReservationTest() override {}
 
   void SetUp() override {
@@ -126,8 +131,6 @@
   base::test::SingleThreadTaskEnvironment task_environment_;
   base::ScopedTempDir work_dir_;
   std::unique_ptr<storage::QuotaReservationManager> reservation_manager_;
-
-  DISALLOW_COPY_AND_ASSIGN(QuotaReservationTest);
 };
 
 void GotReservedQuota(int64_t* reserved_quota_ptr,
diff --git a/content/browser/renderer_host/popup_menu_helper_mac.h b/content/browser/renderer_host/popup_menu_helper_mac.h
index 78171b41..c44cc46d 100644
--- a/content/browser/renderer_host/popup_menu_helper_mac.h
+++ b/content/browser/renderer_host/popup_menu_helper_mac.h
@@ -50,6 +50,10 @@
       Delegate* delegate,
       RenderFrameHost* render_frame_host,
       mojo::PendingRemote<blink::mojom::PopupMenuClient> popup_client);
+
+  PopupMenuHelper(const PopupMenuHelper&) = delete;
+  PopupMenuHelper& operator=(const PopupMenuHelper&) = delete;
+
   ~PopupMenuHelper() override;
   void Hide();
 
@@ -88,8 +92,6 @@
   std::unique_ptr<base::ScopedPumpMessagesInPrivateModes> pump_in_fade_;
 
   base::WeakPtrFactory<PopupMenuHelper> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(PopupMenuHelper);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/render_frame_host_android.h b/content/browser/renderer_host/render_frame_host_android.h
index 41b7cfe7..37352c5a 100644
--- a/content/browser/renderer_host/render_frame_host_android.h
+++ b/content/browser/renderer_host/render_frame_host_android.h
@@ -25,6 +25,10 @@
 class RenderFrameHostAndroid : public base::SupportsUserData::Data {
  public:
   RenderFrameHostAndroid(RenderFrameHostImpl* render_frame_host);
+
+  RenderFrameHostAndroid(const RenderFrameHostAndroid&) = delete;
+  RenderFrameHostAndroid& operator=(const RenderFrameHostAndroid&) = delete;
+
   ~RenderFrameHostAndroid() override;
 
   base::android::ScopedJavaLocalRef<jobject> GetJavaObject();
@@ -100,8 +104,6 @@
  private:
   RenderFrameHostImpl* const render_frame_host_;
   JavaObjectWeakGlobalRef obj_;
-
-  DISALLOW_COPY_AND_ASSIGN(RenderFrameHostAndroid);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc
index 57556f9..e68e2d5 100644
--- a/content/browser/renderer_host/render_frame_host_impl.cc
+++ b/content/browser/renderer_host/render_frame_host_impl.cc
@@ -1210,6 +1210,10 @@
     receiver_.Bind(std::move(receiver));
   }
 
+  DroppedInterfaceRequestLogger(const DroppedInterfaceRequestLogger&) = delete;
+  DroppedInterfaceRequestLogger& operator=(
+      const DroppedInterfaceRequestLogger&) = delete;
+
   ~DroppedInterfaceRequestLogger() override {
     UMA_HISTOGRAM_EXACT_LINEAR("RenderFrameHostImpl.DroppedInterfaceRequests",
                                num_dropped_requests_, 20);
@@ -1231,8 +1235,6 @@
  private:
   mojo::Receiver<blink::mojom::BrowserInterfaceBroker> receiver_{this};
   int num_dropped_requests_ = 0;
-
-  DISALLOW_COPY_AND_ASSIGN(DroppedInterfaceRequestLogger);
 };
 
 struct PendingNavigation {
diff --git a/content/browser/renderer_host/render_frame_host_impl.h b/content/browser/renderer_host/render_frame_host_impl.h
index 6c33633..26509d2 100644
--- a/content/browser/renderer_host/render_frame_host_impl.h
+++ b/content/browser/renderer_host/render_frame_host_impl.h
@@ -294,6 +294,9 @@
   static void SetCodeCacheHostReceiverHandlerForTesting(
       CodeCacheHostReceiverHandler handler);
 
+  RenderFrameHostImpl(const RenderFrameHostImpl&) = delete;
+  RenderFrameHostImpl& operator=(const RenderFrameHostImpl&) = delete;
+
   ~RenderFrameHostImpl() override;
 
   // RenderFrameHost
@@ -1569,9 +1572,7 @@
                  browser_reported_scheduler_tracked_features_);
   }
 
-  // Returns a PrefetchedSignedExchangeCache which is attached to |this| iff
-  // SignedExchangeSubresourcePrefetch feature or
-  // SignedExchangePrefetchCacheForNavigations feature is enabled.
+  // Returns a PrefetchedSignedExchangeCache which is attached to |this|.
   scoped_refptr<PrefetchedSignedExchangeCache>
   EnsurePrefetchedSignedExchangeCache();
 
@@ -3985,8 +3986,6 @@
 
   // NOTE: This must be the last member.
   base::WeakPtrFactory<RenderFrameHostImpl> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(RenderFrameHostImpl);
 };
 
 // Used when DCHECK_STATE_TRANSITION triggers.
diff --git a/content/browser/renderer_host/render_frame_host_impl_browsertest.cc b/content/browser/renderer_host/render_frame_host_impl_browsertest.cc
index 512b5ee..ab18bf82 100644
--- a/content/browser/renderer_host/render_frame_host_impl_browsertest.cc
+++ b/content/browser/renderer_host/render_frame_host_impl_browsertest.cc
@@ -107,6 +107,12 @@
   PrerenderTestContentBrowserClient()
       : override_enabled_(false),
         visibility_override_(PageVisibilityState::kVisible) {}
+
+  PrerenderTestContentBrowserClient(const PrerenderTestContentBrowserClient&) =
+      delete;
+  PrerenderTestContentBrowserClient& operator=(
+      const PrerenderTestContentBrowserClient&) = delete;
+
   ~PrerenderTestContentBrowserClient() override {}
 
   void EnableVisibilityOverride(PageVisibilityState visibility_override) {
@@ -124,8 +130,6 @@
  private:
   bool override_enabled_;
   PageVisibilityState visibility_override_;
-
-  DISALLOW_COPY_AND_ASSIGN(PrerenderTestContentBrowserClient);
 };
 
 const char kTrustMeUrl[] = "trustme://host/path/";
@@ -151,6 +155,11 @@
                                                    response_body);
   }
 
+  FirstPartySchemeContentBrowserClient(
+      const FirstPartySchemeContentBrowserClient&) = delete;
+  FirstPartySchemeContentBrowserClient& operator=(
+      const FirstPartySchemeContentBrowserClient&) = delete;
+
   ~FirstPartySchemeContentBrowserClient() override = default;
 
   bool ShouldTreatURLSchemeAsFirstPartyWhenTopLevel(
@@ -182,8 +191,6 @@
   std::unique_ptr<network::TestURLLoaderFactory> trustme_factory_;
   std::unique_ptr<network::TestURLLoaderFactory>
       trustmeifembeddingsecure_factory_;
-
-  DISALLOW_COPY_AND_ASSIGN(FirstPartySchemeContentBrowserClient);
 };
 
 }  // anonymous namespace
@@ -459,6 +466,11 @@
  public:
   TestJavaScriptDialogManager()
       : message_loop_runner_(new MessageLoopRunner), url_invalidate_count_(0) {}
+
+  TestJavaScriptDialogManager(const TestJavaScriptDialogManager&) = delete;
+  TestJavaScriptDialogManager& operator=(const TestJavaScriptDialogManager&) =
+      delete;
+
   ~TestJavaScriptDialogManager() override {}
 
   // This waits until either WCD::BeforeUnloadFired is called (the unload has
@@ -552,8 +564,6 @@
 
   // The |proceed| value returned by the last unload event.
   bool proceed_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(TestJavaScriptDialogManager);
 };
 
 // A RenderFrameHostImpl that discards callback for BeforeUnload.
@@ -1844,6 +1854,10 @@
         interface_name_(interface_name),
         request_callback_(callback) {}
 
+  ScopedInterfaceRequestMonitor(const ScopedInterfaceRequestMonitor&) = delete;
+  ScopedInterfaceRequestMonitor& operator=(
+      const ScopedInterfaceRequestMonitor&) = delete;
+
   ~ScopedInterfaceRequestMonitor() override {
     auto* old_impl = receiver().SwapImplForTesting(impl_);
     DCHECK_EQ(old_impl, this);
@@ -1871,8 +1885,6 @@
 
   std::string interface_name_;
   base::RepeatingClosure request_callback_;
-
-  DISALLOW_COPY_AND_ASSIGN(ScopedInterfaceRequestMonitor);
 };
 
 // Calls |callback| whenever a navigation finishes in |render_frame_host|.
diff --git a/content/browser/renderer_host/render_frame_host_manager_browsertest.cc b/content/browser/renderer_host/render_frame_host_manager_browsertest.cc
index b246757d..b37166b 100644
--- a/content/browser/renderer_host/render_frame_host_manager_browsertest.cc
+++ b/content/browser/renderer_host/render_frame_host_manager_browsertest.cc
@@ -5522,6 +5522,12 @@
   PageEffectiveURLContentBrowserClient(const GURL& url_to_modify,
                                        const GURL& url_to_return)
       : url_to_modify_(url_to_modify), url_to_return_(url_to_return) {}
+
+  PageEffectiveURLContentBrowserClient(
+      const PageEffectiveURLContentBrowserClient&) = delete;
+  PageEffectiveURLContentBrowserClient& operator=(
+      const PageEffectiveURLContentBrowserClient&) = delete;
+
   ~PageEffectiveURLContentBrowserClient() override = default;
 
  private:
@@ -5534,8 +5540,6 @@
 
   GURL url_to_modify_;
   GURL url_to_return_;
-
-  DISALLOW_COPY_AND_ASSIGN(PageEffectiveURLContentBrowserClient);
 };
 
 // Ensure that same-document navigations for URLs with effective URLs don't
@@ -8667,6 +8671,12 @@
     feature_list_.InitAndEnableFeature(
         features::kProcessSharingWithStrictSiteInstances);
   }
+
+  RenderFrameHostManagerDefaultProcessTest(
+      const RenderFrameHostManagerDefaultProcessTest&) = delete;
+  RenderFrameHostManagerDefaultProcessTest& operator=(
+      const RenderFrameHostManagerDefaultProcessTest&) = delete;
+
   ~RenderFrameHostManagerDefaultProcessTest() override = default;
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
@@ -8681,8 +8691,6 @@
 
  private:
   base::test::ScopedFeatureList feature_list_;
-
-  DISALLOW_COPY_AND_ASSIGN(RenderFrameHostManagerDefaultProcessTest);
 };
 
 // Ensure that the default process can be used for URLs that don't assign a site
@@ -8977,14 +8985,17 @@
     : public RenderFrameHostManagerTest {
  public:
   RenderFrameHostManagerNoSiteIsolationTest() = default;
+
+  RenderFrameHostManagerNoSiteIsolationTest(
+      const RenderFrameHostManagerNoSiteIsolationTest&) = delete;
+  RenderFrameHostManagerNoSiteIsolationTest& operator=(
+      const RenderFrameHostManagerNoSiteIsolationTest&) = delete;
+
   ~RenderFrameHostManagerNoSiteIsolationTest() override = default;
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
     command_line->AppendSwitch(switches::kDisableSiteIsolation);
   }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(RenderFrameHostManagerNoSiteIsolationTest);
 };
 
 // Ensure that when a process that allows any site gets reused by new
diff --git a/content/browser/renderer_host/render_frame_host_manager_unittest.cc b/content/browser/renderer_host/render_frame_host_manager_unittest.cc
index 36ba1d9..d7081501 100644
--- a/content/browser/renderer_host/render_frame_host_manager_unittest.cc
+++ b/content/browser/renderer_host/render_frame_host_manager_unittest.cc
@@ -94,6 +94,12 @@
     : public WebUIControllerFactory {
  public:
   RenderFrameHostManagerTestWebUIControllerFactory() {}
+
+  RenderFrameHostManagerTestWebUIControllerFactory(
+      const RenderFrameHostManagerTestWebUIControllerFactory&) = delete;
+  RenderFrameHostManagerTestWebUIControllerFactory& operator=(
+      const RenderFrameHostManagerTestWebUIControllerFactory&) = delete;
+
   ~RenderFrameHostManagerTestWebUIControllerFactory() override {}
 
   // WebUIFactory implementation.
@@ -121,14 +127,17 @@
                       const GURL& url) override {
     return HasWebUIScheme(url);
   }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(RenderFrameHostManagerTestWebUIControllerFactory);
 };
 
 class BeforeUnloadFiredWebContentsDelegate : public WebContentsDelegate {
  public:
   BeforeUnloadFiredWebContentsDelegate() {}
+
+  BeforeUnloadFiredWebContentsDelegate(
+      const BeforeUnloadFiredWebContentsDelegate&) = delete;
+  BeforeUnloadFiredWebContentsDelegate& operator=(
+      const BeforeUnloadFiredWebContentsDelegate&) = delete;
+
   ~BeforeUnloadFiredWebContentsDelegate() override {}
 
   void BeforeUnloadFired(WebContents* web_contents,
@@ -136,14 +145,15 @@
                          bool* proceed_to_fire_unload) override {
     *proceed_to_fire_unload = proceed;
   }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(BeforeUnloadFiredWebContentsDelegate);
 };
 
 class CloseWebContentsDelegate : public WebContentsDelegate {
  public:
   CloseWebContentsDelegate() : close_called_(false) {}
+
+  CloseWebContentsDelegate(const CloseWebContentsDelegate&) = delete;
+  CloseWebContentsDelegate& operator=(const CloseWebContentsDelegate&) = delete;
+
   ~CloseWebContentsDelegate() override {}
 
   void CloseContents(WebContents* web_contents) override {
@@ -154,8 +164,6 @@
 
  private:
   bool close_called_;
-
-  DISALLOW_COPY_AND_ASSIGN(CloseWebContentsDelegate);
 };
 
 // This observer keeps track of the last deleted RenderViewHost to avoid
diff --git a/content/browser/renderer_host/render_frame_metadata_provider_impl.h b/content/browser/renderer_host/render_frame_metadata_provider_impl.h
index 1bcda30..0efb8790 100644
--- a/content/browser/renderer_host/render_frame_metadata_provider_impl.h
+++ b/content/browser/renderer_host/render_frame_metadata_provider_impl.h
@@ -35,6 +35,12 @@
   RenderFrameMetadataProviderImpl(
       scoped_refptr<base::SingleThreadTaskRunner> task_runner,
       FrameTokenMessageQueue* frame_token_message_queue);
+
+  RenderFrameMetadataProviderImpl(const RenderFrameMetadataProviderImpl&) =
+      delete;
+  RenderFrameMetadataProviderImpl& operator=(
+      const RenderFrameMetadataProviderImpl&) = delete;
+
   ~RenderFrameMetadataProviderImpl() override;
 
   void AddObserver(Observer* observer) override;
@@ -108,8 +114,6 @@
   absl::optional<bool> pending_report_all_frame_submission_for_testing_;
 
   base::WeakPtrFactory<RenderFrameMetadataProviderImpl> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(RenderFrameMetadataProviderImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/render_frame_proxy_host.h b/content/browser/renderer_host/render_frame_proxy_host.h
index 79f82fd9..0c03ea58f 100644
--- a/content/browser/renderer_host/render_frame_proxy_host.h
+++ b/content/browser/renderer_host/render_frame_proxy_host.h
@@ -103,6 +103,10 @@
   RenderFrameProxyHost(SiteInstance* site_instance,
                        scoped_refptr<RenderViewHostImpl> render_view_host,
                        FrameTreeNode* frame_tree_node);
+
+  RenderFrameProxyHost(const RenderFrameProxyHost&) = delete;
+  RenderFrameProxyHost& operator=(const RenderFrameProxyHost&) = delete;
+
   ~RenderFrameProxyHost() override;
 
   RenderProcessHost* GetProcess() { return process_; }
@@ -337,8 +341,6 @@
       remote_main_frame_host_receiver_{this};
 
   blink::RemoteFrameToken frame_token_;
-
-  DISALLOW_COPY_AND_ASSIGN(RenderFrameProxyHost);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/render_process_host_browsertest.cc b/content/browser/renderer_host/render_process_host_browsertest.cc
index a0bf902..577b75f 100644
--- a/content/browser/renderer_host/render_process_host_browsertest.cc
+++ b/content/browser/renderer_host/render_process_host_browsertest.cc
@@ -548,6 +548,11 @@
     observed_host_ = host;
   }
 
+  RenderProcessHostObserverCounter(const RenderProcessHostObserverCounter&) =
+      delete;
+  RenderProcessHostObserverCounter& operator=(
+      const RenderProcessHostObserverCounter&) = delete;
+
   ~RenderProcessHostObserverCounter() override {
     if (observing_)
       observed_host_->RemoveObserver(this);
@@ -578,8 +583,6 @@
   int destroyed_count_ = 0;
   bool observing_ = false;
   RenderProcessHost* observed_host_ = nullptr;
-
-  DISALLOW_COPY_AND_ASSIGN(RenderProcessHostObserverCounter);
 };
 
 // Check that the spare renderer is properly destroyed via DisableRefCounts().
diff --git a/content/browser/renderer_host/render_process_host_unittest.cc b/content/browser/renderer_host/render_process_host_unittest.cc
index 70d0080b..de666cc 100644
--- a/content/browser/renderer_host/render_process_host_unittest.cc
+++ b/content/browser/renderer_host/render_process_host_unittest.cc
@@ -944,6 +944,12 @@
 class SpareRenderProcessHostUnitTest : public RenderViewHostImplTestHarness {
  public:
   SpareRenderProcessHostUnitTest() {}
+
+  SpareRenderProcessHostUnitTest(const SpareRenderProcessHostUnitTest&) =
+      delete;
+  SpareRenderProcessHostUnitTest& operator=(
+      const SpareRenderProcessHostUnitTest&) = delete;
+
   ~SpareRenderProcessHostUnitTest() override = default;
 
  protected:
@@ -979,9 +985,6 @@
   }
 
   MockRenderProcessHostFactory rph_factory_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(SpareRenderProcessHostUnitTest);
 };
 
 using SpareProcessMaybeTakeAction =
diff --git a/content/browser/renderer_host/render_view_host_browsertest.cc b/content/browser/renderer_host/render_view_host_browsertest.cc
index 24778086..634b8b4 100644
--- a/content/browser/renderer_host/render_view_host_browsertest.cc
+++ b/content/browser/renderer_host/render_view_host_browsertest.cc
@@ -36,6 +36,12 @@
   explicit RenderViewHostTestWebContentsObserver(WebContents* web_contents)
       : WebContentsObserver(web_contents),
         navigation_count_(0) {}
+
+  RenderViewHostTestWebContentsObserver(
+      const RenderViewHostTestWebContentsObserver&) = delete;
+  RenderViewHostTestWebContentsObserver& operator=(
+      const RenderViewHostTestWebContentsObserver&) = delete;
+
   ~RenderViewHostTestWebContentsObserver() override {}
 
   void DidFinishNavigation(NavigationHandle* navigation_handle) override {
@@ -57,8 +63,6 @@
  private:
   net::IPEndPoint observed_remote_endpoint_;
   int navigation_count_;
-
-  DISALLOW_COPY_AND_ASSIGN(RenderViewHostTestWebContentsObserver);
 };
 
 IN_PROC_BROWSER_TEST_F(RenderViewHostTest, FrameNavigateSocketAddress) {
diff --git a/content/browser/renderer_host/render_view_host_unittest.cc b/content/browser/renderer_host/render_view_host_unittest.cc
index 49c11c6..d7af96f5 100644
--- a/content/browser/renderer_host/render_view_host_unittest.cc
+++ b/content/browser/renderer_host/render_view_host_unittest.cc
@@ -39,19 +39,26 @@
 class RenderViewHostTestBrowserClient : public TestContentBrowserClient {
  public:
   RenderViewHostTestBrowserClient() {}
+
+  RenderViewHostTestBrowserClient(const RenderViewHostTestBrowserClient&) =
+      delete;
+  RenderViewHostTestBrowserClient& operator=(
+      const RenderViewHostTestBrowserClient&) = delete;
+
   ~RenderViewHostTestBrowserClient() override {}
 
   bool IsHandledURL(const GURL& url) override {
     return url.scheme() == url::kFileScheme;
   }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(RenderViewHostTestBrowserClient);
 };
 
 class RenderViewHostTest : public RenderViewHostImplTestHarness {
  public:
   RenderViewHostTest() : old_browser_client_(nullptr) {}
+
+  RenderViewHostTest(const RenderViewHostTest&) = delete;
+  RenderViewHostTest& operator=(const RenderViewHostTest&) = delete;
+
   ~RenderViewHostTest() override {}
 
   void SetUp() override {
@@ -67,8 +74,6 @@
  private:
   RenderViewHostTestBrowserClient test_browser_client_;
   ContentBrowserClient* old_browser_client_;
-
-  DISALLOW_COPY_AND_ASSIGN(RenderViewHostTest);
 };
 
 // Ensure we do not grant bindings to a process shared with unprivileged views.
diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc
index 6b8fe3a..e521c7a 100644
--- a/content/browser/renderer_host/render_widget_host_impl.cc
+++ b/content/browser/renderer_host/render_widget_host_impl.cc
@@ -198,6 +198,11 @@
 class RenderWidgetHostIteratorImpl : public RenderWidgetHostIterator {
  public:
   RenderWidgetHostIteratorImpl() = default;
+
+  RenderWidgetHostIteratorImpl(const RenderWidgetHostIteratorImpl&) = delete;
+  RenderWidgetHostIteratorImpl& operator=(const RenderWidgetHostIteratorImpl&) =
+      delete;
+
   ~RenderWidgetHostIteratorImpl() override = default;
 
   void Add(RenderWidgetHost* host) {
@@ -218,8 +223,6 @@
  private:
   std::vector<RenderWidgetHostID> hosts_;
   size_t current_index_ = 0;
-
-  DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostIteratorImpl);
 };
 
 std::vector<DropData::Metadata> DropDataToMetaData(const DropData& drop_data) {
diff --git a/content/browser/renderer_host/render_widget_host_impl.h b/content/browser/renderer_host/render_widget_host_impl.h
index b7a3b2b..98cfb087 100644
--- a/content/browser/renderer_host/render_widget_host_impl.h
+++ b/content/browser/renderer_host/render_widget_host_impl.h
@@ -177,6 +177,9 @@
       bool hidden,
       std::unique_ptr<FrameTokenMessageQueue> frame_token_message_queue);
 
+  RenderWidgetHostImpl(const RenderWidgetHostImpl&) = delete;
+  RenderWidgetHostImpl& operator=(const RenderWidgetHostImpl&) = delete;
+
   ~RenderWidgetHostImpl() override;
 
   // Similar to RenderWidgetHost::FromID, but returning the Impl object.
@@ -1408,8 +1411,6 @@
       user_input_active_handle_;
 
   base::WeakPtrFactory<RenderWidgetHostImpl> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/render_widget_host_input_event_router.h b/content/browser/renderer_host/render_widget_host_input_event_router.h
index 47d4a26..f5ea0821 100644
--- a/content/browser/renderer_host/render_widget_host_input_event_router.h
+++ b/content/browser/renderer_host/render_widget_host_input_event_router.h
@@ -79,6 +79,12 @@
       public viz::HitTestRegionObserver {
  public:
   RenderWidgetHostInputEventRouter();
+
+  RenderWidgetHostInputEventRouter(const RenderWidgetHostInputEventRouter&) =
+      delete;
+  RenderWidgetHostInputEventRouter& operator=(
+      const RenderWidgetHostInputEventRouter&) = delete;
+
   ~RenderWidgetHostInputEventRouter() final;
 
   void OnRenderWidgetHostViewBaseDestroyed(
@@ -459,8 +465,6 @@
 
   base::WeakPtrFactory<RenderWidgetHostInputEventRouter> weak_ptr_factory_{
       this};
-
-  DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostInputEventRouter);
   friend class RenderWidgetHostInputEventRouterTest;
   FRIEND_TEST_ALL_PREFIXES(SitePerProcessHitTestBrowserTest,
                            CacheCoordinateTransformUponMouseDown);
diff --git a/content/browser/renderer_host/render_widget_host_input_event_router_unittest.cc b/content/browser/renderer_host/render_widget_host_input_event_router_unittest.cc
index 08d896f..45e6c75 100644
--- a/content/browser/renderer_host/render_widget_host_input_event_router_unittest.cc
+++ b/content/browser/renderer_host/render_widget_host_input_event_router_unittest.cc
@@ -57,6 +57,9 @@
         use_zoom_for_device_scale_factor);
   }
 
+  MockFrameConnector(const MockFrameConnector&) = delete;
+  MockFrameConnector& operator=(const MockFrameConnector&) = delete;
+
   ~MockFrameConnector() override {
     if (view_) {
       view_->SetFrameConnector(nullptr);
@@ -75,8 +78,6 @@
  private:
   RenderWidgetHostViewBase* parent_view_;
   RenderWidgetHostViewBase* root_view_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockFrameConnector);
 };
 
 // Used as a target for the RenderWidgetHostInputEventRouter. We record what
diff --git a/content/browser/renderer_host/render_widget_host_unittest.cc b/content/browser/renderer_host/render_widget_host_unittest.cc
index c73913d4..d8ec1d1d 100644
--- a/content/browser/renderer_host/render_widget_host_unittest.cc
+++ b/content/browser/renderer_host/render_widget_host_unittest.cc
@@ -110,12 +110,13 @@
   explicit RenderWidgetHostProcess(BrowserContext* browser_context)
       : MockRenderProcessHost(browser_context) {
   }
+
+  RenderWidgetHostProcess(const RenderWidgetHostProcess&) = delete;
+  RenderWidgetHostProcess& operator=(const RenderWidgetHostProcess&) = delete;
+
   ~RenderWidgetHostProcess() override {}
 
   bool IsInitializedAndNotDead() override { return true; }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostProcess);
 };
 
 // TestView --------------------------------------------------------------------
@@ -249,6 +250,12 @@
 class MockRenderViewHostDelegateView : public RenderViewHostDelegateView {
  public:
   MockRenderViewHostDelegateView() = default;
+
+  MockRenderViewHostDelegateView(const MockRenderViewHostDelegateView&) =
+      delete;
+  MockRenderViewHostDelegateView& operator=(
+      const MockRenderViewHostDelegateView&) = delete;
+
   ~MockRenderViewHostDelegateView() override = default;
 
   int start_dragging_count() const { return start_dragging_count_; }
@@ -265,8 +272,6 @@
 
  private:
   int start_dragging_count_ = 0;
-
-  DISALLOW_COPY_AND_ASSIGN(MockRenderViewHostDelegateView);
 };
 
 // FakeRenderFrameMetadataObserver -----------------------------------------
@@ -283,6 +288,12 @@
       mojo::PendingReceiver<cc::mojom::RenderFrameMetadataObserver> receiver,
       mojo::PendingRemote<cc::mojom::RenderFrameMetadataObserverClient>
           client_remote);
+
+  FakeRenderFrameMetadataObserver(const FakeRenderFrameMetadataObserver&) =
+      delete;
+  FakeRenderFrameMetadataObserver& operator=(
+      const FakeRenderFrameMetadataObserver&) = delete;
+
   ~FakeRenderFrameMetadataObserver() override {}
 
 #if defined(OS_ANDROID)
@@ -294,7 +305,6 @@
   mojo::PendingReceiver<cc::mojom::RenderFrameMetadataObserver> receiver_;
   mojo::PendingRemote<cc::mojom::RenderFrameMetadataObserverClient>
       client_remote_;
-  DISALLOW_COPY_AND_ASSIGN(FakeRenderFrameMetadataObserver);
 };
 
 FakeRenderFrameMetadataObserver::FakeRenderFrameMetadataObserver(
@@ -496,6 +506,10 @@
 class RenderWidgetHostTest : public testing::Test {
  public:
   RenderWidgetHostTest() : last_simulated_event_time_(ui::EventTimeForNow()) {}
+
+  RenderWidgetHostTest(const RenderWidgetHostTest&) = delete;
+  RenderWidgetHostTest& operator=(const RenderWidgetHostTest&) = delete;
+
   ~RenderWidgetHostTest() override = default;
 
   bool KeyPressEventCallback(const NativeWebKeyboardEvent& /* event */) {
@@ -797,8 +811,6 @@
 
  private:
   blink::SyntheticWebTouchEvent touch_event_;
-
-  DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostTest);
 };
 
 // RenderWidgetHostWithSourceTest ----------------------------------------------
diff --git a/content/browser/renderer_host/render_widget_host_view_android_unittest.cc b/content/browser/renderer_host/render_widget_host_view_android_unittest.cc
index a495db0a..d89a852 100644
--- a/content/browser/renderer_host/render_widget_host_view_android_unittest.cc
+++ b/content/browser/renderer_host/render_widget_host_view_android_unittest.cc
@@ -31,6 +31,12 @@
 class RenderWidgetHostViewAndroidTest : public testing::Test {
  public:
   RenderWidgetHostViewAndroidTest();
+
+  RenderWidgetHostViewAndroidTest(const RenderWidgetHostViewAndroidTest&) =
+      delete;
+  RenderWidgetHostViewAndroidTest& operator=(
+      const RenderWidgetHostViewAndroidTest&) = delete;
+
   ~RenderWidgetHostViewAndroidTest() override {}
 
   RenderWidgetHostViewAndroid* render_widget_host_view_android() {
@@ -77,8 +83,6 @@
   RenderWidgetHostViewAndroid* render_widget_host_view_android_;
 
   BrowserTaskEnvironment task_environment_;
-
-  DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostViewAndroidTest);
 };
 
 RenderWidgetHostViewAndroidTest::RenderWidgetHostViewAndroidTest()
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc
index afdd5aa..9dab9d7 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
@@ -151,6 +151,10 @@
                           {ui::ET_MOUSE_PRESSED, ui::ET_TOUCH_PRESSED});
   }
 
+  EventObserverForPopupExit(const EventObserverForPopupExit&) = delete;
+  EventObserverForPopupExit& operator=(const EventObserverForPopupExit&) =
+      delete;
+
   ~EventObserverForPopupExit() override {
     aura::Env::GetInstance()->RemoveEventObserver(this);
   }
@@ -162,8 +166,6 @@
 
  private:
   RenderWidgetHostViewAura* rwhva_;
-
-  DISALLOW_COPY_AND_ASSIGN(EventObserverForPopupExit);
 };
 
 void RenderWidgetHostViewAura::ApplyEventObserverForPopupExit(
@@ -206,6 +208,9 @@
     view_->window_->AddObserver(this);
   }
 
+  WindowObserver(const WindowObserver&) = delete;
+  WindowObserver& operator=(const WindowObserver&) = delete;
+
   ~WindowObserver() override { view_->window_->RemoveObserver(this); }
 
   // Overridden from aura::WindowObserver:
@@ -231,8 +236,6 @@
 
  private:
   RenderWidgetHostViewAura* view_;
-
-  DISALLOW_COPY_AND_ASSIGN(WindowObserver);
 };
 
 // This class provides functionality to observe the ancestors of the RWHVA for
@@ -258,6 +261,9 @@
     }
   }
 
+  WindowAncestorObserver(const WindowAncestorObserver&) = delete;
+  WindowAncestorObserver& operator=(const WindowAncestorObserver&) = delete;
+
   ~WindowAncestorObserver() override {
     RemoveAncestorObservers();
   }
@@ -280,8 +286,6 @@
 
   RenderWidgetHostViewAura* view_;
   std::set<aura::Window*> ancestors_;
-
-  DISALLOW_COPY_AND_ASSIGN(WindowAncestorObserver);
 };
 
 
diff --git a/content/browser/renderer_host/render_widget_host_view_aura_browsertest.cc b/content/browser/renderer_host/render_widget_host_view_aura_browsertest.cc
index c8c3596a..01fa011 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura_browsertest.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura_browsertest.cc
@@ -50,6 +50,10 @@
 class FakeWebContentsDelegate : public WebContentsDelegate {
  public:
   FakeWebContentsDelegate() = default;
+
+  FakeWebContentsDelegate(const FakeWebContentsDelegate&) = delete;
+  FakeWebContentsDelegate& operator=(const FakeWebContentsDelegate&) = delete;
+
   ~FakeWebContentsDelegate() override = default;
 
   void SetShowStaleContentOnEviction(bool value) {
@@ -62,8 +66,6 @@
 
  private:
   bool show_stale_content_on_eviction_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(FakeWebContentsDelegate);
 };
 
 }  // namespace
@@ -446,6 +448,12 @@
 class RenderWidgetHostViewAuraActiveWidgetTest : public ContentBrowserTest {
  public:
   RenderWidgetHostViewAuraActiveWidgetTest() = default;
+
+  RenderWidgetHostViewAuraActiveWidgetTest(
+      const RenderWidgetHostViewAuraActiveWidgetTest&) = delete;
+  RenderWidgetHostViewAuraActiveWidgetTest& operator=(
+      const RenderWidgetHostViewAuraActiveWidgetTest&) = delete;
+
   ~RenderWidgetHostViewAuraActiveWidgetTest() override = default;
 
   // Helper function to check |isActivated| for a given frame.
@@ -472,9 +480,6 @@
 
     ASSERT_TRUE(embedded_test_server()->Start());
   }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostViewAuraActiveWidgetTest);
 };
 
 // In this test, toggling the value of 'active' state changes the
diff --git a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
index 244c3ef3f..07097e7 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
@@ -180,6 +180,10 @@
       : window_(window_to_observe) {
     window_->AddObserver(this);
   }
+
+  TestWindowObserver(const TestWindowObserver&) = delete;
+  TestWindowObserver& operator=(const TestWindowObserver&) = delete;
+
   ~TestWindowObserver() override {
     if (window_)
       window_->RemoveObserver(this);
@@ -200,8 +204,6 @@
 
   // Was |window_| destroyed?
   bool destroyed_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestWindowObserver);
 };
 
 class FakeWindowEventDispatcher : public aura::WindowEventDispatcher {
@@ -235,6 +237,10 @@
     InstallDelegatedFrameHostClient(this);
   }
 
+  FakeRenderWidgetHostViewAura(const FakeRenderWidgetHostViewAura&) = delete;
+  FakeRenderWidgetHostViewAura& operator=(const FakeRenderWidgetHostViewAura&) =
+      delete;
+
   ~FakeRenderWidgetHostViewAura() override = default;
 
   void UseFakeDispatcher() {
@@ -277,16 +283,16 @@
 
   gfx::Size last_frame_size_;
   FakeWindowEventDispatcher* dispatcher_;
-
- private:
-
-  DISALLOW_COPY_AND_ASSIGN(FakeRenderWidgetHostViewAura);
 };
 
 // A layout manager that always resizes a child to the root window size.
 class FullscreenLayoutManager : public aura::LayoutManager {
  public:
   explicit FullscreenLayoutManager(aura::Window* owner) : owner_(owner) {}
+
+  FullscreenLayoutManager(const FullscreenLayoutManager&) = delete;
+  FullscreenLayoutManager& operator=(const FullscreenLayoutManager&) = delete;
+
   ~FullscreenLayoutManager() override {}
 
   // Overridden from aura::LayoutManager:
@@ -310,7 +316,6 @@
 
  private:
   aura::Window* owner_;
-  DISALLOW_COPY_AND_ASSIGN(FullscreenLayoutManager);
 };
 
 class MockRenderWidgetHostImpl : public RenderWidgetHostImpl {
@@ -436,6 +441,10 @@
 class TestScopedKeyboardHook : public aura::ScopedKeyboardHook {
  public:
   TestScopedKeyboardHook();
+
+  TestScopedKeyboardHook(const TestScopedKeyboardHook&) = delete;
+  TestScopedKeyboardHook& operator=(const TestScopedKeyboardHook&) = delete;
+
   ~TestScopedKeyboardHook() override;
 
   // aura::ScopedKeyboardHook override.
@@ -449,8 +458,6 @@
  private:
   bool keyboard_lock_active_ = false;
   absl::optional<ui::DomCode> locked_key_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestScopedKeyboardHook);
 };
 
 TestScopedKeyboardHook::TestScopedKeyboardHook() = default;
@@ -5397,11 +5404,16 @@
  public:
   TouchpadRenderWidgetHostViewAuraTest()
       : WithFeatureOverride(features::kTouchpadAsyncPinchEvents) {}
+
+  TouchpadRenderWidgetHostViewAuraTest(
+      const TouchpadRenderWidgetHostViewAuraTest&) = delete;
+  TouchpadRenderWidgetHostViewAuraTest& operator=(
+      const TouchpadRenderWidgetHostViewAuraTest&) = delete;
+
   ~TouchpadRenderWidgetHostViewAuraTest() override = default;
 
  private:
   base::test::ScopedFeatureList scoped_feature_list_;
-  DISALLOW_COPY_AND_ASSIGN(TouchpadRenderWidgetHostViewAuraTest);
 };
 
 INSTANTIATE_FEATURE_OVERRIDE_TEST_SUITE(TouchpadRenderWidgetHostViewAuraTest);
@@ -5745,6 +5757,12 @@
  public:
    RenderWidgetHostViewAuraWithViewHarnessTest()
       : view_(nullptr) {}
+
+   RenderWidgetHostViewAuraWithViewHarnessTest(
+       const RenderWidgetHostViewAuraWithViewHarnessTest&) = delete;
+   RenderWidgetHostViewAuraWithViewHarnessTest& operator=(
+       const RenderWidgetHostViewAuraWithViewHarnessTest&) = delete;
+
    ~RenderWidgetHostViewAuraWithViewHarnessTest() override {}
 
  protected:
@@ -5769,8 +5787,6 @@
 
  private:
   RenderWidgetHostViewAura* view_;
-
-  DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostViewAuraWithViewHarnessTest);
 };
 
 // Provides a mock implementation of the WebContentsViewDelegate class.
@@ -5781,6 +5797,10 @@
   MockWebContentsViewDelegate()
       : context_menu_request_received_(false) {}
 
+  MockWebContentsViewDelegate(const MockWebContentsViewDelegate&) = delete;
+  MockWebContentsViewDelegate& operator=(const MockWebContentsViewDelegate&) =
+      delete;
+
   ~MockWebContentsViewDelegate() override {}
 
   bool context_menu_request_received() const {
@@ -5806,8 +5826,6 @@
  private:
   bool context_menu_request_received_;
   ContextMenuParams context_menu_params_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockWebContentsViewDelegate);
 };
 
 // On Windows we don't want the context menu to be displayed in the context of
@@ -5881,6 +5899,10 @@
 class InputMethodAuraTestBase : public RenderWidgetHostViewAuraTest {
  public:
   InputMethodAuraTestBase() = default;
+
+  InputMethodAuraTestBase(const InputMethodAuraTestBase&) = delete;
+  InputMethodAuraTestBase& operator=(const InputMethodAuraTestBase&) = delete;
+
   ~InputMethodAuraTestBase() override = default;
 
   void SetUp() override {
@@ -6007,8 +6029,6 @@
   std::unique_ptr<AgentSchedulingGroupHost> third_agent_scheduling_group_host_;
   MockRenderWidgetHostImpl* widget_host_for_third_process_;
   TestRenderWidgetHostView* view_for_third_process_;
-
-  DISALLOW_COPY_AND_ASSIGN(InputMethodAuraTestBase);
 };
 
 // A group of tests which verify that the IME method results are routed to the
@@ -6021,6 +6041,11 @@
 class InputMethodResultAuraTest : public InputMethodAuraTestBase {
  public:
   InputMethodResultAuraTest() {}
+
+  InputMethodResultAuraTest(const InputMethodResultAuraTest&) = delete;
+  InputMethodResultAuraTest& operator=(const InputMethodResultAuraTest&) =
+      delete;
+
   ~InputMethodResultAuraTest() override {}
 
  protected:
@@ -6031,9 +6056,6 @@
     std::move(closure).Run();
     return process->sink().GetFirstMessageMatching(message_id);
   }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(InputMethodResultAuraTest);
 };
 
 // This test verifies ui::TextInputClient::SetCompositionText.
@@ -6227,6 +6249,10 @@
 class InputMethodStateAuraTest : public InputMethodAuraTestBase {
  public:
   InputMethodStateAuraTest() {}
+
+  InputMethodStateAuraTest(const InputMethodStateAuraTest&) = delete;
+  InputMethodStateAuraTest& operator=(const InputMethodStateAuraTest&) = delete;
+
   ~InputMethodStateAuraTest() override {}
 
  protected:
@@ -6241,9 +6267,6 @@
     return gfx::Rect(view->TransformPointToRootCoordSpace(rect.origin()),
                      rect.size());
   }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(InputMethodStateAuraTest);
 };
 
 // This test is for caret bounds which are calculated based on the tracked value
@@ -6537,6 +6560,12 @@
       public ui::InputMethodObserver {
  public:
   RenderWidgetHostViewAuraInputMethodTest() = default;
+
+  RenderWidgetHostViewAuraInputMethodTest(
+      const RenderWidgetHostViewAuraInputMethodTest&) = delete;
+  RenderWidgetHostViewAuraInputMethodTest& operator=(
+      const RenderWidgetHostViewAuraInputMethodTest&) = delete;
+
   ~RenderWidgetHostViewAuraInputMethodTest() override {}
   void SetUp() override {
     input_method_ = new ui::MockInputMethod(nullptr);
@@ -6560,8 +6589,6 @@
   // Not owned.
   ui::MockInputMethod* input_method_ = nullptr;
   const ui::TextInputClient* text_input_client_;
-
-  DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostViewAuraInputMethodTest);
 };
 
 // This test is for notifying InputMethod for surrounding text changes.
@@ -6684,6 +6711,12 @@
     : public RenderWidgetHostViewAuraTest {
  public:
   RenderWidgetHostViewAuraKeyboardTest() = default;
+
+  RenderWidgetHostViewAuraKeyboardTest(
+      const RenderWidgetHostViewAuraKeyboardTest&) = delete;
+  RenderWidgetHostViewAuraKeyboardTest& operator=(
+      const RenderWidgetHostViewAuraKeyboardTest&) = delete;
+
   ~RenderWidgetHostViewAuraKeyboardTest() override {}
   void SetUp() override {
     input_method_ = new RenderWidgetHostViewAuraKeyboardMockInputMethod();
@@ -6700,7 +6733,6 @@
  private:
   // Not owned.
   RenderWidgetHostViewAuraKeyboardMockInputMethod* input_method_ = nullptr;
-  DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostViewAuraKeyboardTest);
 };
 #endif
 
diff --git a/content/browser/renderer_host/render_widget_host_view_browsertest.cc b/content/browser/renderer_host/render_widget_host_view_browsertest.cc
index d19360f..37be31a 100644
--- a/content/browser/renderer_host/render_widget_host_view_browsertest.cc
+++ b/content/browser/renderer_host/render_widget_host_view_browsertest.cc
@@ -195,15 +195,18 @@
     : public RenderWidgetHostViewBrowserTest {
  public:
   NoCompositingRenderWidgetHostViewBrowserTest() {}
+
+  NoCompositingRenderWidgetHostViewBrowserTest(
+      const NoCompositingRenderWidgetHostViewBrowserTest&) = delete;
+  NoCompositingRenderWidgetHostViewBrowserTest& operator=(
+      const NoCompositingRenderWidgetHostViewBrowserTest&) = delete;
+
   ~NoCompositingRenderWidgetHostViewBrowserTest() override {}
 
   bool SetUpSourceSurface(const char* wait_message) override {
     NOTIMPLEMENTED();
     return true;
   }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(NoCompositingRenderWidgetHostViewBrowserTest);
 };
 
 // When creating the first RenderWidgetHostViewBase, the CompositorFrameSink can
diff --git a/content/browser/renderer_host/render_widget_host_view_mac_editcommand_helper.h b/content/browser/renderer_host/render_widget_host_view_mac_editcommand_helper.h
index dbbe792..9987e06 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac_editcommand_helper.h
+++ b/content/browser/renderer_host/render_widget_host_view_mac_editcommand_helper.h
@@ -35,6 +35,12 @@
 
  public:
   RenderWidgetHostViewMacEditCommandHelper();
+
+  RenderWidgetHostViewMacEditCommandHelper(
+      const RenderWidgetHostViewMacEditCommandHelper&) = delete;
+  RenderWidgetHostViewMacEditCommandHelper& operator=(
+      const RenderWidgetHostViewMacEditCommandHelper&) = delete;
+
   ~RenderWidgetHostViewMacEditCommandHelper();
 
   // Is a given menu item currently enabled?
@@ -63,7 +69,6 @@
  protected:
  private:
   std::unordered_set<std::string> edit_command_set_;
-  DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostViewMacEditCommandHelper);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm b/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm
index d2e5eb4..bafb30d 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm
+++ b/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm
@@ -350,6 +350,9 @@
             testing::Invoke(this, &MockRenderWidgetHostImpl::BlurImpl));
   }
 
+  MockRenderWidgetHostImpl(const MockRenderWidgetHostImpl&) = delete;
+  MockRenderWidgetHostImpl& operator=(const MockRenderWidgetHostImpl&) = delete;
+
   ~MockRenderWidgetHostImpl() override = default;
 
   // Extracts |latency_info| and stores it in |last_wheel_event_latency_info_|.
@@ -383,8 +386,6 @@
 
   ui::LatencyInfo last_wheel_event_latency_info_;
   MockWidgetInputHandler input_handler_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockRenderWidgetHostImpl);
 };
 
 // Generates the |length| of composition rectangle vector and save them to
@@ -1663,6 +1664,10 @@
 class InputMethodMacTest : public RenderWidgetHostViewMacTest {
  public:
   InputMethodMacTest() {}
+
+  InputMethodMacTest(const InputMethodMacTest&) = delete;
+  InputMethodMacTest& operator=(const InputMethodMacTest&) = delete;
+
   ~InputMethodMacTest() override {}
 
   void SetUp() override {
@@ -1724,8 +1729,6 @@
 
  private:
   std::unique_ptr<TestBrowserContext> child_browser_context_;
-
-  DISALLOW_COPY_AND_ASSIGN(InputMethodMacTest);
 };
 
 // This test will verify that calling unmarkText on the cocoa view will lead to
diff --git a/content/browser/renderer_host/render_widget_targeter.cc b/content/browser/renderer_host/render_widget_targeter.cc
index ffb600b..09557e4 100644
--- a/content/browser/renderer_host/render_widget_targeter.cc
+++ b/content/browser/renderer_host/render_widget_targeter.cc
@@ -63,6 +63,10 @@
         kTracingCategory, metric_name_,
         TRACE_ID_WITH_SCOPE("UmaTracker", TRACE_ID_LOCAL(id_)));
   }
+
+  TracingUmaTracker(const TracingUmaTracker&) = delete;
+  TracingUmaTracker& operator=(const TracingUmaTracker&) = delete;
+
   ~TracingUmaTracker() = default;
   TracingUmaTracker(TracingUmaTracker&& tracker) = default;
 
@@ -82,8 +86,6 @@
   const char* metric_name_;
 
   static int next_id_;
-
-  DISALLOW_COPY_AND_ASSIGN(TracingUmaTracker);
 };
 
 int TracingUmaTracker::next_id_ = 1;
diff --git a/content/browser/renderer_host/render_widget_targeter.h b/content/browser/renderer_host/render_widget_targeter.h
index 6280579..6f0042b 100644
--- a/content/browser/renderer_host/render_widget_targeter.h
+++ b/content/browser/renderer_host/render_widget_targeter.h
@@ -98,6 +98,10 @@
 
   // The delegate must outlive this targeter.
   explicit RenderWidgetTargeter(Delegate* delegate);
+
+  RenderWidgetTargeter(const RenderWidgetTargeter&) = delete;
+  RenderWidgetTargeter& operator=(const RenderWidgetTargeter&) = delete;
+
   ~RenderWidgetTargeter();
 
   // Finds the appropriate target inside |root_view| for |event|, and dispatches
@@ -142,6 +146,10 @@
                      RenderWidgetHostAtPointCallback);
     TargetingRequest(TargetingRequest&& request);
     TargetingRequest& operator=(TargetingRequest&& other);
+
+    TargetingRequest(const TargetingRequest&) = delete;
+    TargetingRequest& operator=(const TargetingRequest&) = delete;
+
     ~TargetingRequest();
 
     void RunCallback(RenderWidgetHostViewBase* target,
@@ -165,8 +173,6 @@
     // |event| if set is in the coordinate space of |root_view|.
     ui::WebScopedInputEvent event;
     ui::LatencyInfo latency;
-
-    DISALLOW_COPY_AND_ASSIGN(TargetingRequest);
   };
 
   void ResolveTargetingRequest(TargetingRequest);
@@ -259,8 +265,6 @@
 
   Delegate* const delegate_;
   base::WeakPtrFactory<RenderWidgetTargeter> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(RenderWidgetTargeter);
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/text_input_host_impl.h b/content/browser/renderer_host/text_input_host_impl.h
index 362cc68..40973c5 100644
--- a/content/browser/renderer_host/text_input_host_impl.h
+++ b/content/browser/renderer_host/text_input_host_impl.h
@@ -17,6 +17,10 @@
 class CONTENT_EXPORT TextInputHostImpl : public blink::mojom::TextInputHost {
  public:
   TextInputHostImpl();
+
+  TextInputHostImpl(const TextInputHostImpl&) = delete;
+  TextInputHostImpl& operator=(const TextInputHostImpl&) = delete;
+
   ~TextInputHostImpl() override;
 
   static void Create(
@@ -28,8 +32,6 @@
 
  private:
   SEQUENCE_CHECKER(sequence_checker_);
-
-  DISALLOW_COPY_AND_ASSIGN(TextInputHostImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/sandbox_ipc_linux.h b/content/browser/sandbox_ipc_linux.h
index de67154..39f73dd4 100644
--- a/content/browser/sandbox_ipc_linux.h
+++ b/content/browser/sandbox_ipc_linux.h
@@ -25,6 +25,10 @@
   // the other end of.
   // browser_socket: the browser's end of the sandbox IPC socketpair.
   SandboxIPCHandler(int lifeline_fd, int browser_socket);
+
+  SandboxIPCHandler(const SandboxIPCHandler&) = delete;
+  SandboxIPCHandler& operator=(const SandboxIPCHandler&) = delete;
+
   ~SandboxIPCHandler() override;
 
   void Run() override;
@@ -42,8 +46,6 @@
 
   const int lifeline_fd_;
   const int browser_socket_;
-
-  DISALLOW_COPY_AND_ASSIGN(SandboxIPCHandler);
 };
 
 }  // namespace content
diff --git a/content/browser/sandbox_support_mac_impl.h b/content/browser/sandbox_support_mac_impl.h
index ada813b..679d43b 100644
--- a/content/browser/sandbox_support_mac_impl.h
+++ b/content/browser/sandbox_support_mac_impl.h
@@ -20,6 +20,10 @@
 class SandboxSupportMacImpl : public mojom::SandboxSupportMac {
  public:
   SandboxSupportMacImpl();
+
+  SandboxSupportMacImpl(const SandboxSupportMacImpl&) = delete;
+  SandboxSupportMacImpl& operator=(const SandboxSupportMacImpl&) = delete;
+
   ~SandboxSupportMacImpl() override;
 
   void BindReceiver(mojo::PendingReceiver<mojom::SandboxSupportMac> receiver);
@@ -32,8 +36,6 @@
 
  private:
   mojo::ReceiverSet<mojom::SandboxSupportMac> receivers_;
-
-  DISALLOW_COPY_AND_ASSIGN(SandboxSupportMacImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/scheduler/responsiveness/calculator.h b/content/browser/scheduler/responsiveness/calculator.h
index 2cb52a5..f81c366 100644
--- a/content/browser/scheduler/responsiveness/calculator.h
+++ b/content/browser/scheduler/responsiveness/calculator.h
@@ -29,6 +29,10 @@
 class CONTENT_EXPORT Calculator {
  public:
   Calculator();
+
+  Calculator(const Calculator&) = delete;
+  Calculator& operator=(const Calculator&) = delete;
+
   virtual ~Calculator();
 
   // Must be called from the UI thread.
@@ -207,8 +211,6 @@
   const std::unique_ptr<base::android::ApplicationStatusListener>
       application_status_listener_;
 #endif
-
-  DISALLOW_COPY_AND_ASSIGN(Calculator);
 };
 
 }  // namespace responsiveness
diff --git a/content/browser/scheduler/responsiveness/message_loop_observer.h b/content/browser/scheduler/responsiveness/message_loop_observer.h
index 87cf862..107ff71 100644
--- a/content/browser/scheduler/responsiveness/message_loop_observer.h
+++ b/content/browser/scheduler/responsiveness/message_loop_observer.h
@@ -31,6 +31,10 @@
   // MessageLoop. The destructor will unregister the object.
   MessageLoopObserver(WillProcessTaskCallback will_process_task_callback,
                       DidProcessTaskCallback did_process_task_callback);
+
+  MessageLoopObserver(const MessageLoopObserver&) = delete;
+  MessageLoopObserver& operator=(const MessageLoopObserver&) = delete;
+
   ~MessageLoopObserver() override;
 
  private:
@@ -40,8 +44,6 @@
 
   const WillProcessTaskCallback will_process_task_callback_;
   const DidProcessTaskCallback did_process_task_callback_;
-
-  DISALLOW_COPY_AND_ASSIGN(MessageLoopObserver);
 };
 
 }  // namespace responsiveness
diff --git a/content/browser/scheduler/responsiveness/metric_source.h b/content/browser/scheduler/responsiveness/metric_source.h
index 9011c47..b2b28d0 100644
--- a/content/browser/scheduler/responsiveness/metric_source.h
+++ b/content/browser/scheduler/responsiveness/metric_source.h
@@ -65,6 +65,10 @@
   };
 
   explicit MetricSource(Delegate* delegate);
+
+  MetricSource(const MetricSource&) = delete;
+  MetricSource& operator=(const MetricSource&) = delete;
+
   virtual ~MetricSource();
 
   // Must be called immediately after the constructor. This cannot be called
@@ -99,8 +103,6 @@
   std::unique_ptr<MessageLoopObserver> message_loop_observer_io_;
 
   bool destroy_was_called_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(MetricSource);
 };
 
 }  // namespace responsiveness
diff --git a/content/browser/scheduler/responsiveness/native_event_observer.h b/content/browser/scheduler/responsiveness/native_event_observer.h
index f02cdc4b..b2d0c4a0 100644
--- a/content/browser/scheduler/responsiveness/native_event_observer.h
+++ b/content/browser/scheduler/responsiveness/native_event_observer.h
@@ -59,6 +59,10 @@
                       DidRunEventCallback did_run_event_callback);
 
 #if defined(OS_LINUX) || defined(OS_CHROMEOS)
+
+  NativeEventObserver(const NativeEventObserver&) = delete;
+  NativeEventObserver& operator=(const NativeEventObserver&) = delete;
+
   ~NativeEventObserver() override;
 #else
   virtual ~NativeEventObserver();
@@ -96,8 +100,6 @@
 
   WillRunEventCallback will_run_event_callback_;
   DidRunEventCallback did_run_event_callback_;
-
-  DISALLOW_COPY_AND_ASSIGN(NativeEventObserver);
 };
 
 }  // namespace responsiveness
diff --git a/content/browser/scoped_active_url.h b/content/browser/scoped_active_url.h
index 58f649a..cd2f935 100644
--- a/content/browser/scoped_active_url.h
+++ b/content/browser/scoped_active_url.h
@@ -40,14 +40,15 @@
   // the frame tree node of |view|'s main frame.
   explicit ScopedActiveURL(RenderViewHost* view);
 
+  ScopedActiveURL(const ScopedActiveURL&) = delete;
+  ScopedActiveURL& operator=(const ScopedActiveURL&) = delete;
+
   // Calls ContentClient::SetActiveURL with empty arguments (to reset the crash
   // keys).
   ~ScopedActiveURL();
 
  private:
   explicit ScopedActiveURL(FrameTreeNode* node);
-
-  DISALLOW_COPY_AND_ASSIGN(ScopedActiveURL);
 };
 
 }  // namespace content
diff --git a/content/browser/screen_orientation/screen_orientation_delegate_android.h b/content/browser/screen_orientation/screen_orientation_delegate_android.h
index f36fc1b..edec5a1 100644
--- a/content/browser/screen_orientation/screen_orientation_delegate_android.h
+++ b/content/browser/screen_orientation/screen_orientation_delegate_android.h
@@ -20,6 +20,12 @@
 class ScreenOrientationDelegateAndroid : public ScreenOrientationDelegate {
  public:
   ScreenOrientationDelegateAndroid();
+
+  ScreenOrientationDelegateAndroid(const ScreenOrientationDelegateAndroid&) =
+      delete;
+  ScreenOrientationDelegateAndroid& operator=(
+      const ScreenOrientationDelegateAndroid&) = delete;
+
   ~ScreenOrientationDelegateAndroid() override;
 
   // ScreenOrientationDelegate:
@@ -28,9 +34,6 @@
             device::mojom::ScreenOrientationLockType lock_orientation) override;
   bool ScreenOrientationProviderSupported() override;
   void Unlock(WebContents* web_contents) override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(ScreenOrientationDelegateAndroid);
 };
 
 } // namespace content
diff --git a/content/browser/screen_orientation/screen_orientation_provider.h b/content/browser/screen_orientation/screen_orientation_provider.h
index 735b45c1..938416f 100644
--- a/content/browser/screen_orientation/screen_orientation_provider.h
+++ b/content/browser/screen_orientation/screen_orientation_provider.h
@@ -28,6 +28,10 @@
  public:
   ScreenOrientationProvider(WebContents* web_contents);
 
+  ScreenOrientationProvider(const ScreenOrientationProvider&) = delete;
+  ScreenOrientationProvider& operator=(const ScreenOrientationProvider&) =
+      delete;
+
   ~ScreenOrientationProvider() override;
 
   void BindScreenOrientation(
@@ -83,8 +87,6 @@
   LockOrientationCallback pending_callback_;
 
   RenderFrameHostReceiverSet<device::mojom::ScreenOrientation> receivers_;
-
-  DISALLOW_COPY_AND_ASSIGN(ScreenOrientationProvider);
 };
 
 }  // namespace content
diff --git a/content/browser/screen_orientation/screen_orientation_provider_unittest.cc b/content/browser/screen_orientation/screen_orientation_provider_unittest.cc
index 95282b3..95ea14c 100644
--- a/content/browser/screen_orientation/screen_orientation_provider_unittest.cc
+++ b/content/browser/screen_orientation/screen_orientation_provider_unittest.cc
@@ -27,6 +27,10 @@
     ScreenOrientationProvider::SetDelegate(this);
   }
 
+  FakeScreenOrientationDelegate(const FakeScreenOrientationDelegate&) = delete;
+  FakeScreenOrientationDelegate& operator=(
+      const FakeScreenOrientationDelegate&) = delete;
+
   ~FakeScreenOrientationDelegate() override = default;
 
   bool FullScreenRequired(WebContents* web_contents) override {
@@ -52,13 +56,15 @@
 
   int lock_count_ = 0;
   int unlock_count_ = 0;
-
-  DISALLOW_COPY_AND_ASSIGN(FakeScreenOrientationDelegate);
 };
 
 class FakeWebContentsDelegate : public WebContentsDelegate {
  public:
   FakeWebContentsDelegate() = default;
+
+  FakeWebContentsDelegate(const FakeWebContentsDelegate&) = delete;
+  FakeWebContentsDelegate& operator=(const FakeWebContentsDelegate&) = delete;
+
   ~FakeWebContentsDelegate() override = default;
 
   void EnterFullscreenModeForTab(
@@ -77,8 +83,6 @@
 
  private:
   WebContents* fullscreened_contents_ = nullptr;
-
-  DISALLOW_COPY_AND_ASSIGN(FakeWebContentsDelegate);
 };
 
 void LockResultCallback(absl::optional<ScreenOrientationLockResult>* out_result,
diff --git a/content/browser/screenlock_monitor/screenlock_monitor.h b/content/browser/screenlock_monitor/screenlock_monitor.h
index 81b1e7c8..56dd277 100644
--- a/content/browser/screenlock_monitor/screenlock_monitor.h
+++ b/content/browser/screenlock_monitor/screenlock_monitor.h
@@ -24,6 +24,10 @@
 class CONTENT_EXPORT ScreenlockMonitor {
  public:
   ScreenlockMonitor(std::unique_ptr<ScreenlockMonitorSource> source);
+
+  ScreenlockMonitor(const ScreenlockMonitor&) = delete;
+  ScreenlockMonitor& operator=(const ScreenlockMonitor&) = delete;
+
   ~ScreenlockMonitor();
 
   // Get the process-wide ScreenlockMonitor (if not present, returns NULL).
@@ -44,8 +48,6 @@
 
   scoped_refptr<base::ObserverListThreadSafe<ScreenlockObserver>> observers_;
   std::unique_ptr<ScreenlockMonitorSource> source_;
-
-  DISALLOW_COPY_AND_ASSIGN(ScreenlockMonitor);
 };
 
 }  // namespace content
diff --git a/content/browser/screenlock_monitor/screenlock_monitor_device_source.h b/content/browser/screenlock_monitor/screenlock_monitor_device_source.h
index 2684da2b..604c114 100644
--- a/content/browser/screenlock_monitor/screenlock_monitor_device_source.h
+++ b/content/browser/screenlock_monitor/screenlock_monitor_device_source.h
@@ -38,6 +38,11 @@
     : public ScreenlockMonitorSource {
  public:
   ScreenlockMonitorDeviceSource();
+
+  ScreenlockMonitorDeviceSource(const ScreenlockMonitorDeviceSource&) = delete;
+  ScreenlockMonitorDeviceSource& operator=(
+      const ScreenlockMonitorDeviceSource&) = delete;
+
   ~ScreenlockMonitorDeviceSource() override;
 
 #if defined(OS_WIN)
@@ -59,6 +64,10 @@
   class SessionMessageWindow {
    public:
     SessionMessageWindow();
+
+    SessionMessageWindow(const SessionMessageWindow&) = delete;
+    SessionMessageWindow& operator=(const SessionMessageWindow&) = delete;
+
     ~SessionMessageWindow();
 
     static void SetFakeNotificationAPIsForTesting(
@@ -74,8 +83,6 @@
     static WTSUnRegisterSessionNotificationFunction
         unregister_session_notification_function_;
     std::unique_ptr<base::win::MessageWindow> window_;
-
-    DISALLOW_COPY_AND_ASSIGN(SessionMessageWindow);
   };
 
   SessionMessageWindow session_message_window_;
@@ -90,19 +97,18 @@
   class ScreenLockListener : public session_manager::SessionManagerObserver {
    public:
     ScreenLockListener();
+
+    ScreenLockListener(const ScreenLockListener&) = delete;
+    ScreenLockListener& operator=(const ScreenLockListener&) = delete;
+
     ~ScreenLockListener() override;
 
     // session_manager::SessionManagerObserver:
     void OnSessionStateChanged() override;
-
-   private:
-    DISALLOW_COPY_AND_ASSIGN(ScreenLockListener);
   };
 
   ScreenLockListener screenlock_listener_;
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
-
-  DISALLOW_COPY_AND_ASSIGN(ScreenlockMonitorDeviceSource);
 };
 
 }  // namespace content
diff --git a/content/browser/screenlock_monitor/screenlock_monitor_source.h b/content/browser/screenlock_monitor/screenlock_monitor_source.h
index 6a7f5dcc..7a626ea4 100644
--- a/content/browser/screenlock_monitor/screenlock_monitor_source.h
+++ b/content/browser/screenlock_monitor/screenlock_monitor_source.h
@@ -15,15 +15,16 @@
 class CONTENT_EXPORT ScreenlockMonitorSource {
  public:
   ScreenlockMonitorSource();
+
+  ScreenlockMonitorSource(const ScreenlockMonitorSource&) = delete;
+  ScreenlockMonitorSource& operator=(const ScreenlockMonitorSource&) = delete;
+
   virtual ~ScreenlockMonitorSource();
 
   enum ScreenlockEvent { SCREEN_LOCK_EVENT, SCREEN_UNLOCK_EVENT };
 
   // ProcessScreenlockEvent should only be called from a single thread.
   static void ProcessScreenlockEvent(ScreenlockEvent event_id);
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(ScreenlockMonitorSource);
 };
 
 }  // namespace content
diff --git a/content/browser/security_exploit_browsertest.cc b/content/browser/security_exploit_browsertest.cc
index 0b6943a8..bdb57be8 100644
--- a/content/browser/security_exploit_browsertest.cc
+++ b/content/browser/security_exploit_browsertest.cc
@@ -606,6 +606,11 @@
       mojom::DidCommitProvisionalLoadInterfaceParamsPtr params_override)
       : DidCommitNavigationInterceptor(web_contents),
         params_override_(std::move(params_override)) {}
+
+  ScopedInterfaceParamsReplacer(const ScopedInterfaceParamsReplacer&) = delete;
+  ScopedInterfaceParamsReplacer& operator=(
+      const ScopedInterfaceParamsReplacer&) = delete;
+
   ~ScopedInterfaceParamsReplacer() override = default;
 
  protected:
@@ -622,8 +627,6 @@
 
  private:
   mojom::DidCommitProvisionalLoadInterfaceParamsPtr params_override_;
-
-  DISALLOW_COPY_AND_ASSIGN(ScopedInterfaceParamsReplacer);
 };
 
 }  // namespace
@@ -1150,6 +1153,10 @@
   DidCommitUrlReplacer(WebContents* web_contents, const GURL& replacement_url)
       : DidCommitNavigationInterceptor(web_contents),
         replacement_url_(replacement_url) {}
+
+  DidCommitUrlReplacer(const DidCommitUrlReplacer&) = delete;
+  DidCommitUrlReplacer& operator=(const DidCommitUrlReplacer&) = delete;
+
   ~DidCommitUrlReplacer() override = default;
 
  protected:
@@ -1165,8 +1172,6 @@
 
  private:
   GURL replacement_url_;
-
-  DISALLOW_COPY_AND_ASSIGN(DidCommitUrlReplacer);
 };
 
 }  // namespace
diff --git a/content/browser/serial/serial_service.h b/content/browser/serial/serial_service.h
index 25febaba..6e9aadf 100644
--- a/content/browser/serial/serial_service.h
+++ b/content/browser/serial/serial_service.h
@@ -30,6 +30,10 @@
       public content::RenderDocumentHostUserData<SerialService> {
  public:
   explicit SerialService(RenderFrameHost* render_frame_host);
+
+  SerialService(const SerialService&) = delete;
+  SerialService& operator=(const SerialService&) = delete;
+
   ~SerialService() override;
 
   void Bind(mojo::PendingReceiver<blink::mojom::SerialService> receiver);
@@ -76,7 +80,6 @@
   base::WeakPtrFactory<SerialService> weak_factory_{this};
 
   RENDER_DOCUMENT_HOST_USER_DATA_KEY_DECL();
-  DISALLOW_COPY_AND_ASSIGN(SerialService);
 };
 
 }  // namespace content
diff --git a/content/browser/serial/serial_test_utils.h b/content/browser/serial/serial_test_utils.h
index aa835baa..5a00267 100644
--- a/content/browser/serial/serial_test_utils.h
+++ b/content/browser/serial/serial_test_utils.h
@@ -17,6 +17,10 @@
 class MockSerialDelegate : public SerialDelegate {
  public:
   MockSerialDelegate();
+
+  MockSerialDelegate(const MockSerialDelegate&) = delete;
+  MockSerialDelegate& operator=(const MockSerialDelegate&) = delete;
+
   ~MockSerialDelegate() override;
 
   std::unique_ptr<SerialChooser> RunChooser(
@@ -34,14 +38,17 @@
   MOCK_METHOD2(AddObserver, void(RenderFrameHost* frame, Observer* observer));
   MOCK_METHOD2(RemoveObserver,
                void(RenderFrameHost* frame, Observer* observer));
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(MockSerialDelegate);
 };
 
 class SerialTestContentBrowserClient : public ContentBrowserClient {
  public:
   SerialTestContentBrowserClient();
+
+  SerialTestContentBrowserClient(const SerialTestContentBrowserClient&) =
+      delete;
+  SerialTestContentBrowserClient& operator=(
+      const SerialTestContentBrowserClient&) = delete;
+
   ~SerialTestContentBrowserClient() override;
 
   MockSerialDelegate& delegate() { return delegate_; }
@@ -51,8 +58,6 @@
 
  private:
   MockSerialDelegate delegate_;
-
-  DISALLOW_COPY_AND_ASSIGN(SerialTestContentBrowserClient);
 };
 
 }  // namespace content
diff --git a/content/browser/serial/serial_unittest.cc b/content/browser/serial/serial_unittest.cc
index 6cd1fe8..419ffb81 100644
--- a/content/browser/serial/serial_unittest.cc
+++ b/content/browser/serial/serial_unittest.cc
@@ -60,6 +60,9 @@
         .WillByDefault(testing::SaveArg<1>(&observer_));
   }
 
+  SerialTest(const SerialTest&) = delete;
+  SerialTest& operator=(const SerialTest&) = delete;
+
   ~SerialTest() override = default;
 
   void SetUp() override {
@@ -84,8 +87,6 @@
   ContentBrowserClient* original_client_ = nullptr;
   device::FakeSerialPortManager port_manager_;
   SerialDelegate::Observer* observer_ = nullptr;
-
-  DISALLOW_COPY_AND_ASSIGN(SerialTest);
 };
 
 }  // namespace
diff --git a/content/browser/service_process_host_browsertest.cc b/content/browser/service_process_host_browsertest.cc
index 6634d4d..a8a7d8b 100644
--- a/content/browser/service_process_host_browsertest.cc
+++ b/content/browser/service_process_host_browsertest.cc
@@ -27,6 +27,10 @@
  public:
   EchoServiceProcessObserver() { ServiceProcessHost::AddObserver(this); }
 
+  EchoServiceProcessObserver(const EchoServiceProcessObserver&) = delete;
+  EchoServiceProcessObserver& operator=(const EchoServiceProcessObserver&) =
+      delete;
+
   ~EchoServiceProcessObserver() override {
     ServiceProcessHost::RemoveObserver(this);
   }
@@ -56,8 +60,6 @@
   base::RunLoop launch_loop_;
   base::RunLoop death_loop_;
   base::RunLoop crash_loop_;
-
-  DISALLOW_COPY_AND_ASSIGN(EchoServiceProcessObserver);
 };
 
 IN_PROC_BROWSER_TEST_F(ServiceProcessHostBrowserTest, Launch) {
diff --git a/content/browser/service_process_host_impl.cc b/content/browser/service_process_host_impl.cc
index 0e4df44f..f981777a 100644
--- a/content/browser/service_process_host_impl.cc
+++ b/content/browser/service_process_host_impl.cc
@@ -30,6 +30,10 @@
 class ServiceProcessTracker {
  public:
   ServiceProcessTracker() : ui_task_runner_(GetUIThreadTaskRunner({})) {}
+
+  ServiceProcessTracker(const ServiceProcessTracker&) = delete;
+  ServiceProcessTracker& operator=(const ServiceProcessTracker&) = delete;
+
   ~ServiceProcessTracker() = default;
 
   ServiceProcessInfo AddProcess(const base::Process& process,
@@ -148,8 +152,6 @@
 
   // Observers are owned and used exclusively on the UI thread.
   base::ObserverList<ServiceProcessHost::Observer> observers_;
-
-  DISALLOW_COPY_AND_ASSIGN(ServiceProcessTracker);
 };
 
 ServiceProcessTracker& GetServiceProcessTracker() {
@@ -164,6 +166,10 @@
  public:
   explicit UtilityProcessClient(const std::string& service_interface_name)
       : service_interface_name_(service_interface_name) {}
+
+  UtilityProcessClient(const UtilityProcessClient&) = delete;
+  UtilityProcessClient& operator=(const UtilityProcessClient&) = delete;
+
   ~UtilityProcessClient() override = default;
 
   // UtilityProcessHost::Client:
@@ -190,8 +196,6 @@
  private:
   const std::string service_interface_name_;
   absl::optional<ServiceProcessInfo> process_info_;
-
-  DISALLOW_COPY_AND_ASSIGN(UtilityProcessClient);
 };
 
 // TODO(crbug.com/977637): Once UtilityProcessHost is used only by service
diff --git a/content/browser/service_worker/embedded_worker_instance.cc b/content/browser/service_worker/embedded_worker_instance.cc
index 243cd34..9390f3d 100644
--- a/content/browser/service_worker/embedded_worker_instance.cc
+++ b/content/browser/service_worker/embedded_worker_instance.cc
@@ -119,6 +119,9 @@
         agent_route_id_(agent_route_id),
         devtools_id_(devtools_id) {}
 
+  DevToolsProxy(const DevToolsProxy&) = delete;
+  DevToolsProxy& operator=(const DevToolsProxy&) = delete;
+
   ~DevToolsProxy() {
     DCHECK_CURRENTLY_ON(BrowserThread::UI);
     ServiceWorkerDevToolsManager::GetInstance()->WorkerStopped(process_id_,
@@ -155,8 +158,6 @@
   const int agent_route_id_;
   const base::UnguessableToken devtools_id_;
   bool worker_stop_ignored_notified_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(DevToolsProxy);
 };
 
 // Tracks how long a service worker runs for, for UMA purposes.
@@ -164,6 +165,9 @@
  public:
   ScopedLifetimeTracker() : start_ticks_(base::TimeTicks::Now()) {}
 
+  ScopedLifetimeTracker(const ScopedLifetimeTracker&) = delete;
+  ScopedLifetimeTracker& operator=(const ScopedLifetimeTracker&) = delete;
+
   ~ScopedLifetimeTracker() {
     if (!start_ticks_.is_null()) {
       ServiceWorkerMetrics::RecordRuntime(base::TimeTicks::Now() -
@@ -177,8 +181,6 @@
 
  private:
   base::TimeTicks start_ticks_;
-
-  DISALLOW_COPY_AND_ASSIGN(ScopedLifetimeTracker);
 };
 
 // A handle for a renderer process managed by ServiceWorkerProcessManager.
@@ -198,6 +200,9 @@
     DCHECK_NE(ChildProcessHost::kInvalidUniqueID, process_id_);
   }
 
+  WorkerProcessHandle(const WorkerProcessHandle&) = delete;
+  WorkerProcessHandle& operator=(const WorkerProcessHandle&) = delete;
+
   ~WorkerProcessHandle() {
     DCHECK_CURRENTLY_ON(BrowserThread::UI);
     process_manager_->ReleaseWorkerProcess(embedded_worker_id_);
@@ -210,8 +215,6 @@
 
   const int embedded_worker_id_;
   const int process_id_;
-
-  DISALLOW_COPY_AND_ASSIGN(WorkerProcessHandle);
 };
 
 // Info that is recorded as UMA on OnStarted().
diff --git a/content/browser/service_worker/embedded_worker_instance.h b/content/browser/service_worker/embedded_worker_instance.h
index 1837ff9..81943b6 100644
--- a/content/browser/service_worker/embedded_worker_instance.h
+++ b/content/browser/service_worker/embedded_worker_instance.h
@@ -126,6 +126,10 @@
   };
 
   explicit EmbeddedWorkerInstance(ServiceWorkerVersion* owner_version);
+
+  EmbeddedWorkerInstance(const EmbeddedWorkerInstance&) = delete;
+  EmbeddedWorkerInstance& operator=(const EmbeddedWorkerInstance&) = delete;
+
   ~EmbeddedWorkerInstance() override;
 
   // Starts the worker. It is invalid to call this when the worker is not in
@@ -402,8 +406,6 @@
   absl::optional<blink::ServiceWorkerToken> token_;
 
   base::WeakPtrFactory<EmbeddedWorkerInstance> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(EmbeddedWorkerInstance);
 };
 
 }  // namespace content
diff --git a/content/browser/service_worker/embedded_worker_test_helper.h b/content/browser/service_worker/embedded_worker_test_helper.h
index 150246a..c42086c7 100644
--- a/content/browser/service_worker/embedded_worker_test_helper.h
+++ b/content/browser/service_worker/embedded_worker_test_helper.h
@@ -88,6 +88,10 @@
   EmbeddedWorkerTestHelper(
       const base::FilePath& user_data_directory,
       storage::SpecialStoragePolicy* special_storage_policy);
+
+  EmbeddedWorkerTestHelper(const EmbeddedWorkerTestHelper&) = delete;
+  EmbeddedWorkerTestHelper& operator=(const EmbeddedWorkerTestHelper&) = delete;
+
   virtual ~EmbeddedWorkerTestHelper();
 
   ServiceWorkerContextCore* context();
@@ -215,8 +219,6 @@
   int new_mock_render_process_id_;
 
   scoped_refptr<URLLoaderFactoryGetter> url_loader_factory_getter_;
-
-  DISALLOW_COPY_AND_ASSIGN(EmbeddedWorkerTestHelper);
 };
 
 template <typename MockType, typename... Args>
diff --git a/content/browser/service_worker/fake_embedded_worker_instance_client.h b/content/browser/service_worker/fake_embedded_worker_instance_client.h
index 841c32f..46be8ff5 100644
--- a/content/browser/service_worker/fake_embedded_worker_instance_client.h
+++ b/content/browser/service_worker/fake_embedded_worker_instance_client.h
@@ -26,6 +26,12 @@
  public:
   // |helper| must outlive this instance.
   explicit FakeEmbeddedWorkerInstanceClient(EmbeddedWorkerTestHelper* helper);
+
+  FakeEmbeddedWorkerInstanceClient(const FakeEmbeddedWorkerInstanceClient&) =
+      delete;
+  FakeEmbeddedWorkerInstanceClient& operator=(
+      const FakeEmbeddedWorkerInstanceClient&) = delete;
+
   ~FakeEmbeddedWorkerInstanceClient() override;
 
   EmbeddedWorkerTestHelper* helper() { return helper_; }
@@ -80,8 +86,6 @@
   std::unique_ptr<LoaderClient> main_script_loader_client_;
 
   base::WeakPtrFactory<FakeEmbeddedWorkerInstanceClient> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(FakeEmbeddedWorkerInstanceClient);
 };
 
 // A EmbeddedWorkerInstanceClient fake that doesn't respond to the Start/Stop
@@ -91,6 +95,12 @@
  public:
   explicit DelayedFakeEmbeddedWorkerInstanceClient(
       EmbeddedWorkerTestHelper* helper);
+
+  DelayedFakeEmbeddedWorkerInstanceClient(
+      const DelayedFakeEmbeddedWorkerInstanceClient&) = delete;
+  DelayedFakeEmbeddedWorkerInstanceClient& operator=(
+      const DelayedFakeEmbeddedWorkerInstanceClient&) = delete;
+
   ~DelayedFakeEmbeddedWorkerInstanceClient() override;
 
   // Unblocks the Start/StopWorker() call to this instance. May be called before
@@ -117,8 +127,6 @@
 
   // Valid after StartWorker() until start is unblocked.
   blink::mojom::EmbeddedWorkerStartParamsPtr start_params_;
-
-  DISALLOW_COPY_AND_ASSIGN(DelayedFakeEmbeddedWorkerInstanceClient);
 };
 
 }  // namespace content
diff --git a/content/browser/service_worker/payment_handler_support.cc b/content/browser/service_worker/payment_handler_support.cc
index bf59a44..f0f14807 100644
--- a/content/browser/service_worker/payment_handler_support.cc
+++ b/content/browser/service_worker/payment_handler_support.cc
@@ -45,6 +45,11 @@
     DCHECK_CURRENTLY_ON(BrowserThread::UI);
   }
 
+  ShowPaymentHandlerWindowReplier(const ShowPaymentHandlerWindowReplier&) =
+      delete;
+  ShowPaymentHandlerWindowReplier& operator=(
+      const ShowPaymentHandlerWindowReplier&) = delete;
+
   ~ShowPaymentHandlerWindowReplier() {
     DCHECK_CURRENTLY_ON(BrowserThread::UI);
     if (response_callback_) {
@@ -66,8 +71,6 @@
   PaymentHandlerSupport::OpenWindowFallback fallback_;
   blink::mojom::ServiceWorkerHost::OpenPaymentHandlerWindowCallback
       response_callback_;
-
-  DISALLOW_COPY_AND_ASSIGN(ShowPaymentHandlerWindowReplier);
 };
 
 }  // namespace
diff --git a/content/browser/service_worker/service_worker_browsertest.cc b/content/browser/service_worker/service_worker_browsertest.cc
index c4b9ad27..182577e 100644
--- a/content/browser/service_worker/service_worker_browsertest.cc
+++ b/content/browser/service_worker/service_worker_browsertest.cc
@@ -123,6 +123,9 @@
     observation_.Observe(context_.get());
   }
 
+  WorkerStateObserver(const WorkerStateObserver&) = delete;
+  WorkerStateObserver& operator=(const WorkerStateObserver&) = delete;
+
   ~WorkerStateObserver() override = default;
 
   // ServiceWorkerContextCoreObserver overrides.
@@ -153,7 +156,6 @@
   base::ScopedObservation<ServiceWorkerContextWrapper,
                           ServiceWorkerContextCoreObserver>
       observation_{this};
-  DISALLOW_COPY_AND_ASSIGN(WorkerStateObserver);
 };
 
 class WorkerClientDestroyedObserver : public ServiceWorkerContextCoreObserver {
@@ -465,6 +467,10 @@
     scoped_context_observation_.Observe(context);
   }
 
+  WorkerRunningStatusObserver(const WorkerRunningStatusObserver&) = delete;
+  WorkerRunningStatusObserver& operator=(const WorkerRunningStatusObserver&) =
+      delete;
+
   ~WorkerRunningStatusObserver() override = default;
 
   int64_t version_id() { return version_id_; }
@@ -488,8 +494,6 @@
   base::ScopedObservation<ServiceWorkerContext, ServiceWorkerContextObserver>
       scoped_context_observation_{this};
   int64_t version_id_ = blink::mojom::kInvalidServiceWorkerVersionId;
-
-  DISALLOW_COPY_AND_ASSIGN(WorkerRunningStatusObserver);
 };
 
 // Tests the |top_frame_origin| and |request_initiator| on the main resource and
@@ -1422,6 +1426,10 @@
    public:
     explicit CustomResponse(const std::string& response)
         : response_(response) {}
+
+    CustomResponse(const CustomResponse&) = delete;
+    CustomResponse& operator=(const CustomResponse&) = delete;
+
     ~CustomResponse() override {}
 
     void SendResponse(const net::test_server::SendBytesCallback& send,
@@ -1431,8 +1439,6 @@
 
    private:
     const std::string response_;
-
-    DISALLOW_COPY_AND_ASSIGN(CustomResponse);
   };
 
   std::unique_ptr<net::test_server::HttpResponse> StaticRequestHandler(
@@ -2307,6 +2313,12 @@
     : public ServiceWorkerBrowserTest {
  public:
   ServiceWorkerV8CodeCacheForCacheStorageTest() = default;
+
+  ServiceWorkerV8CodeCacheForCacheStorageTest(
+      const ServiceWorkerV8CodeCacheForCacheStorageTest&) = delete;
+  ServiceWorkerV8CodeCacheForCacheStorageTest& operator=(
+      const ServiceWorkerV8CodeCacheForCacheStorageTest&) = delete;
+
   ~ServiceWorkerV8CodeCacheForCacheStorageTest() override = default;
 
   void SetUpOnMainThread() override {
@@ -2371,8 +2383,6 @@
         partition->GetCacheStorageControl(), embedded_test_server()->base_url(),
         std::string("cache_name"), embedded_test_server()->GetURL(kScriptUrl));
   }
-
-  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerV8CodeCacheForCacheStorageTest);
 };
 
 const char ServiceWorkerV8CodeCacheForCacheStorageTest::kPageUrl[] =
@@ -2401,14 +2411,17 @@
     : public ServiceWorkerV8CodeCacheForCacheStorageTest {
  public:
   ServiceWorkerV8CodeCacheForCacheStorageNoneTest() = default;
+
+  ServiceWorkerV8CodeCacheForCacheStorageNoneTest(
+      const ServiceWorkerV8CodeCacheForCacheStorageNoneTest&) = delete;
+  ServiceWorkerV8CodeCacheForCacheStorageNoneTest& operator=(
+      const ServiceWorkerV8CodeCacheForCacheStorageNoneTest&) = delete;
+
   ~ServiceWorkerV8CodeCacheForCacheStorageNoneTest() override = default;
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
     command_line->AppendSwitchASCII(switches::kV8CacheOptions, "none");
   }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerV8CodeCacheForCacheStorageNoneTest);
 };
 
 IN_PROC_BROWSER_TEST_F(ServiceWorkerV8CodeCacheForCacheStorageNoneTest,
@@ -2647,6 +2660,12 @@
 class ServiceWorkerDisableWebSecurityTest : public ServiceWorkerBrowserTest {
  public:
   ServiceWorkerDisableWebSecurityTest() = default;
+
+  ServiceWorkerDisableWebSecurityTest(
+      const ServiceWorkerDisableWebSecurityTest&) = delete;
+  ServiceWorkerDisableWebSecurityTest& operator=(
+      const ServiceWorkerDisableWebSecurityTest&) = delete;
+
   ~ServiceWorkerDisableWebSecurityTest() override = default;
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
@@ -2686,7 +2705,6 @@
 
  private:
   net::EmbeddedTestServer cross_origin_server_;
-  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerDisableWebSecurityTest);
 };
 
 IN_PROC_BROWSER_TEST_F(ServiceWorkerDisableWebSecurityTest,
@@ -2734,6 +2752,10 @@
 class HeaderInjectingThrottle : public blink::URLLoaderThrottle {
  public:
   HeaderInjectingThrottle() = default;
+
+  HeaderInjectingThrottle(const HeaderInjectingThrottle&) = delete;
+  HeaderInjectingThrottle& operator=(const HeaderInjectingThrottle&) = delete;
+
   ~HeaderInjectingThrottle() override = default;
 
   void WillStartRequest(network::ResourceRequest* request,
@@ -2748,14 +2770,17 @@
 
     request->headers.SetHeader("x-injected", "injected value");
   }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(HeaderInjectingThrottle);
 };
 
 class ThrottlingContentBrowserClient : public TestContentBrowserClient {
  public:
   ThrottlingContentBrowserClient() = default;
+
+  ThrottlingContentBrowserClient(const ThrottlingContentBrowserClient&) =
+      delete;
+  ThrottlingContentBrowserClient& operator=(
+      const ThrottlingContentBrowserClient&) = delete;
+
   ~ThrottlingContentBrowserClient() override = default;
 
   // ContentBrowserClient overrides:
@@ -2771,9 +2796,6 @@
     throttles.push_back(std::move(throttle));
     return throttles;
   }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(ThrottlingContentBrowserClient);
 };
 
 class ServiceWorkerURLLoaderThrottleTest : public ServiceWorkerBrowserTest {
diff --git a/content/browser/service_worker/service_worker_cache_writer_unittest.cc b/content/browser/service_worker/service_worker_cache_writer_unittest.cc
index 4f03b82e..634e5bf4 100644
--- a/content/browser/service_worker/service_worker_cache_writer_unittest.cc
+++ b/content/browser/service_worker/service_worker_cache_writer_unittest.cc
@@ -29,6 +29,12 @@
     : public ServiceWorkerCacheWriter::WriteObserver {
  public:
   MockServiceWorkerCacheWriterObserver() : data_length_(0), result_(net::OK) {}
+
+  MockServiceWorkerCacheWriterObserver(
+      const MockServiceWorkerCacheWriterObserver&) = delete;
+  MockServiceWorkerCacheWriterObserver& operator=(
+      const MockServiceWorkerCacheWriterObserver&) = delete;
+
   ~MockServiceWorkerCacheWriterObserver() {}
 
   int WillWriteResponseHead(
@@ -60,8 +66,6 @@
   size_t data_length_;
   base::OnceCallback<void(net::Error)> callback_;
   net::Error result_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockServiceWorkerCacheWriterObserver);
 };
 
 class ServiceWorkerCacheWriterTest : public ::testing::Test {
@@ -74,6 +78,11 @@
   };
 
   ServiceWorkerCacheWriterTest() {}
+
+  ServiceWorkerCacheWriterTest(const ServiceWorkerCacheWriterTest&) = delete;
+  ServiceWorkerCacheWriterTest& operator=(const ServiceWorkerCacheWriterTest&) =
+      delete;
+
   ~ServiceWorkerCacheWriterTest() override {}
 
   MockServiceWorkerResourceReader* ExpectReader() {
@@ -175,9 +184,6 @@
     base::RunLoop().RunUntilIdle();
     return error;
   }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerCacheWriterTest);
 };
 
 // Passthrough tests:
diff --git a/content/browser/service_worker/service_worker_container_host.cc b/content/browser/service_worker/service_worker_container_host.cc
index 5dc43ae..ec0ca2c 100644
--- a/content/browser/service_worker/service_worker_container_host.cc
+++ b/content/browser/service_worker/service_worker_container_host.cc
@@ -68,6 +68,9 @@
     version_ = std::move(other.version_);
   }
 
+  PendingUpdateVersion(const PendingUpdateVersion&) = delete;
+  PendingUpdateVersion& operator=(const PendingUpdateVersion&) = delete;
+
   ~PendingUpdateVersion() {
     if (version_)
       version_->DecrementPendingUpdateHintCount();
@@ -85,7 +88,6 @@
 
  private:
   scoped_refptr<ServiceWorkerVersion> version_;
-  DISALLOW_COPY_AND_ASSIGN(PendingUpdateVersion);
 };
 
 ServiceWorkerContainerHost::ServiceWorkerContainerHost(
diff --git a/content/browser/service_worker/service_worker_context_core.h b/content/browser/service_worker/service_worker_context_core.h
index e57ff29..25b5581a 100644
--- a/content/browser/service_worker/service_worker_context_core.h
+++ b/content/browser/service_worker/service_worker_context_core.h
@@ -78,6 +78,9 @@
   // instance always outlives the ContainerHostIterator one.
   class CONTENT_EXPORT ContainerHostIterator {
    public:
+    ContainerHostIterator(const ContainerHostIterator&) = delete;
+    ContainerHostIterator& operator=(const ContainerHostIterator&) = delete;
+
     ~ContainerHostIterator();
     ServiceWorkerContainerHost* GetContainerHost();
     void Advance();
@@ -94,8 +97,6 @@
     ContainerHostByClientUUIDMap* const map_;
     ContainerHostPredicate predicate_;
     ContainerHostByClientUUIDMap::iterator container_host_iterator_;
-
-    DISALLOW_COPY_AND_ASSIGN(ContainerHostIterator);
   };
 
   // This is owned by ServiceWorkerContextWrapper. |observer_list| is created in
diff --git a/content/browser/service_worker/service_worker_context_unittest.cc b/content/browser/service_worker/service_worker_context_unittest.cc
index c4a80f2..674d5732 100644
--- a/content/browser/service_worker/service_worker_context_unittest.cc
+++ b/content/browser/service_worker/service_worker_context_unittest.cc
@@ -295,6 +295,11 @@
     scoped_observation_.Observe(context);
   }
 
+  TestServiceWorkerContextObserver(const TestServiceWorkerContextObserver&) =
+      delete;
+  TestServiceWorkerContextObserver& operator=(
+      const TestServiceWorkerContextObserver&) = delete;
+
   ~TestServiceWorkerContextObserver() override = default;
 
   void OnRegistrationCompleted(const GURL& scope) override {
@@ -395,7 +400,6 @@
   base::ScopedObservation<ServiceWorkerContext, ServiceWorkerContextObserver>
       scoped_observation_{this};
   std::vector<EventLog> events_;
-  DISALLOW_COPY_AND_ASSIGN(TestServiceWorkerContextObserver);
 };
 
 // Make sure OnRegistrationCompleted is called on observer.
diff --git a/content/browser/service_worker/service_worker_context_watcher_unittest.cc b/content/browser/service_worker/service_worker_context_watcher_unittest.cc
index 0304a72..00197a6 100644
--- a/content/browser/service_worker/service_worker_context_watcher_unittest.cc
+++ b/content/browser/service_worker/service_worker_context_watcher_unittest.cc
@@ -41,6 +41,9 @@
  public:
   WatcherCallback() {}
 
+  WatcherCallback(const WatcherCallback&) = delete;
+  WatcherCallback& operator=(const WatcherCallback&) = delete;
+
   ~WatcherCallback() {}
 
   scoped_refptr<ServiceWorkerContextWatcher> StartWatch(
@@ -118,8 +121,6 @@
   int callback_count_ = 0;
 
   base::WeakPtrFactory<WatcherCallback> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(WatcherCallback);
 };
 
 }  // namespace
diff --git a/content/browser/service_worker/service_worker_controllee_request_handler.h b/content/browser/service_worker/service_worker_controllee_request_handler.h
index a9dc5ba..61ca166 100644
--- a/content/browser/service_worker/service_worker_controllee_request_handler.h
+++ b/content/browser/service_worker/service_worker_controllee_request_handler.h
@@ -51,6 +51,12 @@
       network::mojom::RequestDestination destination,
       bool skip_service_worker,
       ServiceWorkerAccessedCallback service_worker_accessed_callback);
+
+  ServiceWorkerControlleeRequestHandler(
+      const ServiceWorkerControlleeRequestHandler&) = delete;
+  ServiceWorkerControlleeRequestHandler& operator=(
+      const ServiceWorkerControlleeRequestHandler&) = delete;
+
   ~ServiceWorkerControlleeRequestHandler();
 
   // This is called only once. On redirects, a new instance of this
@@ -120,8 +126,6 @@
 
   base::WeakPtrFactory<ServiceWorkerControlleeRequestHandler> weak_factory_{
       this};
-
-  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerControlleeRequestHandler);
 };
 
 }  // namespace content
diff --git a/content/browser/service_worker/service_worker_fetch_dispatcher.cc b/content/browser/service_worker/service_worker_fetch_dispatcher.cc
index 0d03429..5a415cc3 100644
--- a/content/browser/service_worker/service_worker_fetch_dispatcher.cc
+++ b/content/browser/service_worker/service_worker_fetch_dispatcher.cc
@@ -99,6 +99,11 @@
     AddDevToolsCallback(
         base::BindOnce(&NotifyNavigationPreloadRequestSent, request));
   }
+
+  DelegatingURLLoaderClient(const DelegatingURLLoaderClient&) = delete;
+  DelegatingURLLoaderClient& operator=(const DelegatingURLLoaderClient&) =
+      delete;
+
   ~DelegatingURLLoaderClient() override {
     if (!completed_) {
       // Let the service worker know that the request has been canceled.
@@ -220,7 +225,6 @@
   std::string devtools_request_id_;
   base::queue<base::OnceCallback<void(const WorkerId&, const std::string&)>>
       devtools_callbacks;
-  DISALLOW_COPY_AND_ASSIGN(DelegatingURLLoaderClient);
 };
 
 using EventType = ServiceWorkerMetrics::EventType;
@@ -361,6 +365,9 @@
         &ResponseCallback::OnDisconnected, base::Unretained(this)));
   }
 
+  ResponseCallback(const ResponseCallback&) = delete;
+  ResponseCallback& operator=(const ResponseCallback&) = delete;
+
   ~ResponseCallback() override { DCHECK(fetch_event_id_.has_value()); }
 
   void set_fetch_event_id(int id) {
@@ -431,8 +438,6 @@
   // handle is passed to the other end (i.e. before any of OnResponse*
   // is called).
   absl::optional<int> fetch_event_id_;
-
-  DISALLOW_COPY_AND_ASSIGN(ResponseCallback);
 };
 
 // This class keeps the URL loader related assets alive while the FetchEvent is
diff --git a/content/browser/service_worker/service_worker_fetch_dispatcher.h b/content/browser/service_worker/service_worker_fetch_dispatcher.h
index 5b2a45b..aebedb3 100644
--- a/content/browser/service_worker/service_worker_fetch_dispatcher.h
+++ b/content/browser/service_worker/service_worker_fetch_dispatcher.h
@@ -58,6 +58,11 @@
                                base::OnceClosure prepare_callback,
                                FetchCallback fetch_callback,
                                bool is_offline_capability_check);
+
+  ServiceWorkerFetchDispatcher(const ServiceWorkerFetchDispatcher&) = delete;
+  ServiceWorkerFetchDispatcher& operator=(const ServiceWorkerFetchDispatcher&) =
+      delete;
+
   ~ServiceWorkerFetchDispatcher();
 
   // If appropriate, starts the navigation preload request and creates
@@ -132,8 +137,6 @@
   SEQUENCE_CHECKER(sequence_checker_);
 
   base::WeakPtrFactory<ServiceWorkerFetchDispatcher> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerFetchDispatcher);
 };
 
 }  // namespace content
diff --git a/content/browser/service_worker/service_worker_fetch_dispatcher_browsertest.cc b/content/browser/service_worker/service_worker_fetch_dispatcher_browsertest.cc
index c116756..dd1377c 100644
--- a/content/browser/service_worker/service_worker_fetch_dispatcher_browsertest.cc
+++ b/content/browser/service_worker/service_worker_fetch_dispatcher_browsertest.cc
@@ -65,6 +65,10 @@
     scoped_context_observation_.Observe(context);
   }
 
+  WorkerRunningStatusObserver(const WorkerRunningStatusObserver&) = delete;
+  WorkerRunningStatusObserver& operator=(const WorkerRunningStatusObserver&) =
+      delete;
+
   ~WorkerRunningStatusObserver() override = default;
 
   int64_t version_id() { return version_id_; }
@@ -79,8 +83,6 @@
   base::ScopedObservation<ServiceWorkerContext, ServiceWorkerContextObserver>
       scoped_context_observation_{this};
   int64_t version_id_ = blink::mojom::kInvalidServiceWorkerVersionId;
-
-  DISALLOW_COPY_AND_ASSIGN(WorkerRunningStatusObserver);
 };
 
 // An observer that waits until all inflight events complete.
diff --git a/content/browser/service_worker/service_worker_host.h b/content/browser/service_worker/service_worker_host.h
index b96d7596..975e758e 100644
--- a/content/browser/service_worker/service_worker_host.h
+++ b/content/browser/service_worker/service_worker_host.h
@@ -55,6 +55,10 @@
                         blink::mojom::ServiceWorkerContainerHost> host_receiver,
                     ServiceWorkerVersion* version,
                     base::WeakPtr<ServiceWorkerContextCore> context);
+
+  ServiceWorkerHost(const ServiceWorkerHost&) = delete;
+  ServiceWorkerHost& operator=(const ServiceWorkerHost&) = delete;
+
   ~ServiceWorkerHost();
 
   int worker_process_id() const { return worker_process_id_; }
@@ -117,8 +121,6 @@
       host_receiver_;
 
   base::WeakPtrFactory<ServiceWorkerHost> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerHost);
 };
 
 }  // namespace content
diff --git a/content/browser/service_worker/service_worker_installed_script_loader.h b/content/browser/service_worker/service_worker_installed_script_loader.h
index 3575b09..6237126 100644
--- a/content/browser/service_worker/service_worker_installed_script_loader.h
+++ b/content/browser/service_worker/service_worker_installed_script_loader.h
@@ -38,6 +38,12 @@
       scoped_refptr<ServiceWorkerVersion>
           version_for_main_script_http_response_info,
       const GURL& request_url);
+
+  ServiceWorkerInstalledScriptLoader(
+      const ServiceWorkerInstalledScriptLoader&) = delete;
+  ServiceWorkerInstalledScriptLoader& operator=(
+      const ServiceWorkerInstalledScriptLoader&) = delete;
+
   ~ServiceWorkerInstalledScriptLoader() override;
 
   // ServiceWorkerInstalledScriptReader::Client overrides:
@@ -75,8 +81,6 @@
   mojo::ScopedDataPipeConsumerHandle body_handle_;
   uint64_t body_size_ = 0;
   std::unique_ptr<mojo::DataPipeDrainer> metadata_drainer_;
-
-  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerInstalledScriptLoader);
 };
 
 }  // namespace content
diff --git a/content/browser/service_worker/service_worker_installed_scripts_sender.h b/content/browser/service_worker/service_worker_installed_scripts_sender.h
index c3319c0c..7a29da0 100644
--- a/content/browser/service_worker/service_worker_installed_scripts_sender.h
+++ b/content/browser/service_worker/service_worker_installed_scripts_sender.h
@@ -38,6 +38,11 @@
   // |owner| must be an installed service worker.
   explicit ServiceWorkerInstalledScriptsSender(ServiceWorkerVersion* owner);
 
+  ServiceWorkerInstalledScriptsSender(
+      const ServiceWorkerInstalledScriptsSender&) = delete;
+  ServiceWorkerInstalledScriptsSender& operator=(
+      const ServiceWorkerInstalledScriptsSender&) = delete;
+
   ~ServiceWorkerInstalledScriptsSender() override;
 
   // Creates a Mojo struct (blink::mojom::ServiceWorkerInstalledScriptsInfo) and
@@ -101,8 +106,6 @@
 
   GURL current_sending_url_;
   base::queue<std::pair<int64_t /* resource_id */, GURL>> pending_scripts_;
-
-  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerInstalledScriptsSender);
 };
 
 }  // namespace content
diff --git a/content/browser/service_worker/service_worker_job_coordinator.h b/content/browser/service_worker/service_worker_job_coordinator.h
index 71e0fbfa..35dab836 100644
--- a/content/browser/service_worker/service_worker_job_coordinator.h
+++ b/content/browser/service_worker/service_worker_job_coordinator.h
@@ -27,6 +27,11 @@
 class CONTENT_EXPORT ServiceWorkerJobCoordinator {
  public:
   explicit ServiceWorkerJobCoordinator(ServiceWorkerContextCore* context);
+
+  ServiceWorkerJobCoordinator(const ServiceWorkerJobCoordinator&) = delete;
+  ServiceWorkerJobCoordinator& operator=(const ServiceWorkerJobCoordinator&) =
+      delete;
+
   ~ServiceWorkerJobCoordinator();
 
   void Register(const GURL& script_url,
@@ -73,6 +78,10 @@
    public:
     JobQueue();
     JobQueue(JobQueue&&);
+
+    JobQueue(const JobQueue&) = delete;
+    JobQueue& operator=(const JobQueue&) = delete;
+
     ~JobQueue();
 
     // Adds a job to the queue. If an identical job is already at the end of the
@@ -94,15 +103,11 @@
 
    private:
     base::circular_deque<std::unique_ptr<ServiceWorkerRegisterJobBase>> jobs_;
-
-    DISALLOW_COPY_AND_ASSIGN(JobQueue);
   };
 
   // The ServiceWorkerContextCore object must outlive this.
   ServiceWorkerContextCore* const context_;
   std::map<UniqueRegistrationKey, JobQueue> job_queues_;
-
-  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerJobCoordinator);
 };
 
 }  // namespace content
diff --git a/content/browser/service_worker/service_worker_main_resource_handle.h b/content/browser/service_worker/service_worker_main_resource_handle.h
index 1b1cf08..08bfc453 100644
--- a/content/browser/service_worker/service_worker_main_resource_handle.h
+++ b/content/browser/service_worker/service_worker_main_resource_handle.h
@@ -55,6 +55,12 @@
   ServiceWorkerMainResourceHandle(
       scoped_refptr<ServiceWorkerContextWrapper> context_wrapper,
       ServiceWorkerAccessedCallback on_service_worker_accessed);
+
+  ServiceWorkerMainResourceHandle(const ServiceWorkerMainResourceHandle&) =
+      delete;
+  ServiceWorkerMainResourceHandle& operator=(
+      const ServiceWorkerMainResourceHandle&) = delete;
+
   ~ServiceWorkerMainResourceHandle();
 
   // Called after a ServiceWorkerContainerHost tied with |container_info| was
@@ -138,8 +144,6 @@
   scoped_refptr<ServiceWorkerContextWrapper> context_wrapper_;
 
   base::WeakPtrFactory<ServiceWorkerMainResourceHandle> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerMainResourceHandle);
 };
 
 }  // namespace content
diff --git a/content/browser/service_worker/service_worker_main_resource_loader.h b/content/browser/service_worker/service_worker_main_resource_loader.h
index fb1b97b..805538e 100644
--- a/content/browser/service_worker/service_worker_main_resource_loader.h
+++ b/content/browser/service_worker/service_worker_main_resource_loader.h
@@ -68,6 +68,11 @@
       NavigationLoaderInterceptor::FallbackCallback fallback_callback,
       base::WeakPtr<ServiceWorkerContainerHost> container_host);
 
+  ServiceWorkerMainResourceLoader(const ServiceWorkerMainResourceLoader&) =
+      delete;
+  ServiceWorkerMainResourceLoader& operator=(
+      const ServiceWorkerMainResourceLoader&) = delete;
+
   ~ServiceWorkerMainResourceLoader() override;
 
   // Passed as the RequestHandler for
@@ -184,8 +189,6 @@
   bool is_detached_ = false;
 
   base::WeakPtrFactory<ServiceWorkerMainResourceLoader> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerMainResourceLoader);
 };
 
 // Owns a loader and calls DetachedFromRequest() to release it.
@@ -193,14 +196,18 @@
  public:
   explicit ServiceWorkerMainResourceLoaderWrapper(
       std::unique_ptr<ServiceWorkerMainResourceLoader> loader);
+
+  ServiceWorkerMainResourceLoaderWrapper(
+      const ServiceWorkerMainResourceLoaderWrapper&) = delete;
+  ServiceWorkerMainResourceLoaderWrapper& operator=(
+      const ServiceWorkerMainResourceLoaderWrapper&) = delete;
+
   ~ServiceWorkerMainResourceLoaderWrapper();
 
   ServiceWorkerMainResourceLoader* get() { return loader_.get(); }
 
  private:
   std::unique_ptr<ServiceWorkerMainResourceLoader> loader_;
-
-  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerMainResourceLoaderWrapper);
 };
 
 }  // namespace content
diff --git a/content/browser/service_worker/service_worker_main_resource_loader_interceptor.h b/content/browser/service_worker/service_worker_main_resource_loader_interceptor.h
index 0aaebe7e..9f899722 100644
--- a/content/browser/service_worker/service_worker_main_resource_loader_interceptor.h
+++ b/content/browser/service_worker/service_worker_main_resource_loader_interceptor.h
@@ -58,6 +58,11 @@
       const DedicatedOrSharedWorkerToken& worker_token,
       base::WeakPtr<ServiceWorkerMainResourceHandle> navigation_handle);
 
+  ServiceWorkerMainResourceLoaderInterceptor(
+      const ServiceWorkerMainResourceLoaderInterceptor&) = delete;
+  ServiceWorkerMainResourceLoaderInterceptor& operator=(
+      const ServiceWorkerMainResourceLoaderInterceptor&) = delete;
+
   ~ServiceWorkerMainResourceLoaderInterceptor() override;
 
   // NavigationLoaderInterceptor overrides:
@@ -135,8 +140,6 @@
 
   // Handles a single request. Set to a new instance on redirects.
   std::unique_ptr<ServiceWorkerControlleeRequestHandler> request_handler_;
-
-  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerMainResourceLoaderInterceptor);
 };
 
 }  // namespace content
diff --git a/content/browser/service_worker/service_worker_main_resource_loader_unittest.cc b/content/browser/service_worker/service_worker_main_resource_loader_unittest.cc
index bc4b84e..17da2bc 100644
--- a/content/browser/service_worker/service_worker_main_resource_loader_unittest.cc
+++ b/content/browser/service_worker/service_worker_main_resource_loader_unittest.cc
@@ -120,6 +120,10 @@
       : FakeServiceWorker(helper),
         task_environment_(task_environment),
         embedded_worker_instance_client_(embedded_worker_instance_client) {}
+
+  FetchEventServiceWorker(const FetchEventServiceWorker&) = delete;
+  FetchEventServiceWorker& operator=(const FetchEventServiceWorker&) = delete;
+
   ~FetchEventServiceWorker() override = default;
 
   // Tells this worker to dispatch a fetch event 1s after the fetch event is
@@ -390,8 +394,6 @@
 
   std::string cache_storage_cache_name_;
   base::Time response_time_;
-
-  DISALLOW_COPY_AND_ASSIGN(FetchEventServiceWorker);
 };
 
 // Returns typical response info for a resource load that went through a service
diff --git a/content/browser/service_worker/service_worker_new_script_loader.h b/content/browser/service_worker/service_worker_new_script_loader.h
index de2378d..facf4d9 100644
--- a/content/browser/service_worker/service_worker_new_script_loader.h
+++ b/content/browser/service_worker/service_worker_new_script_loader.h
@@ -98,6 +98,10 @@
       bool is_throttle_needed,
       const GlobalRenderFrameHostId& requesting_frame_id);
 
+  ServiceWorkerNewScriptLoader(const ServiceWorkerNewScriptLoader&) = delete;
+  ServiceWorkerNewScriptLoader& operator=(const ServiceWorkerNewScriptLoader&) =
+      delete;
+
   ~ServiceWorkerNewScriptLoader() override;
 
   // network::mojom::URLLoader:
@@ -248,8 +252,6 @@
   const GlobalRenderFrameHostId requesting_frame_id_;
 
   base::WeakPtrFactory<ServiceWorkerNewScriptLoader> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerNewScriptLoader);
 };
 
 }  // namespace content
diff --git a/content/browser/service_worker/service_worker_no_best_effort_tasks_browsertest.cc b/content/browser/service_worker/service_worker_no_best_effort_tasks_browsertest.cc
index f204b0f..f7533a3 100644
--- a/content/browser/service_worker/service_worker_no_best_effort_tasks_browsertest.cc
+++ b/content/browser/service_worker/service_worker_no_best_effort_tasks_browsertest.cc
@@ -17,6 +17,12 @@
 class ServiceWorkerNoBestEffortTasksTest : public ContentBrowserTest {
  public:
   ServiceWorkerNoBestEffortTasksTest() = default;
+
+  ServiceWorkerNoBestEffortTasksTest(
+      const ServiceWorkerNoBestEffortTasksTest&) = delete;
+  ServiceWorkerNoBestEffortTasksTest& operator=(
+      const ServiceWorkerNoBestEffortTasksTest&) = delete;
+
   ~ServiceWorkerNoBestEffortTasksTest() override = default;
 
   void SetUp() override {
@@ -34,8 +40,6 @@
     host_resolver()->AddRule("*", "127.0.0.1");
     embedded_test_server()->StartAcceptingConnections();
   }
-
-  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerNoBestEffortTasksTest);
 };
 
 // Verify that the promise returned by navigator.serviceWorker.register()
diff --git a/content/browser/service_worker/service_worker_object_host.h b/content/browser/service_worker/service_worker_object_host.h
index f1b94217..b0ed90d 100644
--- a/content/browser/service_worker/service_worker_object_host.h
+++ b/content/browser/service_worker/service_worker_object_host.h
@@ -44,6 +44,10 @@
   ServiceWorkerObjectHost(base::WeakPtr<ServiceWorkerContextCore> context,
                           ServiceWorkerContainerHost* container_host,
                           scoped_refptr<ServiceWorkerVersion> version);
+
+  ServiceWorkerObjectHost(const ServiceWorkerObjectHost&) = delete;
+  ServiceWorkerObjectHost& operator=(const ServiceWorkerObjectHost&) = delete;
+
   ~ServiceWorkerObjectHost() override;
 
   // ServiceWorkerVersion::Observer overrides.
@@ -118,8 +122,6 @@
   mojo::AssociatedRemoteSet<blink::mojom::ServiceWorkerObject> remote_objects_;
 
   base::WeakPtrFactory<ServiceWorkerObjectHost> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerObjectHost);
 };
 
 }  // namespace content
diff --git a/content/browser/service_worker/service_worker_ping_controller.h b/content/browser/service_worker/service_worker_ping_controller.h
index 5c7d2616..431615ae 100644
--- a/content/browser/service_worker/service_worker_ping_controller.h
+++ b/content/browser/service_worker/service_worker_ping_controller.h
@@ -18,6 +18,11 @@
 class CONTENT_EXPORT ServiceWorkerPingController final {
  public:
   explicit ServiceWorkerPingController(ServiceWorkerVersion* version);
+
+  ServiceWorkerPingController(const ServiceWorkerPingController&) = delete;
+  ServiceWorkerPingController& operator=(const ServiceWorkerPingController&) =
+      delete;
+
   ~ServiceWorkerPingController();
 
   void Activate();
@@ -45,8 +50,6 @@
   // The time the most recent ping was sent.
   base::TimeTicks last_ping_time_;
   PingState ping_state_ = PingState::kNotPinging;
-
-  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerPingController);
 };
 
 }  // namespace content
diff --git a/content/browser/service_worker/service_worker_process_manager_unittest.cc b/content/browser/service_worker/service_worker_process_manager_unittest.cc
index f2ef1bc..1918d4e 100644
--- a/content/browser/service_worker/service_worker_process_manager_unittest.cc
+++ b/content/browser/service_worker/service_worker_process_manager_unittest.cc
@@ -30,6 +30,12 @@
 class SiteInstanceRenderProcessHostFactory : public RenderProcessHostFactory {
  public:
   SiteInstanceRenderProcessHostFactory() = default;
+
+  SiteInstanceRenderProcessHostFactory(
+      const SiteInstanceRenderProcessHostFactory&) = delete;
+  SiteInstanceRenderProcessHostFactory& operator=(
+      const SiteInstanceRenderProcessHostFactory&) = delete;
+
   ~SiteInstanceRenderProcessHostFactory() override = default;
 
   RenderProcessHost* CreateRenderProcessHost(
@@ -52,8 +58,6 @@
  private:
   mutable std::vector<std::unique_ptr<MockRenderProcessHost>> processes_;
   mutable SiteInstance* last_site_instance_used_;
-
-  DISALLOW_COPY_AND_ASSIGN(SiteInstanceRenderProcessHostFactory);
 };
 
 }  // namespace
diff --git a/content/browser/service_worker/service_worker_register_job.h b/content/browser/service_worker/service_worker_register_job.h
index 8ae4492..a47ddece 100644
--- a/content/browser/service_worker/service_worker_register_job.h
+++ b/content/browser/service_worker/service_worker_register_job.h
@@ -66,6 +66,10 @@
       bool skip_script_comparison,
       blink::mojom::FetchClientSettingsObjectPtr
           outside_fetch_client_settings_object);
+
+  ServiceWorkerRegisterJob(const ServiceWorkerRegisterJob&) = delete;
+  ServiceWorkerRegisterJob& operator=(const ServiceWorkerRegisterJob&) = delete;
+
   ~ServiceWorkerRegisterJob() override;
 
   // Registers a callback to be called when the promise would resolve (whether
@@ -223,8 +227,6 @@
   const GlobalRenderFrameHostId requesting_frame_id_;
 
   base::WeakPtrFactory<ServiceWorkerRegisterJob> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerRegisterJob);
 };
 
 }  // namespace content
diff --git a/content/browser/service_worker/service_worker_registration_object_host.h b/content/browser/service_worker/service_worker_registration_object_host.h
index cf5857f..48fe0db 100644
--- a/content/browser/service_worker/service_worker_registration_object_host.h
+++ b/content/browser/service_worker/service_worker_registration_object_host.h
@@ -40,6 +40,12 @@
       base::WeakPtr<ServiceWorkerContextCore> context,
       ServiceWorkerContainerHost* container_host,
       scoped_refptr<ServiceWorkerRegistration> registration);
+
+  ServiceWorkerRegistrationObjectHost(
+      const ServiceWorkerRegistrationObjectHost&) = delete;
+  ServiceWorkerRegistrationObjectHost& operator=(
+      const ServiceWorkerRegistrationObjectHost&) = delete;
+
   ~ServiceWorkerRegistrationObjectHost() override;
 
   // Establishes a new mojo connection into |receivers_|.
@@ -153,8 +159,6 @@
 
   base::WeakPtrFactory<ServiceWorkerRegistrationObjectHost> weak_ptr_factory_{
       this};
-
-  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerRegistrationObjectHost);
 };
 
 }  // namespace content
diff --git a/content/browser/service_worker/service_worker_script_loader_factory.h b/content/browser/service_worker/service_worker_script_loader_factory.h
index afedb60..021d7da 100644
--- a/content/browser/service_worker/service_worker_script_loader_factory.h
+++ b/content/browser/service_worker/service_worker_script_loader_factory.h
@@ -56,6 +56,12 @@
       base::WeakPtr<ServiceWorkerHost> worker_host,
       scoped_refptr<network::SharedURLLoaderFactory>
           loader_factory_for_new_scripts);
+
+  ServiceWorkerScriptLoaderFactory(const ServiceWorkerScriptLoaderFactory&) =
+      delete;
+  ServiceWorkerScriptLoaderFactory& operator=(
+      const ServiceWorkerScriptLoaderFactory&) = delete;
+
   ~ServiceWorkerScriptLoaderFactory() override;
 
   // network::mojom::URLLoaderFactory:
@@ -120,8 +126,6 @@
   std::unique_ptr<ServiceWorkerCacheWriter> cache_writer_;
 
   base::WeakPtrFactory<ServiceWorkerScriptLoaderFactory> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerScriptLoaderFactory);
 };
 
 }  // namespace content
diff --git a/content/browser/service_worker/service_worker_single_script_update_checker_unittest.cc b/content/browser/service_worker/service_worker_single_script_update_checker_unittest.cc
index b3237456..ebc11631 100644
--- a/content/browser/service_worker/service_worker_single_script_update_checker_unittest.cc
+++ b/content/browser/service_worker/service_worker_single_script_update_checker_unittest.cc
@@ -68,6 +68,12 @@
     browser_context_->GetDefaultStoragePartition();
     base::RunLoop().RunUntilIdle();
   }
+
+  ServiceWorkerSingleScriptUpdateCheckerTest(
+      const ServiceWorkerSingleScriptUpdateCheckerTest&) = delete;
+  ServiceWorkerSingleScriptUpdateCheckerTest& operator=(
+      const ServiceWorkerSingleScriptUpdateCheckerTest&) = delete;
+
   ~ServiceWorkerSingleScriptUpdateCheckerTest() override = default;
 
   size_t TotalBytes(const std::vector<std::string>& data_chunks) {
@@ -186,9 +192,6 @@
  protected:
   BrowserTaskEnvironment task_environment_;
   std::unique_ptr<TestBrowserContext> browser_context_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerSingleScriptUpdateCheckerTest);
 };
 
 TEST_F(ServiceWorkerSingleScriptUpdateCheckerTest, Identical_SingleRead) {
diff --git a/content/browser/service_worker/service_worker_test_utils.cc b/content/browser/service_worker/service_worker_test_utils.cc
index 0341e18..12c9c02 100644
--- a/content/browser/service_worker/service_worker_test_utils.cc
+++ b/content/browser/service_worker/service_worker_test_utils.cc
@@ -65,6 +65,10 @@
   explicit FakeNavigationClient(
       ReceivedProviderInfoCallback on_received_callback)
       : on_received_callback_(std::move(on_received_callback)) {}
+
+  FakeNavigationClient(const FakeNavigationClient&) = delete;
+  FakeNavigationClient& operator=(const FakeNavigationClient&) = delete;
+
   ~FakeNavigationClient() override = default;
 
  private:
@@ -108,8 +112,6 @@
   }
 
   ReceivedProviderInfoCallback on_received_callback_;
-
-  DISALLOW_COPY_AND_ASSIGN(FakeNavigationClient);
 };
 
 class ResourceWriter {
diff --git a/content/browser/service_worker/service_worker_test_utils.h b/content/browser/service_worker/service_worker_test_utils.h
index 4bcaddf..c82c44b 100644
--- a/content/browser/service_worker/service_worker_test_utils.h
+++ b/content/browser/service_worker/service_worker_test_utils.h
@@ -77,6 +77,12 @@
   ServiceWorkerRemoteContainerEndpoint();
   ServiceWorkerRemoteContainerEndpoint(
       ServiceWorkerRemoteContainerEndpoint&& other);
+
+  ServiceWorkerRemoteContainerEndpoint(
+      const ServiceWorkerRemoteContainerEndpoint&) = delete;
+  ServiceWorkerRemoteContainerEndpoint& operator=(
+      const ServiceWorkerRemoteContainerEndpoint&) = delete;
+
   ~ServiceWorkerRemoteContainerEndpoint();
 
   void BindForWindow(blink::mojom::ServiceWorkerContainerInfoForClientPtr info);
@@ -109,8 +115,6 @@
   // content::ServiceWorkerContainerHost.
   mojo::PendingAssociatedReceiver<blink::mojom::ServiceWorkerContainer>
       client_receiver_;
-
-  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerRemoteContainerEndpoint);
 };
 
 struct ServiceWorkerContainerHostAndInfo {
@@ -232,6 +236,12 @@
     : public storage::mojom::ServiceWorkerResourceReader {
  public:
   MockServiceWorkerResourceReader();
+
+  MockServiceWorkerResourceReader(const MockServiceWorkerResourceReader&) =
+      delete;
+  MockServiceWorkerResourceReader& operator=(
+      const MockServiceWorkerResourceReader&) = delete;
+
   ~MockServiceWorkerResourceReader() override;
 
   mojo::PendingRemote<storage::mojom::ServiceWorkerResourceReader>
@@ -300,8 +310,6 @@
   storage::mojom::ServiceWorkerResourceReader::ReadDataCallback
       pending_read_data_callback_;
   mojo::ScopedDataPipeProducerHandle body_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockServiceWorkerResourceReader);
 };
 
 // A test implementation of ServiceWorkerResourceWriter.
@@ -328,6 +336,12 @@
     : public storage::mojom::ServiceWorkerResourceWriter {
  public:
   MockServiceWorkerResourceWriter();
+
+  MockServiceWorkerResourceWriter(const MockServiceWorkerResourceWriter&) =
+      delete;
+  MockServiceWorkerResourceWriter& operator=(
+      const MockServiceWorkerResourceWriter&) = delete;
+
   ~MockServiceWorkerResourceWriter() override;
 
   mojo::PendingRemote<storage::mojom::ServiceWorkerResourceWriter>
@@ -370,8 +384,6 @@
   net::CompletionOnceCallback pending_callback_;
 
   mojo::Receiver<storage::mojom::ServiceWorkerResourceWriter> receiver_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(MockServiceWorkerResourceWriter);
 };
 
 // A test implementation of ServiceWorkerDataPipeStateNotifier.
diff --git a/content/browser/service_worker/service_worker_unregister_job.h b/content/browser/service_worker/service_worker_unregister_job.h
index 9537af3c..6d98057e 100644
--- a/content/browser/service_worker/service_worker_unregister_job.h
+++ b/content/browser/service_worker/service_worker_unregister_job.h
@@ -39,6 +39,11 @@
                              const GURL& scope,
                              const blink::StorageKey& key,
                              bool is_immediate);
+
+  ServiceWorkerUnregisterJob(const ServiceWorkerUnregisterJob&) = delete;
+  ServiceWorkerUnregisterJob& operator=(const ServiceWorkerUnregisterJob&) =
+      delete;
+
   ~ServiceWorkerUnregisterJob() override;
 
   // Registers a callback to be called when the job completes (whether
@@ -69,8 +74,6 @@
   std::vector<UnregistrationCallback> callbacks_;
   bool is_promise_resolved_ = false;
   base::WeakPtrFactory<ServiceWorkerUnregisterJob> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerUnregisterJob);
 };
 }  // namespace content
 
diff --git a/content/browser/service_worker/service_worker_updated_script_loader.h b/content/browser/service_worker/service_worker_updated_script_loader.h
index eae8049d..fa4323ff 100644
--- a/content/browser/service_worker/service_worker_updated_script_loader.h
+++ b/content/browser/service_worker/service_worker_updated_script_loader.h
@@ -79,6 +79,11 @@
       mojo::PendingRemote<network::mojom::URLLoaderClient> client,
       scoped_refptr<ServiceWorkerVersion> version);
 
+  ServiceWorkerUpdatedScriptLoader(const ServiceWorkerUpdatedScriptLoader&) =
+      delete;
+  ServiceWorkerUpdatedScriptLoader& operator=(
+      const ServiceWorkerUpdatedScriptLoader&) = delete;
+
   ~ServiceWorkerUpdatedScriptLoader() override;
 
   // network::mojom::URLLoader:
@@ -228,8 +233,6 @@
   base::OnceCallback<void(net::Error)> write_observer_complete_callback_;
 
   base::WeakPtrFactory<ServiceWorkerUpdatedScriptLoader> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerUpdatedScriptLoader);
 };
 
 }  // namespace content
diff --git a/content/browser/service_worker/service_worker_version_unittest.cc b/content/browser/service_worker/service_worker_version_unittest.cc
index 0384ee2..b58575d4 100644
--- a/content/browser/service_worker/service_worker_version_unittest.cc
+++ b/content/browser/service_worker/service_worker_version_unittest.cc
@@ -724,6 +724,10 @@
  public:
   explicit DelayMessageWorker(EmbeddedWorkerTestHelper* helper)
       : FakeServiceWorker(helper) {}
+
+  DelayMessageWorker(const DelayMessageWorker&) = delete;
+  DelayMessageWorker& operator=(const DelayMessageWorker&) = delete;
+
   ~DelayMessageWorker() override = default;
 
   void DispatchExtendableMessageEvent(
@@ -751,8 +755,6 @@
   blink::mojom::ExtendableMessageEventPtr event_;
   DispatchExtendableMessageEventCallback callback_;
   base::OnceClosure quit_closure_;
-
-  DISALLOW_COPY_AND_ASSIGN(DelayMessageWorker);
 };
 
 TEST_F(ServiceWorkerVersionTest, RequestTimeout) {
diff --git a/content/browser/service_worker/test_service_worker_observer.h b/content/browser/service_worker/test_service_worker_observer.h
index 09b8b0ca..0f2f4433 100644
--- a/content/browser/service_worker/test_service_worker_observer.h
+++ b/content/browser/service_worker/test_service_worker_observer.h
@@ -28,6 +28,11 @@
  public:
   explicit TestServiceWorkerObserver(
       scoped_refptr<ServiceWorkerContextWrapper> wrapper);
+
+  TestServiceWorkerObserver(const TestServiceWorkerObserver&) = delete;
+  TestServiceWorkerObserver& operator=(const TestServiceWorkerObserver&) =
+      delete;
+
   ~TestServiceWorkerObserver() override;
 
   // Returns when |version| reaches |status|.
@@ -55,8 +60,6 @@
   ServiceWorkerVersion::Status status_for_status_change_ =
       ServiceWorkerVersion::NEW;
   base::OnceClosure quit_closure_for_status_change_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestServiceWorkerObserver);
 };
 
 }  // namespace content
diff --git a/content/browser/site_per_process_browsertest.cc b/content/browser/site_per_process_browsertest.cc
index 455681f..676c182 100644
--- a/content/browser/site_per_process_browsertest.cc
+++ b/content/browser/site_per_process_browsertest.cc
@@ -270,6 +270,11 @@
   // NotificationService::AllSources().
   RedirectNotificationObserver(int notification_type,
                                const NotificationSource& source);
+
+  RedirectNotificationObserver(const RedirectNotificationObserver&) = delete;
+  RedirectNotificationObserver& operator=(const RedirectNotificationObserver&) =
+      delete;
+
   ~RedirectNotificationObserver() override;
 
   // Wait until the specified notification occurs.  If the notification was
@@ -301,8 +306,6 @@
   NotificationSource source_;
   NotificationDetails details_;
   base::RunLoop run_loop_;
-
-  DISALLOW_COPY_AND_ASSIGN(RedirectNotificationObserver);
 };
 
 RedirectNotificationObserver::RedirectNotificationObserver(
@@ -348,6 +351,9 @@
   explicit UserInteractionObserver(WebContents* web_contents)
       : WebContentsObserver(web_contents), user_interaction_received_(false) {}
 
+  UserInteractionObserver(const UserInteractionObserver&) = delete;
+  UserInteractionObserver& operator=(const UserInteractionObserver&) = delete;
+
   ~UserInteractionObserver() override {}
 
   // Retrieve the flag. There is no need to wait on a loop since
@@ -364,8 +370,6 @@
   }
 
   bool user_interaction_received_;
-
-  DISALLOW_COPY_AND_ASSIGN(UserInteractionObserver);
 };
 
 // Supports waiting until a WebContents notifies its observers that the visible
@@ -8590,6 +8594,9 @@
     text_input_manager->AddObserver(this);
   }
 
+  TextSelectionObserver(const TextSelectionObserver&) = delete;
+  TextSelectionObserver& operator=(const TextSelectionObserver&) = delete;
+
   ~TextSelectionObserver() { text_input_manager_->RemoveObserver(this); }
 
   void WaitForSelectedText(const std::string& expected_text) {
@@ -8613,13 +8620,16 @@
   std::string last_selected_text_;
   std::string expected_text_;
   scoped_refptr<MessageLoopRunner> loop_runner_;
-
-  DISALLOW_COPY_AND_ASSIGN(TextSelectionObserver);
 };
 
 class SitePerProcessAndroidImeTest : public SitePerProcessBrowserTest {
  public:
   SitePerProcessAndroidImeTest() : SitePerProcessBrowserTest() {}
+
+  SitePerProcessAndroidImeTest(const SitePerProcessAndroidImeTest&) = delete;
+  SitePerProcessAndroidImeTest& operator=(const SitePerProcessAndroidImeTest&) =
+      delete;
+
   ~SitePerProcessAndroidImeTest() override {}
 
  protected:
@@ -8683,9 +8693,6 @@
   }
 
   std::vector<RenderFrameHostImpl*> frames_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(SitePerProcessAndroidImeTest);
 };
 
 // This test verifies that committing text will be applied on the focused
@@ -10128,6 +10135,11 @@
       ui::TouchSelectionControllerClient* client)
       : expected_event_(ui::SELECTION_HANDLES_SHOWN), client_(client) {}
 
+  TouchSelectionControllerClientTestWrapper(
+      const TouchSelectionControllerClientTestWrapper&) = delete;
+  TouchSelectionControllerClientTestWrapper& operator=(
+      const TouchSelectionControllerClientTestWrapper&) = delete;
+
   ~TouchSelectionControllerClientTestWrapper() override {}
 
   void InitWaitForSelectionEvent(ui::SelectionEventType expected_event) {
@@ -10182,8 +10194,6 @@
   std::unique_ptr<base::RunLoop> run_loop_;
   // Not owned.
   ui::TouchSelectionControllerClient* client_;
-
-  DISALLOW_COPY_AND_ASSIGN(TouchSelectionControllerClientTestWrapper);
 };
 
 class TouchSelectionControllerClientAndroidSiteIsolationTest
@@ -11381,6 +11391,11 @@
         deferred_url_(deferred_url),
         deferred_url_triggered_action_(
             std::move(deferred_url_triggered_action)) {}
+
+  CommitMessageOrderReverser(const CommitMessageOrderReverser&) = delete;
+  CommitMessageOrderReverser& operator=(const CommitMessageOrderReverser&) =
+      delete;
+
   ~CommitMessageOrderReverser() override = default;
 
   void WaitForBothCommits() { outer_run_loop.Run(); }
@@ -11415,8 +11430,6 @@
 
   const GURL deferred_url_;
   DidStartDeferringCommitCallback deferred_url_triggered_action_;
-
-  DISALLOW_COPY_AND_ASSIGN(CommitMessageOrderReverser);
 };
 
 }  // namespace
@@ -14609,6 +14622,11 @@
                      bool /* user proceeds with attaching */>> {
  public:
   InnerWebContentsAttachTest() {}
+
+  InnerWebContentsAttachTest(const InnerWebContentsAttachTest&) = delete;
+  InnerWebContentsAttachTest& operator=(const InnerWebContentsAttachTest&) =
+      delete;
+
   ~InnerWebContentsAttachTest() override {}
 
  protected:
@@ -14631,6 +14649,10 @@
       original_render_frame_host->PrepareForInnerWebContentsAttach(
           std::move(callback));
     }
+
+    PrepareFrameJob(const PrepareFrameJob&) = delete;
+    PrepareFrameJob& operator=(const PrepareFrameJob&) = delete;
+
     virtual ~PrepareFrameJob() {}
 
     void WaitForPreparedFrame() {
@@ -14655,14 +14677,10 @@
     bool did_call_prepare_ = false;
     RenderFrameHostImpl* new_render_frame_host_ = nullptr;
     base::RunLoop run_loop_;
-
-    DISALLOW_COPY_AND_ASSIGN(PrepareFrameJob);
   };
 
  private:
   base::test::ScopedFeatureList feature_list_;
-
-  DISALLOW_COPY_AND_ASSIGN(InnerWebContentsAttachTest);
 };
 
 // This is a test for the FrameTreeNode preparation process for various types
diff --git a/content/browser/site_per_process_hit_test_browsertest.cc b/content/browser/site_per_process_hit_test_browsertest.cc
index ea0b3e9..5c9c539 100644
--- a/content/browser/site_per_process_hit_test_browsertest.cc
+++ b/content/browser/site_per_process_hit_test_browsertest.cc
@@ -89,6 +89,9 @@
     host_->AddInputEventObserver(this);
   }
 
+  TestInputEventObserver(const TestInputEventObserver&) = delete;
+  TestInputEventObserver& operator=(const TestInputEventObserver&) = delete;
+
   ~TestInputEventObserver() override { host_->RemoveInputEventObserver(this); }
 
   bool EventWasReceived() const { return !events_received_.empty(); }
@@ -123,8 +126,6 @@
   std::vector<blink::WebInputEvent::Type> events_received_;
   std::vector<blink::mojom::InputEventResultSource> events_acked_;
   ui::WebScopedInputEvent event_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestInputEventObserver);
 };
 
 // |position_in_widget| is in the coord space of |rwhv|.
@@ -751,6 +752,10 @@
 class SystemEventRewriter : public ui::EventRewriter {
  public:
   SystemEventRewriter() = default;
+
+  SystemEventRewriter(const SystemEventRewriter&) = delete;
+  SystemEventRewriter& operator=(const SystemEventRewriter&) = delete;
+
   ~SystemEventRewriter() override = default;
 
  private:
@@ -759,8 +764,6 @@
       const Continuation continuation) override {
     return DiscardEvent(continuation);
   }
-
-  DISALLOW_COPY_AND_ASSIGN(SystemEventRewriter);
 };
 #endif
 
@@ -3268,6 +3271,10 @@
     DCHECK(rwhv);
     rwhv->SetTooltipObserverForTesting(this);
   }
+
+  TooltipMonitor(const TooltipMonitor&) = delete;
+  TooltipMonitor& operator=(const TooltipMonitor&) = delete;
+
   ~TooltipMonitor() override {}
 
   void Reset() {
@@ -3292,8 +3299,6 @@
   std::unique_ptr<base::RunLoop> run_loop_;
   std::u16string tooltip_text_wanted_;
   std::vector<std::u16string> tooltips_received_;
-
-  DISALLOW_COPY_AND_ASSIGN(TooltipMonitor);
 };  // class TooltipMonitor
 
 IN_PROC_BROWSER_TEST_F(SitePerProcessHitTestBrowserTest,
@@ -5754,6 +5759,10 @@
       : context_menu_created_(false),
         message_loop_runner_(new MessageLoopRunner) {}
 
+  ContextMenuObserverDelegate(const ContextMenuObserverDelegate&) = delete;
+  ContextMenuObserverDelegate& operator=(const ContextMenuObserverDelegate&) =
+      delete;
+
   ~ContextMenuObserverDelegate() override {}
 
   bool HandleContextMenu(content::RenderFrameHost* render_frame_host,
@@ -5778,8 +5787,6 @@
 
   // The MessageLoopRunner used to spin the message loop.
   scoped_refptr<MessageLoopRunner> message_loop_runner_;
-
-  DISALLOW_COPY_AND_ASSIGN(ContextMenuObserverDelegate);
 };
 
 // Helper function to run the CreateContextMenuTest in either normal
diff --git a/content/browser/site_per_process_mac_browsertest.mm b/content/browser/site_per_process_mac_browsertest.mm
index ba7e939c3..90c45ee 100644
--- a/content/browser/site_per_process_mac_browsertest.mm
+++ b/content/browser/site_per_process_mac_browsertest.mm
@@ -29,6 +29,10 @@
 class TextInputClientMacHelper {
  public:
   TextInputClientMacHelper() {}
+
+  TextInputClientMacHelper(const TextInputClientMacHelper&) = delete;
+  TextInputClientMacHelper& operator=(const TextInputClientMacHelper&) = delete;
+
   ~TextInputClientMacHelper() {}
 
   void WaitForStringFromRange(RenderWidgetHost* rwh, const gfx::Range& range) {
@@ -69,8 +73,6 @@
   std::string word_;
   gfx::Point point_;
   scoped_refptr<MessageLoopRunner> loop_runner_;
-
-  DISALLOW_COPY_AND_ASSIGN(TextInputClientMacHelper);
 };
 
 }  // namespace
diff --git a/content/browser/sms/sms_fetcher_impl.h b/content/browser/sms/sms_fetcher_impl.h
index 14a0e170..feacce5 100644
--- a/content/browser/sms/sms_fetcher_impl.h
+++ b/content/browser/sms/sms_fetcher_impl.h
@@ -33,6 +33,9 @@
   explicit SmsFetcherImpl(SmsProvider* provider);
   using FailureType = SmsFetchFailureType;
 
+  SmsFetcherImpl(const SmsFetcherImpl&) = delete;
+  SmsFetcherImpl& operator=(const SmsFetcherImpl&) = delete;
+
   ~SmsFetcherImpl() override;
 
   // Called by devices that do not have telephony capabilities and exclusively
@@ -78,8 +81,6 @@
   SEQUENCE_CHECKER(sequence_checker_);
 
   base::WeakPtrFactory<SmsFetcherImpl> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(SmsFetcherImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/sms/sms_fetcher_impl_unittest.cc b/content/browser/sms/sms_fetcher_impl_unittest.cc
index 0185dcf..cf93aee6 100644
--- a/content/browser/sms/sms_fetcher_impl_unittest.cc
+++ b/content/browser/sms/sms_fetcher_impl_unittest.cc
@@ -30,6 +30,10 @@
 class MockContentBrowserClient : public ContentBrowserClient {
  public:
   MockContentBrowserClient() = default;
+
+  MockContentBrowserClient(const MockContentBrowserClient&) = delete;
+  MockContentBrowserClient& operator=(const MockContentBrowserClient&) = delete;
+
   ~MockContentBrowserClient() override = default;
 
   MOCK_METHOD3(
@@ -39,14 +43,15 @@
                         base::OnceCallback<void(absl::optional<OriginList>,
                                                 absl::optional<std::string>,
                                                 absl::optional<FailureType>)>));
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(MockContentBrowserClient);
 };
 
 class MockSubscriber : public SmsFetcher::Subscriber {
  public:
   MockSubscriber() = default;
+
+  MockSubscriber(const MockSubscriber&) = delete;
+  MockSubscriber& operator=(const MockSubscriber&) = delete;
+
   ~MockSubscriber() override = default;
 
   MOCK_METHOD3(OnReceive,
@@ -54,14 +59,15 @@
                     const std::string& one_time_code,
                     UserConsent));
   MOCK_METHOD1(OnFailure, void(FailureType failure_type));
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(MockSubscriber);
 };
 
 class SmsFetcherImplTest : public RenderViewHostTestHarness {
  public:
   SmsFetcherImplTest() = default;
+
+  SmsFetcherImplTest(const SmsFetcherImplTest&) = delete;
+  SmsFetcherImplTest& operator=(const SmsFetcherImplTest&) = delete;
+
   ~SmsFetcherImplTest() override = default;
 
   void SetUp() override {
@@ -83,8 +89,6 @@
   ContentBrowserClient* original_client_ = nullptr;
   NiceMock<MockContentBrowserClient> client_;
   NiceMock<MockSmsProvider> provider_;
-
-  DISALLOW_COPY_AND_ASSIGN(SmsFetcherImplTest);
 };
 
 }  // namespace
diff --git a/content/browser/sms/sms_provider.h b/content/browser/sms/sms_provider.h
index 4f069f4..1e15c22c 100644
--- a/content/browser/sms/sms_provider.h
+++ b/content/browser/sms/sms_provider.h
@@ -47,6 +47,10 @@
   };
 
   SmsProvider();
+
+  SmsProvider(const SmsProvider&) = delete;
+  SmsProvider& operator=(const SmsProvider&) = delete;
+
   virtual ~SmsProvider();
 
   // Listen to the next incoming SMS and notify observers (exactly once) when
@@ -75,7 +79,6 @@
 
  private:
   base::ObserverList<Observer> observers_;
-  DISALLOW_COPY_AND_ASSIGN(SmsProvider);
 };
 
 }  // namespace content
diff --git a/content/browser/sms/sms_provider_gms.h b/content/browser/sms/sms_provider_gms.h
index a5581b3..1bb0dfa 100644
--- a/content/browser/sms/sms_provider_gms.h
+++ b/content/browser/sms/sms_provider_gms.h
@@ -25,6 +25,10 @@
 class CONTENT_EXPORT SmsProviderGms : public SmsProvider {
  public:
   SmsProviderGms();
+
+  SmsProviderGms(const SmsProviderGms&) = delete;
+  SmsProviderGms& operator=(const SmsProviderGms&) = delete;
+
   ~SmsProviderGms() override;
 
   void Retrieve(RenderFrameHost* rfh, SmsFetchType fetch_type) override;
@@ -42,8 +46,6 @@
 
  private:
   base::android::ScopedJavaGlobalRef<jobject> j_sms_provider_;
-
-  DISALLOW_COPY_AND_ASSIGN(SmsProviderGms);
 };
 
 }  // namespace content
diff --git a/content/browser/sms/sms_provider_gms_unittest.cc b/content/browser/sms/sms_provider_gms_unittest.cc
index d3edf512..b41abfe7 100644
--- a/content/browser/sms/sms_provider_gms_unittest.cc
+++ b/content/browser/sms/sms_provider_gms_unittest.cc
@@ -34,6 +34,10 @@
 class MockObserver : public SmsProvider::Observer {
  public:
   MockObserver() = default;
+
+  MockObserver(const MockObserver&) = delete;
+  MockObserver& operator=(const MockObserver&) = delete;
+
   ~MockObserver() override = default;
 
   MOCK_METHOD3(OnReceive,
@@ -41,9 +45,6 @@
                     const std::string& one_time_code,
                     SmsFetcher::UserConsent));
   MOCK_METHOD1(OnFailure, bool(SmsFetchFailureType));
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(MockObserver);
 };
 
 // SmsProviderGmsBaseTest tests the JNI bindings to the android provider, the
diff --git a/content/browser/sms/sms_queue.h b/content/browser/sms/sms_queue.h
index ca86c17..239fbb3 100644
--- a/content/browser/sms/sms_queue.h
+++ b/content/browser/sms/sms_queue.h
@@ -18,6 +18,10 @@
 class CONTENT_EXPORT SmsQueue {
  public:
   SmsQueue();
+
+  SmsQueue(const SmsQueue&) = delete;
+  SmsQueue& operator=(const SmsQueue&) = delete;
+
   ~SmsQueue();
 
   using FailureType = SmsFetchFailureType;
@@ -35,8 +39,6 @@
 
  private:
   std::map<OriginList, base::ObserverList<Subscriber>> subscribers_;
-
-  DISALLOW_COPY_AND_ASSIGN(SmsQueue);
 };
 
 }  // namespace content
diff --git a/content/browser/sms/test/mock_sms_provider.h b/content/browser/sms/test/mock_sms_provider.h
index a0de2a8..e9b2793 100644
--- a/content/browser/sms/test/mock_sms_provider.h
+++ b/content/browser/sms/test/mock_sms_provider.h
@@ -14,12 +14,13 @@
 class MockSmsProvider : public SmsProvider {
  public:
   MockSmsProvider();
+
+  MockSmsProvider(const MockSmsProvider&) = delete;
+  MockSmsProvider& operator=(const MockSmsProvider&) = delete;
+
   ~MockSmsProvider() override;
 
   MOCK_METHOD2(Retrieve, void(RenderFrameHost*, SmsFetchType));
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(MockSmsProvider);
 };
 
 }  // namespace content
diff --git a/content/browser/sms/test/mock_sms_web_contents_delegate.h b/content/browser/sms/test/mock_sms_web_contents_delegate.h
index a86a841..3146c7e 100644
--- a/content/browser/sms/test/mock_sms_web_contents_delegate.h
+++ b/content/browser/sms/test/mock_sms_web_contents_delegate.h
@@ -14,6 +14,11 @@
 class MockSmsWebContentsDelegate : public WebContentsDelegate {
  public:
   MockSmsWebContentsDelegate();
+
+  MockSmsWebContentsDelegate(const MockSmsWebContentsDelegate&) = delete;
+  MockSmsWebContentsDelegate& operator=(const MockSmsWebContentsDelegate&) =
+      delete;
+
   ~MockSmsWebContentsDelegate() override;
 
   MOCK_METHOD5(CreateSmsPrompt,
@@ -22,9 +27,6 @@
                     const std::string&,
                     base::OnceCallback<void()> on_confirm,
                     base::OnceCallback<void()> on_cancel));
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(MockSmsWebContentsDelegate);
 };
 
 }  // namespace content
diff --git a/content/browser/sms/webotp_service.h b/content/browser/sms/webotp_service.h
index 369d7be..917e523a 100644
--- a/content/browser/sms/webotp_service.h
+++ b/content/browser/sms/webotp_service.h
@@ -47,6 +47,10 @@
                 const OriginList&,
                 RenderFrameHost*,
                 mojo::PendingReceiver<blink::mojom::WebOTPService>);
+
+  WebOTPService(const WebOTPService&) = delete;
+  WebOTPService& operator=(const WebOTPService&) = delete;
+
   ~WebOTPService() override;
 
   using FailureType = SmsFetchFailureType;
@@ -104,8 +108,6 @@
   SEQUENCE_CHECKER(sequence_checker_);
 
   base::WeakPtrFactory<WebOTPService> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(WebOTPService);
 };
 
 }  // namespace content
diff --git a/content/browser/speech/audio_buffer.h b/content/browser/speech/audio_buffer.h
index 1231fa4..bacad63 100644
--- a/content/browser/speech/audio_buffer.h
+++ b/content/browser/speech/audio_buffer.h
@@ -51,6 +51,10 @@
 class AudioBuffer {
  public:
   explicit AudioBuffer(int bytes_per_sample);
+
+  AudioBuffer(const AudioBuffer&) = delete;
+  AudioBuffer& operator=(const AudioBuffer&) = delete;
+
   ~AudioBuffer();
 
   // Enqueues a copy of |length| bytes of |data| buffer.
@@ -75,8 +79,6 @@
   using ChunksContainer = base::circular_deque<scoped_refptr<AudioChunk>>;
   ChunksContainer chunks_;
   const int bytes_per_sample_;
-
-  DISALLOW_COPY_AND_ASSIGN(AudioBuffer);
 };
 
 }  // namespace content
diff --git a/content/browser/speech/audio_encoder.h b/content/browser/speech/audio_encoder.h
index 7e59c08..4e5a6d7 100644
--- a/content/browser/speech/audio_encoder.h
+++ b/content/browser/speech/audio_encoder.h
@@ -19,6 +19,10 @@
 class AudioEncoder {
  public:
   AudioEncoder(int sampling_rate, int bits_per_sample);
+
+  AudioEncoder(const AudioEncoder&) = delete;
+  AudioEncoder& operator=(const AudioEncoder&) = delete;
+
   ~AudioEncoder();
 
   // Encodes |raw audio| to the internal buffer. Use
@@ -40,8 +44,6 @@
 
   FLAC__StreamEncoder* encoder_;
   bool is_encoder_initialized_;
-
-  DISALLOW_COPY_AND_ASSIGN(AudioEncoder);
 };
 
 }  // namespace content
diff --git a/content/browser/speech/endpointer/energy_endpointer.h b/content/browser/speech/endpointer/energy_endpointer.h
index 7b0b292a..773146390 100644
--- a/content/browser/speech/endpointer/energy_endpointer.h
+++ b/content/browser/speech/endpointer/energy_endpointer.h
@@ -62,6 +62,10 @@
   // The default construction MUST be followed by Init(), before any
   // other use can be made of the instance.
   EnergyEndpointer();
+
+  EnergyEndpointer(const EnergyEndpointer&) = delete;
+  EnergyEndpointer& operator=(const EnergyEndpointer&) = delete;
+
   virtual ~EnergyEndpointer();
 
   void Init(const EnergyEndpointerParams& params);
@@ -152,8 +156,6 @@
   // Time when mode switched from environment estimation to user input. This
   // is used to time forced rejection of audio feedback contamination.
   int64_t user_input_start_time_us_;
-
-  DISALLOW_COPY_AND_ASSIGN(EnergyEndpointer);
 };
 
 }  // namespace content
diff --git a/content/browser/speech/speech_recognition_dispatcher_host.h b/content/browser/speech/speech_recognition_dispatcher_host.h
index 14d090e..c5b6c98 100644
--- a/content/browser/speech/speech_recognition_dispatcher_host.h
+++ b/content/browser/speech/speech_recognition_dispatcher_host.h
@@ -39,6 +39,12 @@
     : public blink::mojom::SpeechRecognizer {
  public:
   SpeechRecognitionDispatcherHost(int render_process_id, int render_frame_id);
+
+  SpeechRecognitionDispatcherHost(const SpeechRecognitionDispatcherHost&) =
+      delete;
+  SpeechRecognitionDispatcherHost& operator=(
+      const SpeechRecognitionDispatcherHost&) = delete;
+
   ~SpeechRecognitionDispatcherHost() override;
   static void Create(
       int render_process_id,
@@ -74,8 +80,6 @@
   // about this class being destroyed in the meanwhile (due to browser shutdown)
   // since tasks pending on a destroyed WeakPtr are automatically discarded.
   base::WeakPtrFactory<SpeechRecognitionDispatcherHost> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(SpeechRecognitionDispatcherHost);
 };
 
 // SpeechRecognitionSession implements the
diff --git a/content/browser/speech/speech_recognizer_impl.cc b/content/browser/speech/speech_recognizer_impl.cc
index 012021fb..890ce89 100644
--- a/content/browser/speech/speech_recognizer_impl.cc
+++ b/content/browser/speech/speech_recognizer_impl.cc
@@ -45,6 +45,10 @@
  public:
   OnDataConverter(const AudioParameters& input_params,
                   const AudioParameters& output_params);
+
+  OnDataConverter(const OnDataConverter&) = delete;
+  OnDataConverter& operator=(const OnDataConverter&) = delete;
+
   ~OnDataConverter() override;
 
   // Converts input audio |data| bus into an AudioChunk where the input format
@@ -67,8 +71,6 @@
   const AudioParameters input_parameters_;
   const AudioParameters output_parameters_;
   bool data_was_converted_;
-
-  DISALLOW_COPY_AND_ASSIGN(OnDataConverter);
 };
 
 namespace {
diff --git a/content/browser/ssl/ssl_client_auth_handler.cc b/content/browser/ssl/ssl_client_auth_handler.cc
index 8100461..32e31e9 100644
--- a/content/browser/ssl/ssl_client_auth_handler.cc
+++ b/content/browser/ssl/ssl_client_auth_handler.cc
@@ -26,6 +26,10 @@
       base::WeakPtr<SSLClientAuthHandler> handler)
       : handler_(std::move(handler)) {}
 
+  ClientCertificateDelegateImpl(const ClientCertificateDelegateImpl&) = delete;
+  ClientCertificateDelegateImpl& operator=(
+      const ClientCertificateDelegateImpl&) = delete;
+
   ~ClientCertificateDelegateImpl() override {
     if (!continue_called_ && handler_) {
       handler_->delegate_->CancelCertificateSelection();
@@ -46,8 +50,6 @@
  private:
   base::WeakPtr<SSLClientAuthHandler> handler_;
   bool continue_called_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(ClientCertificateDelegateImpl);
 };
 
 // A reference-counted core to allow the ClientCertStore and SSLCertRequestInfo
diff --git a/content/browser/ssl/ssl_manager.h b/content/browser/ssl/ssl_manager.h
index e63e956..7788f24 100644
--- a/content/browser/ssl/ssl_manager.h
+++ b/content/browser/ssl/ssl_manager.h
@@ -56,6 +56,10 @@
 
   // Construct an SSLManager for the specified tab.
   explicit SSLManager(NavigationControllerImpl* controller);
+
+  SSLManager(const SSLManager&) = delete;
+  SSLManager& operator=(const SSLManager&) = delete;
+
   virtual ~SSLManager();
 
   // The navigation controller associated with this SSLManager.  The
@@ -113,8 +117,6 @@
 
   // Delegate that manages SSL state specific to each host.
   SSLHostStateDelegate* ssl_host_state_delegate_;
-
-  DISALLOW_COPY_AND_ASSIGN(SSLManager);
 };
 
 }  // namespace content
diff --git a/content/browser/ssl_private_key_impl.h b/content/browser/ssl_private_key_impl.h
index a504bb7..473538a 100644
--- a/content/browser/ssl_private_key_impl.h
+++ b/content/browser/ssl_private_key_impl.h
@@ -20,6 +20,10 @@
 class SSLPrivateKeyImpl : public network::mojom::SSLPrivateKey {
  public:
   explicit SSLPrivateKeyImpl(scoped_refptr<net::SSLPrivateKey> ssl_private_key);
+
+  SSLPrivateKeyImpl(const SSLPrivateKeyImpl&) = delete;
+  SSLPrivateKeyImpl& operator=(const SSLPrivateKeyImpl&) = delete;
+
   ~SSLPrivateKeyImpl() override;
 
   // network::mojom::SSLPrivateKey:
@@ -33,8 +37,6 @@
                 const std::vector<uint8_t>& signature);
 
   scoped_refptr<net::SSLPrivateKey> ssl_private_key_;
-
-  DISALLOW_COPY_AND_ASSIGN(SSLPrivateKeyImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/startup_task_runner.h b/content/browser/startup_task_runner.h
index 96437fa..73c3710 100644
--- a/content/browser/startup_task_runner.h
+++ b/content/browser/startup_task_runner.h
@@ -40,6 +40,9 @@
   StartupTaskRunner(base::OnceCallback<void(int)> startup_complete_callback,
                     scoped_refptr<base::SingleThreadTaskRunner> proxy);
 
+  StartupTaskRunner(const StartupTaskRunner&) = delete;
+  StartupTaskRunner& operator=(const StartupTaskRunner&) = delete;
+
   ~StartupTaskRunner();
 
   // Add a task to the queue of startup tasks to be run.
@@ -59,8 +62,6 @@
 
   base::OnceCallback<void(int)> startup_complete_callback_;
   scoped_refptr<base::SingleThreadTaskRunner> proxy_;
-
-  DISALLOW_COPY_AND_ASSIGN(StartupTaskRunner);
 };
 
 }  // namespace content
diff --git a/content/browser/storage_partition_impl.cc b/content/browser/storage_partition_impl.cc
index 346aa17..e8517c4e 100644
--- a/content/browser/storage_partition_impl.cc
+++ b/content/browser/storage_partition_impl.cc
@@ -946,6 +946,9 @@
         quota_storage_remove_mask_(quota_storage_remove_mask),
         callback_(std::move(callback)) {}
 
+  DataDeletionHelper(const DataDeletionHelper&) = delete;
+  DataDeletionHelper& operator=(const DataDeletionHelper&) = delete;
+
   ~DataDeletionHelper() = default;
 
   void ClearDataOnUIThread(
@@ -1006,8 +1009,6 @@
 
   base::WeakPtrFactory<StoragePartitionImpl::DataDeletionHelper> weak_factory_{
       this};
-
-  DISALLOW_COPY_AND_ASSIGN(DataDeletionHelper);
 };
 
 void StoragePartitionImpl::DataDeletionHelper::ClearQuotaManagedDataOnIOThread(
diff --git a/content/browser/storage_partition_impl.h b/content/browser/storage_partition_impl.h
index 7e67cc0..11f1055c 100644
--- a/content/browser/storage_partition_impl.h
+++ b/content/browser/storage_partition_impl.h
@@ -84,6 +84,9 @@
       public network::mojom::NetworkContextClient,
       public network::mojom::URLLoaderNetworkServiceObserver {
  public:
+  StoragePartitionImpl(const StoragePartitionImpl&) = delete;
+  StoragePartitionImpl& operator=(const StoragePartitionImpl&) = delete;
+
   // It is guaranteed that storage partitions are destructed before the
   // browser context starts shutting down its corresponding IO thread residents
   // (e.g. resource context).
@@ -665,8 +668,6 @@
   int next_pending_trust_token_issuance_callback_key_ = 0;
 
   base::WeakPtrFactory<StoragePartitionImpl> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(StoragePartitionImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/storage_partition_impl_browsertest.cc b/content/browser/storage_partition_impl_browsertest.cc
index 34ce3d9..f76c1cc8 100644
--- a/content/browser/storage_partition_impl_browsertest.cc
+++ b/content/browser/storage_partition_impl_browsertest.cc
@@ -60,6 +60,9 @@
       : select_certificate_callback_(std::move(select_certificate_callback)),
         delete_delegate_callback_(std::move(delete_delegate_callback)) {}
 
+  ClientCertBrowserClient(const ClientCertBrowserClient&) = delete;
+  ClientCertBrowserClient& operator=(const ClientCertBrowserClient&) = delete;
+
   ~ClientCertBrowserClient() override = default;
 
   // Returns a cancellation callback for the imaginary client certificate
@@ -84,7 +87,6 @@
   scoped_refptr<base::SequencedTaskRunner> task_runner_;
   base::OnceClosure select_certificate_callback_;
   base::OnceClosure delete_delegate_callback_;
-  DISALLOW_COPY_AND_ASSIGN(ClientCertBrowserClient);
 };
 
 class ClientCertBrowserTest : public ContentBrowserTest {
diff --git a/content/browser/storage_partition_impl_map.h b/content/browser/storage_partition_impl_map.h
index 88ec22a..39f768e6 100644
--- a/content/browser/storage_partition_impl_map.h
+++ b/content/browser/storage_partition_impl_map.h
@@ -33,6 +33,9 @@
  public:
   explicit StoragePartitionImplMap(BrowserContext* browser_context);
 
+  StoragePartitionImplMap(const StoragePartitionImplMap&) = delete;
+  StoragePartitionImplMap& operator=(const StoragePartitionImplMap&) = delete;
+
   ~StoragePartitionImplMap() override;
 
   // This map retains ownership of the returned StoragePartition objects.
@@ -97,8 +100,6 @@
   // Set to true when the ResourceContext for the associated |browser_context_|
   // is initialized. Can never return to false.
   bool resource_context_initialized_;
-
-  DISALLOW_COPY_AND_ASSIGN(StoragePartitionImplMap);
 };
 
 }  // namespace content
diff --git a/content/browser/storage_partition_impl_unittest.cc b/content/browser/storage_partition_impl_unittest.cc
index a7d5c599..20c54ad 100644
--- a/content/browser/storage_partition_impl_unittest.cc
+++ b/content/browser/storage_partition_impl_unittest.cc
@@ -119,6 +119,10 @@
 class AwaitCompletionHelper {
  public:
   AwaitCompletionHelper() : start_(false), already_quit_(false) {}
+
+  AwaitCompletionHelper(const AwaitCompletionHelper&) = delete;
+  AwaitCompletionHelper& operator=(const AwaitCompletionHelper&) = delete;
+
   virtual ~AwaitCompletionHelper() = default;
 
   void BlockUntilNotified() {
@@ -148,8 +152,6 @@
   // immediately.
   bool start_;
   bool already_quit_;
-
-  DISALLOW_COPY_AND_ASSIGN(AwaitCompletionHelper);
 };
 
 class RemoveCookieTester {
@@ -257,6 +259,9 @@
         storage_partition_(browser_context->GetDefaultStoragePartition()),
         dom_storage_context_(storage_partition_->GetDOMStorageContext()) {}
 
+  RemoveLocalStorageTester(const RemoveLocalStorageTester&) = delete;
+  RemoveLocalStorageTester& operator=(const RemoveLocalStorageTester&) = delete;
+
   ~RemoveLocalStorageTester() {
     // Tests which bring up a real Local Storage context need to shut it down
     // and wait for the database to be closed before terminating; otherwise the
@@ -391,8 +396,6 @@
   std::vector<content::StorageUsageInfo> infos_;
 
   AwaitCompletionHelper await_completion_;
-
-  DISALLOW_COPY_AND_ASSIGN(RemoveLocalStorageTester);
 };
 
 class RemoveCodeCacheTester {
diff --git a/content/browser/tracing/background_tracing_active_scenario.h b/content/browser/tracing/background_tracing_active_scenario.h
index 9f40fe95..ad61735 100644
--- a/content/browser/tracing/background_tracing_active_scenario.h
+++ b/content/browser/tracing/background_tracing_active_scenario.h
@@ -28,6 +28,12 @@
       std::unique_ptr<BackgroundTracingConfigImpl> config,
       BackgroundTracingManager::ReceiveCallback receive_callback,
       base::OnceClosure on_aborted_callback);
+
+  BackgroundTracingActiveScenario(const BackgroundTracingActiveScenario&) =
+      delete;
+  BackgroundTracingActiveScenario& operator=(
+      const BackgroundTracingActiveScenario&) = delete;
+
   virtual ~BackgroundTracingActiveScenario();
 
   void StartTracingIfConfigNeedsIt();
@@ -92,7 +98,6 @@
 
   // NOTE: Weak pointers must be invalidated before all other member variables.
   base::WeakPtrFactory<BackgroundTracingActiveScenario> weak_ptr_factory_{this};
-  DISALLOW_COPY_AND_ASSIGN(BackgroundTracingActiveScenario);
 };
 
 }  // namespace content
diff --git a/content/browser/tracing/background_tracing_agent_client_impl.h b/content/browser/tracing/background_tracing_agent_client_impl.h
index 4c5466b..2b84a6a 100644
--- a/content/browser/tracing/background_tracing_agent_client_impl.h
+++ b/content/browser/tracing/background_tracing_agent_client_impl.h
@@ -20,6 +20,11 @@
       int child_process_id,
       mojo::Remote<tracing::mojom::BackgroundTracingAgentProvider> provider);
 
+  BackgroundTracingAgentClientImpl(const BackgroundTracingAgentClientImpl&) =
+      delete;
+  BackgroundTracingAgentClientImpl& operator=(
+      const BackgroundTracingAgentClientImpl&) = delete;
+
   ~BackgroundTracingAgentClientImpl() override;
 
   // tracing::mojom::BackgroundTracingAgentClient methods:
@@ -32,8 +37,6 @@
       mojo::Remote<tracing::mojom::BackgroundTracingAgent> agent);
 
   mojo::Remote<tracing::mojom::BackgroundTracingAgent> agent_;
-
-  DISALLOW_COPY_AND_ASSIGN(BackgroundTracingAgentClientImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/tracing/background_tracing_config_impl.h b/content/browser/tracing/background_tracing_config_impl.h
index 3843005..277db9e 100644
--- a/content/browser/tracing/background_tracing_config_impl.h
+++ b/content/browser/tracing/background_tracing_config_impl.h
@@ -24,6 +24,10 @@
  public:
   explicit BackgroundTracingConfigImpl(TracingMode tracing_mode);
 
+  BackgroundTracingConfigImpl(const BackgroundTracingConfigImpl&) = delete;
+  BackgroundTracingConfigImpl& operator=(const BackgroundTracingConfigImpl&) =
+      delete;
+
   ~BackgroundTracingConfigImpl() override;
 
   // From BackgroundTracingConfig
@@ -131,8 +135,6 @@
   int upload_limit_network_kb_ = 1024;
   int upload_limit_kb_ = kUploadLimitKb;
   int interning_reset_interval_ms_ = 5000;
-
-  DISALLOW_COPY_AND_ASSIGN(BackgroundTracingConfigImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/tracing/background_tracing_rule.h b/content/browser/tracing/background_tracing_rule.h
index e959708..dd1dff15 100644
--- a/content/browser/tracing/background_tracing_rule.h
+++ b/content/browser/tracing/background_tracing_rule.h
@@ -24,6 +24,9 @@
   BackgroundTracingRule();
   explicit BackgroundTracingRule(int trigger_delay);
 
+  BackgroundTracingRule(const BackgroundTracingRule&) = delete;
+  BackgroundTracingRule& operator=(const BackgroundTracingRule&) = delete;
+
   virtual ~BackgroundTracingRule();
 
   void Setup(const base::Value& dict);
@@ -65,8 +68,6 @@
   virtual std::string GetDefaultRuleId() const;
 
  private:
-  DISALLOW_COPY_AND_ASSIGN(BackgroundTracingRule);
-
   double trigger_chance_ = 1.0;
   int trigger_delay_ = -1;
   bool stop_tracing_on_repeated_reactive_ = false;
diff --git a/content/browser/tracing/cast_tracing_agent.cc b/content/browser/tracing/cast_tracing_agent.cc
index ec2a444..c812c764 100644
--- a/content/browser/tracing/cast_tracing_agent.cc
+++ b/content/browser/tracing/cast_tracing_agent.cc
@@ -56,6 +56,9 @@
     DETACH_FROM_SEQUENCE(worker_sequence_checker_);
   }
 
+  CastSystemTracingSession(const CastSystemTracingSession&) = delete;
+  CastSystemTracingSession& operator=(const CastSystemTracingSession&) = delete;
+
   ~CastSystemTracingSession() {
     worker_task_runner_->PostTask(FROM_HERE,
                                   base::BindOnce(&DestroySystemTracerOnWorker,
@@ -147,8 +150,6 @@
 
   bool is_tracing_ = false;
   std::unique_ptr<chromecast::SystemTracer> system_tracer_;
-
-  DISALLOW_COPY_AND_ASSIGN(CastSystemTracingSession);
 };
 
 namespace {
diff --git a/content/browser/tracing/cast_tracing_agent.h b/content/browser/tracing/cast_tracing_agent.h
index f0cef41..de92160 100644
--- a/content/browser/tracing/cast_tracing_agent.h
+++ b/content/browser/tracing/cast_tracing_agent.h
@@ -18,13 +18,15 @@
 class CastTracingAgent : public tracing::BaseAgent {
  public:
   CastTracingAgent();
+
+  CastTracingAgent(const CastTracingAgent&) = delete;
+  CastTracingAgent& operator=(const CastTracingAgent&) = delete;
+
   ~CastTracingAgent() override;
 
  private:
   // tracing::BaseAgent implementation.
   void GetCategories(std::set<std::string>* category_set) override;
-
-  DISALLOW_COPY_AND_ASSIGN(CastTracingAgent);
 };
 
 }  // namespace content
diff --git a/content/browser/tracing/file_tracing_provider_impl.h b/content/browser/tracing/file_tracing_provider_impl.h
index 398ec54..fe7f212 100644
--- a/content/browser/tracing/file_tracing_provider_impl.h
+++ b/content/browser/tracing/file_tracing_provider_impl.h
@@ -17,6 +17,10 @@
 class FileTracingProviderImpl : public base::FileTracing::Provider {
  public:
   FileTracingProviderImpl();
+
+  FileTracingProviderImpl(const FileTracingProviderImpl&) = delete;
+  FileTracingProviderImpl& operator=(const FileTracingProviderImpl&) = delete;
+
   ~FileTracingProviderImpl() override;
 
   // base::FileTracing::Provider:
@@ -28,9 +32,6 @@
                              const base::FilePath& path,
                              int64_t size) override;
   void FileTracingEventEnd(const char* name, const void* id) override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(FileTracingProviderImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/tracing/startup_tracing_browsertest.cc b/content/browser/tracing/startup_tracing_browsertest.cc
index 9652321..01b916d7 100644
--- a/content/browser/tracing/startup_tracing_browsertest.cc
+++ b/content/browser/tracing/startup_tracing_browsertest.cc
@@ -72,6 +72,10 @@
 class LargeTraceEventData : public base::trace_event::ConvertableToTraceFormat {
  public:
   LargeTraceEventData() = default;
+
+  LargeTraceEventData(const LargeTraceEventData&) = delete;
+  LargeTraceEventData& operator=(const LargeTraceEventData&) = delete;
+
   ~LargeTraceEventData() override = default;
 
   const size_t kLargeMessageSize = 100 * 1024;
@@ -79,9 +83,6 @@
     std::string large_string(kLargeMessageSize, '.');
     out->append(large_string);
   }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(LargeTraceEventData);
 };
 
 // This will fill a massive amount of startup tracing data into a
diff --git a/content/browser/tracing/tracing_ui.h b/content/browser/tracing/tracing_ui.h
index 33dbb84..06195a8 100644
--- a/content/browser/tracing/tracing_ui.h
+++ b/content/browser/tracing/tracing_ui.h
@@ -28,6 +28,10 @@
 class CONTENT_EXPORT TracingUI : public WebUIController {
  public:
   explicit TracingUI(WebUI* web_ui);
+
+  TracingUI(const TracingUI&) = delete;
+  TracingUI& operator=(const TracingUI&) = delete;
+
   ~TracingUI() override;
 
   // Public for testing.
@@ -38,8 +42,6 @@
  private:
   std::unique_ptr<TracingDelegate> delegate_;
   base::WeakPtrFactory<TracingUI> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(TracingUI);
 };
 
 }  // namespace content
diff --git a/content/browser/ukm_internals_ui.cc b/content/browser/ukm_internals_ui.cc
index 80746518..2209f9e 100644
--- a/content/browser/ukm_internals_ui.cc
+++ b/content/browser/ukm_internals_ui.cc
@@ -41,6 +41,10 @@
 class UkmMessageHandler : public WebUIMessageHandler {
  public:
   explicit UkmMessageHandler(const ukm::UkmService* ukm_service);
+
+  UkmMessageHandler(const UkmMessageHandler&) = delete;
+  UkmMessageHandler& operator=(const UkmMessageHandler&) = delete;
+
   ~UkmMessageHandler() override;
 
   // WebUIMessageHandler:
@@ -50,8 +54,6 @@
   void HandleRequestUkmData(const base::ListValue* args);
 
   const ukm::UkmService* ukm_service_;
-
-  DISALLOW_COPY_AND_ASSIGN(UkmMessageHandler);
 };
 
 UkmMessageHandler::UkmMessageHandler(const ukm::UkmService* ukm_service)
diff --git a/content/browser/url_loader_factory_getter.cc b/content/browser/url_loader_factory_getter.cc
index 09e767e5..b26b432 100644
--- a/content/browser/url_loader_factory_getter.cc
+++ b/content/browser/url_loader_factory_getter.cc
@@ -35,6 +35,12 @@
   explicit PendingURLLoaderFactoryForIOThread(
       scoped_refptr<URLLoaderFactoryGetter> factory_getter)
       : factory_getter_(std::move(factory_getter)) {}
+
+  PendingURLLoaderFactoryForIOThread(
+      const PendingURLLoaderFactoryForIOThread&) = delete;
+  PendingURLLoaderFactoryForIOThread& operator=(
+      const PendingURLLoaderFactoryForIOThread&) = delete;
+
   ~PendingURLLoaderFactoryForIOThread() override = default;
 
   scoped_refptr<URLLoaderFactoryGetter>& url_loader_factory_getter() {
@@ -46,8 +52,6 @@
   scoped_refptr<network::SharedURLLoaderFactory> CreateFactory() override;
 
   scoped_refptr<URLLoaderFactoryGetter> factory_getter_;
-
-  DISALLOW_COPY_AND_ASSIGN(PendingURLLoaderFactoryForIOThread);
 };
 
 class URLLoaderFactoryGetter::URLLoaderFactoryForIOThread
diff --git a/content/browser/utility_process_host.h b/content/browser/utility_process_host.h
index 37e1568..28775588 100644
--- a/content/browser/utility_process_host.h
+++ b/content/browser/utility_process_host.h
@@ -69,6 +69,10 @@
 
   UtilityProcessHost();
   explicit UtilityProcessHost(std::unique_ptr<Client> client);
+
+  UtilityProcessHost(const UtilityProcessHost&) = delete;
+  UtilityProcessHost& operator=(const UtilityProcessHost&) = delete;
+
   ~UtilityProcessHost() override;
 
   base::WeakPtr<UtilityProcessHost> AsWeakPtr();
@@ -165,8 +169,6 @@
 
   // Used to vend weak pointers, and should always be declared last.
   base::WeakPtrFactory<UtilityProcessHost> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(UtilityProcessHost);
 };
 
 }  // namespace content
diff --git a/content/browser/vibration_browsertest.cc b/content/browser/vibration_browsertest.cc
index 365dba3..2bbd7308 100644
--- a/content/browser/vibration_browsertest.cc
+++ b/content/browser/vibration_browsertest.cc
@@ -32,6 +32,9 @@
         &VibrationTest::BindVibrationManager, base::Unretained(this)));
   }
 
+  VibrationTest(const VibrationTest&) = delete;
+  VibrationTest& operator=(const VibrationTest&) = delete;
+
   ~VibrationTest() override {
     OverrideVibrationManagerBinderForTesting(base::NullCallback());
   }
@@ -65,8 +68,6 @@
   int64_t vibrate_milliseconds_ = -1;
   base::OnceClosure vibrate_done_;
   mojo::Receiver<device::mojom::VibrationManager> receiver_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(VibrationTest);
 };
 
 IN_PROC_BROWSER_TEST_F(VibrationTest, Vibrate) {
diff --git a/content/browser/wake_lock/wake_lock_context_host.h b/content/browser/wake_lock/wake_lock_context_host.h
index 005d0c5..c1b2cb3f 100644
--- a/content/browser/wake_lock/wake_lock_context_host.h
+++ b/content/browser/wake_lock/wake_lock_context_host.h
@@ -20,6 +20,10 @@
 class WakeLockContextHost {
  public:
   explicit WakeLockContextHost(WebContents* web_contents);
+
+  WakeLockContextHost(const WakeLockContextHost&) = delete;
+  WakeLockContextHost& operator=(const WakeLockContextHost&) = delete;
+
   ~WakeLockContextHost();
 
   // This callback is passed into the DeviceService constructor in order to
@@ -40,8 +44,6 @@
 
   // The WakeLockContext instance that is connected to this instance.
   mojo::Remote<device::mojom::WakeLockContext> wake_lock_context_;
-
-  DISALLOW_COPY_AND_ASSIGN(WakeLockContextHost);
 };
 
 }  // namespace content
diff --git a/content/browser/web_contents/aura/gesture_nav_simple.cc b/content/browser/web_contents/aura/gesture_nav_simple.cc
index d4cf72e..04807c9c 100644
--- a/content/browser/web_contents/aura/gesture_nav_simple.cc
+++ b/content/browser/web_contents/aura/gesture_nav_simple.cc
@@ -133,6 +133,10 @@
              OverscrollMode mode,
              const gfx::Rect& content_bounds,
              float max_drag_progress);
+
+  Affordance(const Affordance&) = delete;
+  Affordance& operator=(const Affordance&) = delete;
+
   ~Affordance() override;
 
   // Sets drag progress. 0 means no progress. 1 means full progress. Values more
@@ -206,8 +210,6 @@
   float complete_progress_ = 0.f;
 
   std::unique_ptr<gfx::LinearAnimation> animation_;
-
-  DISALLOW_COPY_AND_ASSIGN(Affordance);
 };
 
 Affordance::Affordance(GestureNavSimple* owner,
diff --git a/content/browser/web_contents/aura/gesture_nav_simple.h b/content/browser/web_contents/aura/gesture_nav_simple.h
index 0a6c281..e0f30daf 100644
--- a/content/browser/web_contents/aura/gesture_nav_simple.h
+++ b/content/browser/web_contents/aura/gesture_nav_simple.h
@@ -21,6 +21,10 @@
 class CONTENT_EXPORT GestureNavSimple : public OverscrollControllerDelegate {
  public:
   explicit GestureNavSimple(WebContentsImpl* web_contents);
+
+  GestureNavSimple(const GestureNavSimple&) = delete;
+  GestureNavSimple& operator=(const GestureNavSimple&) = delete;
+
   ~GestureNavSimple() override;
 
   // Called by the affordance when its complete/abort animation is finished so
@@ -50,8 +54,6 @@
   // When an overscroll is active, represents the maximum overscroll delta we
   // expect in OnOverscrollUpdate().
   float max_delta_ = 0.f;
-
-  DISALLOW_COPY_AND_ASSIGN(GestureNavSimple);
 };
 
 }  // namespace content
diff --git a/content/browser/web_contents/color_chooser_unittest.cc b/content/browser/web_contents/color_chooser_unittest.cc
index 2c933eb..9e5daa3 100644
--- a/content/browser/web_contents/color_chooser_unittest.cc
+++ b/content/browser/web_contents/color_chooser_unittest.cc
@@ -25,13 +25,14 @@
 class MockColorChooser : public content::ColorChooser {
  public:
   MockColorChooser() = default;
+
+  MockColorChooser(const MockColorChooser&) = delete;
+  MockColorChooser& operator=(const MockColorChooser&) = delete;
+
   ~MockColorChooser() override = default;
 
   MOCK_METHOD0(End, void());
   MOCK_METHOD1(SetSelectedColor, void(SkColor color));
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(MockColorChooser);
 };
 
 // Delegate to override OpenColorChooser.
@@ -41,6 +42,9 @@
       std::unique_ptr<MockColorChooser> mock_color_chooser)
       : mock_color_chooser_(std::move(mock_color_chooser)) {}
 
+  OpenColorChooserDelegate(const OpenColorChooserDelegate&) = delete;
+  OpenColorChooserDelegate& operator=(const OpenColorChooserDelegate&) = delete;
+
   ~OpenColorChooserDelegate() override = default;
 
   // WebContentsDelegate:
@@ -56,8 +60,6 @@
 
  private:
   std::unique_ptr<MockColorChooser> mock_color_chooser_;
-
-  DISALLOW_COPY_AND_ASSIGN(OpenColorChooserDelegate);
 };
 
 }  // namespace
diff --git a/content/browser/web_contents/java_script_dialog_commit_deferring_condition.h b/content/browser/web_contents/java_script_dialog_commit_deferring_condition.h
index 295a5f2c..bbad494 100644
--- a/content/browser/web_contents/java_script_dialog_commit_deferring_condition.h
+++ b/content/browser/web_contents/java_script_dialog_commit_deferring_condition.h
@@ -21,6 +21,12 @@
  public:
   static std::unique_ptr<CommitDeferringCondition> MaybeCreate(
       NavigationRequest& navigation_request);
+
+  JavaScriptDialogCommitDeferringCondition(
+      const JavaScriptDialogCommitDeferringCondition&) = delete;
+  JavaScriptDialogCommitDeferringCondition& operator=(
+      const JavaScriptDialogCommitDeferringCondition&) = delete;
+
   ~JavaScriptDialogCommitDeferringCondition() override;
 
   Result WillCommitNavigation(base::OnceClosure resume) override;
@@ -32,8 +38,6 @@
   // Bare reference is ok here because this class is indirectly owned by the
   // NavigationRequest which will be destroyed before the WebContentsImpl.
   WebContentsImpl& web_contents_;
-
-  DISALLOW_COPY_AND_ASSIGN(JavaScriptDialogCommitDeferringCondition);
 };
 
 }  // namespace content
diff --git a/content/browser/web_contents/web_contents_android.h b/content/browser/web_contents/web_contents_android.h
index deaff54b..347f12f 100644
--- a/content/browser/web_contents/web_contents_android.h
+++ b/content/browser/web_contents/web_contents_android.h
@@ -33,6 +33,10 @@
 class CONTENT_EXPORT WebContentsAndroid {
  public:
   explicit WebContentsAndroid(WebContentsImpl* web_contents);
+
+  WebContentsAndroid(const WebContentsAndroid&) = delete;
+  WebContentsAndroid& operator=(const WebContentsAndroid&) = delete;
+
   ~WebContentsAndroid();
 
   WebContentsImpl* web_contents() const { return web_contents_; }
@@ -314,8 +318,6 @@
   base::ObserverList<DestructionObserver> destruction_observers_;
 
   base::WeakPtrFactory<WebContentsAndroid> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(WebContentsAndroid);
 };
 
 }  // namespace content
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 176b621..8f8de47 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -277,6 +277,12 @@
 class JavaScriptDialogDismissNotifier {
  public:
   JavaScriptDialogDismissNotifier() = default;
+
+  JavaScriptDialogDismissNotifier(const JavaScriptDialogDismissNotifier&) =
+      delete;
+  JavaScriptDialogDismissNotifier& operator=(
+      const JavaScriptDialogDismissNotifier&) = delete;
+
   ~JavaScriptDialogDismissNotifier() {
     for (auto& callback : callbacks_) {
       std::move(callback).Run();
@@ -289,8 +295,6 @@
 
  private:
   std::vector<base::OnceClosure> callbacks_;
-
-  DISALLOW_COPY_AND_ASSIGN(JavaScriptDialogDismissNotifier);
 };
 
 bool FrameCompareDepth(RenderFrameHostImpl* a, RenderFrameHostImpl* b) {
@@ -617,6 +621,11 @@
     watched_host_->AddObserver(this);
   }
 
+  RenderWidgetHostDestructionObserver(
+      const RenderWidgetHostDestructionObserver&) = delete;
+  RenderWidgetHostDestructionObserver& operator=(
+      const RenderWidgetHostDestructionObserver&) = delete;
+
   ~RenderWidgetHostDestructionObserver() override {
     watched_host_->RemoveObserver(this);
   }
@@ -629,8 +638,6 @@
  private:
   WebContentsImpl* owner_;
   RenderWidgetHost* watched_host_;
-
-  DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostDestructionObserver);
 };
 
 // WebContentsImpl::WebContentsDestructionObserver ----------------------------
diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h
index 2eaec6f..87bb3ba 100644
--- a/content/browser/web_contents/web_contents_impl.h
+++ b/content/browser/web_contents/web_contents_impl.h
@@ -187,6 +187,9 @@
  public:
   class FriendWrapper;
 
+  WebContentsImpl(const WebContentsImpl&) = delete;
+  WebContentsImpl& operator=(const WebContentsImpl&) = delete;
+
   ~WebContentsImpl() override;
 
   static std::unique_ptr<WebContentsImpl> CreateWithOpener(
@@ -2230,8 +2233,6 @@
 
   base::WeakPtrFactory<WebContentsImpl> loading_weak_factory_{this};
   base::WeakPtrFactory<WebContentsImpl> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(WebContentsImpl);
 };
 
 // Dangerous methods which should never be made part of the public API, so we
diff --git a/content/browser/web_contents/web_contents_impl_unittest.cc b/content/browser/web_contents/web_contents_impl_unittest.cc
index 6146d8e..ebd9b10 100644
--- a/content/browser/web_contents/web_contents_impl_unittest.cc
+++ b/content/browser/web_contents/web_contents_impl_unittest.cc
@@ -157,6 +157,10 @@
  public:
   explicit TestWebContentsObserver(WebContents* contents)
       : WebContentsObserver(contents) {}
+
+  TestWebContentsObserver(const TestWebContentsObserver&) = delete;
+  TestWebContentsObserver& operator=(const TestWebContentsObserver&) = delete;
+
   ~TestWebContentsObserver() override {
     EXPECT_FALSE(expected_capture_handle_config_) << "Unfulfilled expectation.";
   }
@@ -227,8 +231,6 @@
   int num_is_connected_to_bluetooth_device_changed_ = 0;
   bool last_is_connected_to_bluetooth_device_ = false;
   blink::mojom::CaptureHandleConfigPtr expected_capture_handle_config_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestWebContentsObserver);
 };
 
 class MockWebContentsDelegate : public WebContentsDelegate {
@@ -257,6 +259,10 @@
 class FakeFullscreenDelegate : public WebContentsDelegate {
  public:
   FakeFullscreenDelegate() : fullscreened_contents_(nullptr) {}
+
+  FakeFullscreenDelegate(const FakeFullscreenDelegate&) = delete;
+  FakeFullscreenDelegate& operator=(const FakeFullscreenDelegate&) = delete;
+
   ~FakeFullscreenDelegate() override {}
 
   void EnterFullscreenModeForTab(
@@ -275,13 +281,15 @@
 
  private:
   WebContents* fullscreened_contents_;
-
-  DISALLOW_COPY_AND_ASSIGN(FakeFullscreenDelegate);
 };
 
 class FakeWebContentsDelegate : public WebContentsDelegate {
  public:
   FakeWebContentsDelegate() : loading_state_changed_was_called_(false) {}
+
+  FakeWebContentsDelegate(const FakeWebContentsDelegate&) = delete;
+  FakeWebContentsDelegate& operator=(const FakeWebContentsDelegate&) = delete;
+
   ~FakeWebContentsDelegate() override {}
 
   void LoadingStateChanged(WebContents* source,
@@ -295,8 +303,6 @@
 
  private:
   bool loading_state_changed_was_called_;
-
-  DISALLOW_COPY_AND_ASSIGN(FakeWebContentsDelegate);
 };
 
 class FakeImageDownloader : public blink::mojom::ImageDownloader {
@@ -2304,6 +2310,11 @@
       : WebContentsObserver(contents),
         is_loading_(false),
         did_receive_response_(false) {}
+
+  LoadingWebContentsObserver(const LoadingWebContentsObserver&) = delete;
+  LoadingWebContentsObserver& operator=(const LoadingWebContentsObserver&) =
+      delete;
+
   ~LoadingWebContentsObserver() override {}
 
   // The assertions on these messages ensure that they are received in order.
@@ -2328,8 +2339,6 @@
  private:
   bool is_loading_;
   bool did_receive_response_;
-
-  DISALLOW_COPY_AND_ASSIGN(LoadingWebContentsObserver);
 };
 
 // Subclass of WebContentsImplTest for cases that need out-of-process iframes.
@@ -2625,6 +2634,11 @@
 class TestJavaScriptDialogManager : public JavaScriptDialogManager {
  public:
   TestJavaScriptDialogManager() {}
+
+  TestJavaScriptDialogManager(const TestJavaScriptDialogManager&) = delete;
+  TestJavaScriptDialogManager& operator=(const TestJavaScriptDialogManager&) =
+      delete;
+
   ~TestJavaScriptDialogManager() override {}
 
   size_t reset_count() { return reset_count_; }
@@ -2660,8 +2674,6 @@
 
  private:
   size_t reset_count_ = 0;
-
-  DISALLOW_COPY_AND_ASSIGN(TestJavaScriptDialogManager);
 };
 
 }  // namespace
diff --git a/content/browser/web_contents/web_contents_view_android.h b/content/browser/web_contents/web_contents_view_android.h
index de59b65..56c4b36 100644
--- a/content/browser/web_contents/web_contents_view_android.h
+++ b/content/browser/web_contents/web_contents_view_android.h
@@ -35,6 +35,10 @@
  public:
   WebContentsViewAndroid(WebContentsImpl* web_contents,
                          WebContentsViewDelegate* delegate);
+
+  WebContentsViewAndroid(const WebContentsViewAndroid&) = delete;
+  WebContentsViewAndroid& operator=(const WebContentsViewAndroid&) = delete;
+
   ~WebContentsViewAndroid() override;
 
   void SetContentUiEventHandler(std::unique_ptr<ContentUiEventHandler> handler);
@@ -175,8 +179,6 @@
 
   gfx::PointF drag_location_;
   gfx::PointF drag_screen_location_;
-
-  DISALLOW_COPY_AND_ASSIGN(WebContentsViewAndroid);
 };
 
 } // namespace content
diff --git a/content/browser/web_contents/web_contents_view_aura.cc b/content/browser/web_contents/web_contents_view_aura.cc
index c1b09024..9254b93 100644
--- a/content/browser/web_contents/web_contents_view_aura.cc
+++ b/content/browser/web_contents/web_contents_view_aura.cc
@@ -506,6 +506,10 @@
 class WebContentsViewAura::AsyncDropTempFileDeleter {
  public:
   AsyncDropTempFileDeleter() = default;
+
+  AsyncDropTempFileDeleter(const AsyncDropTempFileDeleter&) = delete;
+  AsyncDropTempFileDeleter& operator=(const AsyncDropTempFileDeleter&) = delete;
+
   ~AsyncDropTempFileDeleter();
   void RegisterFile(const base::FilePath& path);
 
@@ -514,7 +518,6 @@
   void DeleteFileAsync(const base::FilePath& path) const;
 
   std::vector<base::FilePath> scoped_files_to_delete_;
-  DISALLOW_COPY_AND_ASSIGN(AsyncDropTempFileDeleter);
 };
 
 WebContentsViewAura::AsyncDropTempFileDeleter::~AsyncDropTempFileDeleter() {
@@ -549,6 +552,9 @@
     view_->window_->AddObserver(this);
   }
 
+  WindowObserver(const WindowObserver&) = delete;
+  WindowObserver& operator=(const WindowObserver&) = delete;
+
   ~WindowObserver() override {
     view_->window_->RemoveObserver(this);
     if (view_->window_->GetHost())
@@ -680,8 +686,6 @@
   aura::Window* host_window_ = nullptr;
 
   std::unique_ptr<PendingWindowChanges> pending_window_changes_;
-
-  DISALLOW_COPY_AND_ASSIGN(WindowObserver);
 };
 
 // static
diff --git a/content/browser/web_contents/web_contents_view_aura_browsertest.cc b/content/browser/web_contents/web_contents_view_aura_browsertest.cc
index 31bb5f5..482180a 100644
--- a/content/browser/web_contents/web_contents_view_aura_browsertest.cc
+++ b/content/browser/web_contents/web_contents_view_aura_browsertest.cc
@@ -343,6 +343,11 @@
     host_->AddInputEventObserver(this);
   }
 
+  SpuriousMouseMoveEventObserver(const SpuriousMouseMoveEventObserver&) =
+      delete;
+  SpuriousMouseMoveEventObserver& operator=(
+      const SpuriousMouseMoveEventObserver&) = delete;
+
   ~SpuriousMouseMoveEventObserver() override {
     host_->RemoveInputEventObserver(this);
   }
@@ -354,8 +359,6 @@
 
  private:
   RenderWidgetHost* host_;
-
-  DISALLOW_COPY_AND_ASSIGN(SpuriousMouseMoveEventObserver);
 };
 }  // namespace
 
diff --git a/content/browser/web_contents/web_contents_view_aura_unittest.cc b/content/browser/web_contents/web_contents_view_aura_unittest.cc
index b7bdd10..6b57399 100644
--- a/content/browser/web_contents/web_contents_view_aura_unittest.cc
+++ b/content/browser/web_contents/web_contents_view_aura_unittest.cc
@@ -60,6 +60,9 @@
   explicit RunCallbackOnActivation(base::OnceClosure closure)
       : closure_(std::move(closure)) {}
 
+  RunCallbackOnActivation(const RunCallbackOnActivation&) = delete;
+  RunCallbackOnActivation& operator=(const RunCallbackOnActivation&) = delete;
+
   ~RunCallbackOnActivation() override = default;
 
   // WebContentsDelegate:
@@ -69,8 +72,6 @@
 
  private:
   base::OnceClosure closure_;
-
-  DISALLOW_COPY_AND_ASSIGN(RunCallbackOnActivation);
 };
 
 class TestDragDropClient : public aura::client::DragDropClient {
diff --git a/content/browser/web_contents/web_contents_view_child_frame.h b/content/browser/web_contents/web_contents_view_child_frame.h
index 39936b6d..05e424e5 100644
--- a/content/browser/web_contents/web_contents_view_child_frame.h
+++ b/content/browser/web_contents/web_contents_view_child_frame.h
@@ -21,6 +21,11 @@
   WebContentsViewChildFrame(WebContentsImpl* web_contents,
                             WebContentsViewDelegate* delegate,
                             RenderViewHostDelegateView** delegate_view);
+
+  WebContentsViewChildFrame(const WebContentsViewChildFrame&) = delete;
+  WebContentsViewChildFrame& operator=(const WebContentsViewChildFrame&) =
+      delete;
+
   ~WebContentsViewChildFrame() override;
 
   // WebContentsView implementation --------------------------------------------
@@ -73,8 +78,6 @@
 
   // The delegate ownership is passed to WebContentsView.
   std::unique_ptr<WebContentsViewDelegate> delegate_;
-
-  DISALLOW_COPY_AND_ASSIGN(WebContentsViewChildFrame);
 };
 
 }  // namespace content
diff --git a/content/browser/web_contents/web_contents_view_mac.h b/content/browser/web_contents/web_contents_view_mac.h
index 34e4e21..0f17ddbc 100644
--- a/content/browser/web_contents/web_contents_view_mac.h
+++ b/content/browser/web_contents/web_contents_view_mac.h
@@ -59,6 +59,10 @@
   // because that's what was easiest when they were split.
   WebContentsViewMac(WebContentsImpl* web_contents,
                      WebContentsViewDelegate* delegate);
+
+  WebContentsViewMac(const WebContentsViewMac&) = delete;
+  WebContentsViewMac& operator=(const WebContentsViewMac&) = delete;
+
   ~WebContentsViewMac() override;
 
   // WebContentsView implementation --------------------------------------------
@@ -223,8 +227,6 @@
 
   // Used by CloseTabAfterEventTrackingIfNeeded.
   base::WeakPtrFactory<WebContentsViewMac> deferred_close_weak_ptr_factory_;
-
-  DISALLOW_COPY_AND_ASSIGN(WebContentsViewMac);
 };
 
 }  // namespace content
diff --git a/content/browser/web_package/mock_signed_exchange_handler.h b/content/browser/web_package/mock_signed_exchange_handler.h
index 3e8df26b..b242bae 100644
--- a/content/browser/web_package/mock_signed_exchange_handler.h
+++ b/content/browser/web_package/mock_signed_exchange_handler.h
@@ -47,6 +47,11 @@
   MockSignedExchangeHandler(const MockSignedExchangeHandlerParams& params,
                             std::unique_ptr<net::SourceStream> body,
                             ExchangeHeadersCallback headers_callback);
+
+  MockSignedExchangeHandler(const MockSignedExchangeHandler&) = delete;
+  MockSignedExchangeHandler& operator=(const MockSignedExchangeHandler&) =
+      delete;
+
   ~MockSignedExchangeHandler() override;
   bool GetSignedExchangeInfoForPrefetchCache(
       PrefetchedSignedExchangeCacheEntry& entry) const override;
@@ -56,8 +61,6 @@
   const base::Time signature_expire_time_;
   const GURL cert_url_;
   const net::IPAddress cert_server_ip_address_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockSignedExchangeHandler);
 };
 
 class MockSignedExchangeHandlerFactory final
@@ -70,6 +73,12 @@
   // a headers callback with the matching MockSignedExchangeHandlerParams.
   MockSignedExchangeHandlerFactory(
       std::vector<MockSignedExchangeHandlerParams> params_list);
+
+  MockSignedExchangeHandlerFactory(const MockSignedExchangeHandlerFactory&) =
+      delete;
+  MockSignedExchangeHandlerFactory& operator=(
+      const MockSignedExchangeHandlerFactory&) = delete;
+
   ~MockSignedExchangeHandlerFactory() override;
 
   std::unique_ptr<SignedExchangeHandler> Create(
@@ -81,8 +90,6 @@
 
  private:
   const std::vector<MockSignedExchangeHandlerParams> params_list_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockSignedExchangeHandlerFactory);
 };
 
 }  // namespace content
diff --git a/content/browser/web_package/mock_web_bundle_reader_factory.cc b/content/browser/web_package/mock_web_bundle_reader_factory.cc
index 675f5c7..decfd2c2 100644
--- a/content/browser/web_package/mock_web_bundle_reader_factory.cc
+++ b/content/browser/web_package/mock_web_bundle_reader_factory.cc
@@ -34,6 +34,10 @@
   explicit MockParser(
       mojo::PendingReceiver<web_package::mojom::WebBundleParser> receiver)
       : receiver_(this, std::move(receiver)) {}
+
+  MockParser(const MockParser&) = delete;
+  MockParser& operator=(const MockParser&) = delete;
+
   ~MockParser() override = default;
 
   void RunMetadataCallback(web_package::mojom::BundleMetadataPtr metadata) {
@@ -86,14 +90,16 @@
   base::OnceClosure wait_parse_metadata_callback_;
   base::OnceCallback<void(web_package::mojom::BundleResponseLocationPtr)>
       wait_parse_response_callback_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockParser);
 };
 
 class MockParserFactory final
     : public web_package::mojom::WebBundleParserFactory {
  public:
   MockParserFactory() {}
+
+  MockParserFactory(const MockParserFactory&) = delete;
+  MockParserFactory& operator=(const MockParserFactory&) = delete;
+
   ~MockParserFactory() override = default;
 
   void AddReceiver(
@@ -155,13 +161,17 @@
   std::unique_ptr<MockParser> parser_;
   mojo::ReceiverSet<web_package::mojom::WebBundleParserFactory> receivers_;
   base::OnceClosure wait_parse_metadata_callback_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockParserFactory);
 };
 
 class MockWebBundleReaderFactoryImpl final : public MockWebBundleReaderFactory {
  public:
   MockWebBundleReaderFactoryImpl() : MockWebBundleReaderFactory() {}
+
+  MockWebBundleReaderFactoryImpl(const MockWebBundleReaderFactoryImpl&) =
+      delete;
+  MockWebBundleReaderFactoryImpl& operator=(
+      const MockWebBundleReaderFactoryImpl&) = delete;
+
   ~MockWebBundleReaderFactoryImpl() override {
     EXPECT_TRUE(!temp_dir_.IsValid() || temp_dir_.Delete())
         << temp_dir_.GetPath();
@@ -252,8 +262,6 @@
   base::ScopedTempDir temp_dir_;
   base::FilePath temp_file_path_;
   std::unique_ptr<MockParserFactory> factory_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockWebBundleReaderFactoryImpl);
 };
 
 }  // namespace
diff --git a/content/browser/web_package/mock_web_bundle_reader_factory.h b/content/browser/web_package/mock_web_bundle_reader_factory.h
index c6a0bca..b0dfab9 100644
--- a/content/browser/web_package/mock_web_bundle_reader_factory.h
+++ b/content/browser/web_package/mock_web_bundle_reader_factory.h
@@ -20,6 +20,11 @@
   static std::unique_ptr<MockWebBundleReaderFactory> Create();
 
   MockWebBundleReaderFactory() = default;
+
+  MockWebBundleReaderFactory(const MockWebBundleReaderFactory&) = delete;
+  MockWebBundleReaderFactory& operator=(const MockWebBundleReaderFactory&) =
+      delete;
+
   virtual ~MockWebBundleReaderFactory() = default;
 
   // Creates WebBundleReader instance. A temporary file is created and
@@ -50,9 +55,6 @@
   virtual void FullfillResponse(
       web_package::mojom::BundleResponseLocationPtr expected_parse_args,
       web_package::mojom::BundleResponsePtr response) = 0;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(MockWebBundleReaderFactory);
 };
 
 }  // namespace content
diff --git a/content/browser/web_package/prefetched_signed_exchange_cache.cc b/content/browser/web_package/prefetched_signed_exchange_cache.cc
index 06794798..28c4bcf 100644
--- a/content/browser/web_package/prefetched_signed_exchange_cache.cc
+++ b/content/browser/web_package/prefetched_signed_exchange_cache.cc
@@ -143,6 +143,11 @@
                                    false /* is_fallback_redirect */),
                                std::move(response_head));
   }
+
+  RedirectResponseURLLoader(const RedirectResponseURLLoader&) = delete;
+  RedirectResponseURLLoader& operator=(const RedirectResponseURLLoader&) =
+      delete;
+
   ~RedirectResponseURLLoader() override {}
 
  private:
@@ -168,8 +173,6 @@
   }
 
   mojo::Remote<network::mojom::URLLoaderClient> client_;
-
-  DISALLOW_COPY_AND_ASSIGN(RedirectResponseURLLoader);
 };
 
 // A URLLoader which returns the inner response of signed exchange.
@@ -236,6 +239,10 @@
             &InnerResponseURLLoader::OnCrossOriginReadBlockingCheckComplete,
             base::Unretained(this)));
   }
+
+  InnerResponseURLLoader(const InnerResponseURLLoader&) = delete;
+  InnerResponseURLLoader& operator=(const InnerResponseURLLoader&) = delete;
+
   ~InnerResponseURLLoader() override {}
 
  private:
@@ -379,8 +386,6 @@
   std::unique_ptr<CrossOriginReadBlockingChecker> corb_checker_;
 
   base::WeakPtrFactory<InnerResponseURLLoader> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(InnerResponseURLLoader);
 };
 
 // A URLLoaderFactory which handles a signed exchange subresource request from
@@ -399,6 +404,12 @@
         &SubresourceSignedExchangeURLLoaderFactory::OnMojoDisconnect,
         base::Unretained(this)));
   }
+
+  SubresourceSignedExchangeURLLoaderFactory(
+      const SubresourceSignedExchangeURLLoaderFactory&) = delete;
+  SubresourceSignedExchangeURLLoaderFactory& operator=(
+      const SubresourceSignedExchangeURLLoaderFactory&) = delete;
+
   ~SubresourceSignedExchangeURLLoaderFactory() override {}
 
   // network::mojom::URLLoaderFactory implementation.
@@ -450,8 +461,6 @@
   std::unique_ptr<const PrefetchedSignedExchangeCacheEntry> entry_;
   const url::Origin request_initiator_origin_lock_;
   mojo::ReceiverSet<network::mojom::URLLoaderFactory> receivers_;
-
-  DISALLOW_COPY_AND_ASSIGN(SubresourceSignedExchangeURLLoaderFactory);
 };
 
 // A NavigationLoaderInterceptor which handles a request which matches the
@@ -465,6 +474,11 @@
       std::vector<blink::mojom::PrefetchedSignedExchangeInfoPtr> info_list)
       : exchange_(std::move(exchange)), info_list_(std::move(info_list)) {}
 
+  PrefetchedNavigationLoaderInterceptor(
+      const PrefetchedNavigationLoaderInterceptor&) = delete;
+  PrefetchedNavigationLoaderInterceptor& operator=(
+      const PrefetchedNavigationLoaderInterceptor&) = delete;
+
   ~PrefetchedNavigationLoaderInterceptor() override {}
 
   void MaybeCreateLoader(
@@ -556,8 +570,6 @@
 
   base::WeakPtrFactory<PrefetchedNavigationLoaderInterceptor> weak_factory_{
       this};
-
-  DISALLOW_COPY_AND_ASSIGN(PrefetchedNavigationLoaderInterceptor);
 };
 
 bool CanStoreEntry(const PrefetchedSignedExchangeCacheEntry& entry) {
diff --git a/content/browser/web_package/prefetched_signed_exchange_cache_adapter.h b/content/browser/web_package/prefetched_signed_exchange_cache_adapter.h
index 0a795f8e..26bc085 100644
--- a/content/browser/web_package/prefetched_signed_exchange_cache_adapter.h
+++ b/content/browser/web_package/prefetched_signed_exchange_cache_adapter.h
@@ -29,6 +29,12 @@
       BrowserContext::BlobContextGetter blob_context_getter,
       const GURL& request_url,
       PrefetchURLLoader* prefetch_url_loader);
+
+  PrefetchedSignedExchangeCacheAdapter(
+      const PrefetchedSignedExchangeCacheAdapter&) = delete;
+  PrefetchedSignedExchangeCacheAdapter& operator=(
+      const PrefetchedSignedExchangeCacheAdapter&) = delete;
+
   ~PrefetchedSignedExchangeCacheAdapter();
 
   void OnReceiveSignedExchange(
@@ -85,8 +91,6 @@
 
   base::WeakPtrFactory<PrefetchedSignedExchangeCacheAdapter> weak_factory_{
       this};
-
-  DISALLOW_COPY_AND_ASSIGN(PrefetchedSignedExchangeCacheAdapter);
 };
 
 }  // namespace content
diff --git a/content/browser/web_package/signed_exchange_cert_fetcher.h b/content/browser/web_package/signed_exchange_cert_fetcher.h
index e6ca14de..d3ad3c5 100644
--- a/content/browser/web_package/signed_exchange_cert_fetcher.h
+++ b/content/browser/web_package/signed_exchange_cert_fetcher.h
@@ -66,6 +66,10 @@
       const absl::optional<base::UnguessableToken>& throttling_profile_id,
       net::IsolationInfo isolation_info);
 
+  SignedExchangeCertFetcher(const SignedExchangeCertFetcher&) = delete;
+  SignedExchangeCertFetcher& operator=(const SignedExchangeCertFetcher&) =
+      delete;
+
   ~SignedExchangeCertFetcher() override;
 
  private:
@@ -129,8 +133,6 @@
   absl::optional<base::UnguessableToken> cert_request_id_;
 
   net::IPAddress cert_server_ip_address_;
-
-  DISALLOW_COPY_AND_ASSIGN(SignedExchangeCertFetcher);
 };
 
 }  // namespace content
diff --git a/content/browser/web_package/signed_exchange_cert_fetcher_unittest.cc b/content/browser/web_package/signed_exchange_cert_fetcher_unittest.cc
index 8f83a390..e81eb53b 100644
--- a/content/browser/web_package/signed_exchange_cert_fetcher_unittest.cc
+++ b/content/browser/web_package/signed_exchange_cert_fetcher_unittest.cc
@@ -39,6 +39,11 @@
 class DeferringURLLoaderThrottle final : public blink::URLLoaderThrottle {
  public:
   DeferringURLLoaderThrottle() = default;
+
+  DeferringURLLoaderThrottle(const DeferringURLLoaderThrottle&) = delete;
+  DeferringURLLoaderThrottle& operator=(const DeferringURLLoaderThrottle&) =
+      delete;
+
   ~DeferringURLLoaderThrottle() override = default;
 
   void WillStartRequest(network::ResourceRequest* request,
@@ -79,8 +84,6 @@
   bool will_start_request_called_ = false;
   bool will_redirect_request_called_ = false;
   bool will_process_response_called_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(DeferringURLLoaderThrottle);
 };
 
 class MockURLLoader final : public network::mojom::URLLoader {
@@ -88,6 +91,10 @@
   MockURLLoader(
       mojo::PendingReceiver<network::mojom::URLLoader> url_loader_receiver)
       : receiver_(this, std::move(url_loader_receiver)) {}
+
+  MockURLLoader(const MockURLLoader&) = delete;
+  MockURLLoader& operator=(const MockURLLoader&) = delete;
+
   ~MockURLLoader() override = default;
 
   MOCK_METHOD4(FollowRedirect,
@@ -103,14 +110,17 @@
 
  private:
   mojo::Receiver<network::mojom::URLLoader> receiver_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockURLLoader);
 };
 
 class URLLoaderFactoryForMockLoader final
     : public network::mojom::URLLoaderFactory {
  public:
   URLLoaderFactoryForMockLoader() = default;
+
+  URLLoaderFactoryForMockLoader(const URLLoaderFactoryForMockLoader&) = delete;
+  URLLoaderFactoryForMockLoader& operator=(
+      const URLLoaderFactoryForMockLoader&) = delete;
+
   ~URLLoaderFactoryForMockLoader() override = default;
 
   // network::mojom::URLLoaderFactory implementation.
@@ -145,8 +155,6 @@
   std::unique_ptr<MockURLLoader> loader_;
   mojo::Remote<network::mojom::URLLoaderClient> client_remote_;
   absl::optional<network::ResourceRequest> url_request_;
-
-  DISALLOW_COPY_AND_ASSIGN(URLLoaderFactoryForMockLoader);
 };
 
 void ForwardCertificateCallback(
@@ -165,6 +173,11 @@
  public:
   SignedExchangeCertFetcherTest()
       : url_(GURL("https://www.example.com/cert")) {}
+
+  SignedExchangeCertFetcherTest(const SignedExchangeCertFetcherTest&) = delete;
+  SignedExchangeCertFetcherTest& operator=(
+      const SignedExchangeCertFetcherTest&) = delete;
+
   ~SignedExchangeCertFetcherTest() override {}
 
  protected:
@@ -264,9 +277,6 @@
   std::vector<std::unique_ptr<blink::URLLoaderThrottle>> throttles_;
 
   base::test::TaskEnvironment task_environment_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(SignedExchangeCertFetcherTest);
 };
 
 }  // namespace
diff --git a/content/browser/web_package/signed_exchange_certificate_chain.h b/content/browser/web_package/signed_exchange_certificate_chain.h
index 7b89a895..39d7c10 100644
--- a/content/browser/web_package/signed_exchange_certificate_chain.h
+++ b/content/browser/web_package/signed_exchange_certificate_chain.h
@@ -42,6 +42,10 @@
         scoped_refptr<net::X509Certificate> certificate);
 
     explicit IgnoreErrorsSPKIList(const base::CommandLine& command_line);
+
+    IgnoreErrorsSPKIList(const IgnoreErrorsSPKIList&) = delete;
+    IgnoreErrorsSPKIList& operator=(const IgnoreErrorsSPKIList&) = delete;
+
     ~IgnoreErrorsSPKIList();
 
     // Used for tests to override the instance. Returns the old instance, which
@@ -61,7 +65,6 @@
         scoped_refptr<net::X509Certificate> certificate);
 
     network::SPKIHashSet hash_set_;
-    DISALLOW_COPY_AND_ASSIGN(IgnoreErrorsSPKIList);
   };
 
   static std::unique_ptr<SignedExchangeCertificateChain> Parse(
diff --git a/content/browser/web_package/signed_exchange_devtools_proxy.h b/content/browser/web_package/signed_exchange_devtools_proxy.h
index 7755ead9..df57900 100644
--- a/content/browser/web_package/signed_exchange_devtools_proxy.h
+++ b/content/browser/web_package/signed_exchange_devtools_proxy.h
@@ -51,6 +51,11 @@
       int frame_tree_node_id,
       absl::optional<const base::UnguessableToken> devtools_navigation_token,
       bool report_raw_headers);
+
+  SignedExchangeDevToolsProxy(const SignedExchangeDevToolsProxy&) = delete;
+  SignedExchangeDevToolsProxy& operator=(const SignedExchangeDevToolsProxy&) =
+      delete;
+
   ~SignedExchangeDevToolsProxy();
 
   void ReportError(
@@ -78,8 +83,6 @@
   const absl::optional<const base::UnguessableToken> devtools_navigation_token_;
   const bool devtools_enabled_;
   std::vector<SignedExchangeError> errors_;
-
-  DISALLOW_COPY_AND_ASSIGN(SignedExchangeDevToolsProxy);
 };
 
 }  // namespace content
diff --git a/content/browser/web_package/signed_exchange_handler.h b/content/browser/web_package/signed_exchange_handler.h
index 5075cc1..63282eb 100644
--- a/content/browser/web_package/signed_exchange_handler.h
+++ b/content/browser/web_package/signed_exchange_handler.h
@@ -103,6 +103,10 @@
       std::unique_ptr<SignedExchangeDevToolsProxy> devtools_proxy,
       SignedExchangeReporter* reporter,
       int frame_tree_node_id);
+
+  SignedExchangeHandler(const SignedExchangeHandler&) = delete;
+  SignedExchangeHandler& operator=(const SignedExchangeHandler&) = delete;
+
   virtual ~SignedExchangeHandler();
 
   int64_t GetExchangeHeaderLength() const { return exchange_header_length_; }
@@ -189,8 +193,6 @@
   net::IPAddress cert_server_ip_address_;
 
   base::WeakPtrFactory<SignedExchangeHandler> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(SignedExchangeHandler);
 };
 
 // Used only for testing.
diff --git a/content/browser/web_package/signed_exchange_loader.h b/content/browser/web_package/signed_exchange_loader.h
index bec878b..9da46761 100644
--- a/content/browser/web_package/signed_exchange_loader.h
+++ b/content/browser/web_package/signed_exchange_loader.h
@@ -81,6 +81,10 @@
       scoped_refptr<SignedExchangePrefetchMetricRecorder> metric_recorder,
       const std::string& accept_langs,
       bool keep_entry_for_prefetch_cache);
+
+  SignedExchangeLoader(const SignedExchangeLoader&) = delete;
+  SignedExchangeLoader& operator=(const SignedExchangeLoader&) = delete;
+
   ~SignedExchangeLoader() override;
 
 
@@ -207,8 +211,6 @@
   std::unique_ptr<SignedExchangeValidityPinger> validity_pinger_;
 
   base::WeakPtrFactory<SignedExchangeLoader> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(SignedExchangeLoader);
 };
 
 }  // namespace content
diff --git a/content/browser/web_package/signed_exchange_loader_unittest.cc b/content/browser/web_package/signed_exchange_loader_unittest.cc
index 2ebf7a4..58e1888 100644
--- a/content/browser/web_package/signed_exchange_loader_unittest.cc
+++ b/content/browser/web_package/signed_exchange_loader_unittest.cc
@@ -50,6 +50,9 @@
     }
   }
 
+  SignedExchangeLoaderTest(const SignedExchangeLoaderTest&) = delete;
+  SignedExchangeLoaderTest& operator=(const SignedExchangeLoaderTest&) = delete;
+
   ~SignedExchangeLoaderTest() override = default;
 
  protected:
@@ -58,6 +61,10 @@
     explicit MockURLLoaderClient(
         mojo::PendingReceiver<network::mojom::URLLoaderClient> receiver)
         : loader_client_receiver_(this, std::move(receiver)) {}
+
+    MockURLLoaderClient(const MockURLLoaderClient&) = delete;
+    MockURLLoaderClient& operator=(const MockURLLoaderClient&) = delete;
+
     ~MockURLLoaderClient() override {}
 
     // network::mojom::URLLoaderClient overrides:
@@ -78,7 +85,6 @@
 
    private:
     mojo::Receiver<network::mojom::URLLoaderClient> loader_client_receiver_;
-    DISALLOW_COPY_AND_ASSIGN(MockURLLoaderClient);
   };
 
   class MockURLLoader final : public network::mojom::URLLoader {
@@ -86,6 +92,10 @@
     explicit MockURLLoader(
         mojo::PendingReceiver<network::mojom::URLLoader> url_loader_receiver)
         : receiver_(this, std::move(url_loader_receiver)) {}
+
+    MockURLLoader(const MockURLLoader&) = delete;
+    MockURLLoader& operator=(const MockURLLoader&) = delete;
+
     ~MockURLLoader() override = default;
 
     // network::mojom::URLLoader overrides:
@@ -102,8 +112,6 @@
 
    private:
     mojo::Receiver<network::mojom::URLLoader> receiver_;
-
-    DISALLOW_COPY_AND_ASSIGN(MockURLLoader);
   };
 
   // Used only when kSignedHTTPExchangePingValidity is enabled.
@@ -151,8 +159,6 @@
   base::test::ScopedFeatureList feature_list_;
 
   MockValidityPingURLLoaderFactory ping_loader_factory_;
-
-  DISALLOW_COPY_AND_ASSIGN(SignedExchangeLoaderTest);
 };
 
 TEST_P(SignedExchangeLoaderTest, Simple) {
diff --git a/content/browser/web_package/signed_exchange_prefetch_handler.h b/content/browser/web_package/signed_exchange_prefetch_handler.h
index b7592b7..da03983 100644
--- a/content/browser/web_package/signed_exchange_prefetch_handler.h
+++ b/content/browser/web_package/signed_exchange_prefetch_handler.h
@@ -59,6 +59,10 @@
       const std::string& accept_langs,
       bool keep_entry_for_prefetch_cache);
 
+  SignedExchangePrefetchHandler(const SignedExchangePrefetchHandler&) = delete;
+  SignedExchangePrefetchHandler& operator=(
+      const SignedExchangePrefetchHandler&) = delete;
+
   ~SignedExchangePrefetchHandler() override;
 
   // This connects |loader_receiver| to the SignedExchangeLoader, and returns
@@ -95,8 +99,6 @@
   std::unique_ptr<SignedExchangeLoader> signed_exchange_loader_;
 
   network::mojom::URLLoaderClient* forwarding_client_;
-
-  DISALLOW_COPY_AND_ASSIGN(SignedExchangePrefetchHandler);
 };
 
 }  // namespace content
diff --git a/content/browser/web_package/signed_exchange_reporter.h b/content/browser/web_package/signed_exchange_reporter.h
index 84c1bf85..c21af297 100644
--- a/content/browser/web_package/signed_exchange_reporter.h
+++ b/content/browser/web_package/signed_exchange_reporter.h
@@ -31,6 +31,9 @@
       const net::NetworkIsolationKey& network_isolation_key,
       int frame_tree_node_id);
 
+  SignedExchangeReporter(const SignedExchangeReporter&) = delete;
+  SignedExchangeReporter& operator=(const SignedExchangeReporter&) = delete;
+
   ~SignedExchangeReporter();
 
   void set_cert_server_ip_address(const net::IPAddress& cert_server_ip_address);
@@ -55,8 +58,6 @@
   const net::NetworkIsolationKey network_isolation_key_;
   const int frame_tree_node_id_;
   net::IPAddress cert_server_ip_address_;
-
-  DISALLOW_COPY_AND_ASSIGN(SignedExchangeReporter);
 };
 
 }  // namespace content
diff --git a/content/browser/web_package/signed_exchange_request_handler.h b/content/browser/web_package/signed_exchange_request_handler.h
index 4a5d23e..c06c91d 100644
--- a/content/browser/web_package/signed_exchange_request_handler.h
+++ b/content/browser/web_package/signed_exchange_request_handler.h
@@ -43,6 +43,11 @@
       URLLoaderThrottlesGetter url_loader_throttles_getter,
       scoped_refptr<SignedExchangePrefetchMetricRecorder> metric_recorder,
       std::string accept_langs);
+
+  SignedExchangeRequestHandler(const SignedExchangeRequestHandler&) = delete;
+  SignedExchangeRequestHandler& operator=(const SignedExchangeRequestHandler&) =
+      delete;
+
   ~SignedExchangeRequestHandler() override;
 
   // NavigationLoaderInterceptor implementation
@@ -82,8 +87,6 @@
   const std::string accept_langs_;
 
   base::WeakPtrFactory<SignedExchangeRequestHandler> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(SignedExchangeRequestHandler);
 };
 
 }  // namespace content
diff --git a/content/browser/web_package/signed_exchange_request_handler_browsertest.cc b/content/browser/web_package/signed_exchange_request_handler_browsertest.cc
index ce944ec..a551d0a 100644
--- a/content/browser/web_package/signed_exchange_request_handler_browsertest.cc
+++ b/content/browser/web_package/signed_exchange_request_handler_browsertest.cc
@@ -93,6 +93,10 @@
  public:
   explicit RedirectObserver(WebContents* web_contents)
       : WebContentsObserver(web_contents) {}
+
+  RedirectObserver(const RedirectObserver&) = delete;
+  RedirectObserver& operator=(const RedirectObserver&) = delete;
+
   ~RedirectObserver() override = default;
 
   void DidRedirectNavigation(NavigationHandle* handle) override {
@@ -105,22 +109,23 @@
 
  private:
   absl::optional<int> response_code_;
-
-  DISALLOW_COPY_AND_ASSIGN(RedirectObserver);
 };
 
 class AssertNavigationHandleFlagObserver : public WebContentsObserver {
  public:
   explicit AssertNavigationHandleFlagObserver(WebContents* web_contents)
       : WebContentsObserver(web_contents) {}
+
+  AssertNavigationHandleFlagObserver(
+      const AssertNavigationHandleFlagObserver&) = delete;
+  AssertNavigationHandleFlagObserver& operator=(
+      const AssertNavigationHandleFlagObserver&) = delete;
+
   ~AssertNavigationHandleFlagObserver() override = default;
 
   void DidFinishNavigation(NavigationHandle* handle) override {
     EXPECT_TRUE(handle->IsSignedExchangeInnerResponse());
   }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(AssertNavigationHandleFlagObserver);
 };
 
 class FinishNavigationObserver : public WebContentsObserver {
@@ -243,6 +248,12 @@
     }
     feature_list_.InitWithFeatures(enable_features, disabled_features);
   }
+
+  SignedExchangeRequestHandlerBrowserTest(
+      const SignedExchangeRequestHandlerBrowserTest&) = delete;
+  SignedExchangeRequestHandlerBrowserTest& operator=(
+      const SignedExchangeRequestHandlerBrowserTest&) = delete;
+
   ~SignedExchangeRequestHandlerBrowserTest() = default;
 
  protected:
@@ -271,6 +282,10 @@
    public:
     CacheObserver(const GURL& outer_url, base::OnceClosure quit_closure)
         : outer_url_(outer_url), quit_closure_(std::move(quit_closure)) {}
+
+    CacheObserver(const CacheObserver&) = delete;
+    CacheObserver& operator=(const CacheObserver&) = delete;
+
     ~CacheObserver() override = default;
 
     void OnStored(PrefetchedSignedExchangeCache* cache,
@@ -283,8 +298,6 @@
    private:
     const GURL outer_url_;
     base::OnceClosure quit_closure_;
-
-    DISALLOW_COPY_AND_ASSIGN(CacheObserver);
   };
 
   void WaitUntilSXGIsCached(const GURL& url) {
@@ -306,8 +319,6 @@
   bool use_prefetch_ = false;
   bool sxg_subresource_prefetch_enabled_ = false;
   base::test::ScopedFeatureList feature_list_;
-
-  DISALLOW_COPY_AND_ASSIGN(SignedExchangeRequestHandlerBrowserTest);
 };
 
 IN_PROC_BROWSER_TEST_P(SignedExchangeRequestHandlerBrowserTest,
diff --git a/content/browser/web_package/signed_exchange_subresource_prefetch_browsertest.cc b/content/browser/web_package/signed_exchange_subresource_prefetch_browsertest.cc
index 253f86a..5e5ca2ee 100644
--- a/content/browser/web_package/signed_exchange_subresource_prefetch_browsertest.cc
+++ b/content/browser/web_package/signed_exchange_subresource_prefetch_browsertest.cc
@@ -194,8 +194,7 @@
 
 class SignedExchangePrefetchBrowserTest
     : public testing::WithParamInterface<
-          std::tuple<bool /* sxg_prefetch_cache_for_navigations_enabled */,
-                     bool /* sxg_subresource_prefetch_enabled */>>,
+          bool /* sxg_subresource_prefetch_enabled */>,
       public PrefetchBrowserTestBase {
  public:
   SignedExchangePrefetchBrowserTest() {
@@ -203,13 +202,16 @@
     // should be created while single-threaded.
     MockClock::Get();
   }
+
+  SignedExchangePrefetchBrowserTest(const SignedExchangePrefetchBrowserTest&) =
+      delete;
+  SignedExchangePrefetchBrowserTest& operator=(
+      const SignedExchangePrefetchBrowserTest&) = delete;
+
   ~SignedExchangePrefetchBrowserTest() = default;
 
   void SetUp() override {
-    bool sxg_prefetch_cache_for_navigations_enabled;
-    bool sxg_subresource_prefetch_enabled;
-    std::tie(sxg_prefetch_cache_for_navigations_enabled,
-             sxg_subresource_prefetch_enabled) = GetParam();
+    bool sxg_subresource_prefetch_enabled = GetParam();
 
     std::vector<base::Feature> enable_features;
     std::vector<base::Feature> disabled_features;
@@ -217,13 +219,6 @@
     // Need to run the network service in process for testing cache expirity
     // (PrefetchMainResourceSXG_ExceedPrefetchReuseMins) using MockClock.
     enable_features.push_back(features::kNetworkServiceInProcess);
-    if (sxg_prefetch_cache_for_navigations_enabled) {
-      enable_features.push_back(
-          features::kSignedExchangePrefetchCacheForNavigations);
-    } else {
-      disabled_features.push_back(
-          features::kSignedExchangePrefetchCacheForNavigations);
-    }
     if (sxg_subresource_prefetch_enabled) {
       enable_features.push_back(features::kSignedExchangeSubresourcePrefetch);
     } else {
@@ -252,12 +247,7 @@
   std::unique_ptr<InactiveRenderFrameHostDeletionObserver>
       inactive_rfh_deletion_observer_;
 
-  static bool IsSignedExchangePrefetchCacheEnabled() {
-    return base::FeatureList::IsEnabled(
-               features::kSignedExchangePrefetchCacheForNavigations) ||
-           base::FeatureList::IsEnabled(
-               features::kSignedExchangeSubresourcePrefetch);
-  }
+  bool IsSignedExchangeSubresourcePrefetchEnabled() { return GetParam(); }
 
   void SetBlobLimits() {
     scoped_refptr<ChromeBlobStorageContext> blob_context =
@@ -292,7 +282,7 @@
     const GURL inner_url =
         embedded_test_server()->GetURL(inner_url_hostname, inner_url_path);
 
-    if (!IsSignedExchangePrefetchCacheEnabled()) {
+    if (!IsSignedExchangeSubresourcePrefetchEnabled()) {
       EXPECT_TRUE(GetCachedExchanges(shell()).empty());
 
       // Shutdown the server.
@@ -433,8 +423,6 @@
   }
 
   base::test::ScopedFeatureList feature_list_;
-
-  DISALLOW_COPY_AND_ASSIGN(SignedExchangePrefetchBrowserTest);
 };
 
 IN_PROC_BROWSER_TEST_P(SignedExchangePrefetchBrowserTest,
@@ -573,7 +561,7 @@
   // The signed exchange which response header has "vary: accept-encoding"
   // header should be stored to the cache.
   const auto cached_exchanges = GetCachedExchanges(shell());
-  EXPECT_EQ(IsSignedExchangePrefetchCacheEnabled() ? 1u : 0u,
+  EXPECT_EQ(IsSignedExchangeSubresourcePrefetchEnabled() ? 1u : 0u,
             cached_exchanges.size());
 }
 
@@ -598,7 +586,7 @@
   const GURL inner_url =
       embedded_test_server()->GetURL(hostname, inner_url_path);
 
-  EXPECT_EQ(IsSignedExchangePrefetchCacheEnabled() ? 1u : 0u,
+  EXPECT_EQ(IsSignedExchangeSubresourcePrefetchEnabled() ? 1u : 0u,
             GetCachedExchanges(shell()).size());
 
   MockClock::Get().Advance(base::TimeDelta::FromSeconds(
@@ -643,13 +631,13 @@
   const GURL inner_url =
       embedded_test_server()->GetURL(hostname, inner_url_path);
 
-  EXPECT_EQ(IsSignedExchangePrefetchCacheEnabled() ? 1u : 0u,
+  EXPECT_EQ(IsSignedExchangeSubresourcePrefetchEnabled() ? 1u : 0u,
             GetCachedExchanges(shell()).size());
 
   MockClock::Get().Advance(base::TimeDelta::FromSeconds(
       net::HttpCache::kPrefetchReuseMins * 2 * 60));
 
-  if (IsSignedExchangePrefetchCacheEnabled()) {
+  if (IsSignedExchangeSubresourcePrefetchEnabled()) {
     NavigateToURLAndWaitTitle(sxg_url, "Prefetch Target (SXG)");
   } else {
     // Need to setup MockSignedExchangeHandlerFactory because the SXG is loaded
@@ -691,7 +679,7 @@
   const GURL inner_url =
       embedded_test_server()->GetURL(hostname, inner_url_path);
 
-  EXPECT_EQ(IsSignedExchangePrefetchCacheEnabled() ? 1u : 0u,
+  EXPECT_EQ(IsSignedExchangeSubresourcePrefetchEnabled() ? 1u : 0u,
             GetCachedExchanges(shell()).size());
 
   MockClock::Get().Advance(base::TimeDelta::FromSeconds(
@@ -742,7 +730,7 @@
   const GURL inner_url =
       embedded_test_server()->GetURL(hostname, inner_url_path);
 
-  EXPECT_EQ(IsSignedExchangePrefetchCacheEnabled() ? 1u : 0u,
+  EXPECT_EQ(IsSignedExchangeSubresourcePrefetchEnabled() ? 1u : 0u,
             GetCachedExchanges(shell()).size());
 
   MockClock::Get().Advance(
@@ -770,198 +758,6 @@
   EXPECT_EQ(2, sxg_request_counter->GetRequestCount());
 }
 
-// This test is almost same as SignedExchangeSubresourcePrefetchBrowserTest's
-// MainResourceSXGAndScriptSXG_SameOrigin. The only difference is that this test
-// is executed without SignedExchangeSubresourcePrefetch but with
-// SignedExchangePrefetchCacheForNavigations when
-// |sxg_subresource_prefetch_enabled| is false to check the behavior of
-// SignedExchangePrefetchCacheForNavigations feature.
-IN_PROC_BROWSER_TEST_P(SignedExchangePrefetchBrowserTest,
-                       PrefetchAlternativeSubresourceSXG) {
-  const char* prefetch_page_path = "/prefetch.html";
-  const char* page_sxg_path = "/target.sxg";
-  const char* page_inner_url_path = "/target.html";
-  const char* script_sxg_path = "/script_js.sxg";
-  const char* script_inner_url_path = "/script.js";
-
-  auto page_sxg_request_counter =
-      RequestCounter::CreateAndMonitor(embedded_test_server(), page_sxg_path);
-  auto script_sxg_request_counter =
-      RequestCounter::CreateAndMonitor(embedded_test_server(), script_sxg_path);
-  auto script_request_counter = RequestCounter::CreateAndMonitor(
-      embedded_test_server(), script_inner_url_path);
-  RegisterRequestHandler(embedded_test_server());
-  ASSERT_TRUE(embedded_test_server()->Start());
-
-  const GURL prefetch_page_url =
-      embedded_test_server()->GetURL(prefetch_page_path);
-  const GURL sxg_page_url = embedded_test_server()->GetURL(page_sxg_path);
-  const GURL inner_url_page_url =
-      embedded_test_server()->GetURL(page_inner_url_path);
-  const GURL sxg_script_url = embedded_test_server()->GetURL(script_sxg_path);
-  const GURL inner_url_script_url =
-      embedded_test_server()->GetURL(script_inner_url_path);
-
-  const net::SHA256HashValue page_header_integrity = {{0x01}};
-  const net::SHA256HashValue script_header_integrity = {{0x02}};
-
-  const std::string outer_link_header =
-      CreateAlternateLinkHeader(sxg_script_url, inner_url_script_url);
-  const std::string inner_link_headers =
-      base::JoinString(
-          {CreateAllowedAltSxgLinkHeader(inner_url_script_url,
-                                         script_header_integrity),
-           CreatePreloadLinkHeader(inner_url_script_url, "script")},
-          ",");
-  const std::string page_sxg_content =
-      "<head><title>Prefetch Target (SXG)</title>"
-      "<script src=\"./script.js\"></script></head>";
-  const std::string script_sxg_content = "document.title=\"done\";";
-  RegisterResponse(prefetch_page_path,
-                   ResponseEntry(base::StringPrintf(
-                       "<body><link rel='prefetch' href='%s'></body>",
-                       sxg_page_url.spec().c_str())));
-  RegisterResponse(
-      script_inner_url_path,
-      ResponseEntry("document.title=\"from server\";", "text/javascript",
-                    {{"cache-control", "public, max-age=600"}}));
-  RegisterResponse(page_sxg_path,
-                   CreateSignedExchangeResponseEntry(
-                       page_sxg_content, {{"link", outer_link_header}}));
-  RegisterResponse(script_sxg_path,
-                   CreateSignedExchangeResponseEntry(script_sxg_content));
-  MockSignedExchangeHandlerFactory factory(
-      {MockSignedExchangeHandlerParams(
-           sxg_page_url, SignedExchangeLoadResult::kSuccess, net::OK,
-           inner_url_page_url, "text/html", {{"Link", inner_link_headers}},
-           page_header_integrity),
-       MockSignedExchangeHandlerParams(
-           sxg_script_url, SignedExchangeLoadResult::kSuccess, net::OK,
-           inner_url_script_url, "text/javascript", {},
-           script_header_integrity)});
-  ScopedSignedExchangeHandlerFactory scoped_factory(&factory);
-
-  EXPECT_EQ(0, GetPrefetchURLLoaderCallCount());
-  EXPECT_TRUE(NavigateToURL(shell(), prefetch_page_url));
-
-  WaitUntilLoaded(sxg_page_url);
-  if (base::FeatureList::IsEnabled(
-          features::kSignedExchangeSubresourcePrefetch)) {
-    WaitUntilLoaded(sxg_script_url);
-  } else {
-    WaitUntilLoaded(inner_url_script_url);
-  }
-
-  EXPECT_EQ(1, page_sxg_request_counter->GetRequestCount());
-  if (base::FeatureList::IsEnabled(
-          features::kSignedExchangeSubresourcePrefetch)) {
-    EXPECT_EQ(1, script_sxg_request_counter->GetRequestCount());
-    EXPECT_EQ(0, script_request_counter->GetRequestCount());
-    EXPECT_EQ(2, GetPrefetchURLLoaderCallCount());
-  } else {
-    EXPECT_EQ(0, script_sxg_request_counter->GetRequestCount());
-    EXPECT_EQ(1, script_request_counter->GetRequestCount());
-    EXPECT_EQ(1, GetPrefetchURLLoaderCallCount());
-  }
-
-  const auto cached_exchanges = GetCachedExchanges(shell());
-  int64_t expected_body_size_total = 0u;
-  int64_t expected_headers_size_total = 0u;
-
-  if (IsSignedExchangePrefetchCacheEnabled()) {
-    if (base::FeatureList::IsEnabled(
-            features::kSignedExchangeSubresourcePrefetch)) {
-      EXPECT_EQ(2u, cached_exchanges.size());
-
-      const auto script_it = cached_exchanges.find(sxg_script_url);
-      ASSERT_TRUE(script_it != cached_exchanges.end());
-      const std::unique_ptr<const PrefetchedSignedExchangeCacheEntry>&
-          script_exchange = script_it->second;
-      EXPECT_EQ(sxg_script_url, script_exchange->outer_url());
-      EXPECT_EQ(inner_url_script_url, script_exchange->inner_url());
-      EXPECT_EQ(script_header_integrity, *script_exchange->header_integrity());
-      expected_body_size_total += script_sxg_content.size();
-      expected_headers_size_total +=
-          script_exchange->outer_response()->headers->raw_headers().size() +
-          script_exchange->inner_response()->headers->raw_headers().size();
-    } else {
-      DCHECK(base::FeatureList::IsEnabled(
-          features::kSignedExchangePrefetchCacheForNavigations));
-      EXPECT_EQ(1u, cached_exchanges.size());
-    }
-    const auto page_it = cached_exchanges.find(sxg_page_url);
-    ASSERT_TRUE(page_it != cached_exchanges.end());
-    const std::unique_ptr<const PrefetchedSignedExchangeCacheEntry>&
-        page_exchange = page_it->second;
-    EXPECT_EQ(sxg_page_url, page_exchange->outer_url());
-    EXPECT_EQ(inner_url_page_url, page_exchange->inner_url());
-    EXPECT_EQ(page_header_integrity, *page_exchange->header_integrity());
-    expected_body_size_total += page_sxg_content.size();
-    expected_headers_size_total +=
-        page_exchange->outer_response()->headers->raw_headers().size() +
-        page_exchange->inner_response()->headers->raw_headers().size();
-  } else {
-    EXPECT_EQ(0u, cached_exchanges.size());
-  }
-
-  base::HistogramTester histograms;
-
-  if (base::FeatureList::IsEnabled(
-          features::kSignedExchangeSubresourcePrefetch)) {
-    // Subsequent navigation to the target URL wouldn't hit the network for
-    // the target URL. The target content should still be read correctly.
-    // The content is loaded from PrefetchedSignedExchangeCache. And the script
-    // is also loaded from PrefetchedSignedExchangeCache.
-    NavigateToURLAndWaitTitle(sxg_page_url, "done");
-  } else {
-    // Subsequent navigation to the target URL wouldn't hit the network for
-    // the target URL. The target content should still be read correctly.
-    // The content is loaded from PrefetchedSignedExchangeCache when
-    // SignedExchangePrefetchCacheForNavigations is enabled, otherwise from
-    // HTTPCache. But the script is loaded from the server.
-    NavigateToURLAndWaitTitle(sxg_page_url, "from server");
-  }
-
-  // Wait for the previous page's RFH to be deleted (if it changed) so that the
-  // histograms will get updated.
-  inactive_rfh_deletion_observer_->Wait();
-
-  EXPECT_EQ(1, page_sxg_request_counter->GetRequestCount());
-
-  if (IsSignedExchangePrefetchCacheEnabled()) {
-    if (base::FeatureList::IsEnabled(
-            features::kSignedExchangeSubresourcePrefetch)) {
-      EXPECT_EQ(1, script_sxg_request_counter->GetRequestCount());
-      EXPECT_EQ(0, script_request_counter->GetRequestCount());
-      histograms.ExpectBucketCount("PrefetchedSignedExchangeCache.Count", 2, 1);
-      histograms.ExpectBucketCount("PrefetchedSignedExchangeCache.BodySize",
-                                   page_sxg_content.size(), 1);
-      histograms.ExpectBucketCount("PrefetchedSignedExchangeCache.BodySize",
-                                   script_sxg_content.size(), 1);
-    } else {
-      DCHECK(base::FeatureList::IsEnabled(
-          features::kSignedExchangePrefetchCacheForNavigations));
-      EXPECT_EQ(0, script_sxg_request_counter->GetRequestCount());
-      EXPECT_EQ(1, script_request_counter->GetRequestCount());
-      histograms.ExpectBucketCount("PrefetchedSignedExchangeCache.Count", 1, 1);
-      histograms.ExpectBucketCount("PrefetchedSignedExchangeCache.BodySize",
-                                   page_sxg_content.size(), 1);
-    }
-    histograms.ExpectBucketCount("PrefetchedSignedExchangeCache.BodySizeTotal",
-                                 expected_body_size_total, 1);
-    histograms.ExpectBucketCount(
-        "PrefetchedSignedExchangeCache.HeadersSizeTotal",
-        expected_headers_size_total, 1);
-  } else {
-    histograms.ExpectTotalCount("PrefetchedSignedExchangeCache.Count", 0);
-    histograms.ExpectTotalCount("PrefetchedSignedExchangeCache.BodySize", 0);
-    histograms.ExpectTotalCount("PrefetchedSignedExchangeCache.BodySizeTotal",
-                                0);
-    histograms.ExpectTotalCount(
-        "PrefetchedSignedExchangeCache.HeadersSizeTotal", 0);
-  }
-}
-
 IN_PROC_BROWSER_TEST_P(SignedExchangePrefetchBrowserTest, ClearAll) {
   const char* hostname = "example.com";
   const char* sxg_path = "/target.sxg";
@@ -982,7 +778,7 @@
   const GURL inner_url =
       embedded_test_server()->GetURL(hostname, inner_url_path);
 
-  EXPECT_EQ(IsSignedExchangePrefetchCacheEnabled() ? 1u : 0u,
+  EXPECT_EQ(IsSignedExchangeSubresourcePrefetchEnabled() ? 1u : 0u,
             GetCachedExchanges(shell()).size());
 
   BrowsingDataRemover* remover =
@@ -1010,8 +806,7 @@
 
 INSTANTIATE_TEST_SUITE_P(SignedExchangePrefetchBrowserTest,
                          SignedExchangePrefetchBrowserTest,
-                         ::testing::Combine(::testing::Bool(),
-                                            ::testing::Bool()));
+                         ::testing::Bool());
 
 class SignedExchangeSubresourcePrefetchBrowserTest
     : public PrefetchBrowserTestBase {
@@ -1021,6 +816,12 @@
     // should be created while single-threaded.
     MockClock::Get();
   }
+
+  SignedExchangeSubresourcePrefetchBrowserTest(
+      const SignedExchangeSubresourcePrefetchBrowserTest&) = delete;
+  SignedExchangeSubresourcePrefetchBrowserTest& operator=(
+      const SignedExchangeSubresourcePrefetchBrowserTest&) = delete;
+
   ~SignedExchangeSubresourcePrefetchBrowserTest() override = default;
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
@@ -1311,8 +1112,6 @@
 
  private:
   base::test::ScopedFeatureList feature_list_;
-
-  DISALLOW_COPY_AND_ASSIGN(SignedExchangeSubresourcePrefetchBrowserTest);
 };
 
 IN_PROC_BROWSER_TEST_F(SignedExchangeSubresourcePrefetchBrowserTest,
diff --git a/content/browser/web_package/signed_exchange_validity_pinger.h b/content/browser/web_package/signed_exchange_validity_pinger.h
index da43ac4..2e58865 100644
--- a/content/browser/web_package/signed_exchange_validity_pinger.h
+++ b/content/browser/web_package/signed_exchange_validity_pinger.h
@@ -40,6 +40,10 @@
       const absl::optional<base::UnguessableToken>& throttling_profile_id,
       base::OnceClosure callback);
 
+  SignedExchangeValidityPinger(const SignedExchangeValidityPinger&) = delete;
+  SignedExchangeValidityPinger& operator=(const SignedExchangeValidityPinger&) =
+      delete;
+
   ~SignedExchangeValidityPinger() override;
 
  private:
@@ -74,8 +78,6 @@
   std::unique_ptr<blink::ThrottlingURLLoader> url_loader_;
   std::unique_ptr<mojo::DataPipeDrainer> pipe_drainer_;
   base::OnceClosure callback_;
-
-  DISALLOW_COPY_AND_ASSIGN(SignedExchangeValidityPinger);
 };
 
 }  // namespace content
diff --git a/content/browser/web_package/web_bundle_blob_data_source.cc b/content/browser/web_package/web_bundle_blob_data_source.cc
index 1d82aeb..e28c04b5 100644
--- a/content/browser/web_package/web_bundle_blob_data_source.cc
+++ b/content/browser/web_package/web_bundle_blob_data_source.cc
@@ -27,6 +27,10 @@
   using CompletionCallback = base::OnceCallback<void(net::Error net_error)>;
   explicit MojoBlobReaderDelegate(CompletionCallback completion_callback)
       : completion_callback_(std::move(completion_callback)) {}
+
+  MojoBlobReaderDelegate(const MojoBlobReaderDelegate&) = delete;
+  MojoBlobReaderDelegate& operator=(const MojoBlobReaderDelegate&) = delete;
+
   ~MojoBlobReaderDelegate() override = default;
   RequestSideData DidCalculateSize(uint64_t total_size,
                                    uint64_t content_size) override {
@@ -40,7 +44,6 @@
 
  private:
   CompletionCallback completion_callback_;
-  DISALLOW_COPY_AND_ASSIGN(MojoBlobReaderDelegate);
 };
 
 void OnReadComplete(web_package::mojom::BundleDataSource::ReadCallback callback,
diff --git a/content/browser/web_package/web_bundle_blob_data_source.h b/content/browser/web_package/web_bundle_blob_data_source.h
index fef93b30..9a0663c 100644
--- a/content/browser/web_package/web_bundle_blob_data_source.h
+++ b/content/browser/web_package/web_bundle_blob_data_source.h
@@ -38,6 +38,10 @@
       mojo::ScopedDataPipeConsumerHandle outer_response_body,
       network::mojom::URLLoaderClientEndpointsPtr endpoints,
       BrowserContext::BlobContextGetter blob_context_getter);
+
+  WebBundleBlobDataSource(const WebBundleBlobDataSource&) = delete;
+  WebBundleBlobDataSource& operator=(const WebBundleBlobDataSource&) = delete;
+
   ~WebBundleBlobDataSource();
 
   void AddReceiver(mojo::PendingReceiver<web_package::mojom::BundleDataSource>
@@ -54,6 +58,10 @@
     BlobDataSourceCore(uint64_t length_hint,
                        network::mojom::URLLoaderClientEndpointsPtr endpoints,
                        BrowserContext::BlobContextGetter blob_context_getter);
+
+    BlobDataSourceCore(const BlobDataSourceCore&) = delete;
+    BlobDataSourceCore& operator=(const BlobDataSourceCore&) = delete;
+
     ~BlobDataSourceCore() override;
 
     void Start(mojo::ScopedDataPipeConsumerHandle outer_response_body);
@@ -96,8 +104,6 @@
     std::vector<base::OnceClosure> pending_get_blob_tasks_;
 
     base::WeakPtrFactory<BlobDataSourceCore> weak_factory_{this};
-
-    DISALLOW_COPY_AND_ASSIGN(BlobDataSourceCore);
   };
 
   static void CreateCoreOnIO(
@@ -133,8 +139,6 @@
   std::vector<base::OnceClosure> pending_get_core_tasks_;
 
   base::WeakPtrFactory<WebBundleBlobDataSource> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(WebBundleBlobDataSource);
 };
 
 }  // namespace content
diff --git a/content/browser/web_package/web_bundle_browsertest.cc b/content/browser/web_package/web_bundle_browsertest.cc
index 9facefa..e66932e 100644
--- a/content/browser/web_package/web_bundle_browsertest.cc
+++ b/content/browser/web_package/web_bundle_browsertest.cc
@@ -119,6 +119,10 @@
   explicit DownloadObserver(DownloadManager* manager) : manager_(manager) {
     manager_->AddObserver(this);
   }
+
+  DownloadObserver(const DownloadObserver&) = delete;
+  DownloadObserver& operator=(const DownloadObserver&) = delete;
+
   ~DownloadObserver() override { manager_->RemoveObserver(this); }
 
   void WaitUntilDownloadCreated() { run_loop_.Run(); }
@@ -135,8 +139,6 @@
   DownloadManager* manager_;
   base::RunLoop run_loop_;
   GURL url_;
-
-  DISALLOW_COPY_AND_ASSIGN(DownloadObserver);
 };
 
 class MockParserFactory;
@@ -158,6 +160,10 @@
         primary_url_(primary_url),
         simulate_parse_metadata_crash_(simulate_parse_metadata_crash),
         simulate_parse_response_crash_(simulate_parse_response_crash) {}
+
+  MockParser(const MockParser&) = delete;
+  MockParser& operator=(const MockParser&) = delete;
+
   ~MockParser() override = default;
 
  private:
@@ -173,8 +179,6 @@
   const GURL primary_url_;
   const bool simulate_parse_metadata_crash_;
   const bool simulate_parse_response_crash_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockParser);
 };
 
 class MockParserFactory final
@@ -218,6 +222,10 @@
             base::BindRepeating(&MockParserFactory::BindWebBundleParserFactory,
                                 base::Unretained(this)));
   }
+
+  MockParserFactory(const MockParserFactory&) = delete;
+  MockParserFactory& operator=(const MockParserFactory&) = delete;
+
   ~MockParserFactory() override = default;
 
   int GetParserCreationCount() const { return parser_creation_count_; }
@@ -266,8 +274,6 @@
   int parser_creation_count_ = 0;
   base::flat_map<GURL, web_package::mojom::BundleIndexValuePtr> index_;
   const GURL primary_url_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockParserFactory);
 };
 
 void MockParser::ParseMetadata(ParseMetadataCallback callback) {
@@ -308,6 +314,10 @@
 class TestBrowserClient : public ContentBrowserClient {
  public:
   TestBrowserClient() = default;
+
+  TestBrowserClient(const TestBrowserClient&) = delete;
+  TestBrowserClient& operator=(const TestBrowserClient&) = delete;
+
   ~TestBrowserClient() override = default;
   bool CanAcceptUntrustedExchangesIfNeeded() override { return true; }
   std::string GetAcceptLangs(BrowserContext* context) override {
@@ -317,7 +327,6 @@
 
  private:
   std::string accept_langs_ = "en";
-  DISALLOW_COPY_AND_ASSIGN(TestBrowserClient);
 };
 
 class WebBundleBrowserTestBase : public ContentBrowserTest {
diff --git a/content/browser/web_package/web_bundle_handle.h b/content/browser/web_package/web_bundle_handle.h
index 25cb2c9..3028070 100644
--- a/content/browser/web_package/web_bundle_handle.h
+++ b/content/browser/web_package/web_bundle_handle.h
@@ -42,6 +42,9 @@
       std::unique_ptr<WebBundleNavigationInfo> navigation_info,
       int frame_tree_node_id);
 
+  WebBundleHandle(const WebBundleHandle&) = delete;
+  WebBundleHandle& operator=(const WebBundleHandle&) = delete;
+
   ~WebBundleHandle();
 
   // Takes a NavigationLoaderInterceptor instance to handle the request for
@@ -91,8 +94,6 @@
   std::unique_ptr<WebBundleURLLoaderFactory> url_loader_factory_;
 
   base::WeakPtrFactory<WebBundleHandle> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(WebBundleHandle);
 };
 
 }  // namespace content
diff --git a/content/browser/web_package/web_bundle_handle_tracker.h b/content/browser/web_package/web_bundle_handle_tracker.h
index 8101c0d..8f456d6 100644
--- a/content/browser/web_package/web_bundle_handle_tracker.h
+++ b/content/browser/web_package/web_bundle_handle_tracker.h
@@ -19,6 +19,10 @@
  public:
   WebBundleHandleTracker(scoped_refptr<WebBundleReader> reader,
                          const GURL& target_inner_url);
+
+  WebBundleHandleTracker(const WebBundleHandleTracker&) = delete;
+  WebBundleHandleTracker& operator=(const WebBundleHandleTracker&) = delete;
+
   ~WebBundleHandleTracker();
 
   // Returns a WebBundleHandle to handle the navigation request to |url|
@@ -31,8 +35,6 @@
  private:
   scoped_refptr<WebBundleReader> reader_;
   const GURL target_inner_url_;
-
-  DISALLOW_COPY_AND_ASSIGN(WebBundleHandleTracker);
 };
 
 }  // namespace content
diff --git a/content/browser/web_package/web_bundle_navigation_info.h b/content/browser/web_package/web_bundle_navigation_info.h
index 7e2d30e..a5205ed 100644
--- a/content/browser/web_package/web_bundle_navigation_info.h
+++ b/content/browser/web_package/web_bundle_navigation_info.h
@@ -22,6 +22,10 @@
   WebBundleNavigationInfo(std::unique_ptr<WebBundleSource> source,
                           const GURL& target_inner_url,
                           base::WeakPtr<WebBundleReader> weak_reader);
+
+  WebBundleNavigationInfo(const WebBundleNavigationInfo&) = delete;
+  WebBundleNavigationInfo& operator=(const WebBundleNavigationInfo&) = delete;
+
   ~WebBundleNavigationInfo();
 
   const WebBundleSource& source() const;
@@ -34,8 +38,6 @@
   std::unique_ptr<WebBundleSource> source_;
   const GURL target_inner_url_;
   const base::WeakPtr<WebBundleReader> weak_reader_;
-
-  DISALLOW_COPY_AND_ASSIGN(WebBundleNavigationInfo);
 };
 }  // namespace content
 
diff --git a/content/browser/web_package/web_bundle_source.h b/content/browser/web_package/web_bundle_source.h
index bd4e2bf..104757d 100644
--- a/content/browser/web_package/web_bundle_source.h
+++ b/content/browser/web_package/web_bundle_source.h
@@ -43,6 +43,9 @@
   static std::unique_ptr<WebBundleSource> MaybeCreateFromNetworkUrl(
       const GURL& url);
 
+  WebBundleSource(const WebBundleSource&) = delete;
+  WebBundleSource& operator=(const WebBundleSource&) = delete;
+
   ~WebBundleSource() = default;
 
   std::unique_ptr<WebBundleSource> Clone() const;
@@ -64,8 +67,6 @@
   const Type type_;
   const base::FilePath file_path_;
   const GURL url_;
-
-  DISALLOW_COPY_AND_ASSIGN(WebBundleSource);
 };
 
 }  // namespace content
diff --git a/content/browser/web_package/web_bundle_url_loader_factory.cc b/content/browser/web_package/web_bundle_url_loader_factory.cc
index e3d0899..62470fc2 100644
--- a/content/browser/web_package/web_bundle_url_loader_factory.cc
+++ b/content/browser/web_package/web_bundle_url_loader_factory.cc
@@ -80,6 +80,10 @@
         base::BindOnce(&EntryLoader::OnResponseReady,
                        weak_factory_.GetWeakPtr()));
   }
+
+  EntryLoader(const EntryLoader&) = delete;
+  EntryLoader& operator=(const EntryLoader&) = delete;
+
   ~EntryLoader() override = default;
 
  private:
@@ -179,8 +183,6 @@
   absl::optional<net::HttpByteRange> byte_range_;
 
   base::WeakPtrFactory<EntryLoader> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(EntryLoader);
 };
 
 WebBundleURLLoaderFactory::WebBundleURLLoaderFactory(
diff --git a/content/browser/web_package/web_bundle_url_loader_factory.h b/content/browser/web_package/web_bundle_url_loader_factory.h
index ad5e56c..dc499c6e 100644
--- a/content/browser/web_package/web_bundle_url_loader_factory.h
+++ b/content/browser/web_package/web_bundle_url_loader_factory.h
@@ -25,6 +25,11 @@
  public:
   explicit WebBundleURLLoaderFactory(scoped_refptr<WebBundleReader> reader,
                                      int frame_tree_node_id);
+
+  WebBundleURLLoaderFactory(const WebBundleURLLoaderFactory&) = delete;
+  WebBundleURLLoaderFactory& operator=(const WebBundleURLLoaderFactory&) =
+      delete;
+
   ~WebBundleURLLoaderFactory() override;
 
   // Set a |network::mojom::URLLoaderFactory| remote interface used for requests
@@ -58,8 +63,6 @@
   mojo::Remote<network::mojom::URLLoaderFactory> fallback_factory_;
 
   base::WeakPtrFactory<WebBundleURLLoaderFactory> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(WebBundleURLLoaderFactory);
 };
 
 }  // namespace content
diff --git a/content/browser/webauth/authenticator_common.h b/content/browser/webauth/authenticator_common.h
index 79436ea2..0a087da8 100644
--- a/content/browser/webauth/authenticator_common.h
+++ b/content/browser/webauth/authenticator_common.h
@@ -67,6 +67,10 @@
   // Creates a new AuthenticatorCommon. Callers must ensure that this instance
   // outlives the RenderFrameHost.
   explicit AuthenticatorCommon(RenderFrameHost* render_frame_host);
+
+  AuthenticatorCommon(const AuthenticatorCommon&) = delete;
+  AuthenticatorCommon& operator=(const AuthenticatorCommon&) = delete;
+
   virtual ~AuthenticatorCommon();
 
   // This is not-quite an implementation of blink::mojom::Authenticator. The
@@ -245,8 +249,6 @@
   base::flat_set<RequestExtension> requested_extensions_;
 
   base::WeakPtrFactory<AuthenticatorCommon> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(AuthenticatorCommon);
 };
 
 }  // namespace content
diff --git a/content/browser/webauth/authenticator_impl_unittest.cc b/content/browser/webauth/authenticator_impl_unittest.cc
index 4be7452a..4e94e189 100644
--- a/content/browser/webauth/authenticator_impl_unittest.cc
+++ b/content/browser/webauth/authenticator_impl_unittest.cc
@@ -1801,6 +1801,11 @@
         attestation_consent_(attestation_consent),
         started_over_callback_(std::move(started_over_callback)) {}
 
+  TestAuthenticatorRequestDelegate(const TestAuthenticatorRequestDelegate&) =
+      delete;
+  TestAuthenticatorRequestDelegate& operator=(
+      const TestAuthenticatorRequestDelegate&) = delete;
+
   ~TestAuthenticatorRequestDelegate() override {
     CHECK(attestation_consent_queried_ ||
           attestation_consent_ == AttestationConsent::NOT_USED);
@@ -1868,9 +1873,6 @@
   const AttestationConsent attestation_consent_;
   base::OnceClosure started_over_callback_;
   bool attestation_consent_queried_ = false;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(TestAuthenticatorRequestDelegate);
 };
 
 // TestAuthenticatorContentBrowserClient is a test fake implementation of the
@@ -3185,6 +3187,12 @@
             AttestationConsent::NOT_USED,
             /*started_over_callback=*/base::OnceClosure()),
         failure_reasons_callback_(std::move(failure_reasons_callback)) {}
+
+  MockAuthenticatorRequestDelegateObserver(
+      const MockAuthenticatorRequestDelegateObserver&) = delete;
+  MockAuthenticatorRequestDelegateObserver& operator=(
+      const MockAuthenticatorRequestDelegateObserver&) = delete;
+
   ~MockAuthenticatorRequestDelegateObserver() override = default;
 
   bool DoesBlockRequestOnFailure(InterestingFailureReason reason) override {
@@ -3203,8 +3211,6 @@
 
  private:
   InterestingFailureReasonCallback failure_reasons_callback_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockAuthenticatorRequestDelegateObserver);
 };
 
 // Fake test construct that shares all other behavior with AuthenticatorCommon
@@ -4357,6 +4363,12 @@
       : supports_pin_(supports_pin),
         expected_(pins),
         failure_reason_(failure_reason) {}
+
+  PINTestAuthenticatorRequestDelegate(
+      const PINTestAuthenticatorRequestDelegate&) = delete;
+  PINTestAuthenticatorRequestDelegate& operator=(
+      const PINTestAuthenticatorRequestDelegate&) = delete;
+
   ~PINTestAuthenticatorRequestDelegate() override {
     DCHECK(expected_.empty())
         << expected_.size() << " unsatisifed PIN expectations";
@@ -4396,7 +4408,6 @@
   const bool supports_pin_;
   std::list<PINExpectation> expected_;
   absl::optional<InterestingFailureReason>* const failure_reason_;
-  DISALLOW_COPY_AND_ASSIGN(PINTestAuthenticatorRequestDelegate);
 };
 
 class PINTestAuthenticatorContentBrowserClient : public ContentBrowserClient {
diff --git a/content/browser/webauth/virtual_authenticator.h b/content/browser/webauth/virtual_authenticator.h
index e31bdd82..4fa5ded9 100644
--- a/content/browser/webauth/virtual_authenticator.h
+++ b/content/browser/webauth/virtual_authenticator.h
@@ -33,6 +33,10 @@
  public:
   explicit VirtualAuthenticator(
       const blink::test::mojom::VirtualAuthenticatorOptions& options);
+
+  VirtualAuthenticator(const VirtualAuthenticator&) = delete;
+  VirtualAuthenticator& operator=(const VirtualAuthenticator&) = delete;
+
   ~VirtualAuthenticator() override;
 
   void AddReceiver(
@@ -138,8 +142,6 @@
   mojo::ReceiverSet<blink::test::mojom::VirtualAuthenticator> receiver_set_;
 
   base::WeakPtrFactory<VirtualAuthenticator> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(VirtualAuthenticator);
 };
 
 }  // namespace content
diff --git a/content/browser/webauth/virtual_authenticator_request_delegate.h b/content/browser/webauth/virtual_authenticator_request_delegate.h
index b44af19..5b2c8933 100644
--- a/content/browser/webauth/virtual_authenticator_request_delegate.h
+++ b/content/browser/webauth/virtual_authenticator_request_delegate.h
@@ -17,6 +17,12 @@
  public:
   // The |frame_tree_node| must outlive this instance.
   VirtualAuthenticatorRequestDelegate();
+
+  VirtualAuthenticatorRequestDelegate(
+      const VirtualAuthenticatorRequestDelegate&) = delete;
+  VirtualAuthenticatorRequestDelegate& operator=(
+      const VirtualAuthenticatorRequestDelegate&) = delete;
+
   ~VirtualAuthenticatorRequestDelegate() override;
 
   // AuthenticatorRequestClientDelegate:
@@ -24,9 +30,6 @@
       std::vector<device::AuthenticatorGetAssertionResponse> responses,
       base::OnceCallback<void(device::AuthenticatorGetAssertionResponse)>
           callback) override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(VirtualAuthenticatorRequestDelegate);
 };
 
 }  // namespace content
diff --git a/content/browser/webauth/virtual_discovery.h b/content/browser/webauth/virtual_discovery.h
index 952ba3b7..7025121 100644
--- a/content/browser/webauth/virtual_discovery.h
+++ b/content/browser/webauth/virtual_discovery.h
@@ -28,6 +28,9 @@
  public:
   explicit VirtualFidoDiscovery(::device::FidoTransportProtocol transport);
 
+  VirtualFidoDiscovery(const VirtualFidoDiscovery&) = delete;
+  VirtualFidoDiscovery& operator=(const VirtualFidoDiscovery&) = delete;
+
   // Notifies the AuthenticatorEnvironment of this instance being destroyed.
   ~VirtualFidoDiscovery() override;
 
@@ -41,8 +44,6 @@
  private:
   std::vector<std::unique_ptr<::device::FidoDevice>>
       devices_pending_discovery_start_;
-
-  DISALLOW_COPY_AND_ASSIGN(VirtualFidoDiscovery);
 };
 
 }  // namespace content
diff --git a/content/browser/webauth/webauth_browsertest.cc b/content/browser/webauth/webauth_browsertest.cc
index 7b5d2bb..c3bea00 100644
--- a/content/browser/webauth/webauth_browsertest.cc
+++ b/content/browser/webauth/webauth_browsertest.cc
@@ -287,6 +287,12 @@
                                         base::OnceClosure closure)
       : DidCommitNavigationInterceptor(web_contents),
         closure_(std::move(closure)) {}
+
+  ClosureExecutorBeforeNavigationCommit(
+      const ClosureExecutorBeforeNavigationCommit&) = delete;
+  ClosureExecutorBeforeNavigationCommit& operator=(
+      const ClosureExecutorBeforeNavigationCommit&) = delete;
+
   ~ClosureExecutorBeforeNavigationCommit() override = default;
 
  protected:
@@ -303,7 +309,6 @@
 
  private:
   base::OnceClosure closure_;
-  DISALLOW_COPY_AND_ASSIGN(ClosureExecutorBeforeNavigationCommit);
 };
 
 // Cancels all navigations in a WebContents while in scope.
@@ -312,6 +317,12 @@
   explicit ScopedNavigationCancellingThrottleInstaller(
       WebContents* web_contents)
       : WebContentsObserver(web_contents) {}
+
+  ScopedNavigationCancellingThrottleInstaller(
+      const ScopedNavigationCancellingThrottleInstaller&) = delete;
+  ScopedNavigationCancellingThrottleInstaller& operator=(
+      const ScopedNavigationCancellingThrottleInstaller&) = delete;
+
   ~ScopedNavigationCancellingThrottleInstaller() override = default;
 
  protected:
@@ -319,6 +330,10 @@
    public:
     explicit CancellingThrottle(NavigationHandle* handle)
         : NavigationThrottle(handle) {}
+
+    CancellingThrottle(const CancellingThrottle&) = delete;
+    CancellingThrottle& operator=(const CancellingThrottle&) = delete;
+
     ~CancellingThrottle() override = default;
 
    protected:
@@ -329,18 +344,12 @@
     ThrottleCheckResult WillStartRequest() override {
       return ThrottleCheckResult(CANCEL);
     }
-
-   private:
-    DISALLOW_COPY_AND_ASSIGN(CancellingThrottle);
   };
 
   void DidStartNavigation(NavigationHandle* navigation_handle) override {
     navigation_handle->RegisterThrottleForTesting(
         std::make_unique<CancellingThrottle>(navigation_handle));
   }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(ScopedNavigationCancellingThrottleInstaller);
 };
 
 struct WebAuthBrowserTestState {
@@ -502,6 +511,11 @@
 class WebAuthLocalClientBrowserTest : public WebAuthBrowserTestBase {
  public:
   WebAuthLocalClientBrowserTest() = default;
+
+  WebAuthLocalClientBrowserTest(const WebAuthLocalClientBrowserTest&) = delete;
+  WebAuthLocalClientBrowserTest& operator=(
+      const WebAuthLocalClientBrowserTest&) = delete;
+
   ~WebAuthLocalClientBrowserTest() override = default;
 
  protected:
@@ -600,8 +614,6 @@
 
  private:
   mojo::Remote<blink::mojom::Authenticator> authenticator_remote_;
-
-  DISALLOW_COPY_AND_ASSIGN(WebAuthLocalClientBrowserTest);
 };
 
 // Tests that no crash occurs when the implementation is destroyed with a
@@ -821,10 +833,13 @@
 class WebAuthJavascriptClientBrowserTest : public WebAuthBrowserTestBase {
  public:
   WebAuthJavascriptClientBrowserTest() = default;
-  ~WebAuthJavascriptClientBrowserTest() override = default;
 
- private:
-  DISALLOW_COPY_AND_ASSIGN(WebAuthJavascriptClientBrowserTest);
+  WebAuthJavascriptClientBrowserTest(
+      const WebAuthJavascriptClientBrowserTest&) = delete;
+  WebAuthJavascriptClientBrowserTest& operator=(
+      const WebAuthJavascriptClientBrowserTest&) = delete;
+
+  ~WebAuthJavascriptClientBrowserTest() override = default;
 };
 
 constexpr device::ProtocolVersion kAllProtocols[] = {
@@ -1538,9 +1553,11 @@
 class WebAuthBrowserCtapTest : public WebAuthLocalClientBrowserTest {
  public:
   WebAuthBrowserCtapTest() = default;
-  ~WebAuthBrowserCtapTest() override = default;
 
-  DISALLOW_COPY_AND_ASSIGN(WebAuthBrowserCtapTest);
+  WebAuthBrowserCtapTest(const WebAuthBrowserCtapTest&) = delete;
+  WebAuthBrowserCtapTest& operator=(const WebAuthBrowserCtapTest&) = delete;
+
+  ~WebAuthBrowserCtapTest() override = default;
 };
 
 IN_PROC_BROWSER_TEST_F(WebAuthBrowserCtapTest, TestMakeCredential) {
diff --git a/content/browser/webrtc/webrtc_capture_from_element_browsertest.cc b/content/browser/webrtc/webrtc_capture_from_element_browsertest.cc
index 53d28e9..5ac5896 100644
--- a/content/browser/webrtc/webrtc_capture_from_element_browsertest.cc
+++ b/content/browser/webrtc/webrtc_capture_from_element_browsertest.cc
@@ -58,6 +58,12 @@
       public testing::WithParamInterface<struct FileAndTypeParameters> {
  public:
   WebRtcCaptureFromElementBrowserTest() {}
+
+  WebRtcCaptureFromElementBrowserTest(
+      const WebRtcCaptureFromElementBrowserTest&) = delete;
+  WebRtcCaptureFromElementBrowserTest& operator=(
+      const WebRtcCaptureFromElementBrowserTest&) = delete;
+
   ~WebRtcCaptureFromElementBrowserTest() override {}
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
@@ -74,9 +80,6 @@
     base::CommandLine::ForCurrentProcess()->AppendSwitch(
         switches::kExposeInternalsForTesting);
   }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(WebRtcCaptureFromElementBrowserTest);
 };
 
 IN_PROC_BROWSER_TEST_F(WebRtcCaptureFromElementBrowserTest,
diff --git a/content/browser/webrtc/webrtc_connections_observer.h b/content/browser/webrtc/webrtc_connections_observer.h
index 92393080..54b65e0e 100644
--- a/content/browser/webrtc/webrtc_connections_observer.h
+++ b/content/browser/webrtc/webrtc_connections_observer.h
@@ -20,6 +20,11 @@
   // is a change in the count of active WebRTC connections.
   explicit WebRtcConnectionsObserver(const ConnectionsCountChangedCallback&
                                          connections_count_changed_callback);
+
+  WebRtcConnectionsObserver(const WebRtcConnectionsObserver&) = delete;
+  WebRtcConnectionsObserver& operator=(const WebRtcConnectionsObserver&) =
+      delete;
+
   ~WebRtcConnectionsObserver() override;
 
  private:
@@ -29,7 +34,6 @@
   ConnectionsCountChangedCallback connections_count_changed_callback_;
 
   SEQUENCE_CHECKER(sequence_checker_);
-  DISALLOW_COPY_AND_ASSIGN(WebRtcConnectionsObserver);
 };
 
 }  // namespace content
diff --git a/content/browser/webrtc/webrtc_datachannel_browsertest.cc b/content/browser/webrtc/webrtc_datachannel_browsertest.cc
index 9e3710f1..c790902 100644
--- a/content/browser/webrtc/webrtc_datachannel_browsertest.cc
+++ b/content/browser/webrtc/webrtc_datachannel_browsertest.cc
@@ -20,6 +20,10 @@
 class WebRtcDataChannelTest : public WebRtcContentBrowserTestBase {
  public:
   WebRtcDataChannelTest() {}
+
+  WebRtcDataChannelTest(const WebRtcDataChannelTest&) = delete;
+  WebRtcDataChannelTest& operator=(const WebRtcDataChannelTest&) = delete;
+
   ~WebRtcDataChannelTest() override {}
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
@@ -28,9 +32,6 @@
     base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
         switches::kJavaScriptFlags, kJavaScriptFeaturesNeeded);
   }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(WebRtcDataChannelTest);
 };
 
 // Flaky on all platforms: https://crbug.com/734567
diff --git a/content/browser/webrtc/webrtc_image_capture_browsertest.cc b/content/browser/webrtc/webrtc_image_capture_browsertest.cc
index 1676d8f..527f9bd7 100644
--- a/content/browser/webrtc/webrtc_image_capture_browsertest.cc
+++ b/content/browser/webrtc/webrtc_image_capture_browsertest.cc
@@ -93,6 +93,12 @@
     : public UsingRealWebcam_WebRtcWebcamBrowserTest {
  public:
   WebRtcImageCaptureBrowserTestBase() = default;
+
+  WebRtcImageCaptureBrowserTestBase(const WebRtcImageCaptureBrowserTestBase&) =
+      delete;
+  WebRtcImageCaptureBrowserTestBase& operator=(
+      const WebRtcImageCaptureBrowserTestBase&) = delete;
+
   ~WebRtcImageCaptureBrowserTestBase() override = default;
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
@@ -134,9 +140,6 @@
     DLOG_IF(ERROR, result != "OK") << result;
     return result == "OK";
   }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(WebRtcImageCaptureBrowserTestBase);
 };
 
 // Test fixture for setting up a capture device (real or fake) that successfully
@@ -167,6 +170,11 @@
                                           features_to_disable);
   }
 
+  WebRtcImageCaptureSucceedsBrowserTest(
+      const WebRtcImageCaptureSucceedsBrowserTest&) = delete;
+  WebRtcImageCaptureSucceedsBrowserTest& operator=(
+      const WebRtcImageCaptureSucceedsBrowserTest&) = delete;
+
   ~WebRtcImageCaptureSucceedsBrowserTest() override = default;
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
@@ -182,8 +190,6 @@
 
  private:
   base::test::ScopedFeatureList scoped_feature_list_;
-
-  DISALLOW_COPY_AND_ASSIGN(WebRtcImageCaptureSucceedsBrowserTest);
 };
 
 // TODO(crbug.com/998305): Flaky on Linux.
@@ -333,6 +339,11 @@
     }
   }
 
+  WebRtcImageCaptureCustomConfigFakeDeviceBrowserTest(
+      const WebRtcImageCaptureCustomConfigFakeDeviceBrowserTest&) = delete;
+  WebRtcImageCaptureCustomConfigFakeDeviceBrowserTest& operator=(
+      const WebRtcImageCaptureCustomConfigFakeDeviceBrowserTest&) = delete;
+
   ~WebRtcImageCaptureCustomConfigFakeDeviceBrowserTest() override {}
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
@@ -345,8 +356,6 @@
 
  private:
   base::test::ScopedFeatureList scoped_feature_list_;
-
-  DISALLOW_COPY_AND_ASSIGN(WebRtcImageCaptureCustomConfigFakeDeviceBrowserTest);
 };
 
 struct GetPhotoStateFailsConfigTraits {
diff --git a/content/browser/webrtc/webrtc_internals.h b/content/browser/webrtc/webrtc_internals.h
index 9e7f644c..dd3ad3a4 100644
--- a/content/browser/webrtc/webrtc_internals.h
+++ b/content/browser/webrtc/webrtc_internals.h
@@ -252,6 +252,10 @@
    public:
     PendingUpdate(const std::string& event_name, base::Value event_data);
     PendingUpdate(PendingUpdate&& other);
+
+    PendingUpdate(const PendingUpdate&) = delete;
+    PendingUpdate& operator=(const PendingUpdate&) = delete;
+
     ~PendingUpdate();
 
     const std::string& event_name() const;
@@ -261,7 +265,6 @@
     base::ThreadChecker thread_checker_;
     const std::string event_name_;
     base::Value event_data_;
-    DISALLOW_COPY_AND_ASSIGN(PendingUpdate);
   };
 
   base::queue<PendingUpdate> pending_updates_;
diff --git a/content/browser/webrtc/webrtc_internals_message_handler.h b/content/browser/webrtc/webrtc_internals_message_handler.h
index c3896ad..95301ce5 100644
--- a/content/browser/webrtc/webrtc_internals_message_handler.h
+++ b/content/browser/webrtc/webrtc_internals_message_handler.h
@@ -26,6 +26,11 @@
       public WebRTCInternalsUIObserver {
  public:
   WebRTCInternalsMessageHandler();
+
+  WebRTCInternalsMessageHandler(const WebRTCInternalsMessageHandler&) = delete;
+  WebRTCInternalsMessageHandler& operator=(
+      const WebRTCInternalsMessageHandler&) = delete;
+
   ~WebRTCInternalsMessageHandler() override;
 
   // WebUIMessageHandler implementation.
@@ -56,8 +61,6 @@
 
   // Executes Javascript command.
   void ExecuteJavascriptCommand(const char* command, const base::Value* args);
-
-  DISALLOW_COPY_AND_ASSIGN(WebRTCInternalsMessageHandler);
 };
 
 }  // namespace content
diff --git a/content/browser/webrtc/webrtc_media_recorder_browsertest.cc b/content/browser/webrtc/webrtc_media_recorder_browsertest.cc
index e9995917..8411f23e 100644
--- a/content/browser/webrtc/webrtc_media_recorder_browsertest.cc
+++ b/content/browser/webrtc/webrtc_media_recorder_browsertest.cc
@@ -51,6 +51,11 @@
       public testing::WithParamInterface<struct EncodingParameters> {
  public:
   MAYBE_WebRtcMediaRecorderTest() {}
+
+  MAYBE_WebRtcMediaRecorderTest(const MAYBE_WebRtcMediaRecorderTest&) = delete;
+  MAYBE_WebRtcMediaRecorderTest& operator=(
+      const MAYBE_WebRtcMediaRecorderTest&) = delete;
+
   ~MAYBE_WebRtcMediaRecorderTest() override {}
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
@@ -69,9 +74,6 @@
     base::CommandLine::ForCurrentProcess()->AppendSwitch(
         switches::kDisableAcceleratedVideoDecode);
   }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(MAYBE_WebRtcMediaRecorderTest);
 };
 
 IN_PROC_BROWSER_TEST_F(MAYBE_WebRtcMediaRecorderTest, Start) {
diff --git a/content/browser/webrtc/webrtc_stress_image_capture_browsertest.cc b/content/browser/webrtc/webrtc_stress_image_capture_browsertest.cc
index ec5e0187..902eaf5 100644
--- a/content/browser/webrtc/webrtc_stress_image_capture_browsertest.cc
+++ b/content/browser/webrtc/webrtc_stress_image_capture_browsertest.cc
@@ -55,6 +55,12 @@
     scoped_feature_list_.InitWithFeatures(features_to_enable,
                                           features_to_disable);
   }
+
+  WebRtcImageCaptureStressBrowserTest(
+      const WebRtcImageCaptureStressBrowserTest&) = delete;
+  WebRtcImageCaptureStressBrowserTest& operator=(
+      const WebRtcImageCaptureStressBrowserTest&) = delete;
+
   ~WebRtcImageCaptureStressBrowserTest() override = default;
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
@@ -92,8 +98,6 @@
 
  private:
   base::test::ScopedFeatureList scoped_feature_list_;
-
-  DISALLOW_COPY_AND_ASSIGN(WebRtcImageCaptureStressBrowserTest);
 };
 
 IN_PROC_BROWSER_TEST_P(WebRtcImageCaptureStressBrowserTest,
diff --git a/content/browser/webrtc/webrtc_video_capture_service_browsertest.cc b/content/browser/webrtc/webrtc_video_capture_service_browsertest.cc
index 663afc9..5aece22 100644
--- a/content/browser/webrtc/webrtc_video_capture_service_browsertest.cc
+++ b/content/browser/webrtc/webrtc_video_capture_service_browsertest.cc
@@ -421,6 +421,11 @@
     virtual_device_thread_.Start();
   }
 
+  WebRtcVideoCaptureServiceBrowserTest(
+      const WebRtcVideoCaptureServiceBrowserTest&) = delete;
+  WebRtcVideoCaptureServiceBrowserTest& operator=(
+      const WebRtcVideoCaptureServiceBrowserTest&) = delete;
+
   ~WebRtcVideoCaptureServiceBrowserTest() override {}
 
   void AddVirtualDeviceAndStartCapture(VirtualDeviceExerciser* device_exerciser,
@@ -532,8 +537,6 @@
   base::TimeTicks first_frame_time_;
   base::WeakPtrFactory<WebRtcVideoCaptureServiceBrowserTest> weak_factory_{
       this};
-
-  DISALLOW_COPY_AND_ASSIGN(WebRtcVideoCaptureServiceBrowserTest);
 };
 
 IN_PROC_BROWSER_TEST_F(
diff --git a/content/browser/webrtc/webrtc_video_capture_service_enumeration_browsertest.cc b/content/browser/webrtc/webrtc_video_capture_service_enumeration_browsertest.cc
index b6abef3..2109386 100644
--- a/content/browser/webrtc/webrtc_video_capture_service_enumeration_browsertest.cc
+++ b/content/browser/webrtc/webrtc_video_capture_service_enumeration_browsertest.cc
@@ -65,6 +65,11 @@
     scoped_feature_list_.InitAndEnableFeature(features::kMojoVideoCapture);
   }
 
+  WebRtcVideoCaptureServiceEnumerationBrowserTest(
+      const WebRtcVideoCaptureServiceEnumerationBrowserTest&) = delete;
+  WebRtcVideoCaptureServiceEnumerationBrowserTest& operator=(
+      const WebRtcVideoCaptureServiceEnumerationBrowserTest&) = delete;
+
   ~WebRtcVideoCaptureServiceEnumerationBrowserTest() override {}
 
   void ConnectToService() {
@@ -229,8 +234,6 @@
   mojo::Remote<video_capture::mojom::VideoSourceProvider>
       video_source_provider_;
   base::OnceClosure closure_to_be_called_on_devices_changed_;
-
-  DISALLOW_COPY_AND_ASSIGN(WebRtcVideoCaptureServiceEnumerationBrowserTest);
 };
 
 IN_PROC_BROWSER_TEST_P(WebRtcVideoCaptureServiceEnumerationBrowserTest,
diff --git a/content/browser/webrtc/webrtc_video_capture_shared_device_browsertest.cc b/content/browser/webrtc/webrtc_video_capture_shared_device_browsertest.cc
index 8e3f57e..2ca9152 100644
--- a/content/browser/webrtc/webrtc_video_capture_shared_device_browsertest.cc
+++ b/content/browser/webrtc/webrtc_video_capture_shared_device_browsertest.cc
@@ -79,6 +79,11 @@
     scoped_feature_list_.InitAndEnableFeature(features::kMojoVideoCapture);
   }
 
+  WebRtcVideoCaptureSharedDeviceBrowserTest(
+      const WebRtcVideoCaptureSharedDeviceBrowserTest&) = delete;
+  WebRtcVideoCaptureSharedDeviceBrowserTest& operator=(
+      const WebRtcVideoCaptureSharedDeviceBrowserTest&) = delete;
+
   ~WebRtcVideoCaptureSharedDeviceBrowserTest() override {}
 
   void OpenDeviceViaService() {
@@ -210,8 +215,6 @@
   mojo::PendingRemote<video_capture::mojom::VideoFrameHandler> subscriber_;
   base::WeakPtrFactory<WebRtcVideoCaptureSharedDeviceBrowserTest> weak_factory_{
       this};
-
-  DISALLOW_COPY_AND_ASSIGN(WebRtcVideoCaptureSharedDeviceBrowserTest);
 };
 
 // Tests that a single fake video capture device can be opened via JavaScript
diff --git a/content/browser/webrtc/webrtc_webcam_browsertest.h b/content/browser/webrtc/webrtc_webcam_browsertest.h
index 82139dc..e18ba330 100644
--- a/content/browser/webrtc/webrtc_webcam_browsertest.h
+++ b/content/browser/webrtc/webrtc_webcam_browsertest.h
@@ -20,14 +20,17 @@
 class UsingRealWebcam_WebRtcWebcamBrowserTest : public ContentBrowserTest {
  public:
   UsingRealWebcam_WebRtcWebcamBrowserTest() = default;
+
+  UsingRealWebcam_WebRtcWebcamBrowserTest(
+      const UsingRealWebcam_WebRtcWebcamBrowserTest&) = delete;
+  UsingRealWebcam_WebRtcWebcamBrowserTest& operator=(
+      const UsingRealWebcam_WebRtcWebcamBrowserTest&) = delete;
+
   ~UsingRealWebcam_WebRtcWebcamBrowserTest() override = default;
 
   // ContentBrowserTest implementation.
   void SetUpCommandLine(base::CommandLine* command_line) override;
   void SetUp() override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(UsingRealWebcam_WebRtcWebcamBrowserTest);
 };
 
 }  // namespace content
diff --git a/content/browser/websockets/websocket_handshake_request_info_impl.h b/content/browser/websockets/websocket_handshake_request_info_impl.h
index 3e0f633..1ea955596 100644
--- a/content/browser/websockets/websocket_handshake_request_info_impl.h
+++ b/content/browser/websockets/websocket_handshake_request_info_impl.h
@@ -16,6 +16,11 @@
     : public WebSocketHandshakeRequestInfo,
       public base::SupportsUserData::Data {
  public:
+  WebSocketHandshakeRequestInfoImpl(const WebSocketHandshakeRequestInfoImpl&) =
+      delete;
+  WebSocketHandshakeRequestInfoImpl& operator=(
+      const WebSocketHandshakeRequestInfoImpl&) = delete;
+
   ~WebSocketHandshakeRequestInfoImpl() override;
 
   static void CreateInfoAndAssociateWithRequest(int child_id,
@@ -30,8 +35,6 @@
 
   const int child_id_;
   const int render_frame_id_;
-
-  DISALLOW_COPY_AND_ASSIGN(WebSocketHandshakeRequestInfoImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/webui/url_data_manager.h b/content/browser/webui/url_data_manager.h
index 95cff69..00d0297 100644
--- a/content/browser/webui/url_data_manager.h
+++ b/content/browser/webui/url_data_manager.h
@@ -32,6 +32,10 @@
 class CONTENT_EXPORT URLDataManager : public base::SupportsUserData::Data {
  public:
   explicit URLDataManager(BrowserContext* browser_context);
+
+  URLDataManager(const URLDataManager&) = delete;
+  URLDataManager& operator=(const URLDataManager&) = delete;
+
   ~URLDataManager() override;
 
   // Adds a DataSource to the collection of data sources. This *must* be invoked
@@ -88,8 +92,6 @@
   // |data_sources_| that are no longer referenced and scheduled for deletion.
   // Protected by g_delete_lock in the .cc file.
   static URLDataSources* data_sources_;
-
-  DISALLOW_COPY_AND_ASSIGN(URLDataManager);
 };
 
 }  // namespace content
diff --git a/content/browser/webui/url_data_manager_backend.h b/content/browser/webui/url_data_manager_backend.h
index 3df5c86..9410239 100644
--- a/content/browser/webui/url_data_manager_backend.h
+++ b/content/browser/webui/url_data_manager_backend.h
@@ -39,6 +39,10 @@
   typedef int RequestID;
 
   URLDataManagerBackend();
+
+  URLDataManagerBackend(const URLDataManagerBackend&) = delete;
+  URLDataManagerBackend& operator=(const URLDataManagerBackend&) = delete;
+
   ~URLDataManagerBackend() override;
 
   static URLDataManagerBackend* GetForBrowserContext(BrowserContext* context);
@@ -87,8 +91,6 @@
   // and detached from the backend. This allows outstanding asynchronous queries
   // to be served and routed to the backend to which they were original issued.
   base::WeakPtrFactory<URLDataManagerBackend> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(URLDataManagerBackend);
 };
 
 }  // namespace content
diff --git a/content/browser/worker_host/dedicated_worker_host.h b/content/browser/worker_host/dedicated_worker_host.h
index b3839b51..8df5191 100644
--- a/content/browser/worker_host/dedicated_worker_host.h
+++ b/content/browser/worker_host/dedicated_worker_host.h
@@ -72,6 +72,10 @@
       base::WeakPtr<CrossOriginEmbedderPolicyReporter> creator_coep_reporter,
       base::WeakPtr<CrossOriginEmbedderPolicyReporter> ancestor_coep_reporter,
       mojo::PendingReceiver<blink::mojom::DedicatedWorkerHost> host);
+
+  DedicatedWorkerHost(const DedicatedWorkerHost&) = delete;
+  DedicatedWorkerHost& operator=(const DedicatedWorkerHost&) = delete;
+
   ~DedicatedWorkerHost() final;
 
   void BindBrowserInterfaceBrokerReceiver(
@@ -318,8 +322,6 @@
   CodeCacheHostImpl::ReceiverSet code_cache_host_receivers_;
 
   base::WeakPtrFactory<DedicatedWorkerHost> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(DedicatedWorkerHost);
 };
 
 }  // namespace content
diff --git a/content/browser/worker_host/dedicated_worker_host_factory_impl.h b/content/browser/worker_host/dedicated_worker_host_factory_impl.h
index 4f96a57..e900371e 100644
--- a/content/browser/worker_host/dedicated_worker_host_factory_impl.h
+++ b/content/browser/worker_host/dedicated_worker_host_factory_impl.h
@@ -35,6 +35,12 @@
       const network::CrossOriginEmbedderPolicy& cross_origin_embedder_policy,
       base::WeakPtr<CrossOriginEmbedderPolicyReporter> creator_coep_reporter,
       base::WeakPtr<CrossOriginEmbedderPolicyReporter> ancestor_coep_reporter);
+
+  DedicatedWorkerHostFactoryImpl(const DedicatedWorkerHostFactoryImpl&) =
+      delete;
+  DedicatedWorkerHostFactoryImpl& operator=(
+      const DedicatedWorkerHostFactoryImpl&) = delete;
+
   ~DedicatedWorkerHostFactoryImpl() override;
 
   // blink::mojom::DedicatedWorkerHostFactory:
@@ -75,8 +81,6 @@
 
   base::WeakPtr<CrossOriginEmbedderPolicyReporter> creator_coep_reporter_;
   base::WeakPtr<CrossOriginEmbedderPolicyReporter> ancestor_coep_reporter_;
-
-  DISALLOW_COPY_AND_ASSIGN(DedicatedWorkerHostFactoryImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/worker_host/mock_shared_worker.h b/content/browser/worker_host/mock_shared_worker.h
index 6c2fcfb..82f74f7 100644
--- a/content/browser/worker_host/mock_shared_worker.h
+++ b/content/browser/worker_host/mock_shared_worker.h
@@ -39,6 +39,10 @@
  public:
   explicit MockSharedWorker(
       mojo::PendingReceiver<blink::mojom::SharedWorker> receiver);
+
+  MockSharedWorker(const MockSharedWorker&) = delete;
+  MockSharedWorker& operator=(const MockSharedWorker&) = delete;
+
   ~MockSharedWorker() override;
 
   bool CheckReceivedConnect(int* connection_request_id,
@@ -57,14 +61,16 @@
   mojo::Receiver<blink::mojom::SharedWorker> receiver_;
   std::queue<std::pair<int, blink::MessagePortChannel>> connect_received_;
   bool terminate_received_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(MockSharedWorker);
 };
 
 class MockSharedWorkerFactory : public blink::mojom::SharedWorkerFactory {
  public:
   explicit MockSharedWorkerFactory(
       mojo::PendingReceiver<blink::mojom::SharedWorkerFactory> receiver);
+
+  MockSharedWorkerFactory(const MockSharedWorkerFactory&) = delete;
+  MockSharedWorkerFactory& operator=(const MockSharedWorkerFactory&) = delete;
+
   ~MockSharedWorkerFactory() override;
 
   bool CheckReceivedCreateSharedWorker(
@@ -120,13 +126,15 @@
 
   mojo::Receiver<blink::mojom::SharedWorkerFactory> receiver_;
   std::unique_ptr<CreateParams> create_params_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockSharedWorkerFactory);
 };
 
 class MockSharedWorkerClient : public blink::mojom::SharedWorkerClient {
  public:
   MockSharedWorkerClient();
+
+  MockSharedWorkerClient(const MockSharedWorkerClient&) = delete;
+  MockSharedWorkerClient& operator=(const MockSharedWorkerClient&) = delete;
+
   ~MockSharedWorkerClient() override;
 
   void Bind(mojo::PendingReceiver<blink::mojom::SharedWorkerClient> receiver);
@@ -159,8 +167,6 @@
   blink::mojom::WebFeature on_feature_used_feature_ =
       blink::mojom::WebFeature();
   bool on_script_load_failed_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(MockSharedWorkerClient);
 };
 
 }  // namespace content
diff --git a/content/browser/worker_host/shared_worker_content_settings_proxy_impl.h b/content/browser/worker_host/shared_worker_content_settings_proxy_impl.h
index 47d86c1..94617580 100644
--- a/content/browser/worker_host/shared_worker_content_settings_proxy_impl.h
+++ b/content/browser/worker_host/shared_worker_content_settings_proxy_impl.h
@@ -30,6 +30,11 @@
       SharedWorkerHost* owner,
       mojo::PendingReceiver<blink::mojom::WorkerContentSettingsProxy> receiver);
 
+  SharedWorkerContentSettingsProxyImpl(
+      const SharedWorkerContentSettingsProxyImpl&) = delete;
+  SharedWorkerContentSettingsProxyImpl& operator=(
+      const SharedWorkerContentSettingsProxyImpl&) = delete;
+
   ~SharedWorkerContentSettingsProxyImpl() override;
 
   // blink::mojom::WorkerContentSettingsProxy implementation.
@@ -43,8 +48,6 @@
   const url::Origin origin_;
   SharedWorkerHost* owner_;
   mojo::Receiver<blink::mojom::WorkerContentSettingsProxy> receiver_;
-
-  DISALLOW_COPY_AND_ASSIGN(SharedWorkerContentSettingsProxyImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/worker_host/shared_worker_host.cc b/content/browser/worker_host/shared_worker_host.cc
index b6effd1..a0d08a6 100644
--- a/content/browser/worker_host/shared_worker_host.cc
+++ b/content/browser/worker_host/shared_worker_host.cc
@@ -61,6 +61,9 @@
         owner, &pause_on_start_, &dev_tools_token_);
   }
 
+  ScopedDevToolsHandle(const ScopedDevToolsHandle&) = delete;
+  ScopedDevToolsHandle& operator=(const ScopedDevToolsHandle&) = delete;
+
   ~ScopedDevToolsHandle() {
     SharedWorkerDevToolsManager::GetInstance()->WorkerDestroyed(owner_);
   }
@@ -88,8 +91,6 @@
   bool pause_on_start_;
 
   base::UnguessableToken dev_tools_token_;
-
-  DISALLOW_COPY_AND_ASSIGN(ScopedDevToolsHandle);
 };
 
 class SharedWorkerHost::ScopedProcessHostRef {
diff --git a/content/browser/worker_host/shared_worker_host.h b/content/browser/worker_host/shared_worker_host.h
index d0665fc4..6e1930d 100644
--- a/content/browser/worker_host/shared_worker_host.h
+++ b/content/browser/worker_host/shared_worker_host.h
@@ -76,6 +76,10 @@
                        content_security_policies,
                    const network::CrossOriginEmbedderPolicy&
                        creator_cross_origin_embedder_policy);
+
+  SharedWorkerHost(const SharedWorkerHost&) = delete;
+  SharedWorkerHost& operator=(const SharedWorkerHost&) = delete;
+
   ~SharedWorkerHost() override;
 
   // Returns the RenderProcessHost where this shared worker lives.
@@ -322,8 +326,6 @@
   std::unique_ptr<CrossOriginEmbedderPolicyReporter> coep_reporter_;
 
   base::WeakPtrFactory<SharedWorkerHost> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(SharedWorkerHost);
 };
 
 }  // namespace content
diff --git a/content/browser/worker_host/shared_worker_service_impl.h b/content/browser/worker_host/shared_worker_service_impl.h
index 331650cd..e1f41cda 100644
--- a/content/browser/worker_host/shared_worker_service_impl.h
+++ b/content/browser/worker_host/shared_worker_service_impl.h
@@ -46,6 +46,10 @@
       StoragePartitionImpl* storage_partition,
       scoped_refptr<ServiceWorkerContextWrapper> service_worker_context,
       scoped_refptr<ChromeAppCacheService> appcache_service);
+
+  SharedWorkerServiceImpl(const SharedWorkerServiceImpl&) = delete;
+  SharedWorkerServiceImpl& operator=(const SharedWorkerServiceImpl&) = delete;
+
   ~SharedWorkerServiceImpl() override;
 
   // SharedWorkerService implementation.
@@ -151,8 +155,6 @@
   base::ObserverList<Observer> observers_;
 
   base::WeakPtrFactory<SharedWorkerServiceImpl> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(SharedWorkerServiceImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/worker_host/shared_worker_service_impl_unittest.cc b/content/browser/worker_host/shared_worker_service_impl_unittest.cc
index 2257246d..34d27dac 100644
--- a/content/browser/worker_host/shared_worker_service_impl_unittest.cc
+++ b/content/browser/worker_host/shared_worker_service_impl_unittest.cc
@@ -1208,6 +1208,12 @@
 class TestSharedWorkerServiceObserver : public SharedWorkerService::Observer {
  public:
   TestSharedWorkerServiceObserver() = default;
+
+  TestSharedWorkerServiceObserver(const TestSharedWorkerServiceObserver&) =
+      delete;
+  TestSharedWorkerServiceObserver& operator=(
+      const TestSharedWorkerServiceObserver&) = delete;
+
   ~TestSharedWorkerServiceObserver() override = default;
 
   // SharedWorkerService::Observer:
@@ -1255,8 +1261,6 @@
  private:
   base::flat_map<blink::SharedWorkerToken, std::set<GlobalRenderFrameHostId>>
       shared_workers_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestSharedWorkerServiceObserver);
 };
 
 TEST_F(SharedWorkerServiceImplTest, Observer) {
diff --git a/content/browser/worker_host/test_shared_worker_service_impl.h b/content/browser/worker_host/test_shared_worker_service_impl.h
index db40e51..9990143 100644
--- a/content/browser/worker_host/test_shared_worker_service_impl.h
+++ b/content/browser/worker_host/test_shared_worker_service_impl.h
@@ -24,6 +24,11 @@
       StoragePartitionImpl* storage_partition,
       scoped_refptr<ServiceWorkerContextWrapper> service_worker_context,
       scoped_refptr<ChromeAppCacheService> appcache_service);
+
+  TestSharedWorkerServiceImpl(const TestSharedWorkerServiceImpl&) = delete;
+  TestSharedWorkerServiceImpl& operator=(const TestSharedWorkerServiceImpl&) =
+      delete;
+
   ~TestSharedWorkerServiceImpl() override;
 
   void TerminateAllWorkers(base::OnceClosure callback);
@@ -43,8 +48,6 @@
   // Holds all remote shared workers whose host have been deleted and are now
   // expected to soon cause the disconnection handler to fire.
   mojo::RemoteSet<blink::mojom::SharedWorker> workers_awaiting_disconnection_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestSharedWorkerServiceImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/worker_host/worker_script_loader.h b/content/browser/worker_host/worker_script_loader.h
index d748293..5f7cb67 100644
--- a/content/browser/worker_host/worker_script_loader.h
+++ b/content/browser/worker_host/worker_script_loader.h
@@ -81,6 +81,10 @@
       scoped_refptr<network::SharedURLLoaderFactory> default_loader_factory,
       const net::MutableNetworkTrafficAnnotationTag& traffic_annotation,
       ukm::SourceId ukm_source_id);
+
+  WorkerScriptLoader(const WorkerScriptLoader&) = delete;
+  WorkerScriptLoader& operator=(const WorkerScriptLoader&) = delete;
+
   ~WorkerScriptLoader() override;
 
   // network::mojom::URLLoader:
@@ -171,8 +175,6 @@
   bool completed_ = false;
 
   base::WeakPtrFactory<WorkerScriptLoader> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(WorkerScriptLoader);
 };
 
 }  // namespace content
diff --git a/content/browser/worker_host/worker_script_loader_factory.h b/content/browser/worker_host/worker_script_loader_factory.h
index 978fa92..08f7396 100644
--- a/content/browser/worker_host/worker_script_loader_factory.h
+++ b/content/browser/worker_host/worker_script_loader_factory.h
@@ -54,6 +54,11 @@
       const BrowserContextGetter& browser_context_getter,
       scoped_refptr<network::SharedURLLoaderFactory> loader_factory,
       ukm::SourceId worker_source_id);
+
+  WorkerScriptLoaderFactory(const WorkerScriptLoaderFactory&) = delete;
+  WorkerScriptLoaderFactory& operator=(const WorkerScriptLoaderFactory&) =
+      delete;
+
   ~WorkerScriptLoaderFactory() override;
 
   // network::mojom::URLLoaderFactory:
@@ -84,8 +89,6 @@
   // mojo::PendingReceiver<URLLoader>, and invalidated after receiver completion
   // or failure.
   base::WeakPtr<WorkerScriptLoader> script_loader_;
-
-  DISALLOW_COPY_AND_ASSIGN(WorkerScriptLoaderFactory);
 };
 
 }  // namespace content
diff --git a/content/browser/xr/service/vr_service_impl.h b/content/browser/xr/service/vr_service_impl.h
index 9d01d388..987c738 100644
--- a/content/browser/xr/service/vr_service_impl.h
+++ b/content/browser/xr/service/vr_service_impl.h
@@ -46,6 +46,9 @@
   // Constructor for tests.
   explicit VRServiceImpl(base::PassKey<XRRuntimeManagerTest>);
 
+  VRServiceImpl(const VRServiceImpl&) = delete;
+  VRServiceImpl& operator=(const VRServiceImpl&) = delete;
+
   ~VRServiceImpl() override;
 
   static void Create(content::RenderFrameHost* render_frame_host,
@@ -183,8 +186,6 @@
   std::vector<XrCompatibleCallback> xr_compatible_callbacks_;
 
   base::WeakPtrFactory<VRServiceImpl> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(VRServiceImpl);
 };
 
 }  // namespace content
diff --git a/content/browser/zygote_host/zygote_browsertest.cc b/content/browser/zygote_host/zygote_browsertest.cc
index 7cde98d..4ca23c82 100644
--- a/content/browser/zygote_host/zygote_browsertest.cc
+++ b/content/browser/zygote_host/zygote_browsertest.cc
@@ -27,10 +27,11 @@
 class LinuxZygoteBrowserTest : public ContentBrowserTest {
  public:
   LinuxZygoteBrowserTest() = default;
-  ~LinuxZygoteBrowserTest() override = default;
 
- private:
-  DISALLOW_COPY_AND_ASSIGN(LinuxZygoteBrowserTest);
+  LinuxZygoteBrowserTest(const LinuxZygoteBrowserTest&) = delete;
+  LinuxZygoteBrowserTest& operator=(const LinuxZygoteBrowserTest&) = delete;
+
+  ~LinuxZygoteBrowserTest() override = default;
 };
 
 // https://crbug.com/638303
@@ -69,6 +70,12 @@
 class LinuxZygoteDisabledBrowserTest : public ContentBrowserTest {
  public:
   LinuxZygoteDisabledBrowserTest() = default;
+
+  LinuxZygoteDisabledBrowserTest(const LinuxZygoteDisabledBrowserTest&) =
+      delete;
+  LinuxZygoteDisabledBrowserTest& operator=(
+      const LinuxZygoteDisabledBrowserTest&) = delete;
+
   ~LinuxZygoteDisabledBrowserTest() override = default;
 
  protected:
@@ -77,9 +84,6 @@
     command_line->AppendSwitch(switches::kNoZygote);
     command_line->AppendSwitch(sandbox::policy::switches::kNoSandbox);
   }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(LinuxZygoteDisabledBrowserTest);
 };
 
 // https://crbug.com/712779
diff --git a/content/child/browser_font_resource_trusted.cc b/content/child/browser_font_resource_trusted.cc
index e26b7ad4..7009f612 100644
--- a/content/child/browser_font_resource_trusted.cc
+++ b/content/child/browser_font_resource_trusted.cc
@@ -77,6 +77,9 @@
     }
   }
 
+  TextRunCollection(const TextRunCollection&) = delete;
+  TextRunCollection& operator=(const TextRunCollection&) = delete;
+
   ~TextRunCollection() {
     if (bidi_)
       ubidi_close(bidi_);
@@ -115,8 +118,6 @@
   // When the content specifies override_direction (bidi_ is null) then this
   // will contain the single text run for WebKit.
   WebTextRun override_run_;
-
-  DISALLOW_COPY_AND_ASSIGN(TextRunCollection);
 };
 
 bool PPTextRunToWebTextRun(const PP_BrowserFont_Trusted_TextRun& text,
diff --git a/content/child/child_histogram_fetcher_impl.h b/content/child/child_histogram_fetcher_impl.h
index 3f4f102c..ee10a65e 100644
--- a/content/child/child_histogram_fetcher_impl.h
+++ b/content/child/child_histogram_fetcher_impl.h
@@ -39,6 +39,11 @@
 class ChildHistogramFetcherImpl : public content::mojom::ChildHistogramFetcher {
  public:
   ChildHistogramFetcherImpl();
+
+  ChildHistogramFetcherImpl(const ChildHistogramFetcherImpl&) = delete;
+  ChildHistogramFetcherImpl& operator=(const ChildHistogramFetcherImpl&) =
+      delete;
+
   ~ChildHistogramFetcherImpl() override;
 
  private:
@@ -58,8 +63,6 @@
   // Prepares histogram deltas for transmission.
   std::unique_ptr<base::HistogramDeltaSerialization>
       histogram_delta_serialization_;
-
-  DISALLOW_COPY_AND_ASSIGN(ChildHistogramFetcherImpl);
 };
 
 }  // namespace content
diff --git a/content/child/child_process.h b/content/child/child_process.h
index 31d3c0b..1118552 100644
--- a/content/child/child_process.h
+++ b/content/child/child_process.h
@@ -45,6 +45,10 @@
       const std::string& thread_pool_name = "ContentChild",
       std::unique_ptr<base::ThreadPoolInstance::InitParams>
           thread_pool_init_params = nullptr);
+
+  ChildProcess(const ChildProcess&) = delete;
+  ChildProcess& operator=(const ChildProcess&) = delete;
+
   virtual ~ChildProcess();
 
   // May be NULL if the main thread hasn't been set explicitly.
@@ -103,8 +107,6 @@
 
   // Whether this ChildProcess initialized ThreadPoolInstance.
   bool initialized_thread_pool_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(ChildProcess);
 };
 
 }  // namespace content
diff --git a/content/child/child_process_sandbox_support_impl_linux.h b/content/child/child_process_sandbox_support_impl_linux.h
index 99eb3ef..37e6e4e9 100644
--- a/content/child/child_process_sandbox_support_impl_linux.h
+++ b/content/child/child_process_sandbox_support_impl_linux.h
@@ -29,6 +29,10 @@
 class WebSandboxSupportLinux : public blink::WebSandboxSupport {
  public:
   explicit WebSandboxSupportLinux(sk_sp<font_service::FontLoader> font_loader);
+
+  WebSandboxSupportLinux(const WebSandboxSupportLinux&) = delete;
+  WebSandboxSupportLinux& operator=(const WebSandboxSupportLinux&) = delete;
+
   ~WebSandboxSupportLinux() override;
 
   // |fallback_font| will be filled with a font family which provides glyphs for
@@ -69,8 +73,6 @@
       GUARDED_BY(lock_);
 
   sk_sp<font_service::FontLoader> font_loader_;
-
-  DISALLOW_COPY_AND_ASSIGN(WebSandboxSupportLinux);
 };
 
 }  // namespace content
diff --git a/content/child/child_process_sandbox_support_impl_mac.h b/content/child/child_process_sandbox_support_impl_mac.h
index 96c9cbc..e6907c4f 100644
--- a/content/child/child_process_sandbox_support_impl_mac.h
+++ b/content/child/child_process_sandbox_support_impl_mac.h
@@ -22,6 +22,10 @@
 class WebSandboxSupportMac : public blink::WebSandboxSupport {
  public:
   WebSandboxSupportMac();
+
+  WebSandboxSupportMac(const WebSandboxSupportMac&) = delete;
+  WebSandboxSupportMac& operator=(const WebSandboxSupportMac&) = delete;
+
   ~WebSandboxSupportMac() override;
 
   // blink::WebSandboxSupport:
@@ -36,8 +40,6 @@
 
   mojo::Remote<mojom::SandboxSupportMac> sandbox_support_;
   base::ReadOnlySharedMemoryMapping color_map_;
-
-  DISALLOW_COPY_AND_ASSIGN(WebSandboxSupportMac);
 };
 
 }  // namespace content
diff --git a/content/child/child_thread_impl.h b/content/child/child_thread_impl.h
index 5253934..efda49c 100644
--- a/content/child/child_thread_impl.h
+++ b/content/child/child_thread_impl.h
@@ -73,6 +73,10 @@
   // Allow to be used for single-process mode and for in process gpu mode via
   // options.
   ChildThreadImpl(base::RepeatingClosure quit_closure, const Options& options);
+
+  ChildThreadImpl(const ChildThreadImpl&) = delete;
+  ChildThreadImpl& operator=(const ChildThreadImpl&) = delete;
+
   // ChildProcess::main_thread() is reset after Shutdown(), and before the
   // destructor, so any subsystem that relies on ChildProcess::main_thread()
   // must be terminated before Shutdown returns. In particular, if a subsystem
@@ -238,8 +242,6 @@
   scoped_refptr<IOThreadState> io_thread_state_;
 
   base::WeakPtrFactory<ChildThreadImpl> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(ChildThreadImpl);
 };
 
 struct ChildThreadImpl::Options {
diff --git a/content/child/font_warmup_win.h b/content/child/font_warmup_win.h
index d62ce5f..2a12a87 100644
--- a/content/child/font_warmup_win.h
+++ b/content/child/font_warmup_win.h
@@ -18,13 +18,13 @@
 
 class GdiFontPatchData {
  public:
+  GdiFontPatchData(const GdiFontPatchData&) = delete;
+  GdiFontPatchData& operator=(const GdiFontPatchData&) = delete;
+
   virtual ~GdiFontPatchData() {}
 
  protected:
   GdiFontPatchData() {}
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(GdiFontPatchData);
 };
 
 // Hook a module's imported GDI font functions to reimplement font enumeration
diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc
index 2fa44f78..15b54df 100644
--- a/content/child/runtime_features.cc
+++ b/content/child/runtime_features.cc
@@ -287,8 +287,6 @@
     {wf::EnableSharedArrayBufferOnDesktop,
      features::kSharedArrayBufferOnDesktop},
     {wf::EnableSharedAutofill, autofill::features::kAutofillAcrossIframes},
-    {wf::EnableSignedExchangePrefetchCacheForNavigations,
-     features::kSignedExchangePrefetchCacheForNavigations},
     {wf::EnableSignedExchangeSubresourcePrefetch,
      features::kSignedExchangeSubresourcePrefetch},
     {wf::EnableSkipTouchEventFilter, blink::features::kSkipTouchEventFilter},
diff --git a/content/child/scoped_child_process_reference.h b/content/child/scoped_child_process_reference.h
index 0c35385..4abdde6 100644
--- a/content/child/scoped_child_process_reference.h
+++ b/content/child/scoped_child_process_reference.h
@@ -20,6 +20,11 @@
 class ScopedChildProcessReference {
  public:
   ScopedChildProcessReference();
+
+  ScopedChildProcessReference(const ScopedChildProcessReference&) = delete;
+  ScopedChildProcessReference& operator=(const ScopedChildProcessReference&) =
+      delete;
+
   ~ScopedChildProcessReference();
 
   // Releases the process reference after |delay|. Once this is called
@@ -29,8 +34,6 @@
 
  private:
   bool has_reference_;
-
-  DISALLOW_COPY_AND_ASSIGN(ScopedChildProcessReference);
 };
 
 }  // namespace content
diff --git a/content/common/child_process_host_impl.h b/content/common/child_process_host_impl.h
index f13405b..a785b33 100644
--- a/content/common/child_process_host_impl.h
+++ b/content/common/child_process_host_impl.h
@@ -39,6 +39,9 @@
       public IPC::Listener,
       public mojom::ChildProcessHost {
  public:
+  ChildProcessHostImpl(const ChildProcessHostImpl&) = delete;
+  ChildProcessHostImpl& operator=(const ChildProcessHostImpl&) = delete;
+
   ~ChildProcessHostImpl() override;
 
   // Returns a unique ID to identify a child process. On construction, this
@@ -122,8 +125,6 @@
   // thread, we don't have a IPC::ChannelProxy and so we manage filters
   // manually.
   std::vector<scoped_refptr<IPC::MessageFilter> > filters_;
-
-  DISALLOW_COPY_AND_ASSIGN(ChildProcessHostImpl);
 };
 
 }  // namespace content
diff --git a/content/common/input/actions_parser.h b/content/common/input/actions_parser.h
index 50e74c5..d7a907e 100644
--- a/content/common/input/actions_parser.h
+++ b/content/common/input/actions_parser.h
@@ -41,6 +41,10 @@
 class CONTENT_EXPORT ActionsParser {
  public:
   explicit ActionsParser(base::Value value);
+
+  ActionsParser(const ActionsParser&) = delete;
+  ActionsParser& operator=(const ActionsParser&) = delete;
+
   ~ActionsParser();
   bool Parse();
   const std::string& error_message() const { return error_message_; }
@@ -103,8 +107,6 @@
 
   base::Value action_sequence_list_;
   std::set<std::string> pointer_name_set_;
-
-  DISALLOW_COPY_AND_ASSIGN(ActionsParser);
 };
 
 }  // namespace content
diff --git a/content/common/input/gesture_event_stream_validator.h b/content/common/input/gesture_event_stream_validator.h
index 5d8ae8f3..8a3fe73 100644
--- a/content/common/input/gesture_event_stream_validator.h
+++ b/content/common/input/gesture_event_stream_validator.h
@@ -20,6 +20,11 @@
 class CONTENT_EXPORT GestureEventStreamValidator {
  public:
   GestureEventStreamValidator();
+
+  GestureEventStreamValidator(const GestureEventStreamValidator&) = delete;
+  GestureEventStreamValidator& operator=(const GestureEventStreamValidator&) =
+      delete;
+
   ~GestureEventStreamValidator();
 
   // If |event| is valid for the current stream, returns true.
@@ -30,8 +35,6 @@
   bool scrolling_;
   bool pinching_;
   bool waiting_for_tap_end_;
-
-  DISALLOW_COPY_AND_ASSIGN(GestureEventStreamValidator);
 };
 
 }  // namespace content
diff --git a/content/common/input/input_event_stream_validator.h b/content/common/input/input_event_stream_validator.h
index 6bf8625..6e58cec7 100644
--- a/content/common/input/input_event_stream_validator.h
+++ b/content/common/input/input_event_stream_validator.h
@@ -22,6 +22,11 @@
 class InputEventStreamValidator {
  public:
   InputEventStreamValidator();
+
+  InputEventStreamValidator(const InputEventStreamValidator&) = delete;
+  InputEventStreamValidator& operator=(const InputEventStreamValidator&) =
+      delete;
+
   ~InputEventStreamValidator();
 
   void Validate(const blink::WebInputEvent&);
@@ -34,8 +39,6 @@
   TouchEventStreamValidator touch_validator_;
   std::string error_msg_;
   const bool enabled_;
-
-  DISALLOW_COPY_AND_ASSIGN(InputEventStreamValidator);
 };
 
 }  // namespace content
diff --git a/content/common/input/touch_event_stream_validator.h b/content/common/input/touch_event_stream_validator.h
index 278f288..6690b08 100644
--- a/content/common/input/touch_event_stream_validator.h
+++ b/content/common/input/touch_event_stream_validator.h
@@ -17,6 +17,11 @@
 class CONTENT_EXPORT TouchEventStreamValidator {
  public:
   TouchEventStreamValidator();
+
+  TouchEventStreamValidator(const TouchEventStreamValidator&) = delete;
+  TouchEventStreamValidator& operator=(const TouchEventStreamValidator&) =
+      delete;
+
   ~TouchEventStreamValidator();
 
   // If |event| is valid for the current stream, returns true.
@@ -25,8 +30,6 @@
 
  private:
   blink::WebTouchEvent previous_event_;
-
-  DISALLOW_COPY_AND_ASSIGN(TouchEventStreamValidator);
 };
 
 }  // namespace content
diff --git a/content/gpu/gpu_child_thread.h b/content/gpu/gpu_child_thread.h
index ea5e61b6..8e58f86b 100644
--- a/content/gpu/gpu_child_thread.h
+++ b/content/gpu/gpu_child_thread.h
@@ -49,6 +49,9 @@
   GpuChildThread(const InProcessChildThreadParams& params,
                  std::unique_ptr<gpu::GpuInit> gpu_init);
 
+  GpuChildThread(const GpuChildThread&) = delete;
+  GpuChildThread& operator=(const GpuChildThread&) = delete;
+
   ~GpuChildThread() override;
 
   void Init(const base::Time& process_start_time);
@@ -101,8 +104,6 @@
   std::unique_ptr<base::MemoryPressureListener> memory_pressure_listener_;
 
   base::WeakPtrFactory<GpuChildThread> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(GpuChildThread);
 };
 
 }  // namespace content
diff --git a/content/gpu/gpu_main.cc b/content/gpu/gpu_main.cc
index d5bb341..51b004f 100644
--- a/content/gpu/gpu_main.cc
+++ b/content/gpu/gpu_main.cc
@@ -119,6 +119,10 @@
 class ContentSandboxHelper : public gpu::GpuSandboxHelper {
  public:
   ContentSandboxHelper() {}
+
+  ContentSandboxHelper(const ContentSandboxHelper&) = delete;
+  ContentSandboxHelper& operator=(const ContentSandboxHelper&) = delete;
+
   ~ContentSandboxHelper() override {}
 
 #if defined(OS_WIN)
@@ -180,8 +184,6 @@
 #if defined(OS_WIN)
   const sandbox::SandboxInterfaceInfo* sandbox_info_ = nullptr;
 #endif
-
-  DISALLOW_COPY_AND_ASSIGN(ContentSandboxHelper);
 };
 
 }  // namespace
diff --git a/content/gpu/gpu_process.h b/content/gpu/gpu_process.h
index dbcf5775..50cf891 100644
--- a/content/gpu/gpu_process.h
+++ b/content/gpu/gpu_process.h
@@ -13,10 +13,11 @@
 class GpuProcess : public ChildProcess {
  public:
   explicit GpuProcess(base::ThreadPriority io_thread_priority);
-  ~GpuProcess() override;
 
- private:
-  DISALLOW_COPY_AND_ASSIGN(GpuProcess);
+  GpuProcess(const GpuProcess&) = delete;
+  GpuProcess& operator=(const GpuProcess&) = delete;
+
+  ~GpuProcess() override;
 };
 
 }
diff --git a/content/gpu/gpu_service_factory.h b/content/gpu/gpu_service_factory.h
index fc174fe..2d78069a 100644
--- a/content/gpu/gpu_service_factory.h
+++ b/content/gpu/gpu_service_factory.h
@@ -37,6 +37,10 @@
       base::WeakPtr<media::MediaGpuChannelManager> media_gpu_channel_manager,
       gpu::GpuMemoryBufferFactory* gpu_memory_buffer_factory,
       media::AndroidOverlayMojoFactoryCB android_overlay_factory_cb);
+
+  GpuServiceFactory(const GpuServiceFactory&) = delete;
+  GpuServiceFactory& operator=(const GpuServiceFactory&) = delete;
+
   ~GpuServiceFactory();
 
   void RunMediaService(
@@ -57,8 +61,6 @@
   gpu::GpuDriverBugWorkarounds gpu_workarounds_;
   gpu::GpuFeatureInfo gpu_feature_info_;
 #endif
-
-  DISALLOW_COPY_AND_ASSIGN(GpuServiceFactory);
 };
 
 }  // namespace content
diff --git a/content/gpu/in_process_gpu_thread.h b/content/gpu/in_process_gpu_thread.h
index 19a47904..e682fb9 100644
--- a/content/gpu/in_process_gpu_thread.h
+++ b/content/gpu/in_process_gpu_thread.h
@@ -21,6 +21,10 @@
  public:
   explicit InProcessGpuThread(const InProcessChildThreadParams& params,
                               const gpu::GpuPreferences& gpu_preferences);
+
+  InProcessGpuThread(const InProcessGpuThread&) = delete;
+  InProcessGpuThread& operator=(const InProcessGpuThread&) = delete;
+
   ~InProcessGpuThread() override;
 
  protected:
@@ -34,8 +38,6 @@
   GpuProcess* gpu_process_;
 
   gpu::GpuPreferences gpu_preferences_;
-
-  DISALLOW_COPY_AND_ASSIGN(InProcessGpuThread);
 };
 
 CONTENT_EXPORT base::Thread* CreateInProcessGpuThread(
diff --git a/content/ppapi_plugin/plugin_process_dispatcher.h b/content/ppapi_plugin/plugin_process_dispatcher.h
index b669ac3..06579ad 100644
--- a/content/ppapi_plugin/plugin_process_dispatcher.h
+++ b/content/ppapi_plugin/plugin_process_dispatcher.h
@@ -19,12 +19,14 @@
   PluginProcessDispatcher(PP_GetInterface_Func get_interface,
                           const ppapi::PpapiPermissions& permissions,
                           bool incognito);
+
+  PluginProcessDispatcher(const PluginProcessDispatcher&) = delete;
+  PluginProcessDispatcher& operator=(const PluginProcessDispatcher&) = delete;
+
   ~PluginProcessDispatcher() override;
 
  private:
   ScopedChildProcessReference process_ref_;
-
-  DISALLOW_COPY_AND_ASSIGN(PluginProcessDispatcher);
 };
 
 }  // namespace content
diff --git a/content/ppapi_plugin/ppapi_blink_platform_impl.h b/content/ppapi_plugin/ppapi_blink_platform_impl.h
index 76f7beb..e24b6e3 100644
--- a/content/ppapi_plugin/ppapi_blink_platform_impl.h
+++ b/content/ppapi_plugin/ppapi_blink_platform_impl.h
@@ -23,6 +23,10 @@
 class PpapiBlinkPlatformImpl : public BlinkPlatformImpl {
  public:
   PpapiBlinkPlatformImpl();
+
+  PpapiBlinkPlatformImpl(const PpapiBlinkPlatformImpl&) = delete;
+  PpapiBlinkPlatformImpl& operator=(const PpapiBlinkPlatformImpl&) = delete;
+
   ~PpapiBlinkPlatformImpl() override;
 
   // Shutdown must be called just prior to shutting down blink.
@@ -43,8 +47,6 @@
 #if defined(OS_LINUX) || defined(OS_CHROMEOS)
   sk_sp<font_service::FontLoader> font_loader_;
 #endif
-
-  DISALLOW_COPY_AND_ASSIGN(PpapiBlinkPlatformImpl);
 };
 
 }  // namespace content
diff --git a/content/public/browser/android/synchronous_compositor.h b/content/public/browser/android/synchronous_compositor.h
index 3ad8fb2..9a9052bd 100644
--- a/content/public/browser/android/synchronous_compositor.h
+++ b/content/public/browser/android/synchronous_compositor.h
@@ -50,6 +50,10 @@
 
   struct Frame {
     Frame();
+
+    Frame(const Frame&) = delete;
+    Frame& operator=(const Frame&) = delete;
+
     ~Frame();
 
     // Movable type.
@@ -61,9 +65,6 @@
     // Invalid if |frame| is nullptr.
     viz::LocalSurfaceId local_surface_id;
     absl::optional<viz::HitTestRegionList> hit_test_region_list;
-
-   private:
-    DISALLOW_COPY_AND_ASSIGN(Frame);
   };
 
   class FrameFuture : public base::RefCountedThreadSafe<FrameFuture> {
diff --git a/content/public/browser/authenticator_request_client_delegate.h b/content/public/browser/authenticator_request_client_delegate.h
index 76eae6e9..0526138 100644
--- a/content/public/browser/authenticator_request_client_delegate.h
+++ b/content/public/browser/authenticator_request_client_delegate.h
@@ -155,6 +155,12 @@
   };
 
   AuthenticatorRequestClientDelegate();
+
+  AuthenticatorRequestClientDelegate(
+      const AuthenticatorRequestClientDelegate&) = delete;
+  AuthenticatorRequestClientDelegate& operator=(
+      const AuthenticatorRequestClientDelegate&) = delete;
+
   ~AuthenticatorRequestClientDelegate() override;
 
   // SetRelyingPartyId sets the RP ID for this request. This is called after
@@ -264,9 +270,6 @@
   void OnSampleCollected(int bio_samples_remaining) override;
   void FinishCollectToken() override;
   void OnRetryUserVerification(int attempts) override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(AuthenticatorRequestClientDelegate);
 };
 
 }  // namespace content
diff --git a/content/public/browser/browser_associated_interface.h b/content/public/browser/browser_associated_interface.h
index 9eb7549..ee19859a 100644
--- a/content/public/browser/browser_associated_interface.h
+++ b/content/public/browser/browser_associated_interface.h
@@ -60,6 +60,10 @@
         base::BindOnce(&InternalState::ClearReceivers, internal_state_));
   }
 
+  BrowserAssociatedInterface(const BrowserAssociatedInterface&) = delete;
+  BrowserAssociatedInterface& operator=(const BrowserAssociatedInterface&) =
+      delete;
+
   ~BrowserAssociatedInterface() { internal_state_->ClearReceivers(); }
 
  private:
@@ -101,8 +105,6 @@
   };
 
   scoped_refptr<InternalState> internal_state_;
-
-  DISALLOW_COPY_AND_ASSIGN(BrowserAssociatedInterface);
 };
 
 }  // namespace content
diff --git a/content/public/browser/client_certificate_delegate.h b/content/public/browser/client_certificate_delegate.h
index 93f0282..893a0f7a 100644
--- a/content/public/browser/client_certificate_delegate.h
+++ b/content/public/browser/client_certificate_delegate.h
@@ -20,6 +20,11 @@
 class ClientCertificateDelegate {
  public:
   ClientCertificateDelegate() {}
+
+  ClientCertificateDelegate(const ClientCertificateDelegate&) = delete;
+  ClientCertificateDelegate& operator=(const ClientCertificateDelegate&) =
+      delete;
+
   virtual ~ClientCertificateDelegate() {}
 
   // Continue the request with |cert| and matching |key|. |cert| may be nullptr
@@ -28,9 +33,6 @@
   virtual void ContinueWithCertificate(
       scoped_refptr<net::X509Certificate> cert,
       scoped_refptr<net::SSLPrivateKey> key) = 0;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(ClientCertificateDelegate);
 };
 
 }  // namespace content
diff --git a/content/public/browser/content_index_context.h b/content/public/browser/content_index_context.h
index 7ab7f7b..9456b95 100644
--- a/content/public/browser/content_index_context.h
+++ b/content/public/browser/content_index_context.h
@@ -35,6 +35,10 @@
   using GetIconsCallback = base::OnceCallback<void(std::vector<SkBitmap>)>;
 
   ContentIndexContext() = default;
+
+  ContentIndexContext(const ContentIndexContext&) = delete;
+  ContentIndexContext& operator=(const ContentIndexContext&) = delete;
+
   virtual ~ContentIndexContext() = default;
 
   // Returns all available icons for the entry identified by
@@ -58,8 +62,6 @@
   virtual void OnUserDeletedItem(int64_t service_worker_registration_id,
                                  const url::Origin& origin,
                                  const std::string& description_id) = 0;
-
-  DISALLOW_COPY_AND_ASSIGN(ContentIndexContext);
 };
 
 }  // namespace content
diff --git a/content/public/browser/content_index_provider.h b/content/public/browser/content_index_provider.h
index d58870e..13ddfb3 100644
--- a/content/public/browser/content_index_provider.h
+++ b/content/public/browser/content_index_provider.h
@@ -49,6 +49,10 @@
 class CONTENT_EXPORT ContentIndexProvider {
  public:
   ContentIndexProvider();
+
+  ContentIndexProvider(const ContentIndexProvider&) = delete;
+  ContentIndexProvider& operator=(const ContentIndexProvider&) = delete;
+
   virtual ~ContentIndexProvider();
 
   // Returns the number of icons needed and their ideal sizes (in pixels).
@@ -62,8 +66,6 @@
   virtual void OnContentDeleted(int64_t service_worker_registration_id,
                                 const url::Origin& origin,
                                 const std::string& description_id) = 0;
-
-  DISALLOW_COPY_AND_ASSIGN(ContentIndexProvider);
 };
 
 }  // namespace content
diff --git a/content/public/browser/devtools_background_services_context.h b/content/public/browser/devtools_background_services_context.h
index 864af759..08ac594 100644
--- a/content/public/browser/devtools_background_services_context.h
+++ b/content/public/browser/devtools_background_services_context.h
@@ -35,6 +35,12 @@
 class CONTENT_EXPORT DevToolsBackgroundServicesContext {
  public:
   DevToolsBackgroundServicesContext() = default;
+
+  DevToolsBackgroundServicesContext(const DevToolsBackgroundServicesContext&) =
+      delete;
+  DevToolsBackgroundServicesContext& operator=(
+      const DevToolsBackgroundServicesContext&) = delete;
+
   virtual ~DevToolsBackgroundServicesContext() = default;
 
   // Whether events related to |service| should be recorded.
@@ -52,9 +58,6 @@
       const std::string& event_name,
       const std::string& instance_id,
       const std::map<std::string, std::string>& event_metadata) = 0;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(DevToolsBackgroundServicesContext);
 };
 
 }  // namespace content
diff --git a/content/public/browser/file_url_loader.h b/content/public/browser/file_url_loader.h
index c37d78a..2b563c2 100644
--- a/content/public/browser/file_url_loader.h
+++ b/content/public/browser/file_url_loader.h
@@ -30,13 +30,14 @@
     : public mojo::FilteredDataSource::Filter {
  public:
   FileURLLoaderObserver() {}
+
+  FileURLLoaderObserver(const FileURLLoaderObserver&) = delete;
+  FileURLLoaderObserver& operator=(const FileURLLoaderObserver&) = delete;
+
   ~FileURLLoaderObserver() override {}
 
   virtual void OnStart() {}
   virtual void OnSeekComplete(int64_t result) {}
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(FileURLLoaderObserver);
 };
 
 // Helper to create a self-owned URLLoader instance which fulfills |request|
diff --git a/content/public/browser/hid_chooser.h b/content/public/browser/hid_chooser.h
index b2b9613c..0df150e 100644
--- a/content/public/browser/hid_chooser.h
+++ b/content/public/browser/hid_chooser.h
@@ -24,10 +24,11 @@
       base::OnceCallback<void(std::vector<device::mojom::HidDeviceInfoPtr>)>;
 
   HidChooser() = default;
-  virtual ~HidChooser() = default;
 
- private:
-  DISALLOW_COPY_AND_ASSIGN(HidChooser);
+  HidChooser(const HidChooser&) = delete;
+  HidChooser& operator=(const HidChooser&) = delete;
+
+  virtual ~HidChooser() = default;
 };
 
 }  // namespace content
diff --git a/content/public/browser/manifest_icon_downloader.h b/content/public/browser/manifest_icon_downloader.h
index f6185db..35a5d9a 100644
--- a/content/public/browser/manifest_icon_downloader.h
+++ b/content/public/browser/manifest_icon_downloader.h
@@ -35,6 +35,10 @@
   using IconFetchCallback = base::OnceCallback<void(const SkBitmap&)>;
 
   ManifestIconDownloader() = delete;
+
+  ManifestIconDownloader(const ManifestIconDownloader&) = delete;
+  ManifestIconDownloader& operator=(const ManifestIconDownloader&) = delete;
+
   ~ManifestIconDownloader() = delete;
 
   // Returns whether the download has started.
@@ -82,8 +86,6 @@
                                     const std::vector<SkBitmap>& bitmaps);
 
   friend class ManifestIconDownloaderTest;
-
-  DISALLOW_COPY_AND_ASSIGN(ManifestIconDownloader);
 };
 
 }  // namespace content
diff --git a/content/public/browser/native_event_processor_observer_mac.h b/content/public/browser/native_event_processor_observer_mac.h
index 5160e22..a3eb219 100644
--- a/content/public/browser/native_event_processor_observer_mac.h
+++ b/content/public/browser/native_event_processor_observer_mac.h
@@ -34,12 +34,17 @@
       base::ObserverList<NativeEventProcessorObserver>::Unchecked*
           observer_list,
       NSEvent* event);
+
+  ScopedNotifyNativeEventProcessorObserver(
+      const ScopedNotifyNativeEventProcessorObserver&) = delete;
+  ScopedNotifyNativeEventProcessorObserver& operator=(
+      const ScopedNotifyNativeEventProcessorObserver&) = delete;
+
   ~ScopedNotifyNativeEventProcessorObserver();
 
  private:
   base::ObserverList<NativeEventProcessorObserver>::Unchecked* observer_list_;
   NSEvent* event_;
-  DISALLOW_COPY_AND_ASSIGN(ScopedNotifyNativeEventProcessorObserver);
 };
 
 }  // namespace content
diff --git a/content/public/browser/notification_registrar.h b/content/public/browser/notification_registrar.h
index 7a0c31d..082e8071 100644
--- a/content/public/browser/notification_registrar.h
+++ b/content/public/browser/notification_registrar.h
@@ -26,6 +26,10 @@
 class CONTENT_EXPORT NotificationRegistrar final {
  public:
   NotificationRegistrar();
+
+  NotificationRegistrar(const NotificationRegistrar&) = delete;
+  NotificationRegistrar& operator=(const NotificationRegistrar&) = delete;
+
   ~NotificationRegistrar();
 
   // Wrappers around NotificationService::[Add|Remove]Observer.
@@ -61,8 +65,6 @@
   RecordVector registered_;
 
   SEQUENCE_CHECKER(sequence_checker_);
-
-  DISALLOW_COPY_AND_ASSIGN(NotificationRegistrar);
 };
 
 }  // namespace content
diff --git a/content/public/browser/overlay_window.h b/content/public/browser/overlay_window.h
index e9362b5..f0284ef 100644
--- a/content/public/browser/overlay_window.h
+++ b/content/public/browser/overlay_window.h
@@ -39,6 +39,10 @@
   };
 
   OverlayWindow() = default;
+
+  OverlayWindow(const OverlayWindow&) = delete;
+  OverlayWindow& operator=(const OverlayWindow&) = delete;
+
   virtual ~OverlayWindow() = default;
 
   // Returns a created OverlayWindow. This is defined in the platform-specific
@@ -67,9 +71,6 @@
   virtual void SetHangUpButtonVisibility(bool is_visible) = 0;
   virtual void SetSurfaceId(const viz::SurfaceId& surface_id) = 0;
   virtual cc::Layer* GetLayerForTesting() = 0;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(OverlayWindow);
 };
 
 }  // namespace content
diff --git a/content/public/browser/permission_type.cc b/content/public/browser/permission_type.cc
index 4d30ef1..b3c4449 100644
--- a/content/public/browser/permission_type.cc
+++ b/content/public/browser/permission_type.cc
@@ -100,8 +100,6 @@
       return PermissionType::FONT_ACCESS;
     case PermissionName::DISPLAY_CAPTURE:
       return PermissionType::DISPLAY_CAPTURE;
-    case PermissionName::FILE_HANDLING:
-      return PermissionType::FILE_HANDLING;
   }
 
   NOTREACHED();
diff --git a/content/public/browser/provision_fetcher_impl.h b/content/public/browser/provision_fetcher_impl.h
index b398a6f2..8560932 100644
--- a/content/public/browser/provision_fetcher_impl.h
+++ b/content/public/browser/provision_fetcher_impl.h
@@ -32,6 +32,10 @@
 
   explicit ProvisionFetcherImpl(
       std::unique_ptr<media::ProvisionFetcher> provision_fetcher);
+
+  ProvisionFetcherImpl(const ProvisionFetcherImpl&) = delete;
+  ProvisionFetcherImpl& operator=(const ProvisionFetcherImpl&) = delete;
+
   ~ProvisionFetcherImpl() override;
 
   // media::mojom::ProvisionFetcher implementation.
@@ -48,8 +52,6 @@
   std::unique_ptr<media::ProvisionFetcher> provision_fetcher_;
 
   base::WeakPtrFactory<ProvisionFetcherImpl> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(ProvisionFetcherImpl);
 };
 
 }  // namespace content
diff --git a/content/public/browser/render_frame_metadata_provider.h b/content/public/browser/render_frame_metadata_provider.h
index a9a8755..0d8b4b0b 100644
--- a/content/public/browser/render_frame_metadata_provider.h
+++ b/content/public/browser/render_frame_metadata_provider.h
@@ -50,15 +50,17 @@
   };
 
   RenderFrameMetadataProvider() = default;
+
+  RenderFrameMetadataProvider(const RenderFrameMetadataProvider&) = delete;
+  RenderFrameMetadataProvider& operator=(const RenderFrameMetadataProvider&) =
+      delete;
+
   virtual ~RenderFrameMetadataProvider() = default;
 
   virtual void AddObserver(Observer* observer) = 0;
   virtual void RemoveObserver(Observer* observer) = 0;
 
   virtual const cc::RenderFrameMetadata& LastRenderFrameMetadata() = 0;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(RenderFrameMetadataProvider);
 };
 
 }  // namespace content
diff --git a/content/public/browser/render_process_host_creation_observer.h b/content/public/browser/render_process_host_creation_observer.h
index c684670..1d4d04932 100644
--- a/content/public/browser/render_process_host_creation_observer.h
+++ b/content/public/browser/render_process_host_creation_observer.h
@@ -16,6 +16,11 @@
 // This can only be used on the UI thread.
 class CONTENT_EXPORT RenderProcessHostCreationObserver {
  public:
+  RenderProcessHostCreationObserver(const RenderProcessHostCreationObserver&) =
+      delete;
+  RenderProcessHostCreationObserver& operator=(
+      const RenderProcessHostCreationObserver&) = delete;
+
   virtual ~RenderProcessHostCreationObserver();
 
   // This method is invoked when the process was successfully launched. Note
@@ -24,9 +29,6 @@
 
  protected:
   RenderProcessHostCreationObserver();
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(RenderProcessHostCreationObserver);
 };
 
 }  // namespace content
diff --git a/content/public/browser/screen_orientation_delegate.h b/content/public/browser/screen_orientation_delegate.h
index 402b9d6..37bcac3 100644
--- a/content/public/browser/screen_orientation_delegate.h
+++ b/content/public/browser/screen_orientation_delegate.h
@@ -18,6 +18,11 @@
 class CONTENT_EXPORT ScreenOrientationDelegate {
  public:
   ScreenOrientationDelegate() {}
+
+  ScreenOrientationDelegate(const ScreenOrientationDelegate&) = delete;
+  ScreenOrientationDelegate& operator=(const ScreenOrientationDelegate&) =
+      delete;
+
   virtual ~ScreenOrientationDelegate() {}
 
   // Returns true if the tab must be fullscreen in order for
@@ -34,9 +39,6 @@
 
   // Unlocks the display, allowing hardware rotation to resume.
   virtual void Unlock(WebContents* web_contents) = 0;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(ScreenOrientationDelegate);
 };
 
 } // namespace content
diff --git a/content/public/browser/serial_chooser.h b/content/public/browser/serial_chooser.h
index 12bfedf..a9f919ca 100644
--- a/content/public/browser/serial_chooser.h
+++ b/content/public/browser/serial_chooser.h
@@ -21,10 +21,11 @@
   using Callback = base::OnceCallback<void(device::mojom::SerialPortInfoPtr)>;
 
   SerialChooser();
-  virtual ~SerialChooser();
 
- private:
-  DISALLOW_COPY_AND_ASSIGN(SerialChooser);
+  SerialChooser(const SerialChooser&) = delete;
+  SerialChooser& operator=(const SerialChooser&) = delete;
+
+  virtual ~SerialChooser();
 };
 
 }  // namespace content
diff --git a/content/public/browser/storage_notification_service.h b/content/public/browser/storage_notification_service.h
index 3eec5ef..9a2009c 100644
--- a/content/public/browser/storage_notification_service.h
+++ b/content/public/browser/storage_notification_service.h
@@ -17,6 +17,11 @@
 class StorageNotificationService {
  public:
   StorageNotificationService() = default;
+
+  StorageNotificationService(const StorageNotificationService&) = delete;
+  StorageNotificationService& operator=(const StorageNotificationService&) =
+      delete;
+
   ~StorageNotificationService() = default;
 
   // This pure virtual function should be implemented in the embedder layer
@@ -25,9 +30,6 @@
   // when QuotaManager determines appropriate to alert the user that the device
   // is in a state of storage pressure.
   virtual void MaybeShowStoragePressureNotification(const url::Origin) = 0;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(StorageNotificationService);
 };
 
 }  // namespace content
diff --git a/content/public/browser/swap_metrics_driver.h b/content/public/browser/swap_metrics_driver.h
index 382f8fdc..70130ba 100644
--- a/content/public/browser/swap_metrics_driver.h
+++ b/content/public/browser/swap_metrics_driver.h
@@ -42,6 +42,9 @@
   // Delegate class that handles the metrics computed by SwapMetricsDriver.
   class CONTENT_EXPORT Delegate {
    public:
+    Delegate(const Delegate&) = delete;
+    Delegate& operator=(const Delegate&) = delete;
+
     virtual ~Delegate();
 
     virtual void OnSwapInCount(uint64_t count, base::TimeDelta interval) {}
@@ -54,9 +57,6 @@
 
    protected:
     Delegate();
-
-   private:
-    DISALLOW_COPY_AND_ASSIGN(Delegate);
   };
 
   virtual ~SwapMetricsDriver() {}
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc
index 5111e2fe..12a7ff7b 100644
--- a/content/public/common/content_features.cc
+++ b/content/public/common/content_features.cc
@@ -710,12 +710,6 @@
 const base::Feature kSharedArrayBufferOnDesktop{
     "SharedArrayBufferOnDesktop", base::FEATURE_DISABLED_BY_DEFAULT};
 
-// Signed HTTP Exchange prefetch cache for navigations
-// https://crbug.com/968427
-const base::Feature kSignedExchangePrefetchCacheForNavigations{
-    "SignedExchangePrefetchCacheForNavigations",
-    base::FEATURE_DISABLED_BY_DEFAULT};
-
 // Signed Exchange Reporting for distributors
 // https://www.chromestatus.com/features/5687904902840320
 const base::Feature kSignedExchangeReportingForDistributors{
diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h
index 5894a4b..7f0f614 100644
--- a/content/public/common/content_features.h
+++ b/content/public/common/content_features.h
@@ -169,8 +169,6 @@
 CONTENT_EXPORT extern const base::Feature kSharedArrayBuffer;
 CONTENT_EXPORT extern const base::Feature kSharedArrayBufferOnDesktop;
 CONTENT_EXPORT extern const base::Feature
-    kSignedExchangePrefetchCacheForNavigations;
-CONTENT_EXPORT extern const base::Feature
     kSignedExchangeReportingForDistributors;
 CONTENT_EXPORT extern const base::Feature kSignedExchangeSubresourcePrefetch;
 CONTENT_EXPORT extern const base::Feature kSignedHTTPExchange;
diff --git a/content/public/common/font_cache_dispatcher_win.h b/content/public/common/font_cache_dispatcher_win.h
index 7b3f760..09bd5080 100644
--- a/content/public/common/font_cache_dispatcher_win.h
+++ b/content/public/common/font_cache_dispatcher_win.h
@@ -21,6 +21,10 @@
 class CONTENT_EXPORT FontCacheDispatcher : public mojom::FontCacheWin {
  public:
   FontCacheDispatcher();
+
+  FontCacheDispatcher(const FontCacheDispatcher&) = delete;
+  FontCacheDispatcher& operator=(const FontCacheDispatcher&) = delete;
+
   ~FontCacheDispatcher() override;
 
   static void Create(mojo::PendingReceiver<mojom::FontCacheWin> receiver);
@@ -30,8 +34,6 @@
   void PreCacheFont(const LOGFONT& log_font,
                     PreCacheFontCallback callback) override;
   void ReleaseCachedFonts() override;
-
-  DISALLOW_COPY_AND_ASSIGN(FontCacheDispatcher);
 };
 
 }  // namespace content
diff --git a/content/public/renderer/render_thread_observer.h b/content/public/renderer/render_thread_observer.h
index 967951b..024c7947 100644
--- a/content/public/renderer/render_thread_observer.h
+++ b/content/public/renderer/render_thread_observer.h
@@ -23,6 +23,10 @@
 class CONTENT_EXPORT RenderThreadObserver {
  public:
   RenderThreadObserver() {}
+
+  RenderThreadObserver(const RenderThreadObserver&) = delete;
+  RenderThreadObserver& operator=(const RenderThreadObserver&) = delete;
+
   virtual ~RenderThreadObserver() {}
 
   // Allows handling incoming Mojo requests.
@@ -36,9 +40,6 @@
 
   // Called when the renderer cache of the plugin list has changed.
   virtual void PluginListChanged() {}
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(RenderThreadObserver);
 };
 
 }  // namespace content
diff --git a/content/public/test/accessibility_notification_waiter.h b/content/public/test/accessibility_notification_waiter.h
index 2aa24aa..9c8af02e 100644
--- a/content/public/test/accessibility_notification_waiter.h
+++ b/content/public/test/accessibility_notification_waiter.h
@@ -39,6 +39,12 @@
   AccessibilityNotificationWaiter(WebContents* web_contents,
                                   ui::AXMode accessibility_mode,
                                   ui::AXEventGenerator::Event event);
+
+  AccessibilityNotificationWaiter(const AccessibilityNotificationWaiter&) =
+      delete;
+  AccessibilityNotificationWaiter& operator=(
+      const AccessibilityNotificationWaiter&) = delete;
+
   ~AccessibilityNotificationWaiter() override;
 
   // Blocks until the specific accessibility notification registered in
@@ -123,8 +129,6 @@
   RenderFrameHostImpl* event_render_frame_host_ = nullptr;
 
   base::WeakPtrFactory<AccessibilityNotificationWaiter> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(AccessibilityNotificationWaiter);
 };
 
 }  // namespace content
diff --git a/content/public/test/audio_service_test_helper.cc b/content/public/test/audio_service_test_helper.cc
index 2215b50..8b4762d 100644
--- a/content/public/test/audio_service_test_helper.cc
+++ b/content/public/test/audio_service_test_helper.cc
@@ -20,6 +20,10 @@
 class AudioServiceTestHelper::TestingApi : public audio::mojom::TestingApi {
  public:
   TestingApi() = default;
+
+  TestingApi(const TestingApi&) = delete;
+  TestingApi& operator=(const TestingApi&) = delete;
+
   ~TestingApi() override = default;
 
   // audio::mojom::TestingApi implementation
@@ -36,8 +40,6 @@
 
  private:
   mojo::ReceiverSet<audio::mojom::TestingApi> receivers_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestingApi);
 };
 
 AudioServiceTestHelper::AudioServiceTestHelper()
diff --git a/content/public/test/audio_service_test_helper.h b/content/public/test/audio_service_test_helper.h
index 8053e764..2e7bf932 100644
--- a/content/public/test/audio_service_test_helper.h
+++ b/content/public/test/audio_service_test_helper.h
@@ -21,6 +21,10 @@
 class AudioServiceTestHelper {
  public:
   AudioServiceTestHelper();
+
+  AudioServiceTestHelper(const AudioServiceTestHelper&) = delete;
+  AudioServiceTestHelper& operator=(const AudioServiceTestHelper&) = delete;
+
   ~AudioServiceTestHelper();
 
  private:
@@ -30,8 +34,6 @@
       mojo::PendingReceiver<audio::mojom::TestingApi> receiver);
 
   std::unique_ptr<TestingApi> testing_api_;
-
-  DISALLOW_COPY_AND_ASSIGN(AudioServiceTestHelper);
 };
 
 }  // namespace content
diff --git a/content/public/test/browser_task_environment.cc b/content/public/test/browser_task_environment.cc
index 67e6fd8..4e040576 100644
--- a/content/public/test/browser_task_environment.cc
+++ b/content/public/test/browser_task_environment.cc
@@ -47,6 +47,9 @@
   TestBrowserThread(BrowserThread::ID identifier,
                     scoped_refptr<base::SingleThreadTaskRunner> thread_runner);
 
+  TestBrowserThread(const TestBrowserThread&) = delete;
+  TestBrowserThread& operator=(const TestBrowserThread&) = delete;
+
   ~TestBrowserThread();
 
   // Stops the thread, no-op if this is not a real thread.
@@ -66,8 +69,6 @@
   // Binds |identifier_| to |thread_runner| when the public constructor is used
   // (null otherwise).
   std::unique_ptr<BrowserThreadImpl> fake_thread_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestBrowserThread);
 };
 
 // static
diff --git a/content/public/test/browser_task_environment.h b/content/public/test/browser_task_environment.h
index e9260fc..7bf84579 100644
--- a/content/public/test/browser_task_environment.h
+++ b/content/public/test/browser_task_environment.h
@@ -169,6 +169,9 @@
   // RunLoop+QuitClosure() to await an async condition.
   void RunIOThreadUntilIdle();
 
+  BrowserTaskEnvironment(const BrowserTaskEnvironment&) = delete;
+  BrowserTaskEnvironment& operator=(const BrowserTaskEnvironment&) = delete;
+
   ~BrowserTaskEnvironment() override;
 
  private:
@@ -196,8 +199,6 @@
 #if defined(OS_WIN)
   std::unique_ptr<base::win::ScopedCOMInitializer> com_initializer_;
 #endif
-
-  DISALLOW_COPY_AND_ASSIGN(BrowserTaskEnvironment);
 };
 
 }  // namespace content
diff --git a/content/public/test/browser_test_utils.cc b/content/public/test/browser_test_utils.cc
index b79c566..cc46a0b 100644
--- a/content/public/test/browser_test_utils.cc
+++ b/content/public/test/browser_test_utils.cc
@@ -543,6 +543,10 @@
         target_url_(target_url),
         new_url_(new_url),
         new_origin_(new_origin) {}
+
+  CommitOriginInterceptor(const CommitOriginInterceptor&) = delete;
+  CommitOriginInterceptor& operator=(const CommitOriginInterceptor&) = delete;
+
   ~CommitOriginInterceptor() override = default;
 
   // WebContentsObserver:
@@ -566,8 +570,6 @@
   GURL target_url_;
   GURL new_url_;
   url::Origin new_origin_;
-
-  DISALLOW_COPY_AND_ASSIGN(CommitOriginInterceptor);
 };
 
 // Observer which waits for a visual update in a RenderWidgetHost to meet some
@@ -3306,6 +3308,9 @@
     delegated_frame_host_->AddObserverForTesting(this);
   }
 
+  EvictionStateWaiter(const EvictionStateWaiter&) = delete;
+  EvictionStateWaiter& operator=(const EvictionStateWaiter&) = delete;
+
   ~EvictionStateWaiter() override {
     delegated_frame_host_->RemoveObserverForTesting(this);
   }
@@ -3331,8 +3336,6 @@
   DelegatedFrameHost* delegated_frame_host_;
   DelegatedFrameHost::FrameEvictionState waited_eviction_state_;
   base::OnceClosure quit_closure_;
-
-  DISALLOW_COPY_AND_ASSIGN(EvictionStateWaiter);
 };
 
 }  // namespace
diff --git a/content/public/test/browser_test_utils.h b/content/public/test/browser_test_utils.h
index 965a564..3fda448 100644
--- a/content/public/test/browser_test_utils.h
+++ b/content/public/test/browser_test_utils.h
@@ -415,6 +415,12 @@
                                  bool shift,
                                  bool alt,
                                  bool command);
+
+  ScopedSimulateModifierKeyPress(const ScopedSimulateModifierKeyPress&) =
+      delete;
+  ScopedSimulateModifierKeyPress& operator=(
+      const ScopedSimulateModifierKeyPress&) = delete;
+
   ~ScopedSimulateModifierKeyPress();
 
   // Similar to SimulateMouseClickAt().
@@ -437,8 +443,6 @@
   const bool shift_;
   const bool alt_;
   const bool command_;
-
-  DISALLOW_COPY_AND_ASSIGN(ScopedSimulateModifierKeyPress);
 };
 
 // Method to check what devices we have on the system.
@@ -1061,6 +1065,10 @@
   // entire lifetime of |this|. |expected_title| is the title that |this|
   // will wait for.
   TitleWatcher(WebContents* web_contents, const std::u16string& expected_title);
+
+  TitleWatcher(const TitleWatcher&) = delete;
+  TitleWatcher& operator=(const TitleWatcher&) = delete;
+
   ~TitleWatcher() override;
 
   // Adds another title to watch for.
@@ -1083,8 +1091,6 @@
 
   // The most recently observed expected title, if any.
   std::u16string observed_title_;
-
-  DISALLOW_COPY_AND_ASSIGN(TitleWatcher);
 };
 
 // Watches a RenderProcessHost and waits for a specified lifecycle event.
@@ -1100,6 +1106,10 @@
                            WatchType type);
   // Waits for the renderer process that contains the specified web contents.
   RenderProcessHostWatcher(WebContents* web_contents, WatchType type);
+
+  RenderProcessHostWatcher(const RenderProcessHostWatcher&) = delete;
+  RenderProcessHostWatcher& operator=(const RenderProcessHostWatcher&) = delete;
+
   ~RenderProcessHostWatcher() override;
 
   // Waits until the expected event is triggered. This may only be called once.
@@ -1129,8 +1139,6 @@
 
   base::RunLoop run_loop_;
   base::OnceClosure quit_closure_;
-
-  DISALLOW_COPY_AND_ASSIGN(RenderProcessHostWatcher);
 };
 
 // Implementation helper for:
@@ -1212,6 +1220,9 @@
   // RenderFrameHost deletion.
   explicit DOMMessageQueue(RenderFrameHost* render_frame_host);
 
+  DOMMessageQueue(const DOMMessageQueue&) = delete;
+  DOMMessageQueue& operator=(const DOMMessageQueue&) = delete;
+
   ~DOMMessageQueue() override;
 
   // Removes all messages in the message queue.
@@ -1240,8 +1251,6 @@
   base::OnceClosure quit_closure_;
   bool renderer_crashed_ = false;
   RenderFrameHost* render_frame_host_ = nullptr;
-
-  DISALLOW_COPY_AND_ASSIGN(DOMMessageQueue);
 };
 
 // Used to wait for a new WebContents to be created. Instantiate this object
@@ -1249,6 +1258,10 @@
 class WebContentsAddedObserver {
  public:
   WebContentsAddedObserver();
+
+  WebContentsAddedObserver(const WebContentsAddedObserver&) = delete;
+  WebContentsAddedObserver& operator=(const WebContentsAddedObserver&) = delete;
+
   ~WebContentsAddedObserver();
 
   // Will run a message loop to wait for the new window if it hasn't been
@@ -1263,8 +1276,6 @@
 
   WebContents* web_contents_;
   base::OnceClosure quit_closure_;
-
-  DISALLOW_COPY_AND_ASSIGN(WebContentsAddedObserver);
 };
 
 // Request a new frame be drawn, returns false if request fails.
@@ -1369,6 +1380,10 @@
 class MainThreadFrameObserver {
  public:
   explicit MainThreadFrameObserver(RenderWidgetHost* render_widget_host);
+
+  MainThreadFrameObserver(const MainThreadFrameObserver&) = delete;
+  MainThreadFrameObserver& operator=(const MainThreadFrameObserver&) = delete;
+
   ~MainThreadFrameObserver();
 
   // Synchronizes the browser main thread with the renderer main thread and impl
@@ -1381,8 +1396,6 @@
   RenderWidgetHost* render_widget_host_;
   base::OnceClosure quit_closure_;
   int routing_id_;
-
-  DISALLOW_COPY_AND_ASSIGN(MainThreadFrameObserver);
 };
 
 // Watches for an input msg to be consumed.
@@ -1390,6 +1403,10 @@
  public:
   InputMsgWatcher(RenderWidgetHost* render_widget_host,
                   blink::WebInputEvent::Type type);
+
+  InputMsgWatcher(const InputMsgWatcher&) = delete;
+  InputMsgWatcher& operator=(const InputMsgWatcher&) = delete;
+
   ~InputMsgWatcher() override;
 
   bool HasReceivedAck() const;
@@ -1417,8 +1434,6 @@
   blink::mojom::InputEventResultState ack_result_;
   blink::mojom::InputEventResultSource ack_source_;
   base::OnceClosure quit_closure_;
-
-  DISALLOW_COPY_AND_ASSIGN(InputMsgWatcher);
 };
 
 // Used to wait for a desired input event ack.
@@ -1437,6 +1452,10 @@
   // Wait for any event of the given |type|.
   InputEventAckWaiter(RenderWidgetHost* render_widget_host,
                       blink::WebInputEvent::Type type);
+
+  InputEventAckWaiter(const InputEventAckWaiter&) = delete;
+  InputEventAckWaiter& operator=(const InputEventAckWaiter&) = delete;
+
   ~InputEventAckWaiter() override;
 
   void Wait();
@@ -1452,8 +1471,6 @@
   InputEventAckPredicate predicate_;
   bool event_received_;
   base::OnceClosure quit_closure_;
-
-  DISALLOW_COPY_AND_ASSIGN(InputEventAckWaiter);
 };
 
 // Sets up a ui::TestClipboard for use in browser tests. On Windows,
@@ -1464,6 +1481,10 @@
   // Sets up a ui::TestClipboard.
   BrowserTestClipboardScope();
 
+  BrowserTestClipboardScope(const BrowserTestClipboardScope&) = delete;
+  BrowserTestClipboardScope& operator=(const BrowserTestClipboardScope&) =
+      delete;
+
   // Tears down the clipboard.
   ~BrowserTestClipboardScope();
 
@@ -1475,15 +1496,16 @@
 
   // Gets plain text from the clipboard, if any.
   void GetText(std::string* text);
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(BrowserTestClipboardScope);
 };
 
 // This observer is used to wait for its owner Frame to become focused.
 class FrameFocusedObserver {
  public:
   explicit FrameFocusedObserver(RenderFrameHost* owner_host);
+
+  FrameFocusedObserver(const FrameFocusedObserver&) = delete;
+  FrameFocusedObserver& operator=(const FrameFocusedObserver&) = delete;
+
   ~FrameFocusedObserver();
 
   void Wait();
@@ -1494,14 +1516,16 @@
 
   // FrameTreeNode::Observer
   std::unique_ptr<FrameTreeNodeObserverImpl> impl_;
-
-  DISALLOW_COPY_AND_ASSIGN(FrameFocusedObserver);
 };
 
 // This observer is used to wait for its owner FrameTreeNode to become deleted.
 class FrameDeletedObserver {
  public:
   explicit FrameDeletedObserver(RenderFrameHost* owner_host);
+
+  FrameDeletedObserver(const FrameDeletedObserver&) = delete;
+  FrameDeletedObserver& operator=(const FrameDeletedObserver&) = delete;
+
   ~FrameDeletedObserver();
 
   void Wait();
@@ -1512,8 +1536,6 @@
 
   // FrameTreeNode::Observer
   std::unique_ptr<FrameTreeNodeObserverImpl> impl_;
-
-  DISALLOW_COPY_AND_ASSIGN(FrameDeletedObserver);
 };
 
 // This class can be used to pause and resume navigations, based on a URL
@@ -1544,6 +1566,9 @@
   // Monitors any frame in WebContents.
   TestNavigationManager(WebContents* web_contents, const GURL& url);
 
+  TestNavigationManager(const TestNavigationManager&) = delete;
+  TestNavigationManager& operator=(const TestNavigationManager&) = delete;
+
   ~TestNavigationManager() override;
 
   // Waits until the first yield point after DidStartNavigation. Unlike
@@ -1658,8 +1683,6 @@
   base::OnceClosure commit_deferring_condition_resume_closure_;
 
   base::WeakPtrFactory<TestNavigationManager> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(TestNavigationManager);
 };
 
 class NavigationHandleCommitObserver : public content::WebContentsObserver {
@@ -1871,6 +1894,12 @@
  public:
   explicit SynchronizeVisualPropertiesInterceptor(
       RenderFrameProxyHost* render_frame_proxy_host);
+
+  SynchronizeVisualPropertiesInterceptor(
+      const SynchronizeVisualPropertiesInterceptor&) = delete;
+  SynchronizeVisualPropertiesInterceptor& operator=(
+      const SynchronizeVisualPropertiesInterceptor&) = delete;
+
   ~SynchronizeVisualPropertiesInterceptor() override;
 
   blink::mojom::RemoteFrameHost* GetForwardingInterface() override;
@@ -1917,8 +1946,6 @@
 
   base::WeakPtrFactory<SynchronizeVisualPropertiesInterceptor> weak_factory_{
       this};
-
-  DISALLOW_COPY_AND_ASSIGN(SynchronizeVisualPropertiesInterceptor);
 };
 
 // This class allows monitoring of mouse events received by a specific
@@ -1926,6 +1953,12 @@
 class RenderWidgetHostMouseEventMonitor {
  public:
   explicit RenderWidgetHostMouseEventMonitor(RenderWidgetHost* host);
+
+  RenderWidgetHostMouseEventMonitor(const RenderWidgetHostMouseEventMonitor&) =
+      delete;
+  RenderWidgetHostMouseEventMonitor& operator=(
+      const RenderWidgetHostMouseEventMonitor&) = delete;
+
   ~RenderWidgetHostMouseEventMonitor();
   bool EventWasReceived() const { return event_received_; }
   void ResetEventReceived() { event_received_ = false; }
@@ -1941,14 +1974,17 @@
   RenderWidgetHost* host_;
   bool event_received_;
   blink::WebMouseEvent event_;
-
-  DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostMouseEventMonitor);
 };
 
 // Helper class to track and allow waiting for navigation start events.
 class DidStartNavigationObserver : public WebContentsObserver {
  public:
   explicit DidStartNavigationObserver(WebContents* web_contents);
+
+  DidStartNavigationObserver(const DidStartNavigationObserver&) = delete;
+  DidStartNavigationObserver& operator=(const DidStartNavigationObserver&) =
+      delete;
+
   ~DidStartNavigationObserver() override;
 
   void Wait() { run_loop_.Run(); }
@@ -1966,8 +2002,6 @@
   bool observed_ = false;
   base::RunLoop run_loop_;
   NavigationHandle* navigation_handle_ = nullptr;
-
-  DISALLOW_COPY_AND_ASSIGN(DidStartNavigationObserver);
 };
 
 // Tracks the creation of RenderFrameProxyHosts that have
@@ -2028,6 +2062,11 @@
       WebContents* content,
       RenderFrameHostChangedCallback callback);
 
+  RenderFrameHostChangedCallbackRunner(
+      const RenderFrameHostChangedCallbackRunner&) = delete;
+  RenderFrameHostChangedCallbackRunner& operator=(
+      const RenderFrameHostChangedCallbackRunner&) = delete;
+
   ~RenderFrameHostChangedCallbackRunner() override;
 
  private:
@@ -2035,8 +2074,6 @@
                               RenderFrameHost* new_host) override;
 
   RenderFrameHostChangedCallback callback_;
-
-  DISALLOW_COPY_AND_ASSIGN(RenderFrameHostChangedCallbackRunner);
 };
 
 }  // namespace content
diff --git a/content/public/test/browsing_data_remover_test_util.h b/content/public/test/browsing_data_remover_test_util.h
index cdb4717..3246831 100644
--- a/content/public/test/browsing_data_remover_test_util.h
+++ b/content/public/test/browsing_data_remover_test_util.h
@@ -21,6 +21,12 @@
     : public BrowsingDataRemover::Observer {
  public:
   explicit BrowsingDataRemoverCompletionObserver(BrowsingDataRemover* remover);
+
+  BrowsingDataRemoverCompletionObserver(
+      const BrowsingDataRemoverCompletionObserver&) = delete;
+  BrowsingDataRemoverCompletionObserver& operator=(
+      const BrowsingDataRemoverCompletionObserver&) = delete;
+
   ~BrowsingDataRemoverCompletionObserver() override;
 
   void BlockUntilCompletion();
@@ -50,8 +56,6 @@
   base::ScopedObservation<BrowsingDataRemover, BrowsingDataRemover::Observer>
       observation_{this};
   scoped_refptr<base::SequencedTaskRunner> origin_task_runner_;
-
-  DISALLOW_COPY_AND_ASSIGN(BrowsingDataRemoverCompletionObserver);
 };
 
 // The completion inhibitor can artificially delay completion of the browsing
@@ -64,6 +68,12 @@
 class BrowsingDataRemoverCompletionInhibitor {
  public:
   explicit BrowsingDataRemoverCompletionInhibitor(BrowsingDataRemover* remover);
+
+  BrowsingDataRemoverCompletionInhibitor(
+      const BrowsingDataRemoverCompletionInhibitor&) = delete;
+  BrowsingDataRemoverCompletionInhibitor& operator=(
+      const BrowsingDataRemoverCompletionInhibitor&) = delete;
+
   virtual ~BrowsingDataRemoverCompletionInhibitor();
 
   void Reset();
@@ -92,8 +102,6 @@
   std::unique_ptr<base::RunLoop> run_loop_;
   base::OnceClosure continue_to_completion_callback_;
   scoped_refptr<base::SequencedTaskRunner> origin_task_runner_;
-
-  DISALLOW_COPY_AND_ASSIGN(BrowsingDataRemoverCompletionInhibitor);
 };
 
 }  // namespace content
diff --git a/content/public/test/content_browser_test_utils.h b/content/public/test/content_browser_test_utils.h
index f472121..e2af19be 100644
--- a/content/public/test/content_browser_test_utils.h
+++ b/content/public/test/content_browser_test_utils.h
@@ -151,6 +151,10 @@
 class ShellAddedObserver {
  public:
   ShellAddedObserver();
+
+  ShellAddedObserver(const ShellAddedObserver&) = delete;
+  ShellAddedObserver& operator=(const ShellAddedObserver&) = delete;
+
   ~ShellAddedObserver();
 
   // Will run a message loop to wait for the new window if it hasn't been
@@ -162,8 +166,6 @@
 
   Shell* shell_ = nullptr;
   std::unique_ptr<base::RunLoop> runner_;
-
-  DISALLOW_COPY_AND_ASSIGN(ShellAddedObserver);
 };
 
 #if defined(OS_MAC)
@@ -188,6 +190,12 @@
       WebContents* web_contents);
 
   explicit RenderWidgetHostViewCocoaObserver(WebContents* web_contents);
+
+  RenderWidgetHostViewCocoaObserver(const RenderWidgetHostViewCocoaObserver&) =
+      delete;
+  RenderWidgetHostViewCocoaObserver& operator=(
+      const RenderWidgetHostViewCocoaObserver&) = delete;
+
   virtual ~RenderWidgetHostViewCocoaObserver();
 
   // Called when a new NSView is added as a subview of RWHVCocoa.
@@ -211,8 +219,6 @@
   static std::map<WebContents*, RenderWidgetHostViewCocoaObserver*> observers_;
 
   WebContents* const web_contents_;
-
-  DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostViewCocoaObserver);
 };
 
 void SetWindowBounds(gfx::NativeWindow window, const gfx::Rect& bounds);
diff --git a/content/public/test/content_cert_verifier_browser_test.h b/content/public/test/content_cert_verifier_browser_test.h
index 6defebf..97b9728 100644
--- a/content/public/test/content_cert_verifier_browser_test.h
+++ b/content/public/test/content_cert_verifier_browser_test.h
@@ -17,6 +17,10 @@
 class CertVerifierBrowserTest : public ContentBrowserTest {
  public:
   CertVerifierBrowserTest();
+
+  CertVerifierBrowserTest(const CertVerifierBrowserTest&) = delete;
+  CertVerifierBrowserTest& operator=(const CertVerifierBrowserTest&) = delete;
+
   ~CertVerifierBrowserTest() override;
 
   // InProcessBrowserTest:
@@ -33,8 +37,6 @@
  private:
   bool mock_cert_verifier_disabled_ = false;
   ContentMockCertVerifier mock_cert_verifier_;
-
-  DISALLOW_COPY_AND_ASSIGN(CertVerifierBrowserTest);
 };
 
 }  // namespace content
diff --git a/content/public/test/content_mock_cert_verifier.h b/content/public/test/content_mock_cert_verifier.h
index 699abd8..41bc8b8 100644
--- a/content/public/test/content_mock_cert_verifier.h
+++ b/content/public/test/content_mock_cert_verifier.h
@@ -30,6 +30,10 @@
 class ContentMockCertVerifier {
  public:
   ContentMockCertVerifier();
+
+  ContentMockCertVerifier(const ContentMockCertVerifier&) = delete;
+  ContentMockCertVerifier& operator=(const ContentMockCertVerifier&) = delete;
+
   virtual ~ContentMockCertVerifier();
 
   // Be sure to call these method from the relevant BrowserTestBase methods.
@@ -46,6 +50,10 @@
   class CertVerifier {
    public:
     explicit CertVerifier(net::MockCertVerifier* verifier);
+
+    CertVerifier(const CertVerifier&) = delete;
+    CertVerifier& operator=(const CertVerifier&) = delete;
+
     ~CertVerifier();
     void set_default_result(int default_result);
     void AddResultForCert(scoped_refptr<net::X509Certificate> cert,
@@ -61,8 +69,6 @@
 
     net::MockCertVerifier* verifier_;
     mojo::Remote<network::mojom::NetworkServiceTest> network_service_test_;
-
-    DISALLOW_COPY_AND_ASSIGN(CertVerifier);
   };
 
   // Returns a pointer to the MockCertVerifier used by all profiles in
@@ -79,8 +85,6 @@
   std::unique_ptr<net::MockCertVerifier> mock_cert_verifier_;
 
   CertVerifier cert_verifier_;
-
-  DISALLOW_COPY_AND_ASSIGN(ContentMockCertVerifier);
 };
 
 }  // namespace content
diff --git a/content/public/test/download_test_observer.h b/content/public/test/download_test_observer.h
index cb557d8..c08f7d8 100644
--- a/content/public/test/download_test_observer.h
+++ b/content/public/test/download_test_observer.h
@@ -30,6 +30,10 @@
   // The filter passed may be called multiple times, even after it
   // returns true.
   DownloadUpdatedObserver(download::DownloadItem* item, EventFilter filter);
+
+  DownloadUpdatedObserver(const DownloadUpdatedObserver&) = delete;
+  DownloadUpdatedObserver& operator=(const DownloadUpdatedObserver&) = delete;
+
   ~DownloadUpdatedObserver() override;
 
   // Returns when either the event has been seen (at least once since
@@ -47,8 +51,6 @@
   EventFilter filter_;
   bool waiting_;
   bool event_seen_;
-
-  DISALLOW_COPY_AND_ASSIGN(DownloadUpdatedObserver);
 };
 
 // Detects changes to the downloads after construction.
@@ -77,6 +79,9 @@
                        size_t wait_count,
                        DangerousDownloadAction dangerous_download_action);
 
+  DownloadTestObserver(const DownloadTestObserver&) = delete;
+  DownloadTestObserver& operator=(const DownloadTestObserver&) = delete;
+
   ~DownloadTestObserver() override;
 
   // Wait for one of the finish conditions.
@@ -168,8 +173,6 @@
   std::set<uint32_t> dangerous_downloads_seen_;
 
   base::WeakPtrFactory<DownloadTestObserver> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(DownloadTestObserver);
 };
 
 class DownloadTestObserverTerminal : public DownloadTestObserver {
@@ -182,12 +185,14 @@
       size_t wait_count,
       DangerousDownloadAction dangerous_download_action);
 
+  DownloadTestObserverTerminal(const DownloadTestObserverTerminal&) = delete;
+  DownloadTestObserverTerminal& operator=(const DownloadTestObserverTerminal&) =
+      delete;
+
   ~DownloadTestObserverTerminal() override;
 
  private:
   bool IsDownloadInFinalState(download::DownloadItem* download) override;
-
-  DISALLOW_COPY_AND_ASSIGN(DownloadTestObserverTerminal);
 };
 
 // Detects changes to the downloads after construction.
@@ -202,12 +207,15 @@
   DownloadTestObserverInProgress(
       DownloadManager* download_manager, size_t wait_count);
 
+  DownloadTestObserverInProgress(const DownloadTestObserverInProgress&) =
+      delete;
+  DownloadTestObserverInProgress& operator=(
+      const DownloadTestObserverInProgress&) = delete;
+
   ~DownloadTestObserverInProgress() override;
 
  private:
   bool IsDownloadInFinalState(download::DownloadItem* download) override;
-
-  DISALLOW_COPY_AND_ASSIGN(DownloadTestObserverInProgress);
 };
 
 class DownloadTestObserverInterrupted : public DownloadTestObserver {
@@ -219,12 +227,15 @@
       size_t wait_count,
       DangerousDownloadAction dangerous_download_action);
 
+  DownloadTestObserverInterrupted(const DownloadTestObserverInterrupted&) =
+      delete;
+  DownloadTestObserverInterrupted& operator=(
+      const DownloadTestObserverInterrupted&) = delete;
+
   ~DownloadTestObserverInterrupted() override;
 
  private:
   bool IsDownloadInFinalState(download::DownloadItem* download) override;
-
-  DISALLOW_COPY_AND_ASSIGN(DownloadTestObserverInterrupted);
 };
 
 // The WaitForFlush() method on this class returns after:
@@ -238,6 +249,11 @@
                                   public download::DownloadItem::Observer {
  public:
   explicit DownloadTestFlushObserver(DownloadManager* download_manager);
+
+  DownloadTestFlushObserver(const DownloadTestFlushObserver&) = delete;
+  DownloadTestFlushObserver& operator=(const DownloadTestFlushObserver&) =
+      delete;
+
   ~DownloadTestFlushObserver() override;
 
   void WaitForFlush();
@@ -263,8 +279,6 @@
   DownloadSet downloads_observed_;
   bool waiting_for_zero_inprogress_;
   base::RunLoop run_loop_;
-
-  DISALLOW_COPY_AND_ASSIGN(DownloadTestFlushObserver);
 };
 
 // Waits for a callback indicating that the download::DownloadItem is about to
@@ -316,6 +330,11 @@
  public:
   SavePackageFinishedObserver(DownloadManager* manager,
                               base::OnceClosure callback);
+
+  SavePackageFinishedObserver(const SavePackageFinishedObserver&) = delete;
+  SavePackageFinishedObserver& operator=(const SavePackageFinishedObserver&) =
+      delete;
+
   ~SavePackageFinishedObserver() override;
 
   // download::DownloadItem::Observer:
@@ -331,8 +350,6 @@
   DownloadManager* download_manager_;
   download::DownloadItem* download_;
   base::OnceClosure callback_;
-
-  DISALLOW_COPY_AND_ASSIGN(SavePackageFinishedObserver);
 };
 
 }  // namespace content`
diff --git a/content/public/test/fake_download_item.h b/content/public/test/fake_download_item.h
index a6b08c9..16f88e87 100644
--- a/content/public/test/fake_download_item.h
+++ b/content/public/test/fake_download_item.h
@@ -26,6 +26,10 @@
 class FakeDownloadItem : public download::DownloadItem {
  public:
   FakeDownloadItem();
+
+  FakeDownloadItem(const FakeDownloadItem&) = delete;
+  FakeDownloadItem& operator=(const FakeDownloadItem&) = delete;
+
   ~FakeDownloadItem() override;
 
   // download::DownloadItem overrides.
@@ -207,8 +211,6 @@
   GURL dummy_url;
   absl::optional<url::Origin> dummy_origin;
   base::FilePath dummy_file_path;
-
-  DISALLOW_COPY_AND_ASSIGN(FakeDownloadItem);
 };
 
 }  // namespace content
diff --git a/content/public/test/fake_render_widget_host.h b/content/public/test/fake_render_widget_host.h
index 0863400..41821402 100644
--- a/content/public/test/fake_render_widget_host.h
+++ b/content/public/test/fake_render_widget_host.h
@@ -25,6 +25,10 @@
                              public blink::mojom::WidgetInputHandlerHost {
  public:
   FakeRenderWidgetHost();
+
+  FakeRenderWidgetHost(const FakeRenderWidgetHost&) = delete;
+  FakeRenderWidgetHost& operator=(const FakeRenderWidgetHost&) = delete;
+
   ~FakeRenderWidgetHost() override;
 
   std::pair<mojo::PendingAssociatedRemote<blink::mojom::FrameWidgetHost>,
@@ -131,8 +135,6 @@
       widget_input_handler_host_{this};
   mojo::AssociatedRemote<blink::mojom::FrameWidgetInputHandler>
       frame_widget_input_handler_;
-
-  DISALLOW_COPY_AND_ASSIGN(FakeRenderWidgetHost);
 };
 
 }  // namespace content
diff --git a/content/public/test/fake_service_worker_context.h b/content/public/test/fake_service_worker_context.h
index 50b2ff3..ae6c31e 100644
--- a/content/public/test/fake_service_worker_context.h
+++ b/content/public/test/fake_service_worker_context.h
@@ -33,6 +33,10 @@
       std::tuple<GURL, blink::TransferableMessage, ResultCallback>;
 
   FakeServiceWorkerContext();
+
+  FakeServiceWorkerContext(const FakeServiceWorkerContext&) = delete;
+  FakeServiceWorkerContext& operator=(const FakeServiceWorkerContext&) = delete;
+
   ~FakeServiceWorkerContext() override;
 
   void AddObserver(ServiceWorkerContextObserver* observer) override;
@@ -124,8 +128,6 @@
 
   base::ObserverList<ServiceWorkerContextObserver, true>::Unchecked observers_;
 
-  DISALLOW_COPY_AND_ASSIGN(FakeServiceWorkerContext);
-
   std::set<url::Origin> registered_origins_;
 };
 
diff --git a/content/public/test/fake_speech_recognition_manager.h b/content/public/test/fake_speech_recognition_manager.h
index 5e0607bc..35f3abad 100644
--- a/content/public/test/fake_speech_recognition_manager.h
+++ b/content/public/test/fake_speech_recognition_manager.h
@@ -24,6 +24,11 @@
                                      public SpeechRecognitionEventListener {
  public:
   FakeSpeechRecognitionManager();
+
+  FakeSpeechRecognitionManager(const FakeSpeechRecognitionManager&) = delete;
+  FakeSpeechRecognitionManager& operator=(const FakeSpeechRecognitionManager&) =
+      delete;
+
   ~FakeSpeechRecognitionManager() override;
 
   const std::string& grammar() const {
@@ -102,8 +107,6 @@
   base::OnceClosure recognition_ended_closure_;
   base::OnceClosure on_fake_response_sent_closure_;
   SpeechRecognitionManagerDelegate* delegate_ = nullptr;  // Not owned.
-
-  DISALLOW_COPY_AND_ASSIGN(FakeSpeechRecognitionManager);
 };
 
 }  // namespace content
diff --git a/content/public/test/find_test_utils.h b/content/public/test/find_test_utils.h
index 70a055a..4625f9d 100644
--- a/content/public/test/find_test_utils.h
+++ b/content/public/test/find_test_utils.h
@@ -29,6 +29,11 @@
 class FindTestWebContentsDelegate : public WebContentsDelegate {
  public:
   FindTestWebContentsDelegate();
+
+  FindTestWebContentsDelegate(const FindTestWebContentsDelegate&) = delete;
+  FindTestWebContentsDelegate& operator=(const FindTestWebContentsDelegate&) =
+      delete;
+
   ~FindTestWebContentsDelegate() override;
 
   // Returns the current find results.
@@ -133,8 +138,6 @@
   WaitingFor waiting_for_;
 
   scoped_refptr<content::MessageLoopRunner> message_loop_runner_;
-
-  DISALLOW_COPY_AND_ASSIGN(FindTestWebContentsDelegate);
 };
 
 // Finds the set of all RenderFrameHosts that the FindRequestManager associated
diff --git a/content/public/test/focus_changed_observer.h b/content/public/test/focus_changed_observer.h
index 30f8e02..ca1859c 100644
--- a/content/public/test/focus_changed_observer.h
+++ b/content/public/test/focus_changed_observer.h
@@ -15,6 +15,10 @@
 class FocusChangedObserver : public WebContentsObserver {
  public:
   explicit FocusChangedObserver(WebContents*);
+
+  FocusChangedObserver(const FocusChangedObserver&) = delete;
+  FocusChangedObserver& operator=(const FocusChangedObserver&) = delete;
+
   ~FocusChangedObserver() override;
 
   // Waits until focus changes in the page. Returns the observed details.
@@ -25,8 +29,6 @@
 
   base::RunLoop run_loop_;
   absl::optional<FocusedNodeDetails> observed_details_;
-
-  DISALLOW_COPY_AND_ASSIGN(FocusChangedObserver);
 };
 
 }  // namespace content
diff --git a/content/public/test/hit_test_region_observer.h b/content/public/test/hit_test_region_observer.h
index 9a96db9a..578a58a7 100644
--- a/content/public/test/hit_test_region_observer.h
+++ b/content/public/test/hit_test_region_observer.h
@@ -34,6 +34,10 @@
 class HitTestRegionObserver : public viz::HitTestRegionObserver {
  public:
   explicit HitTestRegionObserver(const viz::FrameSinkId& frame_sink_id);
+
+  HitTestRegionObserver(const HitTestRegionObserver&) = delete;
+  HitTestRegionObserver& operator=(const HitTestRegionObserver&) = delete;
+
   ~HitTestRegionObserver() override;
 
   // The following functions need to be called in order to wait for the change
@@ -57,8 +61,6 @@
   std::unique_ptr<base::RunLoop> run_loop_;
   std::unique_ptr<base::RunLoop> hit_test_data_change_run_loop_;
   std::vector<viz::AggregatedHitTestRegion> cached_hit_test_data_;
-
-  DISALLOW_COPY_AND_ASSIGN(HitTestRegionObserver);
 };
 
 }  // namespace content
diff --git a/content/public/test/javascript_test_observer.h b/content/public/test/javascript_test_observer.h
index 09c02ad..cf69362 100644
--- a/content/public/test/javascript_test_observer.h
+++ b/content/public/test/javascript_test_observer.h
@@ -59,6 +59,9 @@
   JavascriptTestObserver(WebContents* web_contents,
                          TestMessageHandler* handler);
 
+  JavascriptTestObserver(const JavascriptTestObserver&) = delete;
+  JavascriptTestObserver& operator=(const JavascriptTestObserver&) = delete;
+
   ~JavascriptTestObserver() override;
 
   // Pump the message loop until the message handler indicates the Javascript
@@ -85,8 +88,6 @@
   bool running_;
   bool finished_;
   NotificationRegistrar registrar_;
-
-  DISALLOW_COPY_AND_ASSIGN(JavascriptTestObserver);
 };
 
 }  // namespace content
diff --git a/content/public/test/media_start_stop_observer.h b/content/public/test/media_start_stop_observer.h
index 779b735..f87d80a0 100644
--- a/content/public/test/media_start_stop_observer.h
+++ b/content/public/test/media_start_stop_observer.h
@@ -24,6 +24,10 @@
   };
 
   MediaStartStopObserver(WebContents* web_contents, Type type);
+
+  MediaStartStopObserver(const MediaStartStopObserver&) = delete;
+  MediaStartStopObserver& operator=(const MediaStartStopObserver&) = delete;
+
   ~MediaStartStopObserver() override;
 
   // WebContentsObserver implementation.
@@ -41,8 +45,6 @@
  private:
   base::RunLoop run_loop_;
   const Type type_;
-
-  DISALLOW_COPY_AND_ASSIGN(MediaStartStopObserver);
 };
 
 }  // namespace content
diff --git a/content/public/test/mock_permission_manager.h b/content/public/test/mock_permission_manager.h
index 60d28970..f78699a 100644
--- a/content/public/test/mock_permission_manager.h
+++ b/content/public/test/mock_permission_manager.h
@@ -20,6 +20,9 @@
  public:
   MockPermissionManager();
 
+  MockPermissionManager(const MockPermissionManager&) = delete;
+  MockPermissionManager& operator=(const MockPermissionManager&) = delete;
+
   ~MockPermissionManager() override;
 
   // PermissionManager:
@@ -59,9 +62,6 @@
                        callback));
   MOCK_METHOD1(UnsubscribePermissionStatusChange,
                void(SubscriptionId subscription_id));
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(MockPermissionManager);
 };
 
 }  // namespace content
diff --git a/content/public/test/mock_render_process_host.h b/content/public/test/mock_render_process_host.h
index ab9c3a2..1507b8f 100644
--- a/content/public/test/mock_render_process_host.h
+++ b/content/public/test/mock_render_process_host.h
@@ -65,6 +65,10 @@
   MockRenderProcessHost(BrowserContext* browser_context,
                         const StoragePartitionConfig& storage_partition_config,
                         bool is_for_guests_only);
+
+  MockRenderProcessHost(const MockRenderProcessHost&) = delete;
+  MockRenderProcessHost& operator=(const MockRenderProcessHost&) = delete;
+
   ~MockRenderProcessHost() override;
 
   // Provides access to all IPC messages that would have been sent to the
@@ -302,13 +306,16 @@
   mojo::PendingReceiver<blink::mojom::CacheStorage> cache_storage_receiver_;
   mojo::PendingReceiver<blink::mojom::IDBFactory> idb_factory_receiver_;
   base::WeakPtrFactory<MockRenderProcessHost> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(MockRenderProcessHost);
 };
 
 class MockRenderProcessHostFactory : public RenderProcessHostFactory {
  public:
   MockRenderProcessHostFactory();
+
+  MockRenderProcessHostFactory(const MockRenderProcessHostFactory&) = delete;
+  MockRenderProcessHostFactory& operator=(const MockRenderProcessHostFactory&) =
+      delete;
+
   ~MockRenderProcessHostFactory() override;
 
   RenderProcessHost* CreateRenderProcessHost(
@@ -333,8 +340,6 @@
   // A mock URLLoaderFactory which just fails to create a loader.
   std::unique_ptr<network::mojom::URLLoaderFactory>
       default_mock_url_loader_factory_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockRenderProcessHostFactory);
 };
 
 }  // namespace content
diff --git a/content/public/test/mock_resource_context.h b/content/public/test/mock_resource_context.h
index 66da7fa..eed5fcc8 100644
--- a/content/public/test/mock_resource_context.h
+++ b/content/public/test/mock_resource_context.h
@@ -15,10 +15,10 @@
  public:
   MockResourceContext();
 
-  ~MockResourceContext() override;
+  MockResourceContext(const MockResourceContext&) = delete;
+  MockResourceContext& operator=(const MockResourceContext&) = delete;
 
- private:
-  DISALLOW_COPY_AND_ASSIGN(MockResourceContext);
+  ~MockResourceContext() override;
 };
 
 }  // namespace content
diff --git a/content/public/test/navigation_handle_observer.h b/content/public/test/navigation_handle_observer.h
index f6f5403e..d6caa25c 100644
--- a/content/public/test/navigation_handle_observer.h
+++ b/content/public/test/navigation_handle_observer.h
@@ -26,6 +26,10 @@
  public:
   NavigationHandleObserver(WebContents* web_contents,
                            const GURL& expected_start_url);
+
+  NavigationHandleObserver(const NavigationHandleObserver&) = delete;
+  NavigationHandleObserver& operator=(const NavigationHandleObserver&) = delete;
+
   ~NavigationHandleObserver() override;
 
   void DidStartNavigation(NavigationHandle* navigation_handle) override;
@@ -82,8 +86,6 @@
   NavigationHandleTiming navigation_handle_timing_;
   ReloadType reload_type_ = ReloadType::NONE;
   scoped_refptr<const net::HttpResponseHeaders> response_headers_;
-
-  DISALLOW_COPY_AND_ASSIGN(NavigationHandleObserver);
 };
 
 }  // namespace content
diff --git a/content/public/test/nested_message_pump_android.h b/content/public/test/nested_message_pump_android.h
index 5a2a4e7..42f439d 100644
--- a/content/public/test/nested_message_pump_android.h
+++ b/content/public/test/nested_message_pump_android.h
@@ -16,6 +16,10 @@
 class NestedMessagePumpAndroid : public base::MessagePumpForUI {
  public:
   NestedMessagePumpAndroid();
+
+  NestedMessagePumpAndroid(const NestedMessagePumpAndroid&) = delete;
+  NestedMessagePumpAndroid& operator=(const NestedMessagePumpAndroid&) = delete;
+
   ~NestedMessagePumpAndroid() override;
 
   void Run(Delegate*) override;
@@ -53,8 +57,6 @@
   };
   DeferredWorkType deferred_work_type_ = kNone;
   bool deferred_do_idle_work_ = true;
-
-  DISALLOW_COPY_AND_ASSIGN(NestedMessagePumpAndroid);
 };
 
 }  // namespace content
diff --git a/content/public/test/network_connection_change_simulator.h b/content/public/test/network_connection_change_simulator.h
index 717f177..53695a5 100644
--- a/content/public/test/network_connection_change_simulator.h
+++ b/content/public/test/network_connection_change_simulator.h
@@ -20,6 +20,12 @@
     : public network::NetworkConnectionTracker::NetworkConnectionObserver {
  public:
   NetworkConnectionChangeSimulator();
+
+  NetworkConnectionChangeSimulator(const NetworkConnectionChangeSimulator&) =
+      delete;
+  NetworkConnectionChangeSimulator& operator=(
+      const NetworkConnectionChangeSimulator&) = delete;
+
   ~NetworkConnectionChangeSimulator() override;
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
@@ -38,8 +44,6 @@
   void OnConnectionChanged(network::mojom::ConnectionType type) override;
 
   std::unique_ptr<base::RunLoop> run_loop_;
-
-  DISALLOW_COPY_AND_ASSIGN(NetworkConnectionChangeSimulator);
 };
 
 }  // namespace content
diff --git a/content/public/test/network_service_test_helper.cc b/content/public/test/network_service_test_helper.cc
index 1b7c16e..f4ad605 100644
--- a/content/public/test/network_service_test_helper.cc
+++ b/content/public/test/network_service_test_helper.cc
@@ -97,6 +97,9 @@
     }
   }
 
+  NetworkServiceTestImpl(const NetworkServiceTestImpl&) = delete;
+  NetworkServiceTestImpl& operator=(const NetworkServiceTestImpl&) = delete;
+
   ~NetworkServiceTestImpl() override {
     network::NetworkContext::SetCertVerifierForTesting(nullptr);
   }
@@ -314,8 +317,6 @@
   base::MemoryPressureListener::MemoryPressureLevel
       latest_memory_pressure_level_ =
           base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE;
-
-  DISALLOW_COPY_AND_ASSIGN(NetworkServiceTestImpl);
 };
 
 NetworkServiceTestHelper::NetworkServiceTestHelper()
diff --git a/content/public/test/network_service_test_helper.h b/content/public/test/network_service_test_helper.h
index b066043..0ca74a4 100644
--- a/content/public/test/network_service_test_helper.h
+++ b/content/public/test/network_service_test_helper.h
@@ -21,6 +21,10 @@
 class NetworkServiceTestHelper {
  public:
   NetworkServiceTestHelper();
+
+  NetworkServiceTestHelper(const NetworkServiceTestHelper&) = delete;
+  NetworkServiceTestHelper& operator=(const NetworkServiceTestHelper&) = delete;
+
   ~NetworkServiceTestHelper();
 
   // Registers the helper's interfaces on |registry|. Note that this object
@@ -34,8 +38,6 @@
       mojo::PendingReceiver<network::mojom::NetworkServiceTest> receiver);
 
   std::unique_ptr<NetworkServiceTestImpl> network_service_test_impl_;
-
-  DISALLOW_COPY_AND_ASSIGN(NetworkServiceTestHelper);
 };
 
 }  // namespace content
diff --git a/content/public/test/no_renderer_crashes_assertion.h b/content/public/test/no_renderer_crashes_assertion.h
index c4e9d1d..8cc9cfc 100644
--- a/content/public/test/no_renderer_crashes_assertion.h
+++ b/content/public/test/no_renderer_crashes_assertion.h
@@ -35,6 +35,10 @@
   // Ignores crashes of the process associated with the given |frame|.
   explicit ScopedAllowRendererCrashes(const ToRenderFrameHost& frame);
 
+  ScopedAllowRendererCrashes(const ScopedAllowRendererCrashes&) = delete;
+  ScopedAllowRendererCrashes& operator=(const ScopedAllowRendererCrashes&) =
+      delete;
+
   ~ScopedAllowRendererCrashes();
 
  private:
@@ -44,8 +48,6 @@
   // The special |ChildProcessHost::kInvalidUniqueID| value means that crashes
   // of *any* process are allowed.
   int process_id_;
-
-  DISALLOW_COPY_AND_ASSIGN(ScopedAllowRendererCrashes);
 };
 
 // Helper that BrowserTestBase can use to start monitoring for renderer crashes
@@ -57,6 +59,11 @@
 class NoRendererCrashesAssertion : public NotificationObserver {
  public:
   NoRendererCrashesAssertion();
+
+  NoRendererCrashesAssertion(const NoRendererCrashesAssertion&) = delete;
+  NoRendererCrashesAssertion& operator=(const NoRendererCrashesAssertion&) =
+      delete;
+
   ~NoRendererCrashesAssertion() override;
 
  private:
@@ -72,6 +79,10 @@
    public:
     static Suspensions& GetInstance();
     Suspensions();
+
+    Suspensions(const Suspensions&) = delete;
+    Suspensions& operator=(const Suspensions&) = delete;
+
     ~Suspensions();
 
     // Methods for adding or removing a suspension.
@@ -89,8 +100,6 @@
 
     std::map<int, int> process_id_to_suspension_count_;
     SEQUENCE_CHECKER(sequence_checker_);
-
-    DISALLOW_COPY_AND_ASSIGN(Suspensions);
   };
   friend ScopedAllowRendererCrashes;
   FRIEND_TEST_ALL_PREFIXES(NoRendererCrashesAssertionSuspensions,
@@ -100,8 +109,6 @@
                            SingleProcessNesting);
   FRIEND_TEST_ALL_PREFIXES(NoRendererCrashesAssertionSuspensions,
                            AllProcessesNesting);
-
-  DISALLOW_COPY_AND_ASSIGN(NoRendererCrashesAssertion);
 };
 
 }  // namespace content
diff --git a/content/public/test/render_view_test.cc b/content/public/test/render_view_test.cc
index 462c3652..9bd710c 100644
--- a/content/public/test/render_view_test.cc
+++ b/content/public/test/render_view_test.cc
@@ -101,6 +101,12 @@
 class CloseMessageSendingRenderViewVisitor : public RenderViewVisitor {
  public:
   CloseMessageSendingRenderViewVisitor() = default;
+
+  CloseMessageSendingRenderViewVisitor(
+      const CloseMessageSendingRenderViewVisitor&) = delete;
+  CloseMessageSendingRenderViewVisitor& operator=(
+      const CloseMessageSendingRenderViewVisitor&) = delete;
+
   ~CloseMessageSendingRenderViewVisitor() override = default;
 
   void CloseRenderViews() {
@@ -118,7 +124,6 @@
 
  private:
   std::vector<RenderView*> live_render_views;
-  DISALLOW_COPY_AND_ASSIGN(CloseMessageSendingRenderViewVisitor);
 };
 
 class FakeWebURLLoader : public blink::WebURLLoader {
diff --git a/content/public/test/scoped_overscroll_modes.h b/content/public/test/scoped_overscroll_modes.h
index ac2d85cad..54935aa 100644
--- a/content/public/test/scoped_overscroll_modes.h
+++ b/content/public/test/scoped_overscroll_modes.h
@@ -14,10 +14,11 @@
 class ScopedPullToRefreshMode {
  public:
   explicit ScopedPullToRefreshMode(OverscrollConfig::PullToRefreshMode mode);
-  ~ScopedPullToRefreshMode();
 
- private:
-  DISALLOW_COPY_AND_ASSIGN(ScopedPullToRefreshMode);
+  ScopedPullToRefreshMode(const ScopedPullToRefreshMode&) = delete;
+  ScopedPullToRefreshMode& operator=(const ScopedPullToRefreshMode&) = delete;
+
+  ~ScopedPullToRefreshMode();
 };
 
 }  // namespace content
diff --git a/content/public/test/service_worker_host_interceptor.h b/content/public/test/service_worker_host_interceptor.h
index 7232334..3223846 100644
--- a/content/public/test/service_worker_host_interceptor.h
+++ b/content/public/test/service_worker_host_interceptor.h
@@ -29,6 +29,11 @@
     : public blink::mojom::ServiceWorkerHostInterceptorForTesting {
  public:
   ServiceWorkerHostInterceptor();
+
+  ServiceWorkerHostInterceptor(const ServiceWorkerHostInterceptor&) = delete;
+  ServiceWorkerHostInterceptor& operator=(const ServiceWorkerHostInterceptor&) =
+      delete;
+
   ~ServiceWorkerHostInterceptor() override;
 
   // Looks for the service worker with the |scope| and starts intercepting calls
@@ -73,8 +78,6 @@
   int service_worker_process_id_ = -1;
   ServiceWorkerVersion* service_worker_version_ = nullptr;
   blink::mojom::ServiceWorkerHost* forwarding_interface_ = nullptr;
-
-  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerHostInterceptor);
 };
 
 }  // namespace content
diff --git a/content/public/test/signed_exchange_browser_test_helper.h b/content/public/test/signed_exchange_browser_test_helper.h
index b14f1729..1ebc1f9 100644
--- a/content/public/test/signed_exchange_browser_test_helper.h
+++ b/content/public/test/signed_exchange_browser_test_helper.h
@@ -46,6 +46,12 @@
 class SignedExchangeBrowserTestHelper {
  public:
   SignedExchangeBrowserTestHelper();
+
+  SignedExchangeBrowserTestHelper(const SignedExchangeBrowserTestHelper&) =
+      delete;
+  SignedExchangeBrowserTestHelper& operator=(
+      const SignedExchangeBrowserTestHelper&) = delete;
+
   ~SignedExchangeBrowserTestHelper();
 
   void SetUp();
@@ -76,8 +82,6 @@
 
   std::unique_ptr<URLLoaderInterceptor> interceptor_;
   std::map<GURL, std::string> interceptor_data_path_map_;
-
-  DISALLOW_COPY_AND_ASSIGN(SignedExchangeBrowserTestHelper);
 };
 
 }  // namespace content
diff --git a/content/public/test/simple_url_loader_test_helper.h b/content/public/test/simple_url_loader_test_helper.h
index acb687c..c06944f8 100644
--- a/content/public/test/simple_url_loader_test_helper.h
+++ b/content/public/test/simple_url_loader_test_helper.h
@@ -21,6 +21,11 @@
 class SimpleURLLoaderTestHelper {
  public:
   SimpleURLLoaderTestHelper();
+
+  SimpleURLLoaderTestHelper(const SimpleURLLoaderTestHelper&) = delete;
+  SimpleURLLoaderTestHelper& operator=(const SimpleURLLoaderTestHelper&) =
+      delete;
+
   ~SimpleURLLoaderTestHelper();
 
   // Returns a BodyAsStringCallback for use with a SimpleURLLoader. May be
@@ -49,8 +54,6 @@
   std::unique_ptr<std::string> response_body_;
 
   base::WeakPtrFactory<SimpleURLLoaderTestHelper> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(SimpleURLLoaderTestHelper);
 };
 
 }  // namespace content
diff --git a/content/public/test/test_browser_context.h b/content/public/test/test_browser_context.h
index 99b3c14..dd562cfc 100644
--- a/content/public/test/test_browser_context.h
+++ b/content/public/test/test_browser_context.h
@@ -27,6 +27,10 @@
  public:
   explicit TestBrowserContext(
       base::FilePath browser_context_dir_path = base::FilePath());
+
+  TestBrowserContext(const TestBrowserContext&) = delete;
+  TestBrowserContext& operator=(const TestBrowserContext&) = delete;
+
   ~TestBrowserContext() override;
 
   // Takes ownership of the temporary directory so that it's not deleted when
@@ -75,8 +79,6 @@
   std::unique_ptr<MockBackgroundSyncController> background_sync_controller_;
   std::unique_ptr<PlatformNotificationService> platform_notification_service_;
   bool is_off_the_record_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(TestBrowserContext);
 };
 
 }  // namespace content
diff --git a/content/public/test/test_content_client_initializer.h b/content/public/test/test_content_client_initializer.h
index aa81ce71..8566967 100644
--- a/content/public/test/test_content_client_initializer.h
+++ b/content/public/test/test_content_client_initializer.h
@@ -28,6 +28,11 @@
 class TestContentClientInitializer {
  public:
   TestContentClientInitializer();
+
+  TestContentClientInitializer(const TestContentClientInitializer&) = delete;
+  TestContentClientInitializer& operator=(const TestContentClientInitializer&) =
+      delete;
+
   ~TestContentClientInitializer();
 
   // Enables switching RenderViewHost creation to use the test version instead
@@ -44,8 +49,6 @@
   std::unique_ptr<MockRenderProcessHostFactory> rph_factory_;
   std::unique_ptr<MockAgentSchedulingGroupHostFactory> asgh_factory_;
   std::unique_ptr<TestRenderViewHostFactory> test_render_view_host_factory_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestContentClientInitializer);
 };
 
 }  // namespace content
diff --git a/content/public/test/test_download_http_response.cc b/content/public/test/test_download_http_response.cc
index f9ef140..b9b67e14 100644
--- a/content/public/test/test_download_http_response.cc
+++ b/content/public/test/test_download_http_response.cc
@@ -76,6 +76,10 @@
  public:
   explicit HttpResponse(base::WeakPtr<TestDownloadHttpResponse> owner)
       : owner_(owner) {}
+
+  HttpResponse(const HttpResponse&) = delete;
+  HttpResponse& operator=(const HttpResponse&) = delete;
+
   ~HttpResponse() override = default;
 
  private:
@@ -87,7 +91,6 @@
   }
 
   base::WeakPtr<TestDownloadHttpResponse> owner_;
-  DISALLOW_COPY_AND_ASSIGN(HttpResponse);
 };
 
 }  // namespace
diff --git a/content/public/test/test_download_http_response.h b/content/public/test/test_download_http_response.h
index 49e60cd..f581296e 100644
--- a/content/public/test/test_download_http_response.h
+++ b/content/public/test/test_download_http_response.h
@@ -251,6 +251,10 @@
   TestDownloadHttpResponse(const net::test_server::HttpRequest& request,
                            const Parameters& parameters,
                            OnResponseSentCallback on_response_sent_callback);
+
+  TestDownloadHttpResponse(const TestDownloadHttpResponse&) = delete;
+  TestDownloadHttpResponse& operator=(const TestDownloadHttpResponse&) = delete;
+
   ~TestDownloadHttpResponse();
 
   // Creates a shim HttpResponse object for embedded test server. This life time
@@ -350,8 +354,6 @@
   base::OnceClosure delayed_response_callback_;
 
   base::WeakPtrFactory<TestDownloadHttpResponse> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(TestDownloadHttpResponse);
 };
 
 // Class for creating and monitoring the completed response from the server.
@@ -374,6 +376,11 @@
       const net::test_server::HttpRequest& request);
 
   TestDownloadResponseHandler();
+
+  TestDownloadResponseHandler(const TestDownloadResponseHandler&) = delete;
+  TestDownloadResponseHandler& operator=(const TestDownloadResponseHandler&) =
+      delete;
+
   ~TestDownloadResponseHandler();
 
   // Register to the embedded test |server|.
@@ -401,8 +408,6 @@
   std::unique_ptr<base::RunLoop> run_loop_;
   scoped_refptr<base::SingleThreadTaskRunner> server_task_runner_;
   SEQUENCE_CHECKER(sequence_checker_);
-
-  DISALLOW_COPY_AND_ASSIGN(TestDownloadResponseHandler);
 };
 
 }  // namespace content
diff --git a/content/public/test/test_fileapi_operation_waiter.h b/content/public/test/test_fileapi_operation_waiter.h
index 4b5a39a..6d4f525 100644
--- a/content/public/test/test_fileapi_operation_waiter.h
+++ b/content/public/test/test_fileapi_operation_waiter.h
@@ -22,6 +22,11 @@
     : public blink::mojom::FileSystemOperationListener {
  public:
   TestFileapiOperationWaiter();
+
+  TestFileapiOperationWaiter(const TestFileapiOperationWaiter&) = delete;
+  TestFileapiOperationWaiter& operator=(const TestFileapiOperationWaiter&) =
+      delete;
+
   ~TestFileapiOperationWaiter() override;
 
   void WaitForOperationToFinish();
@@ -38,8 +43,6 @@
 
  private:
   base::RunLoop run_loop_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestFileapiOperationWaiter);
 };
 
 }  // namespace content
diff --git a/content/public/test/test_frame_navigation_observer.h b/content/public/test/test_frame_navigation_observer.h
index 075412e..f10f6470 100644
--- a/content/public/test/test_frame_navigation_observer.h
+++ b/content/public/test/test_frame_navigation_observer.h
@@ -22,6 +22,10 @@
   // the navigation (e.g. if the content commits in a new renderer process).
   explicit TestFrameNavigationObserver(const ToRenderFrameHost& adapter);
 
+  TestFrameNavigationObserver(const TestFrameNavigationObserver&) = delete;
+  TestFrameNavigationObserver& operator=(const TestFrameNavigationObserver&) =
+      delete;
+
   ~TestFrameNavigationObserver() override;
 
   ui::PageTransition transition_type() { return transition_type_.value(); }
@@ -65,8 +69,6 @@
 
   // The RunLoop used to spin the message loop.
   base::RunLoop run_loop_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestFrameNavigationObserver);
 };
 
 }  // namespace content
diff --git a/content/public/test/test_host_resolver.h b/content/public/test/test_host_resolver.h
index 1278970f0..afb82445 100644
--- a/content/public/test/test_host_resolver.h
+++ b/content/public/test/test_host_resolver.h
@@ -18,6 +18,10 @@
 class TestHostResolver {
  public:
   TestHostResolver();
+
+  TestHostResolver(const TestHostResolver&) = delete;
+  TestHostResolver& operator=(const TestHostResolver&) = delete;
+
   ~TestHostResolver();
 
   net::RuleBasedHostResolverProc* host_resolver() {
@@ -30,8 +34,6 @@
   scoped_refptr<net::RuleBasedHostResolverProc> rule_based_resolver_;
   std::unique_ptr<net::ScopedDefaultHostResolverProc>
       scoped_local_host_resolver_proc_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestHostResolver);
 };
 
 }  // namespace content
diff --git a/content/public/test/test_navigation_observer.h b/content/public/test/test_navigation_observer.h
index 365b0a6..19f307e 100644
--- a/content/public/test/test_navigation_observer.h
+++ b/content/public/test/test_navigation_observer.h
@@ -59,6 +59,9 @@
                                       MessageLoopRunner::QuitMode::IMMEDIATE,
                                   bool ignore_uncommitted_navigations = true);
 
+  TestNavigationObserver(const TestNavigationObserver&) = delete;
+  TestNavigationObserver& operator=(const TestNavigationObserver&) = delete;
+
   virtual ~TestNavigationObserver();
 
   void set_wait_event(WaitEvent event) { wait_event_ = event; }
@@ -252,8 +255,6 @@
 
   // Callback invoked on WebContents creation.
   base::RepeatingCallback<void(WebContents*)> web_contents_created_callback_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestNavigationObserver);
 };
 
 }  // namespace content
diff --git a/content/public/test/test_navigation_throttle.h b/content/public/test/test_navigation_throttle.h
index 9f31c409..588b8657 100644
--- a/content/public/test/test_navigation_throttle.h
+++ b/content/public/test/test_navigation_throttle.h
@@ -35,6 +35,10 @@
   };
 
   TestNavigationThrottle(NavigationHandle* handle);
+
+  TestNavigationThrottle(const TestNavigationThrottle&) = delete;
+  TestNavigationThrottle& operator=(const TestNavigationThrottle&) = delete;
+
   ~TestNavigationThrottle() override;
 
   // NavigationThrottle:
@@ -100,8 +104,6 @@
   MethodProperties method_properties_[NUM_THROTTLE_METHODS];
 
   base::WeakPtrFactory<TestNavigationThrottle> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(TestNavigationThrottle);
 };
 
 }  // namespace content
diff --git a/content/public/test/test_navigation_throttle_inserter.h b/content/public/test/test_navigation_throttle_inserter.h
index 01eb19f8da..6ba6ec0 100644
--- a/content/public/test/test_navigation_throttle_inserter.h
+++ b/content/public/test/test_navigation_throttle_inserter.h
@@ -28,6 +28,12 @@
  public:
   TestNavigationThrottleInserter(WebContents* web_contents,
                                  ThrottleInsertionCallback callback);
+
+  TestNavigationThrottleInserter(const TestNavigationThrottleInserter&) =
+      delete;
+  TestNavigationThrottleInserter& operator=(
+      const TestNavigationThrottleInserter&) = delete;
+
   ~TestNavigationThrottleInserter() override;
 
   // WebContentsObserver:
@@ -35,8 +41,6 @@
 
  private:
   ThrottleInsertionCallback callback_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestNavigationThrottleInserter);
 };
 
 }  // namespace content
diff --git a/content/public/test/test_notification_tracker.h b/content/public/test/test_notification_tracker.h
index 67b8b1c..0a749bb6 100644
--- a/content/public/test/test_notification_tracker.h
+++ b/content/public/test/test_notification_tracker.h
@@ -36,6 +36,9 @@
   // ListenFor for the notifications you are interested in.
   TestNotificationTracker();
 
+  TestNotificationTracker(const TestNotificationTracker&) = delete;
+  TestNotificationTracker& operator=(const TestNotificationTracker&) = delete;
+
   ~TestNotificationTracker() override;
 
   // Makes this object listen for the given notification with the given source.
@@ -80,8 +83,6 @@
 
   // Lists all received since last cleared, in the order they were received.
   std::vector<Event> events_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestNotificationTracker);
 };
 
 }  // namespace content
diff --git a/content/public/test/test_renderer_host.h b/content/public/test/test_renderer_host.h
index 7a12aa8..10ce35d 100644
--- a/content/public/test/test_renderer_host.h
+++ b/content/public/test/test_renderer_host.h
@@ -173,10 +173,13 @@
 class RenderViewHostTestEnabler {
  public:
   RenderViewHostTestEnabler();
+
+  RenderViewHostTestEnabler(const RenderViewHostTestEnabler&) = delete;
+  RenderViewHostTestEnabler& operator=(const RenderViewHostTestEnabler&) =
+      delete;
+
   ~RenderViewHostTestEnabler();
 
- private:
-  DISALLOW_COPY_AND_ASSIGN(RenderViewHostTestEnabler);
   friend class RenderViewHostTestHarness;
 
 #if defined(OS_ANDROID)
@@ -201,6 +204,10 @@
       : RenderViewHostTestHarness(std::make_unique<BrowserTaskEnvironment>(
             std::forward<TaskEnvironmentTraits>(traits)...)) {}
 
+  RenderViewHostTestHarness(const RenderViewHostTestHarness&) = delete;
+  RenderViewHostTestHarness& operator=(const RenderViewHostTestHarness&) =
+      delete;
+
   ~RenderViewHostTestHarness() override;
 
   NavigationController& controller();
@@ -305,8 +312,6 @@
   std::unique_ptr<aura::test::AuraTestHelper> aura_test_helper_;
 #endif
   RenderProcessHostFactory* factory_ = nullptr;
-
-  DISALLOW_COPY_AND_ASSIGN(RenderViewHostTestHarness);
 };
 
 }  // namespace content
diff --git a/content/public/test/test_storage_partition.h b/content/public/test/test_storage_partition.h
index fcfb6bb..4d8cecd 100644
--- a/content/public/test/test_storage_partition.h
+++ b/content/public/test/test_storage_partition.h
@@ -44,6 +44,10 @@
 class TestStoragePartition : public StoragePartition {
  public:
   TestStoragePartition();
+
+  TestStoragePartition(const TestStoragePartition&) = delete;
+  TestStoragePartition& operator=(const TestStoragePartition&) = delete;
+
   ~TestStoragePartition() override;
 
   void set_path(base::FilePath file_path) { file_path_ = file_path; }
@@ -253,8 +257,6 @@
   ZoomLevelDelegate* zoom_level_delegate_ = nullptr;
 #endif  // !defined(OS_ANDROID)
   int data_removal_observer_count_ = 0;
-
-  DISALLOW_COPY_AND_ASSIGN(TestStoragePartition);
 };
 
 }  // namespace content
diff --git a/content/public/test/test_synchronous_compositor_android.h b/content/public/test/test_synchronous_compositor_android.h
index 70a18cd..c10ea4c 100644
--- a/content/public/test/test_synchronous_compositor_android.h
+++ b/content/public/test/test_synchronous_compositor_android.h
@@ -20,6 +20,11 @@
 class CONTENT_EXPORT TestSynchronousCompositor : public SynchronousCompositor {
  public:
   explicit TestSynchronousCompositor(const viz::FrameSinkId& frame_sink_id);
+
+  TestSynchronousCompositor(const TestSynchronousCompositor&) = delete;
+  TestSynchronousCompositor& operator=(const TestSynchronousCompositor&) =
+      delete;
+
   ~TestSynchronousCompositor() override;
 
   void SetClient(SynchronousCompositorClient* client);
@@ -63,8 +68,6 @@
   viz::FrameSinkId frame_sink_id_;
   std::unique_ptr<Frame> hardware_frame_;
   FrameAckArray frame_ack_array_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestSynchronousCompositor);
 };
 
 }  // namespace content
diff --git a/content/public/test/test_utils.cc b/content/public/test/test_utils.cc
index 03dc70504..41bf56bc 100644
--- a/content/public/test/test_utils.cc
+++ b/content/public/test/test_utils.cc
@@ -76,6 +76,10 @@
 class TaskObserver : public base::TaskObserver {
  public:
   TaskObserver() = default;
+
+  TaskObserver(const TaskObserver&) = delete;
+  TaskObserver& operator=(const TaskObserver&) = delete;
+
   ~TaskObserver() override = default;
 
   // TaskObserver overrides.
@@ -96,7 +100,6 @@
 
  private:
   bool processed_ = false;
-  DISALLOW_COPY_AND_ASSIGN(TaskObserver);
 };
 
 // Adapter that makes a WindowedNotificationObserver::ConditionTestCallback from
diff --git a/content/public/test/test_utils.h b/content/public/test/test_utils.h
index 4eedb38..2580b45 100644
--- a/content/public/test/test_utils.h
+++ b/content/public/test/test_utils.h
@@ -262,6 +262,10 @@
       int notification_type,
       ConditionTestCallbackWithoutSourceAndDetails callback);
 
+  WindowedNotificationObserver(const WindowedNotificationObserver&) = delete;
+  WindowedNotificationObserver& operator=(const WindowedNotificationObserver&) =
+      delete;
+
   ~WindowedNotificationObserver() override;
 
   // Adds an additional notification type to wait for. The condition will be met
@@ -299,8 +303,6 @@
   NotificationSource source_;
   NotificationDetails details_;
   base::RunLoop run_loop_;
-
-  DISALLOW_COPY_AND_ASSIGN(WindowedNotificationObserver);
 };
 
 // Unit tests can use code which runs in the utility process by having it run on
@@ -317,6 +319,11 @@
 class InProcessUtilityThreadHelper : public BrowserChildProcessObserver {
  public:
   InProcessUtilityThreadHelper();
+
+  InProcessUtilityThreadHelper(const InProcessUtilityThreadHelper&) = delete;
+  InProcessUtilityThreadHelper& operator=(const InProcessUtilityThreadHelper&) =
+      delete;
+
   ~InProcessUtilityThreadHelper() override;
 
  private:
@@ -326,8 +333,6 @@
       const ChildProcessData& data) override;
 
   absl::optional<base::RunLoop> run_loop_;
-
-  DISALLOW_COPY_AND_ASSIGN(InProcessUtilityThreadHelper);
 };
 
 // This observer keeps tracks of whether a given RenderFrameHost has received
@@ -336,6 +341,11 @@
  public:
   // |rfh| should not already be deleted.
   explicit RenderFrameDeletedObserver(RenderFrameHost* rfh);
+
+  RenderFrameDeletedObserver(const RenderFrameDeletedObserver&) = delete;
+  RenderFrameDeletedObserver& operator=(const RenderFrameDeletedObserver&) =
+      delete;
+
   ~RenderFrameDeletedObserver() override;
 
   // Overridden WebContentsObserver methods.
@@ -357,8 +367,6 @@
   GlobalRenderFrameHostId routing_id_;
   std::unique_ptr<base::RunLoop> runner_;
   std::string back_forward_cache_eligibility_for_debug_;
-
-  DISALLOW_COPY_AND_ASSIGN(RenderFrameDeletedObserver);
 };
 
 // This class holds a RenderFrameHost*, providing safe access to it for testing.
@@ -401,6 +409,11 @@
 class WebContentsDestroyedWatcher : public WebContentsObserver {
  public:
   explicit WebContentsDestroyedWatcher(WebContents* web_contents);
+
+  WebContentsDestroyedWatcher(const WebContentsDestroyedWatcher&) = delete;
+  WebContentsDestroyedWatcher& operator=(const WebContentsDestroyedWatcher&) =
+      delete;
+
   ~WebContentsDestroyedWatcher() override;
 
   // Waits until the WebContents is destroyed.
@@ -416,14 +429,16 @@
   base::RunLoop run_loop_;
 
   bool destroyed_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(WebContentsDestroyedWatcher);
 };
 
 // Watches a web contents for page scales.
 class TestPageScaleObserver : public WebContentsObserver {
  public:
   explicit TestPageScaleObserver(WebContents* web_contents);
+
+  TestPageScaleObserver(const TestPageScaleObserver&) = delete;
+  TestPageScaleObserver& operator=(const TestPageScaleObserver&) = delete;
+
   ~TestPageScaleObserver() override;
   float WaitForPageScaleUpdate();
 
@@ -433,8 +448,6 @@
   base::OnceClosure done_callback_;
   bool seen_page_scale_change_ = false;
   float last_scale_ = 0.f;
-
-  DISALLOW_COPY_AND_ASSIGN(TestPageScaleObserver);
 };
 
 // A custom ContentBrowserClient that simulates GetEffectiveURL() translation
@@ -448,6 +461,12 @@
   EffectiveURLContentBrowserClient(const GURL& url_to_modify,
                                    const GURL& url_to_return,
                                    bool requires_dedicated_process);
+
+  EffectiveURLContentBrowserClient(const EffectiveURLContentBrowserClient&) =
+      delete;
+  EffectiveURLContentBrowserClient& operator=(
+      const EffectiveURLContentBrowserClient&) = delete;
+
   ~EffectiveURLContentBrowserClient() override;
 
   // Adds effective URL translation from |url_to_modify| to |url_to_return|.
@@ -463,8 +482,6 @@
   std::map<GURL, GURL> urls_to_modify_;
 
   bool requires_dedicated_process_;
-
-  DISALLOW_COPY_AND_ASSIGN(EffectiveURLContentBrowserClient);
 };
 
 }  // namespace content
diff --git a/content/public/test/test_web_contents_factory.h b/content/public/test/test_web_contents_factory.h
index 573723b..f222589e 100644
--- a/content/public/test/test_web_contents_factory.h
+++ b/content/public/test/test_web_contents_factory.h
@@ -30,6 +30,10 @@
 class TestWebContentsFactory {
  public:
   TestWebContentsFactory();
+
+  TestWebContentsFactory(const TestWebContentsFactory&) = delete;
+  TestWebContentsFactory& operator=(const TestWebContentsFactory&) = delete;
+
   ~TestWebContentsFactory();
 
   // Creates a new WebContents with the given |context|, and returns it.
@@ -45,8 +49,6 @@
 
   // The vector of web contents that this class created.
   std::vector<std::unique_ptr<WebContents>> web_contents_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestWebContentsFactory);
 };
 
 }  // namespace content
diff --git a/content/public/test/test_web_ui.h b/content/public/test/test_web_ui.h
index 18895ae..28b8637 100644
--- a/content/public/test/test_web_ui.h
+++ b/content/public/test/test_web_ui.h
@@ -21,6 +21,10 @@
 class TestWebUI : public WebUI {
  public:
   TestWebUI();
+
+  TestWebUI(const TestWebUI&) = delete;
+  TestWebUI& operator=(const TestWebUI&) = delete;
+
   ~TestWebUI() override;
 
   void ClearTrackedCalls();
@@ -129,8 +133,6 @@
 
   // Observers to be notified on all javascript calls.
   base::ObserverList<JavascriptCallObserver> javascript_call_observers_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestWebUI);
 };
 
 }  // namespace content
diff --git a/content/public/test/test_web_ui_data_source.cc b/content/public/test/test_web_ui_data_source.cc
index 2099bf1e..8d901c2 100644
--- a/content/public/test/test_web_ui_data_source.cc
+++ b/content/public/test/test_web_ui_data_source.cc
@@ -33,6 +33,9 @@
   explicit TestWebUIDataSourceImpl(const std::string& source_name)
       : source_(WebUIDataSourceImplWithPublicData::Create(source_name)) {}
 
+  TestWebUIDataSourceImpl(const TestWebUIDataSourceImpl&) = delete;
+  TestWebUIDataSourceImpl& operator=(const TestWebUIDataSourceImpl&) = delete;
+
   ~TestWebUIDataSourceImpl() override {}
 
   const base::DictionaryValue* GetLocalizedStrings() override {
@@ -47,8 +50,6 @@
 
  private:
   scoped_refptr<WebUIDataSourceImplWithPublicData> source_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestWebUIDataSourceImpl);
 };
 
 // static
diff --git a/content/public/test/text_input_test_utils.cc b/content/public/test/text_input_test_utils.cc
index 23e6175..6ae4a24 100644
--- a/content/public/test/text_input_test_utils.cc
+++ b/content/public/test/text_input_test_utils.cc
@@ -52,6 +52,9 @@
     text_input_manager_->AddObserver(this);
   }
 
+  InternalObserver(const InternalObserver&) = delete;
+  InternalObserver& operator=(const InternalObserver&) = delete;
+
   ~InternalObserver() override {
     if (text_input_manager_)
       text_input_manager_->RemoveObserver(this);
@@ -142,8 +145,6 @@
   base::RepeatingClosure on_selection_bounds_changed_callback_;
   base::RepeatingClosure on_ime_composition_range_changed_callback_;
   base::RepeatingClosure on_text_selection_changed_callback_;
-
-  DISALLOW_COPY_AND_ASSIGN(InternalObserver);
 };
 
 // This class observes the lifetime of a RenderWidgetHostView. An instance of
@@ -157,6 +158,9 @@
     view->AddObserver(this);
   }
 
+  InternalObserver(const InternalObserver&) = delete;
+  InternalObserver& operator=(const InternalObserver&) = delete;
+
   ~InternalObserver() override {
     if (view_)
       view_->RemoveObserver(this);
@@ -183,8 +187,6 @@
   RenderWidgetHostViewBase* view_;
   bool destroyed_;
   scoped_refptr<MessageLoopRunner> message_loop_runner_;
-
-  DISALLOW_COPY_AND_ASSIGN(InternalObserver);
 };
 
 #if defined(USE_AURA)
@@ -196,6 +198,9 @@
     input_method_->AddObserver(this);
   }
 
+  InputMethodObserverAura(const InputMethodObserverAura&) = delete;
+  InputMethodObserverAura& operator=(const InputMethodObserverAura&) = delete;
+
   ~InputMethodObserverAura() override {
     if (input_method_)
       input_method_->RemoveObserver(this);
@@ -228,8 +233,6 @@
   ui::InputMethod* input_method_;
   const ui::TextInputClient* text_input_client_;
   base::RepeatingClosure on_show_ime_if_needed_callback_;
-
-  DISALLOW_COPY_AND_ASSIGN(InputMethodObserverAura);
 };
 #endif
 
diff --git a/content/public/test/text_input_test_utils.h b/content/public/test/text_input_test_utils.h
index 51f93b4..b905cbb 100644
--- a/content/public/test/text_input_test_utils.h
+++ b/content/public/test/text_input_test_utils.h
@@ -98,6 +98,10 @@
 class TextInputManagerTester {
  public:
   TextInputManagerTester(WebContents* web_contents);
+
+  TextInputManagerTester(const TextInputManagerTester&) = delete;
+  TextInputManagerTester& operator=(const TextInputManagerTester&) = delete;
+
   virtual ~TextInputManagerTester();
 
   // Sets a callback which is invoked when a RWHV calls UpdateTextInputState
@@ -168,8 +172,6 @@
   class InternalObserver;
 
   std::unique_ptr<InternalObserver> observer_;
-
-  DISALLOW_COPY_AND_ASSIGN(TextInputManagerTester);
 };
 
 // TextInputManager Observers
@@ -240,6 +242,12 @@
 class TestRenderWidgetHostViewDestructionObserver {
  public:
   TestRenderWidgetHostViewDestructionObserver(RenderWidgetHostView* view);
+
+  TestRenderWidgetHostViewDestructionObserver(
+      const TestRenderWidgetHostViewDestructionObserver&) = delete;
+  TestRenderWidgetHostViewDestructionObserver& operator=(
+      const TestRenderWidgetHostViewDestructionObserver&) = delete;
+
   virtual ~TestRenderWidgetHostViewDestructionObserver();
 
   // Waits for the RWHV which is being observed to get destroyed.
@@ -250,8 +258,6 @@
   class InternalObserver;
 
   std::unique_ptr<InternalObserver> observer_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestRenderWidgetHostViewDestructionObserver);
 };
 
 // Helper class to create TextInputState structs on the browser side and send it
@@ -260,6 +266,10 @@
 class TextInputStateSender {
  public:
   explicit TextInputStateSender(RenderWidgetHostView* view);
+
+  TextInputStateSender(const TextInputStateSender&) = delete;
+  TextInputStateSender& operator=(const TextInputStateSender&) = delete;
+
   virtual ~TextInputStateSender();
 
   void Send();
@@ -281,8 +291,6 @@
  private:
   ui::mojom::TextInputStatePtr text_input_state_;
   RenderWidgetHostViewBase* const view_;
-
-  DISALLOW_COPY_AND_ASSIGN(TextInputStateSender);
 };
 
 // This class is intended to observe the InputMethod.
@@ -310,6 +318,10 @@
 class TextInputTestLocalFrame : public FakeLocalFrame {
  public:
   TextInputTestLocalFrame();
+
+  TextInputTestLocalFrame(const TextInputTestLocalFrame&) = delete;
+  TextInputTestLocalFrame& operator=(const TextInputTestLocalFrame&) = delete;
+
   ~TextInputTestLocalFrame() override;
 
   void SetUp(content::RenderFrameHost* render_frame_host);
@@ -332,8 +344,6 @@
   base::RepeatingClosure string_for_range_callback_;
   std::string string_from_range_;
   mojo::AssociatedRemote<blink::mojom::LocalFrame> local_frame_;
-
-  DISALLOW_COPY_AND_ASSIGN(TextInputTestLocalFrame);
 };
 
 // Requests the |tab_view| for the definition of the word identified by the
diff --git a/content/public/test/unittest_test_suite.h b/content/public/test/unittest_test_suite.h
index dd4549f..d73c041 100644
--- a/content/public/test/unittest_test_suite.h
+++ b/content/public/test/unittest_test_suite.h
@@ -27,6 +27,10 @@
  public:
   // Takes ownership of |test_suite|.
   explicit UnitTestTestSuite(base::TestSuite* test_suite);
+
+  UnitTestTestSuite(const UnitTestTestSuite&) = delete;
+  UnitTestTestSuite& operator=(const UnitTestTestSuite&) = delete;
+
   ~UnitTestTestSuite();
 
   int Run();
@@ -37,8 +41,6 @@
   std::unique_ptr<TestBlinkWebUnitTestSupport> blink_test_support_;
 
   std::unique_ptr<TestHostResolver> test_host_resolver_;
-
-  DISALLOW_COPY_AND_ASSIGN(UnitTestTestSuite);
 };
 
 }  // namespace content
diff --git a/content/public/test/url_loader_interceptor.cc b/content/public/test/url_loader_interceptor.cc
index 2788b03..f3cda33 100644
--- a/content/public/test/url_loader_interceptor.cc
+++ b/content/public/test/url_loader_interceptor.cc
@@ -240,6 +240,9 @@
         &Interceptor::OnConnectionError, base::Unretained(this)));
   }
 
+  Interceptor(const Interceptor&) = delete;
+  Interceptor& operator=(const Interceptor&) = delete;
+
   ~Interceptor() override {}
 
   void BindReceiver(
@@ -296,8 +299,6 @@
   base::OnceClosure error_handler_;
   std::vector<std::unique_ptr<URLLoaderClientInterceptor>>
       url_loader_client_interceptors_;
-
-  DISALLOW_COPY_AND_ASSIGN(Interceptor);
 };
 
 // This class intercepts calls to each StoragePartition's URLLoaderFactoryGetter
@@ -367,6 +368,9 @@
     interceptor_.BindReceiver(std::move(factory_receiver));
   }
 
+  BrowserProcessWrapper(const BrowserProcessWrapper&) = delete;
+  BrowserProcessWrapper& operator=(const BrowserProcessWrapper&) = delete;
+
   ~BrowserProcessWrapper() {}
 
  private:
@@ -376,8 +380,6 @@
 
   Interceptor interceptor_;
   mojo::Remote<network::mojom::URLLoaderFactory> original_factory_;
-
-  DISALLOW_COPY_AND_ASSIGN(BrowserProcessWrapper);
 };
 
 // This class is used (e.g. sent in a RenderFrame commit message, or used to
@@ -404,6 +406,9 @@
         base::Unretained(parent), this));
   }
 
+  RenderProcessHostWrapper(const RenderProcessHostWrapper&) = delete;
+  RenderProcessHostWrapper& operator=(const RenderProcessHostWrapper&) = delete;
+
   ~RenderProcessHostWrapper() {}
 
  private:
@@ -413,8 +418,6 @@
 
   Interceptor interceptor_;
   mojo::Remote<network::mojom::URLLoaderFactory> original_factory_;
-
-  DISALLOW_COPY_AND_ASSIGN(RenderProcessHostWrapper);
 };
 
 URLLoaderInterceptor::RequestParams::RequestParams() = default;
diff --git a/content/public/test/url_loader_interceptor.h b/content/public/test/url_loader_interceptor.h
index 67fe4cf..507c2e6 100644
--- a/content/public/test/url_loader_interceptor.h
+++ b/content/public/test/url_loader_interceptor.h
@@ -101,6 +101,9 @@
       const URLLoaderCompletionStatusCallback& completion_status_callback,
       base::OnceClosure ready_callback);
 
+  URLLoaderInterceptor(const URLLoaderInterceptor&) = delete;
+  URLLoaderInterceptor& operator=(const URLLoaderInterceptor&) = delete;
+
   ~URLLoaderInterceptor();
 
   // Serves static data, similar to net::test::EmbeddedTestServer, for
@@ -230,8 +233,6 @@
   base::Lock last_request_lock_;
   GURL last_request_url_ GUARDED_BY(last_request_lock_);
   net::HttpRequestHeaders last_request_headers_ GUARDED_BY(last_request_lock_);
-
-  DISALLOW_COPY_AND_ASSIGN(URLLoaderInterceptor);
 };
 
 }  // namespace content
diff --git a/content/renderer/accessibility/ax_image_annotator.h b/content/renderer/accessibility/ax_image_annotator.h
index a629e25..6ebd823 100644
--- a/content/renderer/accessibility/ax_image_annotator.h
+++ b/content/renderer/accessibility/ax_image_annotator.h
@@ -41,6 +41,10 @@
   AXImageAnnotator(
       RenderAccessibilityImpl* const render_accessibility,
       mojo::PendingRemote<image_annotation::mojom::Annotator> annotator);
+
+  AXImageAnnotator(const AXImageAnnotator&) = delete;
+  AXImageAnnotator& operator=(const AXImageAnnotator&) = delete;
+
   ~AXImageAnnotator() override;
 
   void Destroy();
@@ -130,8 +134,6 @@
 
   // This member needs to be last because it should destructed first.
   base::WeakPtrFactory<AXImageAnnotator> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(AXImageAnnotator);
 };
 
 }  // namespace content
diff --git a/content/renderer/accessibility/blink_ax_tree_source.h b/content/renderer/accessibility/blink_ax_tree_source.h
index d3a63eb..f9139e9 100644
--- a/content/renderer/accessibility/blink_ax_tree_source.h
+++ b/content/renderer/accessibility/blink_ax_tree_source.h
@@ -32,12 +32,15 @@
 class ScopedFreezeBlinkAXTreeSource {
  public:
   explicit ScopedFreezeBlinkAXTreeSource(BlinkAXTreeSource* tree_source);
+
+  ScopedFreezeBlinkAXTreeSource(const ScopedFreezeBlinkAXTreeSource&) = delete;
+  ScopedFreezeBlinkAXTreeSource& operator=(
+      const ScopedFreezeBlinkAXTreeSource&) = delete;
+
   ~ScopedFreezeBlinkAXTreeSource();
 
  private:
   BlinkAXTreeSource* tree_source_;
-
-  DISALLOW_COPY_AND_ASSIGN(ScopedFreezeBlinkAXTreeSource);
 };
 
 class CONTENT_EXPORT BlinkAXTreeSource
diff --git a/content/renderer/accessibility/render_accessibility_impl.h b/content/renderer/accessibility/render_accessibility_impl.h
index 1e9440f..8c03478 100644
--- a/content/renderer/accessibility/render_accessibility_impl.h
+++ b/content/renderer/accessibility/render_accessibility_impl.h
@@ -95,6 +95,10 @@
       RenderAccessibilityManager* const render_accessibility_manager,
       RenderFrameImpl* const render_frame,
       ui::AXMode mode);
+
+  RenderAccessibilityImpl(const RenderAccessibilityImpl&) = delete;
+  RenderAccessibilityImpl& operator=(const RenderAccessibilityImpl&) = delete;
+
   ~RenderAccessibilityImpl() override;
 
   ui::AXMode GetAccessibilityMode() {
@@ -332,8 +336,6 @@
   friend class PluginActionHandlingTest;
   friend class RenderAccessibilityImplTest;
   friend class RenderAccessibilityImplUKMTest;
-
-  DISALLOW_COPY_AND_ASSIGN(RenderAccessibilityImpl);
 };
 
 }  // namespace content
diff --git a/content/renderer/accessibility/render_accessibility_impl_browsertest.cc b/content/renderer/accessibility/render_accessibility_impl_browsertest.cc
index 96ef69a5..bdb327b 100644
--- a/content/renderer/accessibility/render_accessibility_impl_browsertest.cc
+++ b/content/renderer/accessibility/render_accessibility_impl_browsertest.cc
@@ -82,6 +82,10 @@
       mojo::PendingRemote<image_annotation::mojom::Annotator> annotator)
       : AXImageAnnotator(render_accessibility,
                          std::move(annotator)) {}
+
+  TestAXImageAnnotator(const TestAXImageAnnotator&) = delete;
+  TestAXImageAnnotator& operator=(const TestAXImageAnnotator&) = delete;
+
   ~TestAXImageAnnotator() override = default;
 
  private:
@@ -98,13 +102,15 @@
         image.GetNode().To<blink::WebElement>().GetAttribute("SRC").Utf8();
     return image_id;
   }
-
-  DISALLOW_COPY_AND_ASSIGN(TestAXImageAnnotator);
 };
 
 class MockAnnotationService : public image_annotation::mojom::Annotator {
  public:
   MockAnnotationService() = default;
+
+  MockAnnotationService(const MockAnnotationService&) = delete;
+  MockAnnotationService& operator=(const MockAnnotationService&) = delete;
+
   ~MockAnnotationService() override = default;
 
   mojo::PendingRemote<image_annotation::mojom::Annotator> GetRemote() {
@@ -141,8 +147,6 @@
   }
 
   mojo::ReceiverSet<image_annotation::mojom::Annotator> receivers_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockAnnotationService);
 };
 
 class RenderAccessibilityHostInterceptor
@@ -261,6 +265,11 @@
     RenderFrameImpl::InstallCreateHook(
         &RenderAccessibilityTestRenderFrame::CreateTestRenderFrame);
   }
+
+  RenderAccessibilityImplTest(const RenderAccessibilityImplTest&) = delete;
+  RenderAccessibilityImplTest& operator=(const RenderAccessibilityImplTest&) =
+      delete;
+
   ~RenderAccessibilityImplTest() override = default;
 
   void ScheduleSendPendingAccessibilityEvents() {
@@ -399,8 +408,6 @@
 
  private:
   IPC::TestSink* sink_;
-
-  DISALLOW_COPY_AND_ASSIGN(RenderAccessibilityImplTest);
 };
 
 TEST_F(RenderAccessibilityImplTest, SendFullAccessibilityTreeOnReload) {
@@ -932,6 +939,12 @@
     root_node_ =
         std::make_unique<ui::AXNode>(ax_tree_.get(), nullptr, root_node_id, 0);
   }
+
+  MockPluginAccessibilityTreeSource(const MockPluginAccessibilityTreeSource&) =
+      delete;
+  MockPluginAccessibilityTreeSource& operator=(
+      const MockPluginAccessibilityTreeSource&) = delete;
+
   ~MockPluginAccessibilityTreeSource() override {}
   bool GetTreeData(ui::AXTreeData* data) const override { return true; }
   ui::AXNode* GetRoot() const override { return root_node_.get(); }
@@ -977,7 +990,6 @@
   std::unique_ptr<ui::AXTree> ax_tree_;
   std::unique_ptr<ui::AXNode> root_node_;
   bool action_target_called_ = false;
-  DISALLOW_COPY_AND_ASSIGN(MockPluginAccessibilityTreeSource);
 };
 
 TEST_F(RenderAccessibilityImplTest, TestAXActionTargetFromNodeId) {
@@ -1230,6 +1242,10 @@
 class AXImageAnnotatorTest : public RenderAccessibilityImplTest {
  public:
   AXImageAnnotatorTest() = default;
+
+  AXImageAnnotatorTest(const AXImageAnnotatorTest&) = delete;
+  AXImageAnnotatorTest& operator=(const AXImageAnnotatorTest&) = delete;
+
   ~AXImageAnnotatorTest() override = default;
 
  protected:
@@ -1261,8 +1277,6 @@
  private:
   base::test::ScopedFeatureList scoped_feature_list_;
   MockAnnotationService mock_annotator_;
-
-  DISALLOW_COPY_AND_ASSIGN(AXImageAnnotatorTest);
 };
 
 TEST_F(AXImageAnnotatorTest, OnImageAdded) {
diff --git a/content/renderer/accessibility/render_accessibility_manager.h b/content/renderer/accessibility/render_accessibility_manager.h
index 61093c8..8f4f547 100644
--- a/content/renderer/accessibility/render_accessibility_manager.h
+++ b/content/renderer/accessibility/render_accessibility_manager.h
@@ -44,6 +44,11 @@
     : public mojom::RenderAccessibility {
  public:
   RenderAccessibilityManager(RenderFrameImpl* const render_frame);
+
+  RenderAccessibilityManager(const RenderAccessibilityManager&) = delete;
+  RenderAccessibilityManager& operator=(const RenderAccessibilityManager&) =
+      delete;
+
   ~RenderAccessibilityManager() override;
 
   // Binds the |receiver| to process mojo messages. This method is expected to
@@ -94,8 +99,6 @@
 
   // Endpoint to send messages to the browser process.
   mojo::Remote<mojom::RenderAccessibilityHost> render_accessibility_host_;
-
-  DISALLOW_COPY_AND_ASSIGN(RenderAccessibilityManager);
 };
 
 }  // namespace content
diff --git a/content/renderer/frame_blame_context.h b/content/renderer/frame_blame_context.h
index ad148fe..3887bb7 100644
--- a/content/renderer/frame_blame_context.h
+++ b/content/renderer/frame_blame_context.h
@@ -15,9 +15,11 @@
 class FrameBlameContext : public base::trace_event::BlameContext {
  public:
   FrameBlameContext(RenderFrameImpl* frame, RenderFrameImpl* parent_frame);
-  ~FrameBlameContext() override;
 
-  DISALLOW_COPY_AND_ASSIGN(FrameBlameContext);
+  FrameBlameContext(const FrameBlameContext&) = delete;
+  FrameBlameContext& operator=(const FrameBlameContext&) = delete;
+
+  ~FrameBlameContext() override;
 };
 
 }  // namespace content
diff --git a/content/renderer/gin_browsertest.cc b/content/renderer/gin_browsertest.cc
index cddd0f7..fe7b158e 100644
--- a/content/renderer/gin_browsertest.cc
+++ b/content/renderer/gin_browsertest.cc
@@ -41,6 +41,10 @@
 class GinBrowserTest : public RenderViewTest {
  public:
   GinBrowserTest() {}
+
+  GinBrowserTest(const GinBrowserTest&) = delete;
+  GinBrowserTest& operator=(const GinBrowserTest&) = delete;
+
   ~GinBrowserTest() override {}
 
   void SetUp() override {
@@ -49,10 +53,6 @@
 
     RenderViewTest::SetUp();
   }
-
- private:
-
-  DISALLOW_COPY_AND_ASSIGN(GinBrowserTest);
 };
 
 // Test that garbage collection doesn't crash if a gin-wrapped object is
diff --git a/content/renderer/in_process_renderer_thread.h b/content/renderer/in_process_renderer_thread.h
index 8ac8914..604c6d8 100644
--- a/content/renderer/in_process_renderer_thread.h
+++ b/content/renderer/in_process_renderer_thread.h
@@ -21,6 +21,10 @@
  public:
   InProcessRendererThread(const InProcessChildThreadParams& params,
                           int32_t renderer_client_id);
+
+  InProcessRendererThread(const InProcessRendererThread&) = delete;
+  InProcessRendererThread& operator=(const InProcessRendererThread&) = delete;
+
   ~InProcessRendererThread() override;
 
  protected:
@@ -31,8 +35,6 @@
   const InProcessChildThreadParams params_;
   const int32_t renderer_client_id_;
   std::unique_ptr<RenderProcess> render_process_;
-
-  DISALLOW_COPY_AND_ASSIGN(InProcessRendererThread);
 };
 
 CONTENT_EXPORT base::Thread* CreateInProcessRendererThread(
diff --git a/content/renderer/internal_document_state_data.h b/content/renderer/internal_document_state_data.h
index 92f9173..bcc10c9 100644
--- a/content/renderer/internal_document_state_data.h
+++ b/content/renderer/internal_document_state_data.h
@@ -26,6 +26,11 @@
 class InternalDocumentStateData : public base::SupportsUserData::Data {
  public:
   InternalDocumentStateData();
+
+  InternalDocumentStateData(const InternalDocumentStateData&) = delete;
+  InternalDocumentStateData& operator=(const InternalDocumentStateData&) =
+      delete;
+
   ~InternalDocumentStateData() override;
 
   static InternalDocumentStateData* FromDocumentLoader(
@@ -74,8 +79,6 @@
       net::EFFECTIVE_CONNECTION_TYPE_UNKNOWN;
   int request_id_ = -1;
   std::unique_ptr<NavigationState> navigation_state_;
-
-  DISALLOW_COPY_AND_ASSIGN(InternalDocumentStateData);
 };
 
 }  // namespace content
diff --git a/content/renderer/java/gin_java_bridge_dispatcher.h b/content/renderer/java/gin_java_bridge_dispatcher.h
index 3080cf37..b0999f3 100644
--- a/content/renderer/java/gin_java_bridge_dispatcher.h
+++ b/content/renderer/java/gin_java_bridge_dispatcher.h
@@ -38,6 +38,10 @@
   using ObjectID = ObjectMap::KeyType;
 
   explicit GinJavaBridgeDispatcher(RenderFrame* render_frame);
+
+  GinJavaBridgeDispatcher(const GinJavaBridgeDispatcher&) = delete;
+  GinJavaBridgeDispatcher& operator=(const GinJavaBridgeDispatcher&) = delete;
+
   ~GinJavaBridgeDispatcher() override;
 
   // RenderFrameObserver override:
@@ -66,8 +70,6 @@
   NamedObjectMap named_objects_;
   ObjectMap objects_;
   bool inside_did_clear_window_object_;
-
-  DISALLOW_COPY_AND_ASSIGN(GinJavaBridgeDispatcher);
 };
 
 }  // namespace content
diff --git a/content/renderer/java/gin_java_function_invocation_helper.h b/content/renderer/java/gin_java_function_invocation_helper.h
index b74083c..1629686 100644
--- a/content/renderer/java/gin_java_function_invocation_helper.h
+++ b/content/renderer/java/gin_java_function_invocation_helper.h
@@ -22,6 +22,12 @@
   GinJavaFunctionInvocationHelper(
       const std::string& method_name,
       const base::WeakPtr<GinJavaBridgeDispatcher>& dispatcher);
+
+  GinJavaFunctionInvocationHelper(const GinJavaFunctionInvocationHelper&) =
+      delete;
+  GinJavaFunctionInvocationHelper& operator=(
+      const GinJavaFunctionInvocationHelper&) = delete;
+
   ~GinJavaFunctionInvocationHelper();
 
   v8::Local<v8::Value> Invoke(gin::Arguments* args);
@@ -30,8 +36,6 @@
   std::string method_name_;
   base::WeakPtr<GinJavaBridgeDispatcher> dispatcher_;
   std::unique_ptr<GinJavaBridgeValueConverter> converter_;
-
-  DISALLOW_COPY_AND_ASSIGN(GinJavaFunctionInvocationHelper);
 };
 
 }  // namespace content
diff --git a/content/renderer/media/android/flinging_renderer_client.h b/content/renderer/media/android/flinging_renderer_client.h
index 3fb6170..f9fa36d 100644
--- a/content/renderer/media/android/flinging_renderer_client.h
+++ b/content/renderer/media/android/flinging_renderer_client.h
@@ -39,6 +39,9 @@
       std::unique_ptr<media::MojoRenderer> mojo_renderer,
       media::RemotePlayStateChangeCB remote_play_state_change_cb);
 
+  FlingingRendererClient(const FlingingRendererClient&) = delete;
+  FlingingRendererClient& operator=(const FlingingRendererClient&) = delete;
+
   ~FlingingRendererClient() override;
 
   // media::MojoRendererWrapper overrides.
@@ -62,8 +65,6 @@
 
   mojo::Receiver<FlingingRendererClientExtension> client_extension_receiver_{
       this};
-
-  DISALLOW_COPY_AND_ASSIGN(FlingingRendererClient);
 };
 
 }  // namespace content
diff --git a/content/renderer/media/android/flinging_renderer_client_factory.h b/content/renderer/media/android/flinging_renderer_client_factory.h
index 09a1c41..81b0c8df2 100644
--- a/content/renderer/media/android/flinging_renderer_client_factory.h
+++ b/content/renderer/media/android/flinging_renderer_client_factory.h
@@ -29,6 +29,11 @@
       std::unique_ptr<media::MojoRendererFactory> mojo_renderer_factory,
       std::unique_ptr<media::RemotePlaybackClientWrapper>
           remote_playback_client);
+
+  FlingingRendererClientFactory(const FlingingRendererClientFactory&) = delete;
+  FlingingRendererClientFactory& operator=(
+      const FlingingRendererClientFactory&) = delete;
+
   ~FlingingRendererClientFactory() override;
 
   // Sets a callback that renderers created by |this| will use to propagate
@@ -56,8 +61,6 @@
   std::unique_ptr<media::RemotePlaybackClientWrapper> remote_playback_client_;
 
   media::RemotePlayStateChangeCB remote_play_state_change_cb_;
-
-  DISALLOW_COPY_AND_ASSIGN(FlingingRendererClientFactory);
 };
 
 }  // namespace content
diff --git a/content/renderer/media/android/media_player_renderer_client.h b/content/renderer/media/android/media_player_renderer_client.h
index 9bc6721..b81e473 100644
--- a/content/renderer/media/android/media_player_renderer_client.h
+++ b/content/renderer/media/android/media_player_renderer_client.h
@@ -53,6 +53,10 @@
       media::ScopedStreamTextureWrapper stream_texture_wrapper,
       media::VideoRendererSink* sink);
 
+  MediaPlayerRendererClient(const MediaPlayerRendererClient&) = delete;
+  MediaPlayerRendererClient& operator=(const MediaPlayerRendererClient&) =
+      delete;
+
   ~MediaPlayerRendererClient() override;
 
   // media::Renderer implementation (inherited from media::MojoRendererWrapper).
@@ -116,8 +120,6 @@
 
   // NOTE: Weak pointers must be invalidated before all other member variables.
   base::WeakPtrFactory<MediaPlayerRendererClient> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(MediaPlayerRendererClient);
 };
 
 }  // namespace content
diff --git a/content/renderer/media/batching_media_log.h b/content/renderer/media/batching_media_log.h
index 5810efd..6753ebe6 100644
--- a/content/renderer/media/batching_media_log.h
+++ b/content/renderer/media/batching_media_log.h
@@ -40,6 +40,10 @@
 
   BatchingMediaLog(scoped_refptr<base::SingleThreadTaskRunner> task_runner,
                    std::vector<std::unique_ptr<EventHandler>> impl);
+
+  BatchingMediaLog(const BatchingMediaLog&) = delete;
+  BatchingMediaLog& operator=(const BatchingMediaLog&) = delete;
+
   ~BatchingMediaLog() override;
 
   // Will reset |last_ipc_send_time_| with the value of NowTicks().
@@ -99,8 +103,6 @@
 
   base::WeakPtr<BatchingMediaLog> weak_this_;
   base::WeakPtrFactory<BatchingMediaLog> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(BatchingMediaLog);
 };
 
 }  // namespace content
diff --git a/content/renderer/media/batching_media_log_unittest.cc b/content/renderer/media/batching_media_log_unittest.cc
index 467561e8..6a4e4d77 100644
--- a/content/renderer/media/batching_media_log_unittest.cc
+++ b/content/renderer/media/batching_media_log_unittest.cc
@@ -44,6 +44,9 @@
     log_.SetTickClockForTesting(&tick_clock_);
   }
 
+  BatchingMediaLogTest(const BatchingMediaLogTest&) = delete;
+  BatchingMediaLogTest& operator=(const BatchingMediaLogTest&) = delete;
+
   ~BatchingMediaLogTest() override { task_runner_->ClearPendingTasks(); }
 
   template <media::MediaLogEvent T, typename... Opt>
@@ -85,9 +88,6 @@
 
  protected:
   BatchingMediaLog log_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(BatchingMediaLogTest);
 };
 
 void TestEventHandler::SendQueuedMediaEvents(
diff --git a/content/renderer/media/cast_renderer_client_factory.h b/content/renderer/media/cast_renderer_client_factory.h
index 0d3f0c4..d3e77fe 100644
--- a/content/renderer/media/cast_renderer_client_factory.h
+++ b/content/renderer/media/cast_renderer_client_factory.h
@@ -30,6 +30,11 @@
   CastRendererClientFactory(
       media::MediaLog* media_log,
       std::unique_ptr<media::MojoRendererFactory> mojo_renderer_factory);
+
+  CastRendererClientFactory(const CastRendererClientFactory&) = delete;
+  CastRendererClientFactory& operator=(const CastRendererClientFactory&) =
+      delete;
+
   ~CastRendererClientFactory() override;
 
   std::unique_ptr<media::Renderer> CreateRenderer(
@@ -43,8 +48,6 @@
  private:
   media::MediaLog* media_log_;
   std::unique_ptr<media::MojoRendererFactory> mojo_renderer_factory_;
-
-  DISALLOW_COPY_AND_ASSIGN(CastRendererClientFactory);
 };
 
 }  // namespace content
diff --git a/content/renderer/media/gpu/gpu_video_accelerator_factories_impl.h b/content/renderer/media/gpu/gpu_video_accelerator_factories_impl.h
index ec8024d..c11ac10a 100644
--- a/content/renderer/media/gpu/gpu_video_accelerator_factories_impl.h
+++ b/content/renderer/media/gpu/gpu_video_accelerator_factories_impl.h
@@ -131,6 +131,11 @@
   // with a new ContextProvider.
   bool CheckContextProviderLostOnMainThread();
 
+  GpuVideoAcceleratorFactoriesImpl(const GpuVideoAcceleratorFactoriesImpl&) =
+      delete;
+  GpuVideoAcceleratorFactoriesImpl& operator=(
+      const GpuVideoAcceleratorFactoriesImpl&) = delete;
+
   ~GpuVideoAcceleratorFactoriesImpl() override;
 
  private:
@@ -231,8 +236,6 @@
   absl::optional<media::VideoEncodeAccelerator::SupportedProfiles>
       supported_vea_profiles_ GUARDED_BY(supported_profiles_lock_);
   Notifier encoder_support_notifier_ GUARDED_BY(supported_profiles_lock_);
-
-  DISALLOW_COPY_AND_ASSIGN(GpuVideoAcceleratorFactoriesImpl);
 };
 
 }  // namespace content
diff --git a/content/renderer/media/media_factory.cc b/content/renderer/media/media_factory.cc
index 48409ae..5456976 100644
--- a/content/renderer/media/media_factory.cc
+++ b/content/renderer/media/media_factory.cc
@@ -156,6 +156,10 @@
   explicit FrameFetchContext(blink::WebLocalFrame* frame) : frame_(frame) {
     DCHECK(frame_);
   }
+
+  FrameFetchContext(const FrameFetchContext&) = delete;
+  FrameFetchContext& operator=(const FrameFetchContext&) = delete;
+
   ~FrameFetchContext() override = default;
 
   blink::WebLocalFrame* frame() const { return frame_; }
@@ -168,7 +172,6 @@
 
  private:
   blink::WebLocalFrame* frame_;
-  DISALLOW_COPY_AND_ASSIGN(FrameFetchContext);
 };
 
 // Obtains the media ContextProvider and calls the given callback on the same
diff --git a/content/renderer/media/media_interface_factory.h b/content/renderer/media/media_interface_factory.h
index 7118778..3fad00e4 100644
--- a/content/renderer/media/media_interface_factory.h
+++ b/content/renderer/media/media_interface_factory.h
@@ -41,6 +41,10 @@
   MediaInterfaceFactory(
       scoped_refptr<base::SingleThreadTaskRunner> task_runner,
       mojo::PendingRemote<media::mojom::InterfaceFactory> interface_factory);
+
+  MediaInterfaceFactory(const MediaInterfaceFactory&) = delete;
+  MediaInterfaceFactory& operator=(const MediaInterfaceFactory&) = delete;
+
   ~MediaInterfaceFactory() final;
 
   // media::mojom::InterfaceFactory implementation.
@@ -90,8 +94,6 @@
   scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
   base::WeakPtr<MediaInterfaceFactory> weak_this_;
   base::WeakPtrFactory<MediaInterfaceFactory> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(MediaInterfaceFactory);
 };
 
 }  // namespace content
diff --git a/content/renderer/media/media_permission_dispatcher.h b/content/renderer/media/media_permission_dispatcher.h
index e3d48f7a..7ce2c7d 100644
--- a/content/renderer/media/media_permission_dispatcher.h
+++ b/content/renderer/media/media_permission_dispatcher.h
@@ -29,6 +29,11 @@
 class CONTENT_EXPORT MediaPermissionDispatcher : public media::MediaPermission {
  public:
   explicit MediaPermissionDispatcher(RenderFrameImpl* render_frame);
+
+  MediaPermissionDispatcher(const MediaPermissionDispatcher&) = delete;
+  MediaPermissionDispatcher& operator=(const MediaPermissionDispatcher&) =
+      delete;
+
   ~MediaPermissionDispatcher() override;
 
   // Called when the frame owning this MediaPermissionDispatcher is navigated.
@@ -75,8 +80,6 @@
   base::WeakPtr<MediaPermissionDispatcher> weak_ptr_;
 
   base::WeakPtrFactory<MediaPermissionDispatcher> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(MediaPermissionDispatcher);
 };
 
 }  // namespace content
diff --git a/content/renderer/media/renderer_webaudiodevice_impl.h b/content/renderer/media/renderer_webaudiodevice_impl.h
index 0cf7b368..513fa58 100644
--- a/content/renderer/media/renderer_webaudiodevice_impl.h
+++ b/content/renderer/media/renderer_webaudiodevice_impl.h
@@ -34,6 +34,10 @@
     : public blink::WebAudioDevice,
       public media::AudioRendererSink::RenderCallback {
  public:
+  RendererWebAudioDeviceImpl(const RendererWebAudioDeviceImpl&) = delete;
+  RendererWebAudioDeviceImpl& operator=(const RendererWebAudioDeviceImpl&) =
+      delete;
+
   ~RendererWebAudioDeviceImpl() override;
 
   static std::unique_ptr<RendererWebAudioDeviceImpl> Create(
@@ -125,8 +129,6 @@
   // Used to trigger one single textlog indicating that rendering started as
   // intended. Set to true once in the first call to the Render callback.
   bool is_rendering_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(RendererWebAudioDeviceImpl);
 };
 
 }  // namespace content
diff --git a/content/renderer/media/renderer_webmediaplayer_delegate.h b/content/renderer/media/renderer_webmediaplayer_delegate.h
index 9df6f39..c88f7cea 100644
--- a/content/renderer/media/renderer_webmediaplayer_delegate.h
+++ b/content/renderer/media/renderer_webmediaplayer_delegate.h
@@ -38,6 +38,12 @@
       public base::SupportsWeakPtr<RendererWebMediaPlayerDelegate> {
  public:
   explicit RendererWebMediaPlayerDelegate(content::RenderFrame* render_frame);
+
+  RendererWebMediaPlayerDelegate(const RendererWebMediaPlayerDelegate&) =
+      delete;
+  RendererWebMediaPlayerDelegate& operator=(
+      const RendererWebMediaPlayerDelegate&) = delete;
+
   ~RendererWebMediaPlayerDelegate() override;
 
   // Returns true if this RenderFrame has ever seen media playback before.
@@ -143,8 +149,6 @@
   // Records the peak player count for this render frame.
   size_t peak_player_count_ = 0u;
   std::unique_ptr<base::SingleSampleMetric> peak_player_count_uma_;
-
-  DISALLOW_COPY_AND_ASSIGN(RendererWebMediaPlayerDelegate);
 };
 
 }  // namespace media
diff --git a/content/renderer/media/renderer_webmediaplayer_delegate_browsertest.cc b/content/renderer/media/renderer_webmediaplayer_delegate_browsertest.cc
index 397931f..0761236 100644
--- a/content/renderer/media/renderer_webmediaplayer_delegate_browsertest.cc
+++ b/content/renderer/media/renderer_webmediaplayer_delegate_browsertest.cc
@@ -48,6 +48,12 @@
 class RendererWebMediaPlayerDelegateTest : public content::RenderViewTest {
  public:
   RendererWebMediaPlayerDelegateTest() {}
+
+  RendererWebMediaPlayerDelegateTest(
+      const RendererWebMediaPlayerDelegateTest&) = delete;
+  RendererWebMediaPlayerDelegateTest& operator=(
+      const RendererWebMediaPlayerDelegateTest&) = delete;
+
   ~RendererWebMediaPlayerDelegateTest() override {}
 
   void SetUp() override {
@@ -89,9 +95,6 @@
   StrictMock<MockWebMediaPlayerDelegateObserver> observer_1_, observer_2_,
       observer_3_;
   base::SimpleTestTickClock tick_clock_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(RendererWebMediaPlayerDelegateTest);
 };
 
 TEST_F(RendererWebMediaPlayerDelegateTest, TheTimerIsInitiallyStopped) {
diff --git a/content/renderer/mhtml_handle_writer.h b/content/renderer/mhtml_handle_writer.h
index 66451a15..f5ddfc1c 100644
--- a/content/renderer/mhtml_handle_writer.h
+++ b/content/renderer/mhtml_handle_writer.h
@@ -40,6 +40,10 @@
 
   MHTMLHandleWriter(scoped_refptr<base::TaskRunner> main_thread_task_runner,
                     MHTMLWriteCompleteCallback callback);
+
+  MHTMLHandleWriter(const MHTMLHandleWriter&) = delete;
+  MHTMLHandleWriter& operator=(const MHTMLHandleWriter&) = delete;
+
   virtual ~MHTMLHandleWriter();
 
   void WriteContents(std::vector<blink::WebThreadSafeData> mhtml_contents);
@@ -59,8 +63,6 @@
 
   scoped_refptr<base::TaskRunner> main_thread_task_runner_;
   MHTMLWriteCompleteCallback callback_;
-
-  DISALLOW_COPY_AND_ASSIGN(MHTMLHandleWriter);
 };
 
 // Wraps a base::File target to write MHTML contents to.
@@ -71,6 +73,10 @@
   MHTMLFileHandleWriter(scoped_refptr<base::TaskRunner> main_thread_task_runner,
                         MHTMLWriteCompleteCallback callback,
                         base::File file);
+
+  MHTMLFileHandleWriter(const MHTMLFileHandleWriter&) = delete;
+  MHTMLFileHandleWriter& operator=(const MHTMLFileHandleWriter&) = delete;
+
   ~MHTMLFileHandleWriter() override;
 
  protected:
@@ -83,8 +89,6 @@
 
  private:
   base::File file_;
-
-  DISALLOW_COPY_AND_ASSIGN(MHTMLFileHandleWriter);
 };
 
 // Wraps a mojo::ScopedDataPipeProducerHandle target to write MHTML contents to.
@@ -97,6 +101,11 @@
       scoped_refptr<base::TaskRunner> main_thread_task_runner,
       MHTMLWriteCompleteCallback callback,
       mojo::ScopedDataPipeProducerHandle producer);
+
+  MHTMLProducerHandleWriter(const MHTMLProducerHandleWriter&) = delete;
+  MHTMLProducerHandleWriter& operator=(const MHTMLProducerHandleWriter&) =
+      delete;
+
   ~MHTMLProducerHandleWriter() override;
 
  protected:
@@ -121,8 +130,6 @@
 
   size_t current_block_;
   size_t write_position_;
-
-  DISALLOW_COPY_AND_ASSIGN(MHTMLProducerHandleWriter);
 };
 
 }  // namespace content
diff --git a/content/renderer/mojo/blink_interface_registry_impl.h b/content/renderer/mojo/blink_interface_registry_impl.h
index 4a5c0d35..7457d63a 100644
--- a/content/renderer/mojo/blink_interface_registry_impl.h
+++ b/content/renderer/mojo/blink_interface_registry_impl.h
@@ -20,6 +20,11 @@
       base::WeakPtr<service_manager::BinderRegistry> interface_registry,
       base::WeakPtr<blink::AssociatedInterfaceRegistry>
           associated_interface_registry);
+
+  BlinkInterfaceRegistryImpl(const BlinkInterfaceRegistryImpl&) = delete;
+  BlinkInterfaceRegistryImpl& operator=(const BlinkInterfaceRegistryImpl&) =
+      delete;
+
   ~BlinkInterfaceRegistryImpl();
 
   // blink::InterfaceRegistry override.
@@ -35,8 +40,6 @@
   const base::WeakPtr<service_manager::BinderRegistry> interface_registry_;
   const base::WeakPtr<blink::AssociatedInterfaceRegistry>
       associated_interface_registry_;
-
-  DISALLOW_COPY_AND_ASSIGN(BlinkInterfaceRegistryImpl);
 };
 
 }  // namespace content
diff --git a/content/renderer/navigation_state.h b/content/renderer/navigation_state.h
index 031d4b2..613a4da 100644
--- a/content/renderer/navigation_state.h
+++ b/content/renderer/navigation_state.h
@@ -24,6 +24,9 @@
 
 class CONTENT_EXPORT NavigationState {
  public:
+  NavigationState(const NavigationState&) = delete;
+  NavigationState& operator=(const NavigationState&) = delete;
+
   ~NavigationState();
 
   static std::unique_ptr<NavigationState> Create(
@@ -113,8 +116,6 @@
   // Used to notify whether a commit request from the browser process was
   // successful or not.
   mojom::NavigationClient::CommitNavigationCallback commit_callback_;
-
-  DISALLOW_COPY_AND_ASSIGN(NavigationState);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/audio_helper.h b/content/renderer/pepper/audio_helper.h
index fa4d3052..fc977f6 100644
--- a/content/renderer/pepper/audio_helper.h
+++ b/content/renderer/pepper/audio_helper.h
@@ -23,6 +23,10 @@
 class AudioHelper {
  public:
   AudioHelper();
+
+  AudioHelper(const AudioHelper&) = delete;
+  AudioHelper& operator=(const AudioHelper&) = delete;
+
   virtual ~AudioHelper();
 
   // Called when the stream is created.
@@ -52,8 +56,6 @@
   // invalid all other times.
   base::UnsafeSharedMemoryRegion shared_memory_for_create_callback_;
   std::unique_ptr<base::SyncSocket> socket_for_create_callback_;
-
-  DISALLOW_COPY_AND_ASSIGN(AudioHelper);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/content_renderer_pepper_host_factory.h b/content/renderer/pepper/content_renderer_pepper_host_factory.h
index cb8c5cc..53755593 100644
--- a/content/renderer/pepper/content_renderer_pepper_host_factory.h
+++ b/content/renderer/pepper/content_renderer_pepper_host_factory.h
@@ -20,6 +20,12 @@
 class ContentRendererPepperHostFactory : public ppapi::host::HostFactory {
  public:
   explicit ContentRendererPepperHostFactory(RendererPpapiHostImpl* host);
+
+  ContentRendererPepperHostFactory(const ContentRendererPepperHostFactory&) =
+      delete;
+  ContentRendererPepperHostFactory& operator=(
+      const ContentRendererPepperHostFactory&) = delete;
+
   ~ContentRendererPepperHostFactory() override;
 
   std::unique_ptr<ppapi::host::ResourceHost> CreateResourceHost(
@@ -33,8 +39,6 @@
 
   // Non-owning pointer.
   RendererPpapiHostImpl* host_;
-
-  DISALLOW_COPY_AND_ASSIGN(ContentRendererPepperHostFactory);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/host_globals.h b/content/renderer/pepper/host_globals.h
index 99629960..d8133fa 100644
--- a/content/renderer/pepper/host_globals.h
+++ b/content/renderer/pepper/host_globals.h
@@ -21,6 +21,10 @@
 class HostGlobals : public ppapi::PpapiGlobals {
  public:
   HostGlobals();
+
+  HostGlobals(const HostGlobals&) = delete;
+  HostGlobals& operator=(const HostGlobals&) = delete;
+
   ~HostGlobals() override;
 
   // Getter for the global singleton. Generally, you should use
@@ -103,8 +107,6 @@
   ModuleMap module_map_;
 
   scoped_refptr<base::TaskRunner> file_task_runner_;
-
-  DISALLOW_COPY_AND_ASSIGN(HostGlobals);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/host_var_tracker.h b/content/renderer/pepper/host_var_tracker.h
index 030ca3c..4a9a60d 100644
--- a/content/renderer/pepper/host_var_tracker.h
+++ b/content/renderer/pepper/host_var_tracker.h
@@ -29,6 +29,10 @@
 class HostVarTracker : public ppapi::VarTracker {
  public:
   HostVarTracker();
+
+  HostVarTracker(const HostVarTracker&) = delete;
+  HostVarTracker& operator=(const HostVarTracker&) = delete;
+
   ~HostVarTracker() override;
 
   // Tracks all live V8ObjectVar. This is so we can map between instance +
@@ -102,8 +106,6 @@
   typedef std::map<int, SharedMemoryMapEntry> SharedMemoryMap;
   SharedMemoryMap shared_memory_map_;
   uint32_t last_shared_memory_map_id_;
-
-  DISALLOW_COPY_AND_ASSIGN(HostVarTracker);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/message_channel.h b/content/renderer/pepper/message_channel.h
index 807450e..150f485 100644
--- a/content/renderer/pepper/message_channel.h
+++ b/content/renderer/pepper/message_channel.h
@@ -63,6 +63,9 @@
   static MessageChannel* Create(PepperPluginInstanceImpl* instance,
                                 v8::Persistent<v8::Object>* result);
 
+  MessageChannel(const MessageChannel&) = delete;
+  MessageChannel& operator=(const MessageChannel&) = delete;
+
   ~MessageChannel() override;
 
   // Called when the instance is deleted. The MessageChannel might outlive the
@@ -202,8 +205,6 @@
   // This is used to ensure pending tasks will not fire after this object is
   // destroyed.
   base::WeakPtrFactory<MessageChannel> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(MessageChannel);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/mock_renderer_ppapi_host.h b/content/renderer/pepper/mock_renderer_ppapi_host.h
index dc50e2a..d303808 100644
--- a/content/renderer/pepper/mock_renderer_ppapi_host.h
+++ b/content/renderer/pepper/mock_renderer_ppapi_host.h
@@ -25,6 +25,10 @@
   MockRendererPpapiHost(RenderView* render_view,
                         RenderFrame* render_frame,
                         PP_Instance instance);
+
+  MockRendererPpapiHost(const MockRendererPpapiHost&) = delete;
+  MockRendererPpapiHost& operator=(const MockRendererPpapiHost&) = delete;
+
   ~MockRendererPpapiHost() override;
 
   ppapi::proxy::ResourceMessageTestSink& sink() { return sink_; }
@@ -72,8 +76,6 @@
   bool has_user_gesture_;
 
   std::unique_ptr<FakePepperPluginInstance> plugin_instance_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockRendererPpapiHost);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/pepper_audio_controller.h b/content/renderer/pepper/pepper_audio_controller.h
index 8e8b8741..192b9fa58 100644
--- a/content/renderer/pepper/pepper_audio_controller.h
+++ b/content/renderer/pepper/pepper_audio_controller.h
@@ -22,6 +22,10 @@
 class PepperAudioController {
  public:
   explicit PepperAudioController(PepperPluginInstanceImpl* instance);
+
+  PepperAudioController(const PepperAudioController&) = delete;
+  PepperAudioController& operator=(const PepperAudioController&) = delete;
+
   virtual ~PepperAudioController();
 
   // Adds an audio instance to the controller.
@@ -60,8 +64,6 @@
   // The Pepper instance which this controller is for. Will be null after
   // OnPepperInstanceDeleted() is called.
   PepperPluginInstanceImpl* instance_;
-
-  DISALLOW_COPY_AND_ASSIGN(PepperAudioController);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/pepper_audio_encoder_host.cc b/content/renderer/pepper/pepper_audio_encoder_host.cc
index d1d8eb5..4da209c1 100644
--- a/content/renderer/pepper/pepper_audio_encoder_host.cc
+++ b/content/renderer/pepper/pepper_audio_encoder_host.cc
@@ -56,6 +56,10 @@
   using BitstreamBufferReadyCB = base::OnceCallback<void(int32_t size)>;
 
   AudioEncoderImpl();
+
+  AudioEncoderImpl(const AudioEncoderImpl&) = delete;
+  AudioEncoderImpl& operator=(const AudioEncoderImpl&) = delete;
+
   ~AudioEncoderImpl();
 
   // Used on the renderer thread.
@@ -78,8 +82,6 @@
   // Initialization parameters, only valid if |encoder_memory_| is not
   // nullptr.
   ppapi::proxy::PPB_AudioEncodeParameters parameters_;
-
-  DISALLOW_COPY_AND_ASSIGN(AudioEncoderImpl);
 };
 
 PepperAudioEncoderHost::AudioEncoderImpl::AudioEncoderImpl()
diff --git a/content/renderer/pepper/pepper_audio_encoder_host.h b/content/renderer/pepper/pepper_audio_encoder_host.h
index d180bd3..1b16919 100644
--- a/content/renderer/pepper/pepper_audio_encoder_host.h
+++ b/content/renderer/pepper/pepper_audio_encoder_host.h
@@ -31,6 +31,10 @@
   PepperAudioEncoderHost(RendererPpapiHost* host,
                          PP_Instance instance,
                          PP_Resource resource);
+
+  PepperAudioEncoderHost(const PepperAudioEncoderHost&) = delete;
+  PepperAudioEncoderHost& operator=(const PepperAudioEncoderHost&) = delete;
+
   ~PepperAudioEncoderHost() override;
 
  private:
@@ -104,8 +108,6 @@
   std::unique_ptr<AudioEncoderImpl> encoder_;
 
   base::WeakPtrFactory<PepperAudioEncoderHost> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(PepperAudioEncoderHost);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/pepper_audio_input_host.h b/content/renderer/pepper/pepper_audio_input_host.h
index 32dd58d..ee9d62d 100644
--- a/content/renderer/pepper/pepper_audio_input_host.h
+++ b/content/renderer/pepper/pepper_audio_input_host.h
@@ -30,6 +30,10 @@
   PepperAudioInputHost(RendererPpapiHostImpl* host,
                        PP_Instance instance,
                        PP_Resource resource);
+
+  PepperAudioInputHost(const PepperAudioInputHost&) = delete;
+  PepperAudioInputHost& operator=(const PepperAudioInputHost&) = delete;
+
   ~PepperAudioInputHost() override;
 
   int32_t OnResourceMessageReceived(
@@ -73,8 +77,6 @@
   PepperPlatformAudioInput* audio_input_;
 
   PepperDeviceEnumerationHostHelper enumeration_helper_;
-
-  DISALLOW_COPY_AND_ASSIGN(PepperAudioInputHost);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/pepper_audio_output_host.h b/content/renderer/pepper/pepper_audio_output_host.h
index c7d963f1..a6b451c5d 100644
--- a/content/renderer/pepper/pepper_audio_output_host.h
+++ b/content/renderer/pepper/pepper_audio_output_host.h
@@ -30,6 +30,10 @@
   PepperAudioOutputHost(RendererPpapiHostImpl* host,
                         PP_Instance instance,
                         PP_Resource resource);
+
+  PepperAudioOutputHost(const PepperAudioOutputHost&) = delete;
+  PepperAudioOutputHost& operator=(const PepperAudioOutputHost&) = delete;
+
   ~PepperAudioOutputHost() override;
 
   int32_t OnResourceMessageReceived(
@@ -75,8 +79,6 @@
   PepperPlatformAudioOutputDev* audio_output_;
 
   PepperDeviceEnumerationHostHelper enumeration_helper_;
-
-  DISALLOW_COPY_AND_ASSIGN(PepperAudioOutputHost);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/pepper_browser_connection.h b/content/renderer/pepper/pepper_browser_connection.h
index 548caca..79db395 100644
--- a/content/renderer/pepper/pepper_browser_connection.h
+++ b/content/renderer/pepper/pepper_browser_connection.h
@@ -35,6 +35,10 @@
   using PendingResourceIDCallback =
       base::OnceCallback<void(const std::vector<int>&)>;
   explicit PepperBrowserConnection(RenderFrame* render_frame);
+
+  PepperBrowserConnection(const PepperBrowserConnection&) = delete;
+  PepperBrowserConnection& operator=(const PepperBrowserConnection&) = delete;
+
   ~PepperBrowserConnection() override;
 
   bool OnMessageReceived(const IPC::Message& message) override;
@@ -98,8 +102,6 @@
   std::map<int32_t, PendingResourceIDCallback> pending_create_map_;
 
   mojo::AssociatedRemote<mojom::PepperIOHost> io_host_;
-
-  DISALLOW_COPY_AND_ASSIGN(PepperBrowserConnection);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/pepper_camera_device_host.h b/content/renderer/pepper/pepper_camera_device_host.h
index 0a7e1868..b6aa94c 100644
--- a/content/renderer/pepper/pepper_camera_device_host.h
+++ b/content/renderer/pepper/pepper_camera_device_host.h
@@ -27,6 +27,9 @@
                          PP_Instance instance,
                          PP_Resource resource);
 
+  PepperCameraDeviceHost(const PepperCameraDeviceHost&) = delete;
+  PepperCameraDeviceHost& operator=(const PepperCameraDeviceHost&) = delete;
+
   ~PepperCameraDeviceHost() override;
 
   bool Init();
@@ -62,8 +65,6 @@
   ppapi::host::ReplyMessageContext open_reply_context_;
 
   ppapi::host::ReplyMessageContext video_capture_formats_reply_context_;
-
-  DISALLOW_COPY_AND_ASSIGN(PepperCameraDeviceHost);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/pepper_device_enumeration_host_helper.cc b/content/renderer/pepper/pepper_device_enumeration_host_helper.cc
index ae714b7..3456539 100644
--- a/content/renderer/pepper/pepper_device_enumeration_host_helper.cc
+++ b/content/renderer/pepper/pepper_device_enumeration_host_helper.cc
@@ -107,6 +107,9 @@
         owner_->device_type_, callback_);
   }
 
+  ScopedMonitoringRequest(const ScopedMonitoringRequest&) = delete;
+  ScopedMonitoringRequest& operator=(const ScopedMonitoringRequest&) = delete;
+
   ~ScopedMonitoringRequest() {
     if (requested_ && owner_->delegate_) {
       owner_->delegate_->StopMonitoringDevices(owner_->device_type_,
@@ -121,8 +124,6 @@
   PepperDeviceEnumerationHostHelper::Delegate::DevicesCallback callback_;
   bool requested_;
   size_t subscription_id_;
-
-  DISALLOW_COPY_AND_ASSIGN(ScopedMonitoringRequest);
 };
 
 PepperDeviceEnumerationHostHelper::PepperDeviceEnumerationHostHelper(
diff --git a/content/renderer/pepper/pepper_device_enumeration_host_helper.h b/content/renderer/pepper/pepper_device_enumeration_host_helper.h
index 5c2d101..cde8f71 100644
--- a/content/renderer/pepper/pepper_device_enumeration_host_helper.h
+++ b/content/renderer/pepper/pepper_device_enumeration_host_helper.h
@@ -71,6 +71,12 @@
                                     base::WeakPtr<Delegate> delegate,
                                     PP_DeviceType_Dev device_type,
                                     const GURL& document_url);
+
+  PepperDeviceEnumerationHostHelper(const PepperDeviceEnumerationHostHelper&) =
+      delete;
+  PepperDeviceEnumerationHostHelper& operator=(
+      const PepperDeviceEnumerationHostHelper&) = delete;
+
   ~PepperDeviceEnumerationHostHelper();
 
   // Returns true if the message has been handled.
@@ -110,8 +116,6 @@
   std::unique_ptr<ScopedMonitoringRequest> monitor_;
 
   ppapi::host::ReplyMessageContext enumerate_devices_context_;
-
-  DISALLOW_COPY_AND_ASSIGN(PepperDeviceEnumerationHostHelper);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/pepper_device_enumeration_host_helper_unittest.cc b/content/renderer/pepper/pepper_device_enumeration_host_helper_unittest.cc
index feefd150..b45446d 100644
--- a/content/renderer/pepper/pepper_device_enumeration_host_helper_unittest.cc
+++ b/content/renderer/pepper/pepper_device_enumeration_host_helper_unittest.cc
@@ -50,6 +50,9 @@
  public:
   TestDelegate() : last_used_id_(0u) {}
 
+  TestDelegate(const TestDelegate&) = delete;
+  TestDelegate& operator=(const TestDelegate&) = delete;
+
   ~TestDelegate() override { CHECK(monitoring_callbacks_.empty()); }
 
   void EnumerateDevices(PP_DeviceType_Dev /* type */,
@@ -92,8 +95,6 @@
  private:
   std::map<size_t, DevicesCallback> monitoring_callbacks_;
   size_t last_used_id_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestDelegate);
 };
 
 class PepperDeviceEnumerationHostHelperTest : public testing::Test {
diff --git a/content/renderer/pepper/pepper_file_chooser_host.cc b/content/renderer/pepper/pepper_file_chooser_host.cc
index fdab4c15..fbb74b4e 100644
--- a/content/renderer/pepper/pepper_file_chooser_host.cc
+++ b/content/renderer/pepper/pepper_file_chooser_host.cc
@@ -34,6 +34,9 @@
   explicit CompletionHandler(const base::WeakPtr<PepperFileChooserHost>& host)
       : host_(host) {}
 
+  CompletionHandler(const CompletionHandler&) = delete;
+  CompletionHandler& operator=(const CompletionHandler&) = delete;
+
   ~CompletionHandler() {}
 
   bool OpenFileChooser(RenderFrameImpl* render_frame,
@@ -85,8 +88,6 @@
 
   base::WeakPtr<PepperFileChooserHost> host_;
   mojo::Remote<blink::mojom::FileChooser> file_chooser_;
-
-  DISALLOW_COPY_AND_ASSIGN(CompletionHandler);
 };
 
 PepperFileChooserHost::ChosenFileInfo::ChosenFileInfo(
diff --git a/content/renderer/pepper/pepper_file_chooser_host.h b/content/renderer/pepper/pepper_file_chooser_host.h
index a4162596..3ae0dc4 100644
--- a/content/renderer/pepper/pepper_file_chooser_host.h
+++ b/content/renderer/pepper/pepper_file_chooser_host.h
@@ -36,6 +36,10 @@
   PepperFileChooserHost(RendererPpapiHost* host,
                         PP_Instance instance,
                         PP_Resource resource);
+
+  PepperFileChooserHost(const PepperFileChooserHost&) = delete;
+  PepperFileChooserHost& operator=(const PepperFileChooserHost&) = delete;
+
   ~PepperFileChooserHost() override;
 
   int32_t OnResourceMessageReceived(
@@ -64,8 +68,6 @@
   CompletionHandler* handler_;
 
   base::WeakPtrFactory<PepperFileChooserHost> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(PepperFileChooserHost);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/pepper_file_ref_renderer_host.h b/content/renderer/pepper/pepper_file_ref_renderer_host.h
index 2435271c..b151452d 100644
--- a/content/renderer/pepper/pepper_file_ref_renderer_host.h
+++ b/content/renderer/pepper/pepper_file_ref_renderer_host.h
@@ -37,6 +37,10 @@
                             PP_Resource resource,
                             const base::FilePath& external_path);
 
+  PepperFileRefRendererHost(const PepperFileRefRendererHost&) = delete;
+  PepperFileRefRendererHost& operator=(const PepperFileRefRendererHost&) =
+      delete;
+
   ~PepperFileRefRendererHost() override;
 
   PP_FileSystemType GetFileSystemType() const;
@@ -54,8 +58,6 @@
   std::string internal_path_;
   base::FilePath external_path_;
   base::WeakPtr<PepperFileSystemHost> fs_host_;
-
-  DISALLOW_COPY_AND_ASSIGN(PepperFileRefRendererHost);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/pepper_file_system_host.h b/content/renderer/pepper/pepper_file_system_host.h
index 07908c4..1f123e7 100644
--- a/content/renderer/pepper/pepper_file_system_host.h
+++ b/content/renderer/pepper/pepper_file_system_host.h
@@ -43,6 +43,10 @@
                        PP_Resource resource,
                        const GURL& root_url,
                        PP_FileSystemType type);
+
+  PepperFileSystemHost(const PepperFileSystemHost&) = delete;
+  PepperFileSystemHost& operator=(const PepperFileSystemHost&) = delete;
+
   ~PepperFileSystemHost() override;
 
   // ppapi::host::ResourceHost override.
@@ -80,8 +84,6 @@
   GURL root_url_;
   bool called_open_;  // whether open has been called.
   mojo::Remote<blink::mojom::FileSystemManager> file_system_manager_;
-
-  DISALLOW_COPY_AND_ASSIGN(PepperFileSystemHost);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/pepper_graphics_2d_host.h b/content/renderer/pepper/pepper_graphics_2d_host.h
index 431f3d2e..6b8884a 100644
--- a/content/renderer/pepper/pepper_graphics_2d_host.h
+++ b/content/renderer/pepper/pepper_graphics_2d_host.h
@@ -56,6 +56,9 @@
       PP_Bool is_always_opaque,
       scoped_refptr<PPB_ImageData_Impl> backing_store);
 
+  PepperGraphics2DHost(const PepperGraphics2DHost&) = delete;
+  PepperGraphics2DHost& operator=(const PepperGraphics2DHost&) = delete;
+
   ~PepperGraphics2DHost() override;
 
   // ppapi::host::ResourceHost override.
@@ -258,7 +261,6 @@
   const bool enable_gpu_memory_buffer_;
 
   friend class PepperGraphics2DHostTest;
-  DISALLOW_COPY_AND_ASSIGN(PepperGraphics2DHost);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/pepper_in_process_resource_creation.h b/content/renderer/pepper/pepper_in_process_resource_creation.h
index d5a1d248..87e4b28 100644
--- a/content/renderer/pepper/pepper_in_process_resource_creation.h
+++ b/content/renderer/pepper/pepper_in_process_resource_creation.h
@@ -37,6 +37,12 @@
  public:
   PepperInProcessResourceCreation(RendererPpapiHostImpl* host_impl,
                                   PepperPluginInstanceImpl* instance);
+
+  PepperInProcessResourceCreation(const PepperInProcessResourceCreation&) =
+      delete;
+  PepperInProcessResourceCreation& operator=(
+      const PepperInProcessResourceCreation&) = delete;
+
   ~PepperInProcessResourceCreation() override;
 
   // ResourceCreation_API implementation.
@@ -63,8 +69,6 @@
  private:
   // Non-owning pointer to the host for the current plugin.
   RendererPpapiHostImpl* host_impl_;
-
-  DISALLOW_COPY_AND_ASSIGN(PepperInProcessResourceCreation);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/pepper_in_process_router.h b/content/renderer/pepper/pepper_in_process_router.h
index de27322..a99a60c7 100644
--- a/content/renderer/pepper/pepper_in_process_router.h
+++ b/content/renderer/pepper/pepper_in_process_router.h
@@ -57,6 +57,10 @@
  public:
   // The given host parameter owns this class and must outlive us.
   PepperInProcessRouter(RendererPpapiHostImpl* host_impl);
+
+  PepperInProcessRouter(const PepperInProcessRouter&) = delete;
+  PepperInProcessRouter& operator=(const PepperInProcessRouter&) = delete;
+
   ~PepperInProcessRouter();
 
   // Returns the dummy sender for the cooresponding end of the in-process
@@ -100,8 +104,6 @@
   bool reply_result_;
 
   base::WeakPtrFactory<PepperInProcessRouter> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(PepperInProcessRouter);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/pepper_media_device_manager.h b/content/renderer/pepper/pepper_media_device_manager.h
index f931291d..2977755 100644
--- a/content/renderer/pepper/pepper_media_device_manager.h
+++ b/content/renderer/pepper/pepper_media_device_manager.h
@@ -39,6 +39,10 @@
  public:
   static base::WeakPtr<PepperMediaDeviceManager> GetForRenderFrame(
       RenderFrame* render_frame);
+
+  PepperMediaDeviceManager(const PepperMediaDeviceManager&) = delete;
+  PepperMediaDeviceManager& operator=(const PepperMediaDeviceManager&) = delete;
+
   ~PepperMediaDeviceManager() override;
 
   // PepperDeviceEnumerationHostHelper::Delegate implementation:
@@ -122,8 +126,6 @@
       media_devices_dispatcher_;
 
   mojo::ReceiverSet<blink::mojom::MediaDevicesListener> receivers_;
-
-  DISALLOW_COPY_AND_ASSIGN(PepperMediaDeviceManager);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/pepper_media_stream_audio_track_host.h b/content/renderer/pepper/pepper_media_stream_audio_track_host.h
index e39d909..8a3a0cd 100644
--- a/content/renderer/pepper/pepper_media_stream_audio_track_host.h
+++ b/content/renderer/pepper/pepper_media_stream_audio_track_host.h
@@ -39,6 +39,10 @@
   class AudioSink : public blink::WebMediaStreamAudioSink {
    public:
     explicit AudioSink(PepperMediaStreamAudioTrackHost* host);
+
+    AudioSink(const AudioSink&) = delete;
+    AudioSink& operator=(const AudioSink&) = delete;
+
     ~AudioSink() override;
 
     // Enqueues a free buffer index into |buffers_| which will be used for
@@ -135,8 +139,6 @@
     ppapi::host::ReplyMessageContext pending_configure_reply_;
 
     base::WeakPtrFactory<AudioSink> weak_factory_{this};
-
-    DISALLOW_COPY_AND_ASSIGN(AudioSink);
   };
 
   ~PepperMediaStreamAudioTrackHost() override;
diff --git a/content/renderer/pepper/pepper_media_stream_video_track_host.cc b/content/renderer/pepper/pepper_media_stream_video_track_host.cc
index ad72d60..81c0d992 100644
--- a/content/renderer/pepper/pepper_media_stream_video_track_host.cc
+++ b/content/renderer/pepper/pepper_media_stream_video_track_host.cc
@@ -431,6 +431,9 @@
       : blink::MediaStreamVideoSource(base::ThreadTaskRunnerHandle::Get()),
         host_(std::move(host)) {}
 
+  VideoSource(const VideoSource&) = delete;
+  VideoSource& operator=(const VideoSource&) = delete;
+
   ~VideoSource() final { StopSourceImpl(); }
 
   void StartSourceImpl(
@@ -464,8 +467,6 @@
 
   const base::WeakPtr<PepperMediaStreamVideoTrackHost> host_;
   base::WeakPtrFactory<MediaStreamVideoSource> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(VideoSource);
 };
 
 void PepperMediaStreamVideoTrackHost::DidConnectPendingHostToResource() {
diff --git a/content/renderer/pepper/pepper_media_stream_video_track_host.h b/content/renderer/pepper/pepper_media_stream_video_track_host.h
index b0d1541..3c23fc5 100644
--- a/content/renderer/pepper/pepper_media_stream_video_track_host.h
+++ b/content/renderer/pepper/pepper_media_stream_video_track_host.h
@@ -44,6 +44,11 @@
                                   PP_Instance instance,
                                   PP_Resource resource);
 
+  PepperMediaStreamVideoTrackHost(const PepperMediaStreamVideoTrackHost&) =
+      delete;
+  PepperMediaStreamVideoTrackHost& operator=(
+      const PepperMediaStreamVideoTrackHost&) = delete;
+
   ~PepperMediaStreamVideoTrackHost() override;
 
   bool IsMediaStreamVideoTrackHost() override;
@@ -119,8 +124,6 @@
   scoped_refptr<FrameDeliverer> frame_deliverer_;
 
   base::WeakPtrFactory<PepperMediaStreamVideoTrackHost> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(PepperMediaStreamVideoTrackHost);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/pepper_platform_camera_device.h b/content/renderer/pepper/pepper_platform_camera_device.h
index 11905cf..b7e385b 100644
--- a/content/renderer/pepper/pepper_platform_camera_device.h
+++ b/content/renderer/pepper/pepper_platform_camera_device.h
@@ -27,6 +27,11 @@
   PepperPlatformCameraDevice(int render_frame_id,
                              const std::string& device_id,
                              PepperCameraDeviceHost* handler);
+
+  PepperPlatformCameraDevice(const PepperPlatformCameraDevice&) = delete;
+  PepperPlatformCameraDevice& operator=(const PepperPlatformCameraDevice&) =
+      delete;
+
   ~PepperPlatformCameraDevice();
 
   // Detaches the event handler and stops sending notifications to it.
@@ -62,8 +67,6 @@
   base::ThreadChecker thread_checker_;
 
   base::WeakPtrFactory<PepperPlatformCameraDevice> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(PepperPlatformCameraDevice);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/pepper_platform_video_capture.h b/content/renderer/pepper/pepper_platform_video_capture.h
index 80fd753..5dcf486 100644
--- a/content/renderer/pepper/pepper_platform_video_capture.h
+++ b/content/renderer/pepper/pepper_platform_video_capture.h
@@ -31,6 +31,11 @@
   PepperPlatformVideoCapture(int render_frame_id,
                              const std::string& device_id,
                              PepperVideoCaptureHost* handler);
+
+  PepperPlatformVideoCapture(const PepperPlatformVideoCapture&) = delete;
+  PepperPlatformVideoCapture& operator=(const PepperPlatformVideoCapture&) =
+      delete;
+
   virtual ~PepperPlatformVideoCapture();
 
   // Detaches the event handler and stops sending notifications to it.
@@ -69,8 +74,6 @@
   base::ThreadChecker thread_checker_;
 
   base::WeakPtrFactory<PepperPlatformVideoCapture> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(PepperPlatformVideoCapture);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/pepper_plugin_instance_impl.h b/content/renderer/pepper/pepper_plugin_instance_impl.h
index 3bfa2d0..1db84279 100644
--- a/content/renderer/pepper/pepper_plugin_instance_impl.h
+++ b/content/renderer/pepper/pepper_plugin_instance_impl.h
@@ -504,6 +504,10 @@
   class ExternalDocumentLoader : public blink::WebAssociatedURLLoaderClient {
    public:
     ExternalDocumentLoader();
+
+    ExternalDocumentLoader(const ExternalDocumentLoader&) = delete;
+    ExternalDocumentLoader& operator=(const ExternalDocumentLoader&) = delete;
+
     ~ExternalDocumentLoader() override;
 
     void ReplayReceivedData(WebAssociatedURLLoaderClient* document_loader);
@@ -517,8 +521,6 @@
     std::list<std::string> data_;
     bool finished_loading_;
     std::unique_ptr<blink::WebURLError> error_;
-
-    DISALLOW_COPY_AND_ASSIGN(ExternalDocumentLoader);
   };
 
   // Implements PPB_Gamepad_API. This is just to avoid having an excessive
diff --git a/content/renderer/pepper/pepper_plugin_registry.h b/content/renderer/pepper/pepper_plugin_registry.h
index 4c248a2..a83a351 100644
--- a/content/renderer/pepper/pepper_plugin_registry.h
+++ b/content/renderer/pepper/pepper_plugin_registry.h
@@ -24,6 +24,9 @@
 // not preloaded).
 class PepperPluginRegistry {
  public:
+  PepperPluginRegistry(const PepperPluginRegistry&) = delete;
+  PepperPluginRegistry& operator=(const PepperPluginRegistry&) = delete;
+
   ~PepperPluginRegistry();
 
   static PepperPluginRegistry* GetInstance();
@@ -76,8 +79,6 @@
       std::map<std::pair<base::FilePath, absl::optional<url::Origin>>,
                PluginModule*>;
   NonOwningModuleMap live_modules_;
-
-  DISALLOW_COPY_AND_ASSIGN(PepperPluginRegistry);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/pepper_try_catch.h b/content/renderer/pepper/pepper_try_catch.h
index 819425a..256bf5f 100644
--- a/content/renderer/pepper/pepper_try_catch.h
+++ b/content/renderer/pepper/pepper_try_catch.h
@@ -57,6 +57,10 @@
   PepperTryCatchV8(PepperPluginInstanceImpl* instance,
                    V8VarConverter* var_converter,
                    v8::Isolate* isolate);
+
+  PepperTryCatchV8(const PepperTryCatchV8&) = delete;
+  PepperTryCatchV8& operator=(const PepperTryCatchV8&) = delete;
+
   ~PepperTryCatchV8() override;
 
   bool ThrowException();
@@ -70,8 +74,6 @@
 
  private:
   PP_Var exception_;
-
-  DISALLOW_COPY_AND_ASSIGN(PepperTryCatchV8);
 };
 
 // Catches v8 exceptions and emits a var exception.
@@ -83,6 +85,10 @@
   PepperTryCatchVar(PepperPluginInstanceImpl* instance,
                     V8VarConverter* var_converter,
                     PP_Var* exception);
+
+  PepperTryCatchVar(const PepperTryCatchVar&) = delete;
+  PepperTryCatchVar& operator=(const PepperTryCatchVar&) = delete;
+
   ~PepperTryCatchVar() override;
 
   // PepperTryCatch
@@ -101,8 +107,6 @@
 
   PP_Var* exception_;
   bool exception_is_set_;
-
-  DISALLOW_COPY_AND_ASSIGN(PepperTryCatchVar);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/pepper_url_loader_host.h b/content/renderer/pepper/pepper_url_loader_host.h
index 57975dd9..5e44ffd 100644
--- a/content/renderer/pepper/pepper_url_loader_host.h
+++ b/content/renderer/pepper/pepper_url_loader_host.h
@@ -36,6 +36,10 @@
                       bool main_document_loader,
                       PP_Instance instance,
                       PP_Resource resource);
+
+  PepperURLLoaderHost(const PepperURLLoaderHost&) = delete;
+  PepperURLLoaderHost& operator=(const PepperURLLoaderHost&) = delete;
+
   ~PepperURLLoaderHost() override;
 
   // ResourceHost implementation.
@@ -136,8 +140,6 @@
   // PpapiPluginMsg_URLLoader_ReceivedResponse to the plugin, which introduces
   // ordering constraints on following messages to the plugin.
   bool pending_response_;
-
-  DISALLOW_COPY_AND_ASSIGN(PepperURLLoaderHost);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/pepper_video_capture_host.h b/content/renderer/pepper/pepper_video_capture_host.h
index b81499f..e4f52216 100644
--- a/content/renderer/pepper/pepper_video_capture_host.h
+++ b/content/renderer/pepper/pepper_video_capture_host.h
@@ -36,6 +36,9 @@
                          PP_Instance instance,
                          PP_Resource resource);
 
+  PepperVideoCaptureHost(const PepperVideoCaptureHost&) = delete;
+  PepperVideoCaptureHost& operator=(const PepperVideoCaptureHost&) = delete;
+
   ~PepperVideoCaptureHost() override;
 
   bool Init();
@@ -117,8 +120,6 @@
   ppapi::host::ReplyMessageContext open_reply_context_;
 
   PepperDeviceEnumerationHostHelper enumeration_helper_;
-
-  DISALLOW_COPY_AND_ASSIGN(PepperVideoCaptureHost);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/pepper_video_decoder_host.h b/content/renderer/pepper/pepper_video_decoder_host.h
index b7f3d87..6bb4d81b 100644
--- a/content/renderer/pepper/pepper_video_decoder_host.h
+++ b/content/renderer/pepper/pepper_video_decoder_host.h
@@ -34,6 +34,10 @@
   PepperVideoDecoderHost(RendererPpapiHost* host,
                          PP_Instance instance,
                          PP_Resource resource);
+
+  PepperVideoDecoderHost(const PepperVideoDecoderHost&) = delete;
+  PepperVideoDecoderHost& operator=(const PepperVideoDecoderHost&) = delete;
+
   ~PepperVideoDecoderHost() override;
 
  private:
@@ -169,8 +173,6 @@
   ppapi::host::ReplyMessageContext reset_reply_context_;
 
   bool initialized_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(PepperVideoDecoderHost);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/pepper_video_encoder_host.h b/content/renderer/pepper/pepper_video_encoder_host.h
index a30fc99..43df7b82 100644
--- a/content/renderer/pepper/pepper_video_encoder_host.h
+++ b/content/renderer/pepper/pepper_video_encoder_host.h
@@ -46,6 +46,10 @@
   PepperVideoEncoderHost(RendererPpapiHost* host,
                          PP_Instance instance,
                          PP_Resource resource);
+
+  PepperVideoEncoderHost(const PepperVideoEncoderHost&) = delete;
+  PepperVideoEncoderHost& operator=(const PepperVideoEncoderHost&) = delete;
+
   ~PepperVideoEncoderHost() override;
 
  private:
@@ -180,8 +184,6 @@
 #endif
 
   base::WeakPtrFactory<PepperVideoEncoderHost> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(PepperVideoEncoderHost);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/pepper_websocket_host.h b/content/renderer/pepper/pepper_websocket_host.h
index 17ea26f..b21aa898 100644
--- a/content/renderer/pepper/pepper_websocket_host.h
+++ b/content/renderer/pepper/pepper_websocket_host.h
@@ -30,6 +30,10 @@
   explicit PepperWebSocketHost(RendererPpapiHost* host,
                                PP_Instance instance,
                                PP_Resource resource);
+
+  PepperWebSocketHost(const PepperWebSocketHost&) = delete;
+  PepperWebSocketHost& operator=(const PepperWebSocketHost&) = delete;
+
   ~PepperWebSocketHost() override;
 
   int32_t OnResourceMessageReceived(
@@ -89,8 +93,6 @@
   // Keeps the WebKit side WebSocket object. This is used for calling WebKit
   // side functions via WebKit API.
   std::unique_ptr<blink::WebPepperSocket> websocket_;
-
-  DISALLOW_COPY_AND_ASSIGN(PepperWebSocketHost);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/plugin_object.h b/content/renderer/pepper/plugin_object.h
index e170f828..8a72b03 100644
--- a/content/renderer/pepper/plugin_object.h
+++ b/content/renderer/pepper/plugin_object.h
@@ -33,6 +33,9 @@
  public:
   static gin::WrapperInfo kWrapperInfo;
 
+  PluginObject(const PluginObject&) = delete;
+  PluginObject& operator=(const PluginObject&) = delete;
+
   ~PluginObject() override;
 
   // Returns the PluginObject which is contained in the given v8 object, or NULL
@@ -87,8 +90,6 @@
   v8::StdGlobalValueMap<std::string, v8::FunctionTemplate> template_cache_;
 
   base::WeakPtrFactory<PluginObject> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(PluginObject);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/ppb_buffer_impl.h b/content/renderer/pepper/ppb_buffer_impl.h
index 4aba51d..1157b11 100644
--- a/content/renderer/pepper/ppb_buffer_impl.h
+++ b/content/renderer/pepper/ppb_buffer_impl.h
@@ -61,6 +61,10 @@
 class BufferAutoMapper {
  public:
   explicit BufferAutoMapper(ppapi::thunk::PPB_Buffer_API* api);
+
+  BufferAutoMapper(const BufferAutoMapper&) = delete;
+  BufferAutoMapper& operator=(const BufferAutoMapper&) = delete;
+
   ~BufferAutoMapper();
 
   // Will be NULL on failure to map.
@@ -74,8 +78,6 @@
 
   const uint8_t* data_;
   uint32_t size_;
-
-  DISALLOW_COPY_AND_ASSIGN(BufferAutoMapper);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/ppb_image_data_impl.h b/content/renderer/pepper/ppb_image_data_impl.h
index edaeeab..58f7259 100644
--- a/content/renderer/pepper/ppb_image_data_impl.h
+++ b/content/renderer/pepper/ppb_image_data_impl.h
@@ -117,6 +117,10 @@
   // |is_browser_allocated| indicates whether the backing shared memory should
   // be allocated by the browser process.
   ImageDataPlatformBackend();
+
+  ImageDataPlatformBackend(const ImageDataPlatformBackend&) = delete;
+  ImageDataPlatformBackend& operator=(const ImageDataPlatformBackend&) = delete;
+
   ~ImageDataPlatformBackend() override;
 
   // PPB_ImageData_Impl::Backend implementation.
@@ -143,13 +147,15 @@
 
   // When the device is mapped, this is the image. Null when umapped.
   std::unique_ptr<SkCanvas> mapped_canvas_;
-
-  DISALLOW_COPY_AND_ASSIGN(ImageDataPlatformBackend);
 };
 
 class ImageDataSimpleBackend : public PPB_ImageData_Impl::Backend {
  public:
   ImageDataSimpleBackend();
+
+  ImageDataSimpleBackend(const ImageDataSimpleBackend&) = delete;
+  ImageDataSimpleBackend& operator=(const ImageDataSimpleBackend&) = delete;
+
   ~ImageDataSimpleBackend() override;
 
   // PPB_ImageData_Impl::Backend implementation.
@@ -174,8 +180,6 @@
   SkBitmap skia_bitmap_;
   std::unique_ptr<SkCanvas> skia_canvas_;
   uint32_t map_count_;
-
-  DISALLOW_COPY_AND_ASSIGN(ImageDataSimpleBackend);
 };
 
 // Manages mapping an image resource if necessary. Use this to ensure the
@@ -200,6 +204,9 @@
     }
   }
 
+  ImageDataAutoMapper(const ImageDataAutoMapper&) = delete;
+  ImageDataAutoMapper& operator=(const ImageDataAutoMapper&) = delete;
+
   ~ImageDataAutoMapper() {
     if (needs_unmap_)
       image_data_->Unmap();
@@ -213,8 +220,6 @@
   PPB_ImageData_Impl* image_data_;
   bool is_valid_;
   bool needs_unmap_;
-
-  DISALLOW_COPY_AND_ASSIGN(ImageDataAutoMapper);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/renderer_ppapi_host_impl.h b/content/renderer/pepper/renderer_ppapi_host_impl.h
index da1fed8a..645cb70 100644
--- a/content/renderer/pepper/renderer_ppapi_host_impl.h
+++ b/content/renderer/pepper/renderer_ppapi_host_impl.h
@@ -33,6 +33,9 @@
 // This class is attached to a PluginModule which manages our lifetime.
 class RendererPpapiHostImpl : public RendererPpapiHost {
  public:
+  RendererPpapiHostImpl(const RendererPpapiHostImpl&) = delete;
+  RendererPpapiHostImpl& operator=(const RendererPpapiHostImpl&) = delete;
+
   ~RendererPpapiHostImpl() override;
 
   // Factory functions to create in process or out-of-process host impls. The
@@ -149,8 +152,6 @@
 
   // The scale between the viewport and dip.
   float viewport_to_dip_scale_ = 1.0f;
-
-  DISALLOW_COPY_AND_ASSIGN(RendererPpapiHostImpl);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/resource_converter.h b/content/renderer/pepper/resource_converter.h
index 36b93f4..6ccbc4b 100644
--- a/content/renderer/pepper/resource_converter.h
+++ b/content/renderer/pepper/resource_converter.h
@@ -60,6 +60,10 @@
 class ResourceConverterImpl : public ResourceConverter {
  public:
   explicit ResourceConverterImpl(PP_Instance instance);
+
+  ResourceConverterImpl(const ResourceConverterImpl&) = delete;
+  ResourceConverterImpl& operator=(const ResourceConverterImpl&) = delete;
+
   ~ResourceConverterImpl() override;
 
   // ResourceConverter overrides.
@@ -98,8 +102,6 @@
   std::vector<IPC::Message> browser_host_create_messages_;
   // A list of the resource vars associated with browser hosts.
   std::vector<scoped_refptr<HostResourceVar> > browser_vars_;
-
-  DISALLOW_COPY_AND_ASSIGN(ResourceConverterImpl);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/resource_creation_impl.h b/content/renderer/pepper/resource_creation_impl.h
index a5165b4c..82a1562 100644
--- a/content/renderer/pepper/resource_creation_impl.h
+++ b/content/renderer/pepper/resource_creation_impl.h
@@ -22,6 +22,10 @@
 class ResourceCreationImpl : public ppapi::thunk::ResourceCreationAPI {
  public:
   explicit ResourceCreationImpl(PepperPluginInstanceImpl* instance);
+
+  ResourceCreationImpl(const ResourceCreationImpl&) = delete;
+  ResourceCreationImpl& operator=(const ResourceCreationImpl&) = delete;
+
   ~ResourceCreationImpl() override;
 
   // ResourceCreationAPI implementation.
@@ -130,9 +134,6 @@
                                     const PP_FloatPoint* wheel_ticks,
                                     PP_Bool scroll_by_page) override;
   PP_Resource CreateX509CertificatePrivate(PP_Instance instance) override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(ResourceCreationImpl);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/v8_var_converter.h b/content/renderer/pepper/v8_var_converter.h
index 42c73459..9ff21f8 100644
--- a/content/renderer/pepper/v8_var_converter.h
+++ b/content/renderer/pepper/v8_var_converter.h
@@ -33,6 +33,10 @@
   // Constructor for testing.
   V8VarConverter(PP_Instance instance,
                  std::unique_ptr<ResourceConverter> resource_converter);
+
+  V8VarConverter(const V8VarConverter&) = delete;
+  V8VarConverter& operator=(const V8VarConverter&) = delete;
+
   ~V8VarConverter();
 
   // Converts the given PP_Var to a v8::Value. True is returned upon success.
@@ -86,8 +90,6 @@
 
   // The converter to use for converting V8 vars to resources.
   std::unique_ptr<ResourceConverter> resource_converter_;
-
-  DISALLOW_COPY_AND_ASSIGN(V8VarConverter);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/video_decoder_shim.h b/content/renderer/pepper/video_decoder_shim.h
index 1edd117..cfb3d3d 100644
--- a/content/renderer/pepper/video_decoder_shim.h
+++ b/content/renderer/pepper/video_decoder_shim.h
@@ -38,6 +38,10 @@
 class VideoDecoderShim : public media::VideoDecodeAccelerator {
  public:
   VideoDecoderShim(PepperVideoDecoderHost* host, uint32_t texture_pool_size);
+
+  VideoDecoderShim(const VideoDecoderShim&) = delete;
+  VideoDecoderShim& operator=(const VideoDecoderShim&) = delete;
+
   ~VideoDecoderShim() override;
 
   // media::VideoDecodeAccelerator implementation.
@@ -106,8 +110,6 @@
   uint32_t num_pending_decodes_;
 
   base::WeakPtrFactory<VideoDecoderShim> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(VideoDecoderShim);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/video_encoder_shim.h b/content/renderer/pepper/video_encoder_shim.h
index 8e502822..486d601 100644
--- a/content/renderer/pepper/video_encoder_shim.h
+++ b/content/renderer/pepper/video_encoder_shim.h
@@ -35,6 +35,10 @@
 class VideoEncoderShim : public media::VideoEncodeAccelerator {
  public:
   explicit VideoEncoderShim(PepperVideoEncoderHost* host);
+
+  VideoEncoderShim(const VideoEncoderShim&) = delete;
+  VideoEncoderShim& operator=(const VideoEncoderShim&) = delete;
+
   ~VideoEncoderShim() override;
 
   // media::VideoEncodeAccelerator implementation.
@@ -69,8 +73,6 @@
   scoped_refptr<base::SingleThreadTaskRunner> media_task_runner_;
 
   base::WeakPtrFactory<VideoEncoderShim> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(VideoEncoderShim);
 };
 
 }  // namespace content
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index 4988a2c8..4b5bd63 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -1229,6 +1229,9 @@
     body_loader_->StartLoadingBody(this, nullptr /*code_cache_host*/);
   }
 
+  MHTMLBodyLoaderClient(const MHTMLBodyLoaderClient&) = delete;
+  MHTMLBodyLoaderClient& operator=(const MHTMLBodyLoaderClient&) = delete;
+
   ~MHTMLBodyLoaderClient() override {
     // MHTMLBodyLoaderClient is reset in several different places. Either:
     CHECK(
@@ -1293,8 +1296,6 @@
   std::unique_ptr<blink::WebNavigationBodyLoader> body_loader_;
   base::OnceCallback<void(std::unique_ptr<blink::WebNavigationParams>)>
       done_callback_;
-
-  DISALLOW_COPY_AND_ASSIGN(MHTMLBodyLoaderClient);
 };
 
 class RenderFrameImpl::FrameURLLoaderFactory
@@ -1303,6 +1304,9 @@
   explicit FrameURLLoaderFactory(base::WeakPtr<RenderFrameImpl> frame)
       : frame_(std::move(frame)) {}
 
+  FrameURLLoaderFactory(const FrameURLLoaderFactory&) = delete;
+  FrameURLLoaderFactory& operator=(const FrameURLLoaderFactory&) = delete;
+
   ~FrameURLLoaderFactory() override = default;
 
   std::unique_ptr<blink::WebURLLoader> CreateURLLoader(
@@ -1338,8 +1342,6 @@
 
  private:
   base::WeakPtr<RenderFrameImpl> frame_;
-
-  DISALLOW_COPY_AND_ASSIGN(FrameURLLoaderFactory);
 };
 
 std::string UniqueNameForWebFrame(blink::WebFrame* frame) {
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
index 100e382c..76ba7fa 100644
--- a/content/renderer/render_frame_impl.h
+++ b/content/renderer/render_frame_impl.h
@@ -263,6 +263,9 @@
   // Overwrites the given URL to use an HTML5 embed if possible.
   blink::WebURL OverrideFlashEmbedWithHTML(const blink::WebURL& url) override;
 
+  RenderFrameImpl(const RenderFrameImpl&) = delete;
+  RenderFrameImpl& operator=(const RenderFrameImpl&) = delete;
+
   ~RenderFrameImpl() override;
 
   // Returns the unique name of the RenderFrame.
@@ -1479,8 +1482,6 @@
   bool send_content_state_immediately_ = false;
 
   base::WeakPtrFactory<RenderFrameImpl> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(RenderFrameImpl);
 };
 
 }  // namespace content
diff --git a/content/renderer/render_frame_impl_browsertest.cc b/content/renderer/render_frame_impl_browsertest.cc
index 410458d4..18a91b74 100644
--- a/content/renderer/render_frame_impl_browsertest.cc
+++ b/content/renderer/render_frame_impl_browsertest.cc
@@ -545,6 +545,11 @@
 class FrameHostTestInterfaceImpl : public mojom::FrameHostTestInterface {
  public:
   FrameHostTestInterfaceImpl() = default;
+
+  FrameHostTestInterfaceImpl(const FrameHostTestInterfaceImpl&) = delete;
+  FrameHostTestInterfaceImpl& operator=(const FrameHostTestInterfaceImpl&) =
+      delete;
+
   ~FrameHostTestInterfaceImpl() override {}
 
   void BindAndFlush(
@@ -565,8 +570,6 @@
  private:
   mojo::Receiver<mojom::FrameHostTestInterface> receiver_{this};
   absl::optional<SourceAnnotation> ping_source_;
-
-  DISALLOW_COPY_AND_ASSIGN(FrameHostTestInterfaceImpl);
 };
 
 // RenderFrameObserver that issues FrameHostTestInterface interface requests
@@ -648,6 +651,12 @@
   using FrameCreatedCallback = base::RepeatingCallback<void(TestRenderFrame*)>;
 
   FrameCreationObservingRendererClient() {}
+
+  FrameCreationObservingRendererClient(
+      const FrameCreationObservingRendererClient&) = delete;
+  FrameCreationObservingRendererClient& operator=(
+      const FrameCreationObservingRendererClient&) = delete;
+
   ~FrameCreationObservingRendererClient() override {}
 
   void set_callback(FrameCreatedCallback callback) {
@@ -665,8 +674,6 @@
 
  private:
   FrameCreatedCallback callback_;
-
-  DISALLOW_COPY_AND_ASSIGN(FrameCreationObservingRendererClient);
 };
 
 // Expects observing the creation of a new frame, and creates an instance of
@@ -685,6 +692,11 @@
         base::Unretained(this)));
   }
 
+  ScopedNewFrameInterfaceProviderExerciser(
+      const ScopedNewFrameInterfaceProviderExerciser&) = delete;
+  ScopedNewFrameInterfaceProviderExerciser& operator=(
+      const ScopedNewFrameInterfaceProviderExerciser&) = delete;
+
   ~ScopedNewFrameInterfaceProviderExerciser() {
     frame_creation_observer_->reset_callback();
   }
@@ -748,8 +760,6 @@
       browser_interface_broker_receiver_for_initial_empty_document_;
   mojo::PendingReceiver<blink::mojom::BrowserInterfaceBroker>
       browser_interface_broker_receiver_for_first_document_;
-
-  DISALLOW_COPY_AND_ASSIGN(ScopedNewFrameInterfaceProviderExerciser);
 };
 
 // Extracts all interface receivers for FrameHostTestInterface pending on the
@@ -790,6 +800,12 @@
     blink::WebRuntimeFeatures::EnableFeatureFromString(
         "AllowContentInitiatedDataUrlNavigations", true);
   }
+
+  RenderFrameRemoteInterfacesTest(const RenderFrameRemoteInterfacesTest&) =
+      delete;
+  RenderFrameRemoteInterfacesTest& operator=(
+      const RenderFrameRemoteInterfacesTest&) = delete;
+
   ~RenderFrameRemoteInterfacesTest() override {
     blink::WebRuntimeFeatures::EnableFeatureFromString(
         "AllowContentInitiatedDataUrlNavigations", false);
@@ -828,8 +844,6 @@
   // Owned by RenderViewTest.
   FrameCreationObservingRendererClient* frame_creation_observer_ = nullptr;
   base::test::ScopedFeatureList scoped_feature_list_;
-
-  DISALLOW_COPY_AND_ASSIGN(RenderFrameRemoteInterfacesTest);
 };
 
 // Expect that |remote_interfaces_| is bound before the first committed load in
diff --git a/content/renderer/render_frame_proxy.h b/content/renderer/render_frame_proxy.h
index ff54d72..44ac119c 100644
--- a/content/renderer/render_frame_proxy.h
+++ b/content/renderer/render_frame_proxy.h
@@ -114,6 +114,9 @@
   // be null, nor will this method return null.
   static RenderFrameProxy* FromWebFrame(blink::WebRemoteFrame* web_frame);
 
+  RenderFrameProxy(const RenderFrameProxy&) = delete;
+  RenderFrameProxy& operator=(const RenderFrameProxy&) = delete;
+
   ~RenderFrameProxy() override;
 
   // IPC::Sender
@@ -167,8 +170,6 @@
   service_manager::BinderRegistry binder_registry_;
   blink::AssociatedInterfaceRegistry associated_interfaces_;
   std::unique_ptr<BlinkInterfaceRegistryImpl> blink_interface_registry_;
-
-  DISALLOW_COPY_AND_ASSIGN(RenderFrameProxy);
 };
 
 }  // namespace content
diff --git a/content/renderer/render_process.h b/content/renderer/render_process.h
index 69f93d3..a0d92b50 100644
--- a/content/renderer/render_process.h
+++ b/content/renderer/render_process.h
@@ -28,6 +28,10 @@
   RenderProcess(const std::string& thread_pool_name,
                 std::unique_ptr<base::ThreadPoolInstance::InitParams>
                     thread_pool_init_params);
+
+  RenderProcess(const RenderProcess&) = delete;
+  RenderProcess& operator=(const RenderProcess&) = delete;
+
   ~RenderProcess() override {}
 
   // Returns a pointer to the RenderProcess singleton instance. Assuming that
@@ -36,9 +40,6 @@
   static RenderProcess* current() {
     return static_cast<RenderProcess*>(ChildProcess::current());
   }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(RenderProcess);
 };
 
 }  // namespace content
diff --git a/content/renderer/render_process_impl.h b/content/renderer/render_process_impl.h
index 67dfe3f..0eca374 100644
--- a/content/renderer/render_process_impl.h
+++ b/content/renderer/render_process_impl.h
@@ -18,6 +18,9 @@
 // running under certain unit tests.
 class RenderProcessImpl : public RenderProcess {
  public:
+  RenderProcessImpl(const RenderProcessImpl&) = delete;
+  RenderProcessImpl& operator=(const RenderProcessImpl&) = delete;
+
   ~RenderProcessImpl() override;
 
   // Creates and returns a RenderProcessImpl instance.
@@ -37,8 +40,6 @@
 
  private:
   RenderProcessImpl();
-
-  DISALLOW_COPY_AND_ASSIGN(RenderProcessImpl);
 };
 
 }  // namespace content
diff --git a/content/renderer/render_thread_impl.h b/content/renderer/render_thread_impl.h
index 8d83f4db..ab4afdd 100644
--- a/content/renderer/render_thread_impl.h
+++ b/content/renderer/render_thread_impl.h
@@ -152,6 +152,10 @@
       const InProcessChildThreadParams& params,
       int32_t client_id,
       std::unique_ptr<blink::scheduler::WebThreadScheduler> scheduler);
+
+  RenderThreadImpl(const RenderThreadImpl&) = delete;
+  RenderThreadImpl& operator=(const RenderThreadImpl&) = delete;
+
   ~RenderThreadImpl() override;
   void Shutdown() override;
   bool ShouldBeDestroyed() override;
@@ -316,6 +320,10 @@
   class CONTENT_EXPORT HistogramCustomizer {
    public:
     HistogramCustomizer();
+
+    HistogramCustomizer(const HistogramCustomizer&) = delete;
+    HistogramCustomizer& operator=(const HistogramCustomizer&) = delete;
+
     ~HistogramCustomizer();
 
     // Called when a top frame of a RenderView navigates. This function updates
@@ -354,8 +362,6 @@
     // Set of histograms for which we want to produce a custom histogram if
     // possible.
     std::set<std::string> custom_histograms_;
-
-    DISALLOW_COPY_AND_ASSIGN(HistogramCustomizer);
   };
 
   HistogramCustomizer* histogram_customizer() {
@@ -611,8 +617,6 @@
       nullptr;
 
   base::WeakPtrFactory<RenderThreadImpl> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(RenderThreadImpl);
 };
 
 }  // namespace content
diff --git a/content/renderer/render_thread_impl_browsertest.cc b/content/renderer/render_thread_impl_browsertest.cc
index cf41680..c343d02 100644
--- a/content/renderer/render_thread_impl_browsertest.cc
+++ b/content/renderer/render_thread_impl_browsertest.cc
@@ -410,6 +410,12 @@
           ::testing::tuple<NativeBufferFlag, gfx::BufferFormat>> {
  public:
   RenderThreadImplGpuMemoryBufferBrowserTest() {}
+
+  RenderThreadImplGpuMemoryBufferBrowserTest(
+      const RenderThreadImplGpuMemoryBufferBrowserTest&) = delete;
+  RenderThreadImplGpuMemoryBufferBrowserTest& operator=(
+      const RenderThreadImplGpuMemoryBufferBrowserTest&) = delete;
+
   ~RenderThreadImplGpuMemoryBufferBrowserTest() override {}
 
   gpu::GpuMemoryBufferManager* memory_buffer_manager() {
@@ -439,8 +445,6 @@
   }
 
   gpu::GpuMemoryBufferManager* memory_buffer_manager_ = nullptr;
-
-  DISALLOW_COPY_AND_ASSIGN(RenderThreadImplGpuMemoryBufferBrowserTest);
 };
 
 // https://crbug.com/652531
diff --git a/content/renderer/renderer_blink_platform_impl.h b/content/renderer/renderer_blink_platform_impl.h
index 577ba7b6..9daec65 100644
--- a/content/renderer/renderer_blink_platform_impl.h
+++ b/content/renderer/renderer_blink_platform_impl.h
@@ -68,6 +68,11 @@
  public:
   explicit RendererBlinkPlatformImpl(
       blink::scheduler::WebThreadScheduler* main_thread_scheduler);
+
+  RendererBlinkPlatformImpl(const RendererBlinkPlatformImpl&) = delete;
+  RendererBlinkPlatformImpl& operator=(const RendererBlinkPlatformImpl&) =
+      delete;
+
   ~RendererBlinkPlatformImpl() override;
 
   blink::scheduler::WebThreadScheduler* main_thread_scheduler() {
@@ -303,8 +308,6 @@
 #endif
 
   THREAD_CHECKER(main_thread_checker_);
-
-  DISALLOW_COPY_AND_ASSIGN(RendererBlinkPlatformImpl);
 };
 
 }  // namespace content
diff --git a/content/renderer/renderer_main_platform_delegate.h b/content/renderer/renderer_main_platform_delegate.h
index f3adc9f..69ef572 100644
--- a/content/renderer/renderer_main_platform_delegate.h
+++ b/content/renderer/renderer_main_platform_delegate.h
@@ -25,6 +25,11 @@
  public:
   explicit RendererMainPlatformDelegate(
       const MainFunctionParams& parameters);
+
+  RendererMainPlatformDelegate(const RendererMainPlatformDelegate&) = delete;
+  RendererMainPlatformDelegate& operator=(const RendererMainPlatformDelegate&) =
+      delete;
+
   ~RendererMainPlatformDelegate();
 
   // Called first thing and last thing in the process' lifecycle, i.e. before
@@ -44,8 +49,6 @@
   std::unique_ptr<blink::FuchsiaAudioDeviceFactory>
       fuchsia_audio_device_factory_;
 #endif  // defined(OS_FUCHSIA)
-
-  DISALLOW_COPY_AND_ASSIGN(RendererMainPlatformDelegate);
 };
 
 }  // namespace content
diff --git a/content/renderer/service_worker/embedded_worker_instance_client_impl.h b/content/renderer/service_worker/embedded_worker_instance_client_impl.h
index 1b8312d9..f8e2936 100644
--- a/content/renderer/service_worker/embedded_worker_instance_client_impl.h
+++ b/content/renderer/service_worker/embedded_worker_instance_client_impl.h
@@ -57,6 +57,11 @@
       mojo::PendingReceiver<blink::mojom::EmbeddedWorkerInstanceClient>
           receiver);
 
+  EmbeddedWorkerInstanceClientImpl(const EmbeddedWorkerInstanceClientImpl&) =
+      delete;
+  EmbeddedWorkerInstanceClientImpl& operator=(
+      const EmbeddedWorkerInstanceClientImpl&) = delete;
+
   ~EmbeddedWorkerInstanceClientImpl() override;
 
   // Destroys |this|. Called from ServiceWorkerContextClient.
@@ -94,8 +99,6 @@
 
   // nullptr means worker is not running.
   std::unique_ptr<ServiceWorkerContextClient> service_worker_context_client_;
-
-  DISALLOW_COPY_AND_ASSIGN(EmbeddedWorkerInstanceClientImpl);
 };
 
 }  // namespace content
diff --git a/content/renderer/service_worker/service_worker_context_client.h b/content/renderer/service_worker/service_worker_context_client.h
index 6085194..2a8bb890 100644
--- a/content/renderer/service_worker/service_worker_context_client.h
+++ b/content/renderer/service_worker/service_worker_context_client.h
@@ -113,6 +113,11 @@
       scoped_refptr<base::SingleThreadTaskRunner> initiator_thread_task_runner,
       int32_t service_worker_route_id,
       const std::vector<std::string>& cors_exempt_header_list);
+
+  ServiceWorkerContextClient(const ServiceWorkerContextClient&) = delete;
+  ServiceWorkerContextClient& operator=(const ServiceWorkerContextClient&) =
+      delete;
+
   // Called on the initiator thread.
   ~ServiceWorkerContextClient() override;
 
@@ -285,8 +290,6 @@
   int32_t service_worker_route_id_;
 
   std::vector<std::string> cors_exempt_header_list_;
-
-  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerContextClient);
 };
 
 }  // namespace content
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 f5f1afb..642e4e1 100644
--- a/content/renderer/service_worker/service_worker_provider_context_unittest.cc
+++ b/content/renderer/service_worker/service_worker_provider_context_unittest.cc
@@ -133,6 +133,10 @@
 class FakeURLLoaderFactory final : public network::mojom::URLLoaderFactory {
  public:
   FakeURLLoaderFactory() = default;
+
+  FakeURLLoaderFactory(const FakeURLLoaderFactory&) = delete;
+  FakeURLLoaderFactory& operator=(const FakeURLLoaderFactory&) = delete;
+
   ~FakeURLLoaderFactory() override = default;
 
   void AddReceiver(
@@ -173,8 +177,6 @@
   std::vector<mojo::PendingRemote<network::mojom::URLLoaderClient>> clients_;
   base::OnceClosure start_loader_callback_;
   GURL last_url_;
-
-  DISALLOW_COPY_AND_ASSIGN(FakeURLLoaderFactory);
 };
 
 // A fake ControllerServiceWorker implementation that basically does nothing but
@@ -183,6 +185,11 @@
     : public blink::mojom::ControllerServiceWorker {
  public:
   FakeControllerServiceWorker() = default;
+
+  FakeControllerServiceWorker(const FakeControllerServiceWorker&) = delete;
+  FakeControllerServiceWorker& operator=(const FakeControllerServiceWorker&) =
+      delete;
+
   ~FakeControllerServiceWorker() override = default;
 
   // blink::mojom::ControllerServiceWorker:
@@ -220,8 +227,6 @@
   blink::mojom::FetchAPIRequestPtr fetch_event_request_;
   base::OnceClosure fetch_event_callback_;
   mojo::ReceiverSet<blink::mojom::ControllerServiceWorker> receivers_;
-
-  DISALLOW_COPY_AND_ASSIGN(FakeControllerServiceWorker);
 };
 
 class FakeServiceWorkerContainerHost
@@ -231,6 +236,12 @@
       mojo::PendingAssociatedReceiver<blink::mojom::ServiceWorkerContainerHost>
           receiver)
       : associated_receiver_(this, std::move(receiver)) {}
+
+  FakeServiceWorkerContainerHost(const FakeServiceWorkerContainerHost&) =
+      delete;
+  FakeServiceWorkerContainerHost& operator=(
+      const FakeServiceWorkerContainerHost&) = delete;
+
   ~FakeServiceWorkerContainerHost() override = default;
 
   // Implements blink::mojom::ServiceWorkerContainerHost.
@@ -273,7 +284,6 @@
   mojo::ReceiverSet<blink::mojom::ServiceWorkerContainerHost> receivers_;
   mojo::AssociatedReceiver<blink::mojom::ServiceWorkerContainerHost>
       associated_receiver_;
-  DISALLOW_COPY_AND_ASSIGN(FakeServiceWorkerContainerHost);
 };
 
 class ServiceWorkerProviderContextTest : public testing::Test {
diff --git a/content/renderer/service_worker/service_worker_subresource_loader.h b/content/renderer/service_worker/service_worker_subresource_loader.h
index c8a7ae0..463c7f7 100644
--- a/content/renderer/service_worker/service_worker_subresource_loader.h
+++ b/content/renderer/service_worker/service_worker_subresource_loader.h
@@ -62,6 +62,11 @@
       base::WeakPtr<ServiceWorkerSubresourceLoaderFactory>
           service_worker_subresource_loader_factory);
 
+  ServiceWorkerSubresourceLoader(const ServiceWorkerSubresourceLoader&) =
+      delete;
+  ServiceWorkerSubresourceLoader& operator=(
+      const ServiceWorkerSubresourceLoader&) = delete;
+
   ~ServiceWorkerSubresourceLoader() override;
 
   // ControllerServiceWorkerConnector::Observer overrides:
@@ -207,8 +212,6 @@
   network::mojom::FetchResponseSource response_source_;
 
   base::WeakPtrFactory<ServiceWorkerSubresourceLoader> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerSubresourceLoader);
 };
 
 // A custom URLLoaderFactory implementation used by Service Worker controllees
@@ -239,6 +242,11 @@
       scoped_refptr<base::SequencedTaskRunner> parent_task_runner,
       WorkerTimingCallback worker_timing_callback);
 
+  ServiceWorkerSubresourceLoaderFactory(
+      const ServiceWorkerSubresourceLoaderFactory&) = delete;
+  ServiceWorkerSubresourceLoaderFactory& operator=(
+      const ServiceWorkerSubresourceLoaderFactory&) = delete;
+
   ~ServiceWorkerSubresourceLoaderFactory() override;
 
   void AddPendingWorkerTimingReceiver(
@@ -287,8 +295,6 @@
 
   base::WeakPtrFactory<ServiceWorkerSubresourceLoaderFactory> weak_factory_{
       this};
-
-  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerSubresourceLoaderFactory);
 };
 
 }  // namespace content
diff --git a/content/renderer/service_worker/service_worker_subresource_loader_unittest.cc b/content/renderer/service_worker/service_worker_subresource_loader_unittest.cc
index fce9682..7d602f18 100644
--- a/content/renderer/service_worker/service_worker_subresource_loader_unittest.cc
+++ b/content/renderer/service_worker/service_worker_subresource_loader_unittest.cc
@@ -101,6 +101,11 @@
     : public blink::mojom::ControllerServiceWorker {
  public:
   FakeControllerServiceWorker() = default;
+
+  FakeControllerServiceWorker(const FakeControllerServiceWorker&) = delete;
+  FakeControllerServiceWorker& operator=(const FakeControllerServiceWorker&) =
+      delete;
+
   ~FakeControllerServiceWorker() override = default;
 
   static blink::mojom::FetchAPIResponsePtr OkResponse(
@@ -422,8 +427,6 @@
 
   std::string cache_storage_cache_name_;
   base::Time response_time_;
-
-  DISALLOW_COPY_AND_ASSIGN(FakeControllerServiceWorker);
 };
 
 class FakeServiceWorkerContainerHost
@@ -433,6 +436,11 @@
       FakeControllerServiceWorker* fake_controller)
       : fake_controller_(fake_controller) {}
 
+  FakeServiceWorkerContainerHost(const FakeServiceWorkerContainerHost&) =
+      delete;
+  FakeServiceWorkerContainerHost& operator=(
+      const FakeServiceWorkerContainerHost&) = delete;
+
   ~FakeServiceWorkerContainerHost() override = default;
 
   void set_fake_controller(FakeControllerServiceWorker* new_fake_controller) {
@@ -488,7 +496,6 @@
   int get_controller_service_worker_count_ = 0;
   FakeControllerServiceWorker* fake_controller_;
   mojo::ReceiverSet<blink::mojom::ServiceWorkerContainerHost> receivers_;
-  DISALLOW_COPY_AND_ASSIGN(FakeServiceWorkerContainerHost);
 };
 
 // Returns an expected network::mojom::URLResponseHeadPtr which is used by
diff --git a/content/renderer/service_worker/web_service_worker_provider_impl.h b/content/renderer/service_worker/web_service_worker_provider_impl.h
index ceea72f..ab54e489 100644
--- a/content/renderer/service_worker/web_service_worker_provider_impl.h
+++ b/content/renderer/service_worker/web_service_worker_provider_impl.h
@@ -33,6 +33,11 @@
     : public blink::WebServiceWorkerProvider {
  public:
   explicit WebServiceWorkerProviderImpl(ServiceWorkerProviderContext* context);
+
+  WebServiceWorkerProviderImpl(const WebServiceWorkerProviderImpl&) = delete;
+  WebServiceWorkerProviderImpl& operator=(const WebServiceWorkerProviderImpl&) =
+      delete;
+
   ~WebServiceWorkerProviderImpl() override;
 
   void SetClient(blink::WebServiceWorkerProviderClient* client) override;
@@ -99,8 +104,6 @@
   blink::WebServiceWorkerProviderClient* provider_client_;
 
   base::WeakPtrFactory<WebServiceWorkerProviderImpl> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(WebServiceWorkerProviderImpl);
 };
 
 }  // namespace content
diff --git a/content/renderer/v8_value_converter_impl.cc b/content/renderer/v8_value_converter_impl.cc
index f519c128..10b34bf 100644
--- a/content/renderer/v8_value_converter_impl.cc
+++ b/content/renderer/v8_value_converter_impl.cc
@@ -160,6 +160,10 @@
       : state_(state),
         value_(value),
         is_valid_(state_->AddToUniquenessCheck(value_)) {}
+
+  ScopedUniquenessGuard(const ScopedUniquenessGuard&) = delete;
+  ScopedUniquenessGuard& operator=(const ScopedUniquenessGuard&) = delete;
+
   ~ScopedUniquenessGuard() {
     if (is_valid_) {
       bool removed = state_->RemoveFromUniquenessCheck(value_);
@@ -174,8 +178,6 @@
   V8ValueConverterImpl::FromV8ValueState* state_;
   v8::Local<v8::Object> value_;
   bool is_valid_;
-
-  DISALLOW_COPY_AND_ASSIGN(ScopedUniquenessGuard);
 };
 
 std::unique_ptr<V8ValueConverter> V8ValueConverter::Create() {
diff --git a/content/renderer/v8_value_converter_impl_unittest.cc b/content/renderer/v8_value_converter_impl_unittest.cc
index 7f56c63..4645d09 100644
--- a/content/renderer/v8_value_converter_impl_unittest.cc
+++ b/content/renderer/v8_value_converter_impl_unittest.cc
@@ -44,12 +44,16 @@
   // must outlive the created instance of this helper.
   explicit ScopedAvoidIdentityHashForTesting(
       content::V8ValueConverterImpl* converter);
+
+  ScopedAvoidIdentityHashForTesting(const ScopedAvoidIdentityHashForTesting&) =
+      delete;
+  ScopedAvoidIdentityHashForTesting& operator=(
+      const ScopedAvoidIdentityHashForTesting&) = delete;
+
   ~ScopedAvoidIdentityHashForTesting();
 
  private:
   content::V8ValueConverterImpl* converter_;
-
-  DISALLOW_COPY_AND_ASSIGN(ScopedAvoidIdentityHashForTesting);
 };
 
 ScopedAvoidIdentityHashForTesting::ScopedAvoidIdentityHashForTesting(
diff --git a/content/renderer/variations_render_thread_observer.h b/content/renderer/variations_render_thread_observer.h
index fd3e3e4..fd6377f 100644
--- a/content/renderer/variations_render_thread_observer.h
+++ b/content/renderer/variations_render_thread_observer.h
@@ -28,6 +28,12 @@
       public mojom::RendererVariationsConfiguration {
  public:
   VariationsRenderThreadObserver();
+
+  VariationsRenderThreadObserver(const VariationsRenderThreadObserver&) =
+      delete;
+  VariationsRenderThreadObserver& operator=(
+      const VariationsRenderThreadObserver&) = delete;
+
   ~VariationsRenderThreadObserver() override;
 
   // Appends throttles if the browser has sent a variations header to the
@@ -56,8 +62,6 @@
   void OnRendererConfigurationAssociatedRequest(
       mojo::PendingAssociatedReceiver<mojom::RendererVariationsConfiguration>
           receiver);
-
-  DISALLOW_COPY_AND_ASSIGN(VariationsRenderThreadObserver);
 };
 
 }  // namespace content
diff --git a/content/renderer/webgraphicscontext3d_provider_impl.h b/content/renderer/webgraphicscontext3d_provider_impl.h
index a60e488..0f0a9a8 100644
--- a/content/renderer/webgraphicscontext3d_provider_impl.h
+++ b/content/renderer/webgraphicscontext3d_provider_impl.h
@@ -35,6 +35,12 @@
  public:
   WebGraphicsContext3DProviderImpl(
       scoped_refptr<viz::ContextProviderCommandBuffer> provider);
+
+  WebGraphicsContext3DProviderImpl(const WebGraphicsContext3DProviderImpl&) =
+      delete;
+  WebGraphicsContext3DProviderImpl& operator=(
+      const WebGraphicsContext3DProviderImpl&) = delete;
+
   ~WebGraphicsContext3DProviderImpl() override;
 
   // WebGraphicsContext3DProvider implementation.
@@ -68,8 +74,6 @@
   base::RepeatingClosure context_lost_callback_;
   base::flat_map<SkColorType, std::unique_ptr<cc::ImageDecodeCache>>
       image_decode_cache_map_;
-
-  DISALLOW_COPY_AND_ASSIGN(WebGraphicsContext3DProviderImpl);
 };
 
 }  // namespace content
diff --git a/content/renderer/worker/embedded_shared_worker_stub.h b/content/renderer/worker/embedded_shared_worker_stub.h
index 5a49f53..71c2ee2 100644
--- a/content/renderer/worker/embedded_shared_worker_stub.h
+++ b/content/renderer/worker/embedded_shared_worker_stub.h
@@ -82,6 +82,10 @@
           browser_interface_broker,
       ukm::SourceId ukm_source_id,
       const std::vector<std::string>& cors_exempt_header_list);
+
+  EmbeddedSharedWorkerStub(const EmbeddedSharedWorkerStub&) = delete;
+  EmbeddedSharedWorkerStub& operator=(const EmbeddedSharedWorkerStub&) = delete;
+
   ~EmbeddedSharedWorkerStub() override;
 
   // blink::WebSharedWorkerClient implementation.
@@ -115,8 +119,6 @@
   // used by this worker (typically the network service).
   mojo::Remote<network::mojom::URLLoaderFactory>
       default_factory_disconnect_handler_holder_;
-
-  DISALLOW_COPY_AND_ASSIGN(EmbeddedSharedWorkerStub);
 };
 
 }  // namespace content
diff --git a/content/services/isolated_xr_device/xr_device_service.h b/content/services/isolated_xr_device/xr_device_service.h
index 05f846a8..5aa2413c 100644
--- a/content/services/isolated_xr_device/xr_device_service.h
+++ b/content/services/isolated_xr_device/xr_device_service.h
@@ -18,6 +18,10 @@
   explicit XrDeviceService(
       mojo::PendingReceiver<mojom::XRDeviceService> receiver,
       scoped_refptr<base::SingleThreadTaskRunner> io_task_runner);
+
+  XrDeviceService(const XrDeviceService&) = delete;
+  XrDeviceService& operator=(const XrDeviceService&) = delete;
+
   ~XrDeviceService() override;
 
  private:
@@ -31,8 +35,6 @@
 
   mojo::Receiver<mojom::XRDeviceService> receiver_;
   scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_;
-
-  DISALLOW_COPY_AND_ASSIGN(XrDeviceService);
 };
 
 }  // namespace device
diff --git a/content/shell/app/shell_crash_reporter_client.h b/content/shell/app/shell_crash_reporter_client.h
index 5510c1b..ee71ed2 100644
--- a/content/shell/app/shell_crash_reporter_client.h
+++ b/content/shell/app/shell_crash_reporter_client.h
@@ -15,6 +15,10 @@
 class ShellCrashReporterClient : public crash_reporter::CrashReporterClient {
  public:
   ShellCrashReporterClient();
+
+  ShellCrashReporterClient(const ShellCrashReporterClient&) = delete;
+  ShellCrashReporterClient& operator=(const ShellCrashReporterClient&) = delete;
+
   ~ShellCrashReporterClient() override;
 
 #if defined(OS_WIN)
@@ -52,9 +56,6 @@
 #endif
 
   bool EnableBreakpadForProcess(const std::string& process_type) override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(ShellCrashReporterClient);
 };
 
 }  // namespace content
diff --git a/content/shell/app/shell_main_delegate.h b/content/shell/app/shell_main_delegate.h
index a7ad07ef..5b59ffd 100644
--- a/content/shell/app/shell_main_delegate.h
+++ b/content/shell/app/shell_main_delegate.h
@@ -26,6 +26,10 @@
 class ShellMainDelegate : public ContentMainDelegate {
  public:
   explicit ShellMainDelegate(bool is_content_browsertests = false);
+
+  ShellMainDelegate(const ShellMainDelegate&) = delete;
+  ShellMainDelegate& operator=(const ShellMainDelegate&) = delete;
+
   ~ShellMainDelegate() override;
 
   // ContentMainDelegate implementation:
@@ -67,9 +71,6 @@
   std::unique_ptr<ShellContentRendererClient> renderer_client_;
   std::unique_ptr<ShellContentUtilityClient> utility_client_;
   std::unique_ptr<ShellContentClient> content_client_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(ShellMainDelegate);
 };
 
 }  // namespace content
diff --git a/content/shell/browser/shell_browser_context.h b/content/shell/browser/shell_browser_context.h
index dc2b1b4..a8620656 100644
--- a/content/shell/browser/shell_browser_context.h
+++ b/content/shell/browser/shell_browser_context.h
@@ -35,6 +35,10 @@
   // CreateBrowserContextServices() for this BrowserContext.
   ShellBrowserContext(bool off_the_record,
                       bool delay_services_creation = false);
+
+  ShellBrowserContext(const ShellBrowserContext&) = delete;
+  ShellBrowserContext& operator=(const ShellBrowserContext&) = delete;
+
   ~ShellBrowserContext() override;
 
   void set_client_hints_controller_delegate(
@@ -69,10 +73,11 @@
   class ShellResourceContext : public ResourceContext {
    public:
     ShellResourceContext();
-    ~ShellResourceContext() override;
 
-  private:
-    DISALLOW_COPY_AND_ASSIGN(ShellResourceContext);
+    ShellResourceContext(const ShellResourceContext&) = delete;
+    ShellResourceContext& operator=(const ShellResourceContext&) = delete;
+
+    ~ShellResourceContext() override;
   };
 
   bool ignore_certificate_errors() const { return ignore_certificate_errors_; }
@@ -94,8 +99,6 @@
   base::FilePath path_;
   std::unique_ptr<SimpleFactoryKey> key_;
   ClientHintsControllerDelegate* client_hints_controller_delegate_ = nullptr;
-
-  DISALLOW_COPY_AND_ASSIGN(ShellBrowserContext);
 };
 
 }  // namespace content
diff --git a/content/shell/browser/shell_browser_main_parts.h b/content/shell/browser/shell_browser_main_parts.h
index d51dc51c..1826867 100644
--- a/content/shell/browser/shell_browser_main_parts.h
+++ b/content/shell/browser/shell_browser_main_parts.h
@@ -24,6 +24,10 @@
 class ShellBrowserMainParts : public BrowserMainParts {
  public:
   explicit ShellBrowserMainParts(const MainFunctionParams& parameters);
+
+  ShellBrowserMainParts(const ShellBrowserMainParts&) = delete;
+  ShellBrowserMainParts& operator=(const ShellBrowserMainParts&) = delete;
+
   ~ShellBrowserMainParts() override;
 
   // BrowserMainParts overrides.
@@ -68,8 +72,6 @@
 
   std::unique_ptr<performance_manager::PerformanceManagerLifetime>
       performance_manager_lifetime_;
-
-  DISALLOW_COPY_AND_ASSIGN(ShellBrowserMainParts);
 };
 
 }  // namespace content
diff --git a/content/shell/browser/shell_content_index_provider.h b/content/shell/browser/shell_content_index_provider.h
index 27ebf31..7efb312 100644
--- a/content/shell/browser/shell_content_index_provider.h
+++ b/content/shell/browser/shell_content_index_provider.h
@@ -22,6 +22,11 @@
 class ShellContentIndexProvider : public ContentIndexProvider {
  public:
   ShellContentIndexProvider();
+
+  ShellContentIndexProvider(const ShellContentIndexProvider&) = delete;
+  ShellContentIndexProvider& operator=(const ShellContentIndexProvider&) =
+      delete;
+
   ~ShellContentIndexProvider() override;
 
   // ContentIndexProvider implementation.
@@ -47,8 +52,6 @@
   std::map<std::string, std::pair<int64_t, url::Origin>> entries_;
 
   std::vector<gfx::Size> icon_sizes_;
-
-  DISALLOW_COPY_AND_ASSIGN(ShellContentIndexProvider);
 };
 
 }  // namespace content
diff --git a/content/shell/browser/shell_devtools_bindings.h b/content/shell/browser/shell_devtools_bindings.h
index f98ac8c0..f5521d2 100644
--- a/content/shell/browser/shell_devtools_bindings.h
+++ b/content/shell/browser/shell_devtools_bindings.h
@@ -62,6 +62,10 @@
       const base::Value arg2 = {},
       const base::Value arg3 = {},
       base::OnceCallback<void(base::Value)> cb = base::NullCallback());
+
+  ShellDevToolsBindings(const ShellDevToolsBindings&) = delete;
+  ShellDevToolsBindings& operator=(const ShellDevToolsBindings&) = delete;
+
   ~ShellDevToolsBindings() override;
 
   WebContents* inspected_contents() { return inspected_contents_; }
@@ -99,8 +103,6 @@
   using ExtensionsAPIs = std::map<std::string, std::string>;
   ExtensionsAPIs extensions_api_;
   base::WeakPtrFactory<ShellDevToolsBindings> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(ShellDevToolsBindings);
 };
 
 }  // namespace content
diff --git a/content/shell/browser/shell_devtools_manager_delegate.h b/content/shell/browser/shell_devtools_manager_delegate.h
index 4b184685..bd7c80a 100644
--- a/content/shell/browser/shell_devtools_manager_delegate.h
+++ b/content/shell/browser/shell_devtools_manager_delegate.h
@@ -21,6 +21,11 @@
   static int GetHttpHandlerPort();
 
   explicit ShellDevToolsManagerDelegate(BrowserContext* browser_context);
+
+  ShellDevToolsManagerDelegate(const ShellDevToolsManagerDelegate&) = delete;
+  ShellDevToolsManagerDelegate& operator=(const ShellDevToolsManagerDelegate&) =
+      delete;
+
   ~ShellDevToolsManagerDelegate() override;
 
   // DevToolsManagerDelegate implementation.
@@ -36,7 +41,6 @@
  private:
   BrowserContext* browser_context_;
   base::flat_set<content::DevToolsAgentHostClient*> clients_;
-  DISALLOW_COPY_AND_ASSIGN(ShellDevToolsManagerDelegate);
 };
 
 }  // namespace content
diff --git a/content/shell/browser/shell_download_manager_delegate.h b/content/shell/browser/shell_download_manager_delegate.h
index ca67e9f9..db63d0d 100644
--- a/content/shell/browser/shell_download_manager_delegate.h
+++ b/content/shell/browser/shell_download_manager_delegate.h
@@ -20,6 +20,11 @@
 class ShellDownloadManagerDelegate : public DownloadManagerDelegate {
  public:
   ShellDownloadManagerDelegate();
+
+  ShellDownloadManagerDelegate(const ShellDownloadManagerDelegate&) = delete;
+  ShellDownloadManagerDelegate& operator=(const ShellDownloadManagerDelegate&) =
+      delete;
+
   ~ShellDownloadManagerDelegate() override;
 
   void SetDownloadManager(DownloadManager* manager);
@@ -58,8 +63,6 @@
   base::FilePath default_download_path_;
   bool suppress_prompting_;
   base::WeakPtrFactory<ShellDownloadManagerDelegate> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(ShellDownloadManagerDelegate);
 };
 
 }  // namespace content
diff --git a/content/shell/browser/shell_javascript_dialog.h b/content/shell/browser/shell_javascript_dialog.h
index 1c1e4e7..58c1b82 100644
--- a/content/shell/browser/shell_javascript_dialog.h
+++ b/content/shell/browser/shell_javascript_dialog.h
@@ -30,6 +30,10 @@
                         const std::u16string& message_text,
                         const std::u16string& default_prompt_text,
                         JavaScriptDialogManager::DialogClosedCallback callback);
+
+  ShellJavaScriptDialog(const ShellJavaScriptDialog&) = delete;
+  ShellJavaScriptDialog& operator=(const ShellJavaScriptDialog&) = delete;
+
   ~ShellJavaScriptDialog();
 
   // Called to cancel a dialog mid-flight.
@@ -48,8 +52,6 @@
   static INT_PTR CALLBACK DialogProc(HWND dialog, UINT message, WPARAM wparam,
                                      LPARAM lparam);
 #endif
-
-  DISALLOW_COPY_AND_ASSIGN(ShellJavaScriptDialog);
 };
 
 }  // namespace content
diff --git a/content/shell/browser/shell_javascript_dialog_manager.h b/content/shell/browser/shell_javascript_dialog_manager.h
index 0c55410a..806e64ee 100644
--- a/content/shell/browser/shell_javascript_dialog_manager.h
+++ b/content/shell/browser/shell_javascript_dialog_manager.h
@@ -20,6 +20,11 @@
 class ShellJavaScriptDialogManager : public JavaScriptDialogManager {
  public:
   ShellJavaScriptDialogManager();
+
+  ShellJavaScriptDialogManager(const ShellJavaScriptDialogManager&) = delete;
+  ShellJavaScriptDialogManager& operator=(const ShellJavaScriptDialogManager&) =
+      delete;
+
   ~ShellJavaScriptDialogManager() override;
 
   // JavaScriptDialogManager:
@@ -67,8 +72,6 @@
   bool beforeunload_success_;
 
   DialogClosedCallback before_unload_callback_;
-
-  DISALLOW_COPY_AND_ASSIGN(ShellJavaScriptDialogManager);
 };
 
 }  // namespace content
diff --git a/content/shell/browser/shell_permission_manager.h b/content/shell/browser/shell_permission_manager.h
index f1a76e51..eae5412 100644
--- a/content/shell/browser/shell_permission_manager.h
+++ b/content/shell/browser/shell_permission_manager.h
@@ -14,6 +14,10 @@
 class ShellPermissionManager : public PermissionControllerDelegate {
  public:
   ShellPermissionManager();
+
+  ShellPermissionManager(const ShellPermissionManager&) = delete;
+  ShellPermissionManager& operator=(const ShellPermissionManager&) = delete;
+
   ~ShellPermissionManager() override;
 
   // PermissionManager implementation.
@@ -51,9 +55,6 @@
       override;
   void UnsubscribePermissionStatusChange(
       SubscriptionId subscription_id) override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(ShellPermissionManager);
 };
 
 }  // namespace content
diff --git a/content/shell/browser/shell_platform_data_aura.cc b/content/shell/browser/shell_platform_data_aura.cc
index dbf86e7..20bed8f 100644
--- a/content/shell/browser/shell_platform_data_aura.cc
+++ b/content/shell/browser/shell_platform_data_aura.cc
@@ -39,6 +39,9 @@
   explicit FillLayout(aura::Window* root)
       : root_(root), has_bounds_(!root->bounds().IsEmpty()) {}
 
+  FillLayout(const FillLayout&) = delete;
+  FillLayout& operator=(const FillLayout&) = delete;
+
   ~FillLayout() override {}
 
  private:
@@ -71,8 +74,6 @@
 
   aura::Window* root_;
   bool has_bounds_;
-
-  DISALLOW_COPY_AND_ASSIGN(FillLayout);
 };
 
 }
diff --git a/content/shell/browser/shell_platform_data_aura.h b/content/shell/browser/shell_platform_data_aura.h
index d6c19ca..79cc52bf 100644
--- a/content/shell/browser/shell_platform_data_aura.h
+++ b/content/shell/browser/shell_platform_data_aura.h
@@ -34,6 +34,10 @@
 class ShellPlatformDataAura {
  public:
   explicit ShellPlatformDataAura(const gfx::Size& initial_size);
+
+  ShellPlatformDataAura(const ShellPlatformDataAura&) = delete;
+  ShellPlatformDataAura& operator=(const ShellPlatformDataAura&) = delete;
+
   ~ShellPlatformDataAura();
 
   void ShowWindow();
@@ -50,8 +54,6 @@
   std::unique_ptr<aura::client::FocusClient> focus_client_;
   std::unique_ptr<aura::client::DefaultCaptureClient> capture_client_;
   std::unique_ptr<aura::client::WindowParentingClient> window_parenting_client_;
-
-  DISALLOW_COPY_AND_ASSIGN(ShellPlatformDataAura);
 };
 
 }  // namespace content
diff --git a/content/shell/browser/shell_plugin_service_filter.h b/content/shell/browser/shell_plugin_service_filter.h
index 337b4b0..e9d0bed 100644
--- a/content/shell/browser/shell_plugin_service_filter.h
+++ b/content/shell/browser/shell_plugin_service_filter.h
@@ -14,6 +14,10 @@
 class ShellPluginServiceFilter : public PluginServiceFilter {
  public:
   ShellPluginServiceFilter();
+
+  ShellPluginServiceFilter(const ShellPluginServiceFilter&) = delete;
+  ShellPluginServiceFilter& operator=(const ShellPluginServiceFilter&) = delete;
+
   ~ShellPluginServiceFilter() override;
 
   // PluginServiceFilter implementation.
@@ -25,10 +29,6 @@
 
   bool CanLoadPlugin(int render_process_id,
                      const base::FilePath& path) override;
-
- private:
-
-  DISALLOW_COPY_AND_ASSIGN(ShellPluginServiceFilter);
 };
 
 }  // namespace content
diff --git a/content/shell/browser/shell_speech_recognition_manager_delegate.h b/content/shell/browser/shell_speech_recognition_manager_delegate.h
index 808a109..8a93d8e 100644
--- a/content/shell/browser/shell_speech_recognition_manager_delegate.h
+++ b/content/shell/browser/shell_speech_recognition_manager_delegate.h
@@ -20,6 +20,12 @@
     : public SpeechRecognitionManagerDelegate {
  public:
   ShellSpeechRecognitionManagerDelegate() {}
+
+  ShellSpeechRecognitionManagerDelegate(
+      const ShellSpeechRecognitionManagerDelegate&) = delete;
+  ShellSpeechRecognitionManagerDelegate& operator=(
+      const ShellSpeechRecognitionManagerDelegate&) = delete;
+
   ~ShellSpeechRecognitionManagerDelegate() override {}
 
   // SpeechRecognitionManagerDelegate methods.
@@ -29,9 +35,6 @@
       override;
   SpeechRecognitionEventListener* GetEventListener() override;
   bool FilterProfanities(int render_process_id) override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(ShellSpeechRecognitionManagerDelegate);
 };
 
 }  // namespace content
diff --git a/content/shell/browser/shell_web_contents_view_delegate.h b/content/shell/browser/shell_web_contents_view_delegate.h
index 27db813..687743b1 100644
--- a/content/shell/browser/shell_web_contents_view_delegate.h
+++ b/content/shell/browser/shell_web_contents_view_delegate.h
@@ -23,6 +23,11 @@
 class ShellWebContentsViewDelegate : public WebContentsViewDelegate {
  public:
   explicit ShellWebContentsViewDelegate(WebContents* web_contents);
+
+  ShellWebContentsViewDelegate(const ShellWebContentsViewDelegate&) = delete;
+  ShellWebContentsViewDelegate& operator=(const ShellWebContentsViewDelegate&) =
+      delete;
+
   ~ShellWebContentsViewDelegate() override;
 
   // Overridden from WebContentsViewDelegate:
@@ -46,8 +51,6 @@
   std::unique_ptr<ui::SimpleMenuModel> context_menu_model_;
   std::unique_ptr<views::MenuRunner> context_menu_runner_;
 #endif
-
-  DISALLOW_COPY_AND_ASSIGN(ShellWebContentsViewDelegate);
 };
 
 }  // namespace content
diff --git a/content/shell/browser/shell_web_contents_view_delegate_views.cc b/content/shell/browser/shell_web_contents_view_delegate_views.cc
index 093e59c..55a3ba8 100644
--- a/content/shell/browser/shell_web_contents_view_delegate_views.cc
+++ b/content/shell/browser/shell_web_contents_view_delegate_views.cc
@@ -30,6 +30,10 @@
         params_(params) {
     AddItem(COMMAND_OPEN_DEVTOOLS, u"Inspect Element");
   }
+
+  ContextMenuModel(const ContextMenuModel&) = delete;
+  ContextMenuModel& operator=(const ContextMenuModel&) = delete;
+
   ~ContextMenuModel() override {}
 
   // ui::SimpleMenuModel::Delegate:
@@ -51,8 +55,6 @@
 
   WebContents* web_contents_;
   ContextMenuParams params_;
-
-  DISALLOW_COPY_AND_ASSIGN(ContextMenuModel);
 };
 
 }  // namespace
diff --git a/content/shell/common/power_monitor_test_impl.h b/content/shell/common/power_monitor_test_impl.h
index 13f7597..59a828b 100644
--- a/content/shell/common/power_monitor_test_impl.h
+++ b/content/shell/common/power_monitor_test_impl.h
@@ -19,6 +19,10 @@
       mojo::PendingReceiver<mojom::PowerMonitorTest> receiver);
 
   PowerMonitorTestImpl();
+
+  PowerMonitorTestImpl(const PowerMonitorTestImpl&) = delete;
+  PowerMonitorTestImpl& operator=(const PowerMonitorTestImpl&) = delete;
+
   ~PowerMonitorTestImpl() override;
 
  private:
@@ -33,8 +37,6 @@
   QueryNextStateCallback callback_;
   bool on_battery_power_ = false;
   bool need_to_report_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(PowerMonitorTestImpl);
 };
 
 }  // namespace content
diff --git a/content/shell/common/shell_origin_trial_policy.h b/content/shell/common/shell_origin_trial_policy.h
index 67ecbd2..a7c7e5b 100644
--- a/content/shell/common/shell_origin_trial_policy.h
+++ b/content/shell/common/shell_origin_trial_policy.h
@@ -16,6 +16,10 @@
 class ShellOriginTrialPolicy : public blink::OriginTrialPolicy {
  public:
   ShellOriginTrialPolicy();
+
+  ShellOriginTrialPolicy(const ShellOriginTrialPolicy&) = delete;
+  ShellOriginTrialPolicy& operator=(const ShellOriginTrialPolicy&) = delete;
+
   ~ShellOriginTrialPolicy() override;
 
   // blink::OriginTrialPolicy interface
@@ -26,8 +30,6 @@
 
  private:
   std::vector<blink::OriginTrialPublicKey> public_keys_;
-
-  DISALLOW_COPY_AND_ASSIGN(ShellOriginTrialPolicy);
 };
 
 }  // namespace content
diff --git a/content/shell/gpu/shell_content_gpu_client.h b/content/shell/gpu/shell_content_gpu_client.h
index b34ce43f..e1dc636c 100644
--- a/content/shell/gpu/shell_content_gpu_client.h
+++ b/content/shell/gpu/shell_content_gpu_client.h
@@ -14,6 +14,10 @@
 class ShellContentGpuClient : public ContentGpuClient {
  public:
   ShellContentGpuClient();
+
+  ShellContentGpuClient(const ShellContentGpuClient&) = delete;
+  ShellContentGpuClient& operator=(const ShellContentGpuClient&) = delete;
+
   ~ShellContentGpuClient() override;
 
   // ContentGpuClient:
@@ -21,8 +25,6 @@
       const gpu::GpuPreferences& gpu_preferences,
       const gpu::GpuDriverBugWorkarounds& gpu_workarounds,
       mojo::BinderMap* binders) override;
-
-  DISALLOW_COPY_AND_ASSIGN(ShellContentGpuClient);
 };
 
 }  // namespace content
diff --git a/content/shell/renderer/shell_content_renderer_client.cc b/content/shell/renderer/shell_content_renderer_client.cc
index 76e210d7..f3c03c3 100644
--- a/content/shell/renderer/shell_content_renderer_client.cc
+++ b/content/shell/renderer/shell_content_renderer_client.cc
@@ -53,6 +53,9 @@
         &TestRendererServiceImpl::OnConnectionError, base::Unretained(this)));
   }
 
+  TestRendererServiceImpl(const TestRendererServiceImpl&) = delete;
+  TestRendererServiceImpl& operator=(const TestRendererServiceImpl&) = delete;
+
   ~TestRendererServiceImpl() override {}
 
  private:
@@ -110,8 +113,6 @@
   }
 
   mojo::Receiver<mojom::TestService> receiver_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestRendererServiceImpl);
 };
 
 void CreateRendererTestService(
diff --git a/content/shell/utility/shell_content_utility_client.h b/content/shell/utility/shell_content_utility_client.h
index 9cd1c9c..5409b30f 100644
--- a/content/shell/utility/shell_content_utility_client.h
+++ b/content/shell/utility/shell_content_utility_client.h
@@ -15,6 +15,11 @@
 class ShellContentUtilityClient : public ContentUtilityClient {
  public:
   explicit ShellContentUtilityClient(bool is_browsertest = false);
+
+  ShellContentUtilityClient(const ShellContentUtilityClient&) = delete;
+  ShellContentUtilityClient& operator=(const ShellContentUtilityClient&) =
+      delete;
+
   ~ShellContentUtilityClient() override;
 
   // ContentUtilityClient:
@@ -27,8 +32,6 @@
   std::unique_ptr<NetworkServiceTestHelper> network_service_test_helper_;
   std::unique_ptr<AudioServiceTestHelper> audio_service_test_helper_;
   bool register_sandbox_status_helper_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(ShellContentUtilityClient);
 };
 
 }  // namespace content
diff --git a/content/test/browser_test_utils_browsertest.cc b/content/test/browser_test_utils_browsertest.cc
index 73a6cf3..70b3778 100644
--- a/content/test/browser_test_utils_browsertest.cc
+++ b/content/test/browser_test_utils_browsertest.cc
@@ -19,6 +19,10 @@
  public:
   explicit NavigationObserver(WebContents* web_contents)
       : WebContentsObserver(web_contents) {}
+
+  NavigationObserver(const NavigationObserver&) = delete;
+  NavigationObserver& operator=(const NavigationObserver&) = delete;
+
   ~NavigationObserver() override {}
 
   void DidFinishNavigation(NavigationHandle* navigation_handle) override {
@@ -41,8 +45,6 @@
  private:
   GURL redirect_url_;
   GURL navigation_url_;
-
-  DISALLOW_COPY_AND_ASSIGN(NavigationObserver);
 };
 
 class CrossSiteRedirectorBrowserTest : public ContentBrowserTest {
diff --git a/content/test/content_browser_consistency_checker.h b/content/test/content_browser_consistency_checker.h
index 01ecabd34..67bcc0b 100644
--- a/content/test/content_browser_consistency_checker.h
+++ b/content/test/content_browser_consistency_checker.h
@@ -26,6 +26,12 @@
 class ContentBrowserConsistencyChecker {
  public:
   ContentBrowserConsistencyChecker();
+
+  ContentBrowserConsistencyChecker(const ContentBrowserConsistencyChecker&) =
+      delete;
+  ContentBrowserConsistencyChecker& operator=(
+      const ContentBrowserConsistencyChecker&) = delete;
+
   ~ContentBrowserConsistencyChecker();
 
  private:
@@ -33,8 +39,6 @@
 
   // The callback needs to be cached so that it can be unregistered.
   base::RepeatingCallback<void(WebContents*)> creation_hook_;
-
-  DISALLOW_COPY_AND_ASSIGN(ContentBrowserConsistencyChecker);
 };
 
 }  // namespace content
diff --git a/content/test/content_browser_test_test.cc b/content/test/content_browser_test_test.cc
index 160a5271..0e4dae59 100644
--- a/content/test/content_browser_test_test.cc
+++ b/content/test/content_browser_test_test.cc
@@ -323,12 +323,15 @@
                                           {kTestFeatureForBrowserTest4});
   }
 
+  ContentBrowserTestScopedFeatureListTest(
+      const ContentBrowserTestScopedFeatureListTest&) = delete;
+  ContentBrowserTestScopedFeatureListTest& operator=(
+      const ContentBrowserTestScopedFeatureListTest&) = delete;
+
   ~ContentBrowserTestScopedFeatureListTest() override {}
 
  private:
   base::test::ScopedFeatureList scoped_feature_list_;
-
-  DISALLOW_COPY_AND_ASSIGN(ContentBrowserTestScopedFeatureListTest);
 };
 
 IN_PROC_BROWSER_TEST_F(ContentBrowserTestScopedFeatureListTest,
diff --git a/content/test/content_browser_test_utils_internal.h b/content/test/content_browser_test_utils_internal.h
index 9edec3f4..dcb41e5 100644
--- a/content/test/content_browser_test_utils_internal.h
+++ b/content/test/content_browser_test_utils_internal.h
@@ -130,6 +130,10 @@
 class FrameTreeVisualizer {
  public:
   FrameTreeVisualizer();
+
+  FrameTreeVisualizer(const FrameTreeVisualizer&) = delete;
+  FrameTreeVisualizer& operator=(const FrameTreeVisualizer&) = delete;
+
   ~FrameTreeVisualizer();
 
   // Formats and returns a diagram for the provided FrameTreeNode.
@@ -142,8 +146,6 @@
   // Elements are site instance ids. The index of the SiteInstance in the vector
   // determines the abbreviated name (0->A, 1->B) for that SiteInstance.
   std::vector<SiteInstanceId> seen_site_instance_ids_;
-
-  DISALLOW_COPY_AND_ASSIGN(FrameTreeVisualizer);
 };
 
 // Uses FrameTreeVisualizer to draw a text representation of the FrameTree that
@@ -218,6 +220,10 @@
 class UrlCommitObserver : WebContentsObserver {
  public:
   explicit UrlCommitObserver(FrameTreeNode* frame_tree_node, const GURL& url);
+
+  UrlCommitObserver(const UrlCommitObserver&) = delete;
+  UrlCommitObserver& operator=(const UrlCommitObserver&) = delete;
+
   ~UrlCommitObserver() override;
 
   void Wait();
@@ -233,8 +239,6 @@
 
   // The RunLoop used to spin the message loop.
   base::RunLoop run_loop_;
-
-  DISALLOW_COPY_AND_ASSIGN(UrlCommitObserver);
 };
 
 // Waits for a kill of the given RenderProcessHost and returns the
@@ -270,6 +274,10 @@
  public:
   ShowPopupWidgetWaiter(WebContentsImpl* web_contents,
                         RenderFrameHostImpl* frame_host);
+
+  ShowPopupWidgetWaiter(const ShowPopupWidgetWaiter&) = delete;
+  ShowPopupWidgetWaiter& operator=(const ShowPopupWidgetWaiter&) = delete;
+
   ~ShowPopupWidgetWaiter() override;
 
   gfx::Rect last_initial_rect() const { return initial_rect_; }
@@ -304,8 +312,6 @@
 #if defined(OS_MAC) || defined(OS_ANDROID)
   WebContentsImpl* web_contents_;
 #endif
-
-  DISALLOW_COPY_AND_ASSIGN(ShowPopupWidgetWaiter);
 };
 
 // A BrowserMessageFilter that drops a blacklisted message.
@@ -357,6 +363,11 @@
 class UnresponsiveRendererObserver : public WebContentsObserver {
  public:
   explicit UnresponsiveRendererObserver(WebContents* web_contents);
+
+  UnresponsiveRendererObserver(const UnresponsiveRendererObserver&) = delete;
+  UnresponsiveRendererObserver& operator=(const UnresponsiveRendererObserver&) =
+      delete;
+
   ~UnresponsiveRendererObserver() override;
 
   RenderProcessHost* Wait(base::TimeDelta timeout = base::TimeDelta::Max());
@@ -367,8 +378,6 @@
 
   RenderProcessHost* captured_render_process_host_ = nullptr;
   base::RunLoop run_loop_;
-
-  DISALLOW_COPY_AND_ASSIGN(UnresponsiveRendererObserver);
 };
 
 // Helper class that overrides the JavaScriptDialogManager of a WebContents
@@ -377,6 +386,11 @@
                                      public WebContentsDelegate {
  public:
   explicit BeforeUnloadBlockingDelegate(WebContentsImpl* web_contents);
+
+  BeforeUnloadBlockingDelegate(const BeforeUnloadBlockingDelegate&) = delete;
+  BeforeUnloadBlockingDelegate& operator=(const BeforeUnloadBlockingDelegate&) =
+      delete;
+
   ~BeforeUnloadBlockingDelegate() override;
   void Wait();
 
@@ -412,8 +426,6 @@
   DialogClosedCallback callback_;
 
   std::unique_ptr<base::RunLoop> run_loop_ = std::make_unique<base::RunLoop>();
-
-  DISALLOW_COPY_AND_ASSIGN(BeforeUnloadBlockingDelegate);
 };
 
 // A helper class to get DevTools inspector log messages (e.g. network errors).
diff --git a/content/test/content_test_launcher.cc b/content/test/content_test_launcher.cc
index ba00687d..df9b696 100644
--- a/content/test/content_test_launcher.cc
+++ b/content/test/content_test_launcher.cc
@@ -33,6 +33,10 @@
   ContentBrowserTestSuite(int argc, char** argv)
       : ContentTestSuiteBase(argc, argv) {
   }
+
+  ContentBrowserTestSuite(const ContentBrowserTestSuite&) = delete;
+  ContentBrowserTestSuite& operator=(const ContentBrowserTestSuite&) = delete;
+
   ~ContentBrowserTestSuite() override {}
 
  protected:
@@ -46,13 +50,16 @@
     RegisterInProcessThreads();
 #endif
   }
-
-  DISALLOW_COPY_AND_ASSIGN(ContentBrowserTestSuite);
 };
 
 class ContentTestLauncherDelegate : public TestLauncherDelegate {
  public:
   ContentTestLauncherDelegate() {}
+
+  ContentTestLauncherDelegate(const ContentTestLauncherDelegate&) = delete;
+  ContentTestLauncherDelegate& operator=(const ContentTestLauncherDelegate&) =
+      delete;
+
   ~ContentTestLauncherDelegate() override {}
 
   int RunTestSuite(int argc, char** argv) override {
@@ -69,9 +76,6 @@
     return new ContentBrowserTestShellMainDelegate();
   }
 #endif
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(ContentTestLauncherDelegate);
 };
 
 }  // namespace content
diff --git a/content/test/content_test_suite.h b/content/test/content_test_suite.h
index c85f818e..8b0dcf8 100644
--- a/content/test/content_test_suite.h
+++ b/content/test/content_test_suite.h
@@ -24,6 +24,10 @@
 class ContentTestSuite : public ContentTestSuiteBase {
  public:
   ContentTestSuite(int argc, char** argv);
+
+  ContentTestSuite(const ContentTestSuite&) = delete;
+  ContentTestSuite& operator=(const ContentTestSuite&) = delete;
+
   ~ContentTestSuite() override;
 
  protected:
@@ -38,8 +42,6 @@
 #if defined(OS_WIN)
   base::win::ScopedCOMInitializer com_initializer_;
 #endif
-
-  DISALLOW_COPY_AND_ASSIGN(ContentTestSuite);
 };
 
 }  // namespace content
diff --git a/content/test/data/accessibility/html/input-time-with-popup-open-expected-blink.txt b/content/test/data/accessibility/html/input-time-with-popup-open-expected-blink.txt
index 4fc282b..486280b 100644
--- a/content/test/data/accessibility/html/input-time-with-popup-open-expected-blink.txt
+++ b/content/test/data/accessibility/html/input-time-with-popup-open-expected-blink.txt
@@ -14,12 +14,12 @@
 ++++++++++++++++inlineTextBox name='50'
 ++++++++++++staticText name=':'
 ++++++++++++++inlineTextBox name=':'
-++++++++++++spinButton name='Seconds' placeholder='--' value='02' valueForRange=2.00 minValueForRange=0.00 maxValueForRange=59.00
+++++++++++++spinButton name='Seconds' placeholder='--' value='02' restriction=disabled valueForRange=2.00 minValueForRange=0.00 maxValueForRange=59.00
 ++++++++++++++staticText name='02'
 ++++++++++++++++inlineTextBox name='02'
 ++++++++++++staticText name='.'
 ++++++++++++++inlineTextBox name='.'
-++++++++++++spinButton name='Milliseconds' placeholder='---' value='922' valueForRange=922.00 minValueForRange=0.00 maxValueForRange=999.00
+++++++++++++spinButton name='Milliseconds' placeholder='---' value='922' restriction=disabled valueForRange=922.00 minValueForRange=0.00 maxValueForRange=999.00
 ++++++++++++++staticText name='922'
 ++++++++++++++++inlineTextBox name='922'
 ++++++++++++staticText name=' '
diff --git a/content/test/data/accessibility/html/input-time-with-popup-open-expected-uia-win.txt b/content/test/data/accessibility/html/input-time-with-popup-open-expected-uia-win.txt
index 28953ce..9b7f981c 100644
--- a/content/test/data/accessibility/html/input-time-with-popup-open-expected-uia-win.txt
+++ b/content/test/data/accessibility/html/input-time-with-popup-open-expected-uia-win.txt
@@ -7,9 +7,9 @@
 ++++++++++Text Name=':'
 ++++++++++Spinner Name='Minutes' RangeValue.IsReadOnly=false RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=59.00 RangeValue.Minimum=0.00 RangeValue.Value=50.00 Value.Value='50'
 ++++++++++Text Name=':'
-++++++++++Spinner Name='Seconds' RangeValue.IsReadOnly=false RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=59.00 RangeValue.Minimum=0.00 RangeValue.Value=2.00 Value.Value='02'
+++++++++++Spinner Name='Seconds' IsEnabled=false RangeValue.IsReadOnly=true RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=59.00 RangeValue.Minimum=0.00 RangeValue.Value=2.00 Value.Value='02'
 ++++++++++Text Name='.'
-++++++++++Spinner Name='Milliseconds' RangeValue.IsReadOnly=false RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=999.00 RangeValue.Minimum=0.00 RangeValue.Value=922.00 Value.Value='922'
+++++++++++Spinner Name='Milliseconds' IsEnabled=false RangeValue.IsReadOnly=true RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=999.00 RangeValue.Minimum=0.00 RangeValue.Value=922.00 Value.Value='922'
 ++++++++++Text Name=' '
 ++++++++++Spinner Name='AM/PM' RangeValue.IsReadOnly=false RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=2.00 RangeValue.Minimum=1.00 RangeValue.Value=2.00 Value.Value='PM'
 ++++++Button Name='Show time picker' ExpandCollapse.ExpandCollapseState='Collapsed'
diff --git a/content/test/data/accessibility/html/input-time-with-popup-open-expected-win.txt b/content/test/data/accessibility/html/input-time-with-popup-open-expected-win.txt
index 3db3c817..51e4e77 100644
--- a/content/test/data/accessibility/html/input-time-with-popup-open-expected-win.txt
+++ b/content/test/data/accessibility/html/input-time-with-popup-open-expected-win.txt
@@ -7,9 +7,9 @@
 ++++++++++ROLE_SYSTEM_STATICTEXT name=':' ia2_hypertext=':'
 ++++++++++ROLE_SYSTEM_SPINBUTTON name='Minutes' value='50' FOCUSABLE
 ++++++++++ROLE_SYSTEM_STATICTEXT name=':' ia2_hypertext=':'
-++++++++++ROLE_SYSTEM_SPINBUTTON name='Seconds' value='02'
+++++++++++ROLE_SYSTEM_SPINBUTTON name='Seconds' value='02' UNAVAILABLE
 ++++++++++ROLE_SYSTEM_STATICTEXT name='.' ia2_hypertext='.'
-++++++++++ROLE_SYSTEM_SPINBUTTON name='Milliseconds' value='922'
+++++++++++ROLE_SYSTEM_SPINBUTTON name='Milliseconds' value='922' UNAVAILABLE
 ++++++++++ROLE_SYSTEM_STATICTEXT name=' ' ia2_hypertext=' '
 ++++++++++ROLE_SYSTEM_SPINBUTTON name='AM/PM' value='PM' FOCUSABLE
 ++++++ROLE_SYSTEM_BUTTONMENU name='Show time picker' FOCUSABLE HASPOPUP
diff --git a/content/test/did_commit_navigation_interceptor.cc b/content/test/did_commit_navigation_interceptor.cc
index 7b97a85..d6a3416 100644
--- a/content/test/did_commit_navigation_interceptor.cc
+++ b/content/test/did_commit_navigation_interceptor.cc
@@ -22,6 +22,9 @@
     rfhi_->SetCommitCallbackInterceptorForTesting(this);
   }
 
+  FrameAgent(const FrameAgent&) = delete;
+  FrameAgent& operator=(const FrameAgent&) = delete;
+
   ~FrameAgent() override {
     rfhi_->SetCommitCallbackInterceptorForTesting(nullptr);
   }
@@ -39,8 +42,6 @@
   DidCommitNavigationInterceptor* interceptor_;
 
   RenderFrameHostImpl* rfhi_;
-
-  DISALLOW_COPY_AND_ASSIGN(FrameAgent);
 };
 
 DidCommitNavigationInterceptor::DidCommitNavigationInterceptor(
diff --git a/content/test/did_commit_navigation_interceptor.h b/content/test/did_commit_navigation_interceptor.h
index acae957..3b4b328 100644
--- a/content/test/did_commit_navigation_interceptor.h
+++ b/content/test/did_commit_navigation_interceptor.h
@@ -29,6 +29,12 @@
   // Constructs an instance that will intercept DidCommitProvisionalLoad calls
   // in any frame of the |web_contents| while the instance is in scope.
   explicit DidCommitNavigationInterceptor(WebContents* web_contents);
+
+  DidCommitNavigationInterceptor(const DidCommitNavigationInterceptor&) =
+      delete;
+  DidCommitNavigationInterceptor& operator=(
+      const DidCommitNavigationInterceptor&) = delete;
+
   ~DidCommitNavigationInterceptor() override;
 
   // Called just before DidCommitNavigation with |navigation_request|, |params|
@@ -50,8 +56,6 @@
   void RenderFrameDeleted(RenderFrameHost* render_frame_host) override;
 
   std::map<RenderFrameHost*, std::unique_ptr<FrameAgent>> frame_agents_;
-
-  DISALLOW_COPY_AND_ASSIGN(DidCommitNavigationInterceptor);
 };
 
 }  // namespace content
diff --git a/content/test/dwrite_font_fake_sender_win.h b/content/test/dwrite_font_fake_sender_win.h
index d57fb58..b45f64f 100644
--- a/content/test/dwrite_font_fake_sender_win.h
+++ b/content/test/dwrite_font_fake_sender_win.h
@@ -96,6 +96,10 @@
     kMapCharacters
   };
   FakeFontCollection();
+
+  FakeFontCollection(const FakeFontCollection&) = delete;
+  FakeFontCollection& operator=(const FakeFontCollection&) = delete;
+
   ~FakeFontCollection() override;
 
   FakeFont& AddFont(const std::u16string& font_name);
@@ -140,8 +144,6 @@
   std::vector<MessageType> message_types_;
 
   mojo::ReceiverSet<blink::mojom::DWriteFontProxy> receivers_;
-
-  DISALLOW_COPY_AND_ASSIGN(FakeFontCollection);
 };
 
 }  // namespace content
diff --git a/content/test/fake_network_url_loader_factory.h b/content/test/fake_network_url_loader_factory.h
index 5834d16..fd8d5a71 100644
--- a/content/test/fake_network_url_loader_factory.h
+++ b/content/test/fake_network_url_loader_factory.h
@@ -26,6 +26,11 @@
                               const std::string& body,
                               bool network_accessed,
                               net::Error error_code);
+
+  FakeNetworkURLLoaderFactory(const FakeNetworkURLLoaderFactory&) = delete;
+  FakeNetworkURLLoaderFactory& operator=(const FakeNetworkURLLoaderFactory&) =
+      delete;
+
   ~FakeNetworkURLLoaderFactory() override;
 
   // network::mojom::URLLoaderFactory implementation.
@@ -44,8 +49,6 @@
  private:
   FakeNetwork fake_network_;
   mojo::ReceiverSet<network::mojom::URLLoaderFactory> receivers_;
-
-  DISALLOW_COPY_AND_ASSIGN(FakeNetworkURLLoaderFactory);
 };
 
 }  // namespace content
diff --git a/content/test/fake_renderer_compositor_frame_sink.h b/content/test/fake_renderer_compositor_frame_sink.h
index 370a9e5..3ba065e6 100644
--- a/content/test/fake_renderer_compositor_frame_sink.h
+++ b/content/test/fake_renderer_compositor_frame_sink.h
@@ -22,6 +22,12 @@
   FakeRendererCompositorFrameSink(
       mojo::PendingRemote<viz::mojom::CompositorFrameSink> sink,
       mojo::PendingReceiver<viz::mojom::CompositorFrameSinkClient> receiver);
+
+  FakeRendererCompositorFrameSink(const FakeRendererCompositorFrameSink&) =
+      delete;
+  FakeRendererCompositorFrameSink& operator=(
+      const FakeRendererCompositorFrameSink&) = delete;
+
   ~FakeRendererCompositorFrameSink() override;
 
   bool did_receive_ack() { return did_receive_ack_; }
@@ -51,8 +57,6 @@
   mojo::Remote<viz::mojom::CompositorFrameSink> sink_;
   bool did_receive_ack_ = false;
   std::vector<viz::ReturnedResource> last_reclaimed_resources_;
-
-  DISALLOW_COPY_AND_ASSIGN(FakeRendererCompositorFrameSink);
 };
 
 }  // namespace content
diff --git a/content/test/frame_host_interceptor.cc b/content/test/frame_host_interceptor.cc
index 448c745..1ec506ae 100644
--- a/content/test/frame_host_interceptor.cc
+++ b/content/test/frame_host_interceptor.cc
@@ -26,6 +26,9 @@
         rfhi_(static_cast<RenderFrameHostImpl*>(rfh)),
         impl_(receiver().SwapImplForTesting(this)) {}
 
+  FrameAgent(const FrameAgent&) = delete;
+  FrameAgent& operator=(const FrameAgent&) = delete;
+
   ~FrameAgent() override {
     auto* old_impl = receiver().SwapImplForTesting(impl_);
     // TODO(https://crbug.com/729021): Investigate the scenario where
@@ -63,8 +66,6 @@
 
   RenderFrameHostImpl* rfhi_;
   mojom::FrameHost* impl_;
-
-  DISALLOW_COPY_AND_ASSIGN(FrameAgent);
 };
 
 FrameHostInterceptor::FrameHostInterceptor(WebContents* web_contents)
diff --git a/content/test/frame_host_interceptor.h b/content/test/frame_host_interceptor.h
index ebd6ad0..8d6fa11 100644
--- a/content/test/frame_host_interceptor.h
+++ b/content/test/frame_host_interceptor.h
@@ -31,6 +31,10 @@
   // Constructs an instance that will intercept FrameHost calls in any frame of
   // the |web_contents| while the instance is in scope.
   explicit FrameHostInterceptor(WebContents* web_contents);
+
+  FrameHostInterceptor(const FrameHostInterceptor&) = delete;
+  FrameHostInterceptor& operator=(const FrameHostInterceptor&) = delete;
+
   ~FrameHostInterceptor() override;
 
   // Called just before BeginNavigation IPC would be dispatched to
@@ -59,8 +63,6 @@
   void RenderFrameDeleted(RenderFrameHost* render_frame_host) override;
 
   std::map<RenderFrameHost*, std::unique_ptr<FrameAgent>> frame_agents_;
-
-  DISALLOW_COPY_AND_ASSIGN(FrameHostInterceptor);
 };
 
 }  // namespace content
diff --git a/content/test/fuzzer/renderer_tree_fuzzer.cc b/content/test/fuzzer/renderer_tree_fuzzer.cc
index 0134530..e4f38ddc 100644
--- a/content/test/fuzzer/renderer_tree_fuzzer.cc
+++ b/content/test/fuzzer/renderer_tree_fuzzer.cc
@@ -67,6 +67,9 @@
 
 class Node {
  public:
+  Node(const Node&) = delete;
+  Node& operator=(const Node&) = delete;
+
   virtual ~Node() {}
   static std::unique_ptr<Node> CreateRandom(Random* rnd);
 
@@ -92,8 +95,6 @@
  private:
   friend class NodeList;
   static std::unique_ptr<Node> ParseJson(const base::Value& value);
-
-  DISALLOW_COPY_AND_ASSIGN(Node);
 };
 
 using Attrs = std::map<std::string, std::string>;
diff --git a/content/test/mock_background_sync_controller.h b/content/test/mock_background_sync_controller.h
index 15cdab7..4d8b2df 100644
--- a/content/test/mock_background_sync_controller.h
+++ b/content/test/mock_background_sync_controller.h
@@ -21,6 +21,11 @@
 class MockBackgroundSyncController : public BackgroundSyncController {
  public:
   MockBackgroundSyncController();
+
+  MockBackgroundSyncController(const MockBackgroundSyncController&) = delete;
+  MockBackgroundSyncController& operator=(const MockBackgroundSyncController&) =
+      delete;
+
   ~MockBackgroundSyncController() override;
 
   // BackgroundSyncController:
@@ -84,8 +89,6 @@
   BackgroundSyncParameters background_sync_parameters_;
   std::set<url::Origin> suspended_periodic_sync_origins_;
   std::set<url::Origin> periodic_sync_origins_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockBackgroundSyncController);
 };
 
 }  // namespace content
diff --git a/content/test/mock_client_hints_controller_delegate.h b/content/test/mock_client_hints_controller_delegate.h
index f33f1b1..6fa1d12 100644
--- a/content/test/mock_client_hints_controller_delegate.h
+++ b/content/test/mock_client_hints_controller_delegate.h
@@ -18,6 +18,12 @@
  public:
   explicit MockClientHintsControllerDelegate(
       const blink::UserAgentMetadata& metadata);
+
+  MockClientHintsControllerDelegate(const MockClientHintsControllerDelegate&) =
+      delete;
+  MockClientHintsControllerDelegate& operator=(
+      const MockClientHintsControllerDelegate&) = delete;
+
   ~MockClientHintsControllerDelegate() override;
   network::NetworkQualityTracker* GetNetworkQualityTracker() override;
 
@@ -45,8 +51,6 @@
   const blink::UserAgentMetadata metadata_;
   ClientHintsContainer client_hints_map_;
   std::vector<network::mojom::WebClientHintsType> additional_hints_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockClientHintsControllerDelegate);
 };
 }  // end namespace content
 
diff --git a/content/test/mock_clipboard_host.h b/content/test/mock_clipboard_host.h
index 9e9fe38a..32955b8 100644
--- a/content/test/mock_clipboard_host.h
+++ b/content/test/mock_clipboard_host.h
@@ -19,6 +19,10 @@
 class MockClipboardHost : public blink::mojom::ClipboardHost {
  public:
   MockClipboardHost();
+
+  MockClipboardHost(const MockClipboardHost&) = delete;
+  MockClipboardHost& operator=(const MockClipboardHost&) = delete;
+
   ~MockClipboardHost() override;
 
   void Bind(mojo::PendingReceiver<blink::mojom::ClipboardHost> receiver);
@@ -82,8 +86,6 @@
   bool write_smart_paste_ = false;
   bool needs_reset_ = false;
   std::map<std::u16string, std::vector<uint8_t>> unsanitized_custom_data_map_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockClipboardHost);
 };
 
 }  // namespace content
diff --git a/content/test/mock_commit_deferring_condition.h b/content/test/mock_commit_deferring_condition.h
index ffd00181..d42b970d 100644
--- a/content/test/mock_commit_deferring_condition.h
+++ b/content/test/mock_commit_deferring_condition.h
@@ -21,6 +21,12 @@
 class MockCommitDeferringConditionWrapper {
  public:
   explicit MockCommitDeferringConditionWrapper(bool is_ready_to_commit);
+
+  MockCommitDeferringConditionWrapper(
+      const MockCommitDeferringConditionWrapper&) = delete;
+  MockCommitDeferringConditionWrapper& operator=(
+      const MockCommitDeferringConditionWrapper&) = delete;
+
   ~MockCommitDeferringConditionWrapper();
   std::unique_ptr<MockCommitDeferringCondition> PassToDelegate();
   void CallResumeClosure();
@@ -40,7 +46,6 @@
   bool did_call_will_commit_navigation_ = false;
 
   base::WeakPtrFactory<MockCommitDeferringConditionWrapper> weak_factory_{this};
-  DISALLOW_COPY_AND_ASSIGN(MockCommitDeferringConditionWrapper);
 };
 
 class MockCommitDeferringCondition : public CommitDeferringCondition {
diff --git a/content/test/mock_keyboard.h b/content/test/mock_keyboard.h
index 5156ea9..c3de2a6f 100644
--- a/content/test/mock_keyboard.h
+++ b/content/test/mock_keyboard.h
@@ -83,6 +83,10 @@
   };
 
   MockKeyboard();
+
+  MockKeyboard(const MockKeyboard&) = delete;
+  MockKeyboard& operator=(const MockKeyboard&) = delete;
+
   ~MockKeyboard();
 
   // Retrieves Unicode characters composed from the the specified keyboard
@@ -101,8 +105,6 @@
   Modifiers keyboard_modifiers_ = INVALID;
   MockKeyboardDriverWin driver_;
 #endif
-
-  DISALLOW_COPY_AND_ASSIGN(MockKeyboard);
 };
 
 }  // namespace content
diff --git a/content/test/mock_keyboard_driver_win.h b/content/test/mock_keyboard_driver_win.h
index 81fcaf8..14a4824 100644
--- a/content/test/mock_keyboard_driver_win.h
+++ b/content/test/mock_keyboard_driver_win.h
@@ -19,6 +19,10 @@
 class MockKeyboardDriverWin {
  public:
   MockKeyboardDriverWin();
+
+  MockKeyboardDriverWin(const MockKeyboardDriverWin&) = delete;
+  MockKeyboardDriverWin& operator=(const MockKeyboardDriverWin&) = delete;
+
   ~MockKeyboardDriverWin();
 
   bool SetLayout(int layout);
@@ -37,8 +41,6 @@
   BYTE original_keyboard_states_[256];
 
   BYTE keyboard_states_[256];
-
-  DISALLOW_COPY_AND_ASSIGN(MockKeyboardDriverWin);
 };
 
 }  // namespace content
diff --git a/content/test/mock_overscroll_controller_delegate_aura.h b/content/test/mock_overscroll_controller_delegate_aura.h
index 49d8022..1afd9ad 100644
--- a/content/test/mock_overscroll_controller_delegate_aura.h
+++ b/content/test/mock_overscroll_controller_delegate_aura.h
@@ -21,6 +21,12 @@
       public MockOverscrollObserver {
  public:
   MockOverscrollControllerDelegateAura(RenderWidgetHostViewAura* rwhva);
+
+  MockOverscrollControllerDelegateAura(
+      const MockOverscrollControllerDelegateAura&) = delete;
+  MockOverscrollControllerDelegateAura& operator=(
+      const MockOverscrollControllerDelegateAura&) = delete;
+
   ~MockOverscrollControllerDelegateAura() override;
 
   // OverscrollControllerDelegate:
@@ -46,7 +52,6 @@
   scoped_refptr<MessageLoopRunner> end_message_loop_runner_;
   bool seen_update_;
   bool overscroll_ended_;
-  DISALLOW_COPY_AND_ASSIGN(MockOverscrollControllerDelegateAura);
 };
 
 }  // namespace content
diff --git a/content/test/mock_overscroll_refresh_handler_android.h b/content/test/mock_overscroll_refresh_handler_android.h
index a745a212..80af769 100644
--- a/content/test/mock_overscroll_refresh_handler_android.h
+++ b/content/test/mock_overscroll_refresh_handler_android.h
@@ -19,6 +19,12 @@
                                             public MockOverscrollObserver {
  public:
   MockOverscrollRefreshHandlerAndroid();
+
+  MockOverscrollRefreshHandlerAndroid(
+      const MockOverscrollRefreshHandlerAndroid&) = delete;
+  MockOverscrollRefreshHandlerAndroid& operator=(
+      const MockOverscrollRefreshHandlerAndroid&) = delete;
+
   ~MockOverscrollRefreshHandlerAndroid() override;
 
   // ui::OverscrollRefreshHandler:
@@ -43,7 +49,6 @@
   scoped_refptr<MessageLoopRunner> end_message_loop_runner_;
   bool seen_update_;
   bool pull_ended_;
-  DISALLOW_COPY_AND_ASSIGN(MockOverscrollRefreshHandlerAndroid);
 };
 
 }  // namespace content
diff --git a/content/test/mock_platform_notification_service.h b/content/test/mock_platform_notification_service.h
index f20477711..ac33e0f 100644
--- a/content/test/mock_platform_notification_service.h
+++ b/content/test/mock_platform_notification_service.h
@@ -31,6 +31,12 @@
 class MockPlatformNotificationService : public PlatformNotificationService {
  public:
   MockPlatformNotificationService(BrowserContext* context);
+
+  MockPlatformNotificationService(const MockPlatformNotificationService&) =
+      delete;
+  MockPlatformNotificationService& operator=(
+      const MockPlatformNotificationService&) = delete;
+
   ~MockPlatformNotificationService() override;
 
   // Simulates a click on the notification titled |title|. |action_index|
@@ -81,8 +87,6 @@
   std::unordered_map<std::string, std::string> notification_id_map_;
 
   int64_t next_persistent_notification_id_ = 1;
-
-  DISALLOW_COPY_AND_ASSIGN(MockPlatformNotificationService);
 };
 
 }  // content
diff --git a/content/test/mock_render_widget_host_delegate.h b/content/test/mock_render_widget_host_delegate.h
index 8802e6c..bed0d4b 100644
--- a/content/test/mock_render_widget_host_delegate.h
+++ b/content/test/mock_render_widget_host_delegate.h
@@ -21,6 +21,11 @@
 class MockRenderWidgetHostDelegate : public RenderWidgetHostDelegate {
  public:
   MockRenderWidgetHostDelegate();
+
+  MockRenderWidgetHostDelegate(const MockRenderWidgetHostDelegate&) = delete;
+  MockRenderWidgetHostDelegate& operator=(const MockRenderWidgetHostDelegate&) =
+      delete;
+
   ~MockRenderWidgetHostDelegate() override;
 
   const NativeWebKeyboardEvent* last_event() const { return last_event_.get(); }
@@ -72,8 +77,6 @@
       KeyboardEventProcessingResult::NOT_HANDLED;
   StubRenderViewHostDelegateView rvh_delegate_view_;
   bool should_ignore_input_events_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(MockRenderWidgetHostDelegate);
 };
 
 }  // namespace content
diff --git a/content/test/mock_widget_input_handler.h b/content/test/mock_widget_input_handler.h
index 94dd1b24..bef706e 100644
--- a/content/test/mock_widget_input_handler.h
+++ b/content/test/mock_widget_input_handler.h
@@ -23,6 +23,9 @@
       mojo::PendingReceiver<blink::mojom::WidgetInputHandler> receiver,
       mojo::PendingRemote<blink::mojom::WidgetInputHandlerHost> host);
 
+  MockWidgetInputHandler(const MockWidgetInputHandler&) = delete;
+  MockWidgetInputHandler& operator=(const MockWidgetInputHandler&) = delete;
+
   ~MockWidgetInputHandler() override;
 
   class DispatchedEditCommandMessage;
@@ -37,6 +40,10 @@
   class DispatchedMessage {
    public:
     explicit DispatchedMessage(const std::string& name);
+
+    DispatchedMessage(const DispatchedMessage&) = delete;
+    DispatchedMessage& operator=(const DispatchedMessage&) = delete;
+
     virtual ~DispatchedMessage();
 
     // Cast this to a DispatchedEditCommandMessage if it is one, null
@@ -68,8 +75,6 @@
 
    private:
     std::string name_;
-
-    DISALLOW_COPY_AND_ASSIGN(DispatchedMessage);
   };
 
   // A DispatchedMessage that stores the IME compositing parameters
@@ -82,6 +87,10 @@
                          const gfx::Range& range,
                          int32_t start,
                          int32_t end);
+
+    DispatchedIMEMessage(const DispatchedIMEMessage&) = delete;
+    DispatchedIMEMessage& operator=(const DispatchedIMEMessage&) = delete;
+
     ~DispatchedIMEMessage() override;
 
     // Override and return |this|.
@@ -100,8 +109,6 @@
     gfx::Range range_;
     int32_t start_;
     int32_t end_;
-
-    DISALLOW_COPY_AND_ASSIGN(DispatchedIMEMessage);
   };
 
   // A DispatchedMessage that stores the IME compositing parameters
@@ -110,6 +117,11 @@
    public:
     explicit DispatchedEditCommandMessage(
         std::vector<blink::mojom::EditCommandPtr> commands);
+
+    DispatchedEditCommandMessage(const DispatchedEditCommandMessage&) = delete;
+    DispatchedEditCommandMessage& operator=(
+        const DispatchedEditCommandMessage&) = delete;
+
     ~DispatchedEditCommandMessage() override;
 
     // Override and return |this|.
@@ -119,8 +131,6 @@
 
    private:
     std::vector<blink::mojom::EditCommandPtr> commands_;
-
-    DISALLOW_COPY_AND_ASSIGN(DispatchedEditCommandMessage);
   };
 
   // A DispatchedMessage that stores the focus parameters
@@ -128,6 +138,10 @@
   class DispatchedFocusMessage : public DispatchedMessage {
    public:
     explicit DispatchedFocusMessage(bool focused);
+
+    DispatchedFocusMessage(const DispatchedFocusMessage&) = delete;
+    DispatchedFocusMessage& operator=(const DispatchedFocusMessage&) = delete;
+
     ~DispatchedFocusMessage() override;
 
     // Override and return |this|.
@@ -137,8 +151,6 @@
 
    private:
     const bool focused_;
-
-    DISALLOW_COPY_AND_ASSIGN(DispatchedFocusMessage);
   };
 
   // A DispatchedMessage that stores the InputEvent and callback
@@ -147,6 +159,10 @@
    public:
     DispatchedEventMessage(std::unique_ptr<blink::WebCoalescedInputEvent> event,
                            DispatchEventCallback callback);
+
+    DispatchedEventMessage(const DispatchedEventMessage&) = delete;
+    DispatchedEventMessage& operator=(const DispatchedEventMessage&) = delete;
+
     ~DispatchedEventMessage() override;
 
     // Override and return |this|.
@@ -172,8 +188,6 @@
    private:
     std::unique_ptr<blink::WebCoalescedInputEvent> event_;
     DispatchEventCallback callback_;
-
-    DISALLOW_COPY_AND_ASSIGN(DispatchedEventMessage);
   };
 
   // A DispatchedMessage that stores the RequestCompositionUpdates parameters
@@ -182,6 +196,12 @@
    public:
     DispatchedRequestCompositionUpdatesMessage(bool immediate_request,
                                                bool monitor_request);
+
+    DispatchedRequestCompositionUpdatesMessage(
+        const DispatchedRequestCompositionUpdatesMessage&) = delete;
+    DispatchedRequestCompositionUpdatesMessage& operator=(
+        const DispatchedRequestCompositionUpdatesMessage&) = delete;
+
     ~DispatchedRequestCompositionUpdatesMessage() override;
 
     // Override and return |this|.
@@ -194,8 +214,6 @@
    private:
     const bool immediate_request_;
     const bool monitor_request_;
-
-    DISALLOW_COPY_AND_ASSIGN(DispatchedRequestCompositionUpdatesMessage);
   };
 
   // A DispatchedMessage that stores the FinishComposingText parameters
@@ -265,8 +283,6 @@
   mojo::Receiver<blink::mojom::WidgetInputHandler> receiver_{this};
   mojo::Remote<blink::mojom::WidgetInputHandlerHost> host_;
   MessageVector dispatched_messages_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockWidgetInputHandler);
 };
 
 }  // namespace content
diff --git a/content/test/navigation_simulator_unittest.cc b/content/test/navigation_simulator_unittest.cc
index b5047d088..eca65b6 100644
--- a/content/test/navigation_simulator_unittest.cc
+++ b/content/test/navigation_simulator_unittest.cc
@@ -41,6 +41,12 @@
                      TestNavigationThrottle::ResultSynchrony>> {
  public:
   CancellingNavigationSimulatorTest() {}
+
+  CancellingNavigationSimulatorTest(const CancellingNavigationSimulatorTest&) =
+      delete;
+  CancellingNavigationSimulatorTest& operator=(
+      const CancellingNavigationSimulatorTest&) = delete;
+
   ~CancellingNavigationSimulatorTest() override {}
 
   void SetUp() override {
@@ -85,15 +91,18 @@
   bool will_fail_request_called_ = false;
   base::WeakPtrFactory<CancellingNavigationSimulatorTest> weak_ptr_factory_{
       this};
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(CancellingNavigationSimulatorTest);
 };
 
 class MethodCheckingNavigationSimulatorTest : public NavigationSimulatorTest,
                                               public WebContentsObserver {
  public:
   MethodCheckingNavigationSimulatorTest() = default;
+
+  MethodCheckingNavigationSimulatorTest(
+      const MethodCheckingNavigationSimulatorTest&) = delete;
+  MethodCheckingNavigationSimulatorTest& operator=(
+      const MethodCheckingNavigationSimulatorTest&) = delete;
+
   ~MethodCheckingNavigationSimulatorTest() override = default;
 
   void SetUp() override {
@@ -116,8 +125,6 @@
 
   // Not valid until |did_finish_navigation_| is true;
   bool is_post_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(MethodCheckingNavigationSimulatorTest);
 };
 
 class ResponseHeadersCheckingNavigationSimulatorTest
diff --git a/content/test/ppapi_unittest.h b/content/test/ppapi_unittest.h
index 60bae1f..ca8c2a9 100644
--- a/content/test/ppapi_unittest.h
+++ b/content/test/ppapi_unittest.h
@@ -18,6 +18,10 @@
 class PpapiUnittest : public testing::Test {
  public:
   PpapiUnittest();
+
+  PpapiUnittest(const PpapiUnittest&) = delete;
+  PpapiUnittest& operator=(const PpapiUnittest&) = delete;
+
   ~PpapiUnittest() override;
 
   void SetUp() override;
@@ -43,8 +47,6 @@
   // we want it to get destroyed just before |task_environment_|.
   scoped_refptr<PluginModule> module_;
   scoped_refptr<PepperPluginInstanceImpl> instance_;
-
-  DISALLOW_COPY_AND_ASSIGN(PpapiUnittest);
 };
 
 }  // namespace content
diff --git a/content/test/resource_load_observer.h b/content/test/resource_load_observer.h
index 91c9a51..7d712cc 100644
--- a/content/test/resource_load_observer.h
+++ b/content/test/resource_load_observer.h
@@ -23,6 +23,9 @@
  public:
   explicit ResourceLoadObserver(Shell* shell);
 
+  ResourceLoadObserver(const ResourceLoadObserver&) = delete;
+  ResourceLoadObserver& operator=(const ResourceLoadObserver&) = delete;
+
   ~ResourceLoadObserver() override;
 
   const std::vector<blink::mojom::ResourceLoadInfoPtr>& resource_load_infos()
@@ -77,8 +80,6 @@
   std::vector<bool> resource_is_associated_with_main_frame_;
   GURL waiting_original_url_;
   base::OnceClosure waiting_callback_;
-
-  DISALLOW_COPY_AND_ASSIGN(ResourceLoadObserver);
 };
 
 }  // namespace content
diff --git a/content/test/task_runner_deferring_throttle.h b/content/test/task_runner_deferring_throttle.h
index 68ba355..ae6c2d6d 100644
--- a/content/test/task_runner_deferring_throttle.h
+++ b/content/test/task_runner_deferring_throttle.h
@@ -19,6 +19,11 @@
                               bool defer_redirect,
                               bool defer_response,
                               NavigationHandle* handle);
+
+  TaskRunnerDeferringThrottle(const TaskRunnerDeferringThrottle&) = delete;
+  TaskRunnerDeferringThrottle& operator=(const TaskRunnerDeferringThrottle&) =
+      delete;
+
   ~TaskRunnerDeferringThrottle() override;
 
   static std::unique_ptr<NavigationThrottle> Create(
@@ -46,7 +51,6 @@
   bool defer_response_ = true;
   scoped_refptr<base::TaskRunner> task_runner_;
   base::WeakPtrFactory<TaskRunnerDeferringThrottle> weak_factory_{this};
-  DISALLOW_COPY_AND_ASSIGN(TaskRunnerDeferringThrottle);
 };
 
 }  // namespace content
diff --git a/content/test/test_background_sync_manager.h b/content/test/test_background_sync_manager.h
index 2dadefe..3af8849 100644
--- a/content/test/test_background_sync_manager.h
+++ b/content/test/test_background_sync_manager.h
@@ -42,6 +42,11 @@
   TestBackgroundSyncManager(
       scoped_refptr<ServiceWorkerContextWrapper> service_worker_context,
       scoped_refptr<DevToolsBackgroundServicesContextImpl> devtools_context);
+
+  TestBackgroundSyncManager(const TestBackgroundSyncManager&) = delete;
+  TestBackgroundSyncManager& operator=(const TestBackgroundSyncManager&) =
+      delete;
+
   ~TestBackgroundSyncManager() override;
 
   // Force a call to the internal Init() method.
@@ -164,8 +169,6 @@
   DispatchSyncCallback dispatch_periodic_sync_callback_;
   base::TimeDelta soonest_one_shot_sync_wakeup_delta_;
   base::TimeDelta soonest_periodic_sync_wakeup_delta_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestBackgroundSyncManager);
 };
 
 }  // namespace content
diff --git a/content/test/test_blink_web_unit_test_support.h b/content/test/test_blink_web_unit_test_support.h
index 0897184..958d4b43 100644
--- a/content/test/test_blink_web_unit_test_support.h
+++ b/content/test/test_blink_web_unit_test_support.h
@@ -41,6 +41,11 @@
 
   explicit TestBlinkWebUnitTestSupport(
       SchedulerType scheduler_type = SchedulerType::kMockScheduler);
+
+  TestBlinkWebUnitTestSupport(const TestBlinkWebUnitTestSupport&) = delete;
+  TestBlinkWebUnitTestSupport& operator=(const TestBlinkWebUnitTestSupport&) =
+      delete;
+
   ~TestBlinkWebUnitTestSupport() override;
 
   blink::WebString UserAgent() override;
@@ -76,8 +81,6 @@
   cc::TestTaskGraphRunner test_task_graph_runner_;
 
   base::WeakPtrFactory<TestBlinkWebUnitTestSupport> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(TestBlinkWebUnitTestSupport);
 };
 
 }  // namespace content
diff --git a/content/test/test_content_browser_client.h b/content/test/test_content_browser_client.h
index 6188302..5a3fda9 100644
--- a/content/test/test_content_browser_client.h
+++ b/content/test/test_content_browser_client.h
@@ -19,6 +19,10 @@
 class TestContentBrowserClient : public ContentBrowserClient {
  public:
   TestContentBrowserClient();
+
+  TestContentBrowserClient(const TestContentBrowserClient&) = delete;
+  TestContentBrowserClient& operator=(const TestContentBrowserClient&) = delete;
+
   ~TestContentBrowserClient() override;
 
   static TestContentBrowserClient* GetInstance();
@@ -45,8 +49,6 @@
   base::ScopedTempDir download_dir_;
   std::string application_locale_;
   static TestContentBrowserClient* instance_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestContentBrowserClient);
 };
 
 }  // namespace content
diff --git a/content/test/test_content_client.h b/content/test/test_content_client.h
index 8d21404..fc1b8096 100644
--- a/content/test/test_content_client.h
+++ b/content/test/test_content_client.h
@@ -14,15 +14,16 @@
 class TestContentClient : public ContentClient {
  public:
   TestContentClient();
+
+  TestContentClient(const TestContentClient&) = delete;
+  TestContentClient& operator=(const TestContentClient&) = delete;
+
   ~TestContentClient() override;
 
   // ContentClient:
   base::StringPiece GetDataResource(
       int resource_id,
       ui::ResourceScaleFactor scale_factor) override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(TestContentClient);
 };
 
 }  // namespace content
diff --git a/content/test/test_navigation_url_loader_delegate.h b/content/test/test_navigation_url_loader_delegate.h
index 7ce9261..b573efb 100644
--- a/content/test/test_navigation_url_loader_delegate.h
+++ b/content/test/test_navigation_url_loader_delegate.h
@@ -25,6 +25,12 @@
 class TestNavigationURLLoaderDelegate : public NavigationURLLoaderDelegate {
  public:
   TestNavigationURLLoaderDelegate();
+
+  TestNavigationURLLoaderDelegate(const TestNavigationURLLoaderDelegate&) =
+      delete;
+  TestNavigationURLLoaderDelegate& operator=(
+      const TestNavigationURLLoaderDelegate&) = delete;
+
   ~TestNavigationURLLoaderDelegate() override;
 
   const net::RedirectInfo& redirect_info() const { return redirect_info_; }
@@ -87,8 +93,6 @@
   std::unique_ptr<base::RunLoop> request_redirected_;
   std::unique_ptr<base::RunLoop> response_started_;
   std::unique_ptr<base::RunLoop> request_failed_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestNavigationURLLoaderDelegate);
 };
 
 }  // namespace content
diff --git a/content/test/test_navigation_url_loader_factory.h b/content/test/test_navigation_url_loader_factory.h
index bb5149a7..c08728f1 100644
--- a/content/test/test_navigation_url_loader_factory.h
+++ b/content/test/test_navigation_url_loader_factory.h
@@ -20,6 +20,12 @@
 class TestNavigationURLLoaderFactory : public NavigationURLLoaderFactory {
  public:
   TestNavigationURLLoaderFactory();
+
+  TestNavigationURLLoaderFactory(const TestNavigationURLLoaderFactory&) =
+      delete;
+  TestNavigationURLLoaderFactory& operator=(
+      const TestNavigationURLLoaderFactory&) = delete;
+
   ~TestNavigationURLLoaderFactory() override;
 
   // TestNavigationURLLoaderFactory implementation.
@@ -30,9 +36,6 @@
       ServiceWorkerMainResourceHandle* service_worker_handle,
       NavigationURLLoaderDelegate* delegate,
       NavigationURLLoader::LoaderType loader_type) override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(TestNavigationURLLoaderFactory);
 };
 
 }  // namespace content
diff --git a/content/test/test_overscroll_delegate.h b/content/test/test_overscroll_delegate.h
index ec6d3c0..d00ef1c 100644
--- a/content/test/test_overscroll_delegate.h
+++ b/content/test/test_overscroll_delegate.h
@@ -17,6 +17,10 @@
 class TestOverscrollDelegate : public OverscrollControllerDelegate {
  public:
   explicit TestOverscrollDelegate(const gfx::Size& display_size);
+
+  TestOverscrollDelegate(const TestOverscrollDelegate&) = delete;
+  TestOverscrollDelegate& operator=(const TestOverscrollDelegate&) = delete;
+
   ~TestOverscrollDelegate() override;
 
   void set_delta_cap(float delta_cap) { delta_cap_ = delta_cap; }
@@ -51,8 +55,6 @@
 
   float delta_x_;
   float delta_y_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestOverscrollDelegate);
 };
 
 }  // namespace content
diff --git a/content/test/test_render_frame.cc b/content/test/test_render_frame.cc
index 87c40e8..8a3cf2a 100644
--- a/content/test/test_render_frame.cc
+++ b/content/test/test_render_frame.cc
@@ -59,6 +59,10 @@
 class MockFrameHost : public mojom::FrameHost {
  public:
   MockFrameHost() {}
+
+  MockFrameHost(const MockFrameHost&) = delete;
+  MockFrameHost& operator=(const MockFrameHost&) = delete;
+
   ~MockFrameHost() override = default;
 
   mojom::DidCommitProvisionalLoadParamsPtr TakeLastCommitParams() {
@@ -223,8 +227,6 @@
   bool is_page_state_updated_ = false;
 
   bool is_url_opened_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(MockFrameHost);
 };
 
 // static
diff --git a/content/test/test_render_frame.h b/content/test/test_render_frame.h
index 03b174b0..89988e7 100644
--- a/content/test/test_render_frame.h
+++ b/content/test/test_render_frame.h
@@ -27,6 +27,10 @@
  public:
   static RenderFrameImpl* CreateTestRenderFrame(
       RenderFrameImpl::CreateParams params);
+
+  TestRenderFrame(const TestRenderFrame&) = delete;
+  TestRenderFrame& operator=(const TestRenderFrame&) = delete;
+
   ~TestRenderFrame() override;
 
   // Overrides the content in the next navigation originating from the frame.
@@ -78,8 +82,6 @@
   absl::optional<std::string> next_navigation_html_override_;
 
   mojo::AssociatedRemote<mojom::NavigationClient> mock_navigation_client_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestRenderFrame);
 };
 
 }  // namespace content
diff --git a/content/test/test_render_frame_host.h b/content/test/test_render_frame_host.h
index 726a06f..c6284a0 100644
--- a/content/test/test_render_frame_host.h
+++ b/content/test/test_render_frame_host.h
@@ -61,6 +61,10 @@
                       mojo::PendingAssociatedRemote<mojom::Frame> frame_remote,
                       const blink::LocalFrameToken& frame_token,
                       LifecycleStateImpl lifecycle_state);
+
+  TestRenderFrameHost(const TestRenderFrameHost&) = delete;
+  TestRenderFrameHost& operator=(const TestRenderFrameHost&) = delete;
+
   ~TestRenderFrameHost() override;
 
   // RenderFrameHostImpl overrides (same values, but in Test*/Mock* types)
@@ -294,8 +298,6 @@
 
   mojo::PendingRemote<blink::mojom::WebBluetoothService>
       dummy_web_bluetooth_service_remote_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestRenderFrameHost);
 };
 
 }  // namespace content
diff --git a/content/test/test_render_frame_host_factory.h b/content/test/test_render_frame_host_factory.h
index 6456658..5780c34 100644
--- a/content/test/test_render_frame_host_factory.h
+++ b/content/test/test_render_frame_host_factory.h
@@ -23,6 +23,11 @@
 class TestRenderFrameHostFactory : public RenderFrameHostFactory {
  public:
   TestRenderFrameHostFactory();
+
+  TestRenderFrameHostFactory(const TestRenderFrameHostFactory&) = delete;
+  TestRenderFrameHostFactory& operator=(const TestRenderFrameHostFactory&) =
+      delete;
+
   ~TestRenderFrameHostFactory() override;
 
  protected:
@@ -38,9 +43,6 @@
       const blink::LocalFrameToken& frame_token,
       bool renderer_initiated_creation,
       RenderFrameHostImpl::LifecycleStateImpl lifecycle_state) override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(TestRenderFrameHostFactory);
 };
 
 }  // namespace content
diff --git a/content/test/test_render_view_host.h b/content/test/test_render_view_host.h
index 2fee3357..82702a8d 100644
--- a/content/test/test_render_view_host.h
+++ b/content/test/test_render_view_host.h
@@ -272,6 +272,11 @@
 class RenderViewHostImplTestHarness : public RenderViewHostTestHarness {
  public:
   RenderViewHostImplTestHarness();
+
+  RenderViewHostImplTestHarness(const RenderViewHostImplTestHarness&) = delete;
+  RenderViewHostImplTestHarness& operator=(
+      const RenderViewHostImplTestHarness&) = delete;
+
   ~RenderViewHostImplTestHarness() override;
 
   // contents() is equivalent to static_cast<TestWebContents*>(web_contents())
@@ -296,7 +301,6 @@
   typedef std::unique_ptr<ui::test::ScopedSetSupportedResourceScaleFactors>
       ScopedSetSupportedScaleFactors;
   ScopedSetSupportedScaleFactors scoped_set_supported_scale_factors_;
-  DISALLOW_COPY_AND_ASSIGN(RenderViewHostImplTestHarness);
 };
 
 }  // namespace content
diff --git a/content/test/test_render_view_host_factory.h b/content/test/test_render_view_host_factory.h
index 04c36c5..0409848 100644
--- a/content/test/test_render_view_host_factory.h
+++ b/content/test/test_render_view_host_factory.h
@@ -26,6 +26,11 @@
  public:
   TestRenderViewHostFactory(RenderProcessHostFactory* rph_factory,
                             AgentSchedulingGroupHostFactory* asgh_factory);
+
+  TestRenderViewHostFactory(const TestRenderViewHostFactory&) = delete;
+  TestRenderViewHostFactory& operator=(const TestRenderViewHostFactory&) =
+      delete;
+
   ~TestRenderViewHostFactory() override;
 
   virtual void set_render_process_host_factory(
@@ -39,9 +44,6 @@
       int32_t main_frame_routing_id,
       int32_t widget_routing_id,
       bool swapped_out) override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(TestRenderViewHostFactory);
 };
 
 }  // namespace content
diff --git a/content/test/test_render_widget_host_factory.h b/content/test/test_render_widget_host_factory.h
index 8615e06..75f3865b 100644
--- a/content/test/test_render_widget_host_factory.h
+++ b/content/test/test_render_widget_host_factory.h
@@ -21,6 +21,11 @@
 class TestRenderWidgetHostFactory : public RenderWidgetHostFactory {
  public:
   TestRenderWidgetHostFactory();
+
+  TestRenderWidgetHostFactory(const TestRenderWidgetHostFactory&) = delete;
+  TestRenderWidgetHostFactory& operator=(const TestRenderWidgetHostFactory&) =
+      delete;
+
   ~TestRenderWidgetHostFactory() override;
 
   std::unique_ptr<RenderWidgetHostImpl> CreateRenderWidgetHost(
@@ -29,9 +34,6 @@
       AgentSchedulingGroupHost& agent_scheduling_group,
       int32_t routing_id,
       bool hidden) override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(TestRenderWidgetHostFactory);
 };
 
 }  // namespace content
diff --git a/content/test/test_view_android_delegate.h b/content/test/test_view_android_delegate.h
index e4d7216..eef807b6 100644
--- a/content/test/test_view_android_delegate.h
+++ b/content/test/test_view_android_delegate.h
@@ -23,6 +23,10 @@
 class TestViewAndroidDelegate {
  public:
   TestViewAndroidDelegate();
+
+  TestViewAndroidDelegate(const TestViewAndroidDelegate&) = delete;
+  TestViewAndroidDelegate& operator=(const TestViewAndroidDelegate&) = delete;
+
   ~TestViewAndroidDelegate();
   // Sets up the test delegate.
   // |view_android| is the ViewAndroid to use.
@@ -36,8 +40,6 @@
 
  private:
   base::android::ScopedJavaLocalRef<jobject> j_delegate_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestViewAndroidDelegate);
 };
 
 }  // namespace content
diff --git a/content/test/web_contents_observer_consistency_checker.h b/content/test/web_contents_observer_consistency_checker.h
index 0bde148..23c67f9 100644
--- a/content/test/web_contents_observer_consistency_checker.h
+++ b/content/test/web_contents_observer_consistency_checker.h
@@ -35,6 +35,11 @@
     : public WebContentsObserver,
       public base::SupportsUserData::Data {
  public:
+  WebContentsObserverConsistencyChecker(
+      const WebContentsObserverConsistencyChecker&) = delete;
+  WebContentsObserverConsistencyChecker& operator=(
+      const WebContentsObserverConsistencyChecker&) = delete;
+
   ~WebContentsObserverConsistencyChecker() override;
 
   // Enables these checks on |web_contents|. Usually
@@ -138,8 +143,6 @@
   bool is_loading_;
 
   bool web_contents_destroyed_;
-
-  DISALLOW_COPY_AND_ASSIGN(WebContentsObserverConsistencyChecker);
 };
 
 }  // namespace content
diff --git a/content/utility/in_process_utility_thread.h b/content/utility/in_process_utility_thread.h
index a1031590..cbc6b6e 100644
--- a/content/utility/in_process_utility_thread.h
+++ b/content/utility/in_process_utility_thread.h
@@ -19,6 +19,10 @@
 class InProcessUtilityThread : public base::Thread {
  public:
   InProcessUtilityThread(const InProcessChildThreadParams& params);
+
+  InProcessUtilityThread(const InProcessUtilityThread&) = delete;
+  InProcessUtilityThread& operator=(const InProcessUtilityThread&) = delete;
+
   ~InProcessUtilityThread() override;
 
  private:
@@ -30,8 +34,6 @@
 
   InProcessChildThreadParams params_;
   std::unique_ptr<ChildProcess> child_process_;
-
-  DISALLOW_COPY_AND_ASSIGN(InProcessUtilityThread);
 };
 
 CONTENT_EXPORT base::Thread* CreateInProcessUtilityThread(
diff --git a/content/utility/utility_blink_platform_with_sandbox_support_impl.h b/content/utility/utility_blink_platform_with_sandbox_support_impl.h
index fcba9fec..cee17fc 100644
--- a/content/utility/utility_blink_platform_with_sandbox_support_impl.h
+++ b/content/utility/utility_blink_platform_with_sandbox_support_impl.h
@@ -27,6 +27,12 @@
 class UtilityBlinkPlatformWithSandboxSupportImpl : public blink::Platform {
  public:
   UtilityBlinkPlatformWithSandboxSupportImpl();
+
+  UtilityBlinkPlatformWithSandboxSupportImpl(
+      const UtilityBlinkPlatformWithSandboxSupportImpl&) = delete;
+  UtilityBlinkPlatformWithSandboxSupportImpl& operator=(
+      const UtilityBlinkPlatformWithSandboxSupportImpl&) = delete;
+
   ~UtilityBlinkPlatformWithSandboxSupportImpl() override;
 
   // BlinkPlatformImpl
@@ -39,8 +45,6 @@
 #if defined(OS_LINUX) || defined(OS_CHROMEOS)
   sk_sp<font_service::FontLoader> font_loader_;
 #endif
-
-  DISALLOW_COPY_AND_ASSIGN(UtilityBlinkPlatformWithSandboxSupportImpl);
 };
 
 }  // namespace content
diff --git a/content/utility/utility_service_factory.h b/content/utility/utility_service_factory.h
index 5cd5a14f..f9601b22 100644
--- a/content/utility/utility_service_factory.h
+++ b/content/utility/utility_service_factory.h
@@ -19,13 +19,14 @@
 class UtilityServiceFactory {
  public:
   UtilityServiceFactory();
+
+  UtilityServiceFactory(const UtilityServiceFactory&) = delete;
+  UtilityServiceFactory& operator=(const UtilityServiceFactory&) = delete;
+
   ~UtilityServiceFactory();
 
   void RunService(const std::string& service_name,
                   mojo::ScopedMessagePipeHandle service_pipe);
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(UtilityServiceFactory);
 };
 
 }  // namespace content
diff --git a/content/utility/utility_thread_impl.cc b/content/utility/utility_thread_impl.cc
index 6bf414b..24eb107 100644
--- a/content/utility/utility_thread_impl.cc
+++ b/content/utility/utility_thread_impl.cc
@@ -39,6 +39,10 @@
   explicit ServiceBinderImpl(
       scoped_refptr<base::SequencedTaskRunner> main_thread_task_runner)
       : main_thread_task_runner_(std::move(main_thread_task_runner)) {}
+
+  ServiceBinderImpl(const ServiceBinderImpl&) = delete;
+  ServiceBinderImpl& operator=(const ServiceBinderImpl&) = delete;
+
   ~ServiceBinderImpl() = default;
 
   void BindServiceInterface(mojo::GenericPendingReceiver* receiver) {
@@ -131,8 +135,6 @@
   std::unique_ptr<mojo::ServiceFactory> io_thread_services_;
 
   base::WeakPtrFactory<ServiceBinderImpl> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(ServiceBinderImpl);
 };
 
 ChildThreadImpl::Options::ServiceBinder GetServiceBinder() {
diff --git a/content/utility/utility_thread_impl.h b/content/utility/utility_thread_impl.h
index c21df4e..286250b 100644
--- a/content/utility/utility_thread_impl.h
+++ b/content/utility/utility_thread_impl.h
@@ -30,6 +30,10 @@
   explicit UtilityThreadImpl(base::RepeatingClosure quit_closure);
   // Constructor used when running in single process mode.
   explicit UtilityThreadImpl(const InProcessChildThreadParams& params);
+
+  UtilityThreadImpl(const UtilityThreadImpl&) = delete;
+  UtilityThreadImpl& operator=(const UtilityThreadImpl&) = delete;
+
   ~UtilityThreadImpl() override;
   void Shutdown() override;
 
@@ -72,8 +76,6 @@
   // browser-side ServiceProcessHost. Any service registered here will run on
   // the main thread of its service process.
   std::unique_ptr<mojo::ServiceFactory> main_thread_services_;
-
-  DISALLOW_COPY_AND_ASSIGN(UtilityThreadImpl);
 };
 
 }  // namespace content
diff --git a/content/web_test/browser/devtools_protocol_test_bindings.h b/content/web_test/browser/devtools_protocol_test_bindings.h
index 9e0d450..403586cc 100644
--- a/content/web_test/browser/devtools_protocol_test_bindings.h
+++ b/content/web_test/browser/devtools_protocol_test_bindings.h
@@ -21,6 +21,11 @@
                                      public DevToolsAgentHostClient {
  public:
   explicit DevToolsProtocolTestBindings(WebContents* devtools);
+
+  DevToolsProtocolTestBindings(const DevToolsProtocolTestBindings&) = delete;
+  DevToolsProtocolTestBindings& operator=(const DevToolsProtocolTestBindings&) =
+      delete;
+
   ~DevToolsProtocolTestBindings() override;
   static GURL MapTestURLIfNeeded(const GURL& test_url, bool* is_protocol_test);
 
@@ -42,8 +47,6 @@
   // tests natively on Android.
   std::unique_ptr<DevToolsFrontendHost> frontend_host_;
 #endif
-
-  DISALLOW_COPY_AND_ASSIGN(DevToolsProtocolTestBindings);
 };
 
 }  // namespace content
diff --git a/content/web_test/browser/fake_bluetooth_chooser.h b/content/web_test/browser/fake_bluetooth_chooser.h
index 0fab8938..aab03c7f 100644
--- a/content/web_test/browser/fake_bluetooth_chooser.h
+++ b/content/web_test/browser/fake_bluetooth_chooser.h
@@ -41,6 +41,9 @@
       mojo::PendingReceiver<mojom::FakeBluetoothChooser> receiver,
       mojo::PendingAssociatedRemote<mojom::FakeBluetoothChooserClient> client);
 
+  FakeBluetoothChooser(const FakeBluetoothChooser&) = delete;
+  FakeBluetoothChooser& operator=(const FakeBluetoothChooser&) = delete;
+
   // Resets the test scan duration to timeout immediately and sends a
   // |CHOOSER_CLOSED| event to the client.
   ~FakeBluetoothChooser() override;
@@ -75,8 +78,6 @@
   // Stores the associated pointer to the client that will be receiving events
   // from FakeBluetoothChooser.
   mojo::AssociatedRemote<mojom::FakeBluetoothChooserClient> client_;
-
-  DISALLOW_COPY_AND_ASSIGN(FakeBluetoothChooser);
 };
 
 }  // namespace content
diff --git a/content/web_test/browser/leak_detector.h b/content/web_test/browser/leak_detector.h
index de920735..3ad919c 100644
--- a/content/web_test/browser/leak_detector.h
+++ b/content/web_test/browser/leak_detector.h
@@ -20,6 +20,10 @@
 class LeakDetector {
  public:
   LeakDetector();
+
+  LeakDetector(const LeakDetector&) = delete;
+  LeakDetector& operator=(const LeakDetector&) = delete;
+
   ~LeakDetector();
 
   struct LeakDetectionReport {
@@ -43,8 +47,6 @@
   blink::mojom::LeakDetectionResultPtr previous_result_;
   ReportCallback callback_;
   base::WeakPtrFactory<LeakDetector> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(LeakDetector);
 };
 
 }  // namespace content
diff --git a/content/web_test/browser/mojo_web_test_helper.h b/content/web_test/browser/mojo_web_test_helper.h
index c6a8057..30e795a 100644
--- a/content/web_test/browser/mojo_web_test_helper.h
+++ b/content/web_test/browser/mojo_web_test_helper.h
@@ -16,15 +16,16 @@
 class MojoWebTestHelper : public mojom::MojoWebTestHelper {
  public:
   MojoWebTestHelper();
+
+  MojoWebTestHelper(const MojoWebTestHelper&) = delete;
+  MojoWebTestHelper& operator=(const MojoWebTestHelper&) = delete;
+
   ~MojoWebTestHelper() override;
 
   static void Create(mojo::PendingReceiver<mojom::MojoWebTestHelper> receiver);
 
   // mojom::MojoWebTestHelper:
   void Reverse(const std::string& message, ReverseCallback callback) override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(MojoWebTestHelper);
 };
 
 }  // namespace content
diff --git a/content/web_test/browser/test_info_extractor.h b/content/web_test/browser/test_info_extractor.h
index c515b59..d961bc9 100644
--- a/content/web_test/browser/test_info_extractor.h
+++ b/content/web_test/browser/test_info_extractor.h
@@ -66,6 +66,10 @@
 class TestInfoExtractor {
  public:
   explicit TestInfoExtractor(const base::CommandLine& cmd_line);
+
+  TestInfoExtractor(const TestInfoExtractor&) = delete;
+  TestInfoExtractor& operator=(const TestInfoExtractor&) = delete;
+
   ~TestInfoExtractor();
 
   std::unique_ptr<TestInfo> GetNextTest();
@@ -73,8 +77,6 @@
  private:
   base::CommandLine::StringVector cmdline_args_;
   size_t cmdline_position_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestInfoExtractor);
 };
 
 }  // namespace content
diff --git a/content/web_test/browser/web_test_background_fetch_delegate.cc b/content/web_test/browser/web_test_background_fetch_delegate.cc
index fd3f85ba..db55a5e 100644
--- a/content/web_test/browser/web_test_background_fetch_delegate.cc
+++ b/content/web_test/browser/web_test_background_fetch_delegate.cc
@@ -43,6 +43,11 @@
  public:
   TestBlobContextGetterFactory(content::BrowserContext* browser_context)
       : browser_context_(browser_context) {}
+
+  TestBlobContextGetterFactory(const TestBlobContextGetterFactory&) = delete;
+  TestBlobContextGetterFactory& operator=(const TestBlobContextGetterFactory&) =
+      delete;
+
   ~TestBlobContextGetterFactory() override = default;
 
  private:
@@ -54,7 +59,6 @@
   }
 
   content::BrowserContext* browser_context_;
-  DISALLOW_COPY_AND_ASSIGN(TestBlobContextGetterFactory);
 };
 
 // Implementation of a Download Service client that will be servicing
@@ -66,6 +70,11 @@
       base::WeakPtr<content::BackgroundFetchDelegate::Client> client)
       : client_(std::move(client)) {}
 
+  WebTestBackgroundFetchDownloadClient(
+      const WebTestBackgroundFetchDownloadClient&) = delete;
+  WebTestBackgroundFetchDownloadClient& operator=(
+      const WebTestBackgroundFetchDownloadClient&) = delete;
+
   ~WebTestBackgroundFetchDownloadClient() override = default;
 
   // Registers the |guid| as belonging to a Background Fetch job identified by
@@ -225,8 +234,6 @@
 
   base::WeakPtrFactory<WebTestBackgroundFetchDownloadClient> weak_ptr_factory_{
       this};
-
-  DISALLOW_COPY_AND_ASSIGN(WebTestBackgroundFetchDownloadClient);
 };
 
 WebTestBackgroundFetchDelegate::WebTestBackgroundFetchDelegate(
diff --git a/content/web_test/browser/web_test_background_fetch_delegate.h b/content/web_test/browser/web_test_background_fetch_delegate.h
index da3ba4a..e816280 100644
--- a/content/web_test/browser/web_test_background_fetch_delegate.h
+++ b/content/web_test/browser/web_test_background_fetch_delegate.h
@@ -25,6 +25,12 @@
 class WebTestBackgroundFetchDelegate : public BackgroundFetchDelegate {
  public:
   explicit WebTestBackgroundFetchDelegate(BrowserContext* browser_context);
+
+  WebTestBackgroundFetchDelegate(const WebTestBackgroundFetchDelegate&) =
+      delete;
+  WebTestBackgroundFetchDelegate& operator=(
+      const WebTestBackgroundFetchDelegate&) = delete;
+
   ~WebTestBackgroundFetchDelegate() override;
 
   // BackgroundFetchDelegate implementation:
@@ -57,8 +63,6 @@
 
   // Weak reference to an instance of our download client.
   WebTestBackgroundFetchDownloadClient* background_fetch_client_;
-
-  DISALLOW_COPY_AND_ASSIGN(WebTestBackgroundFetchDelegate);
 };
 
 }  // namespace content
diff --git a/content/web_test/browser/web_test_bluetooth_chooser_factory.cc b/content/web_test/browser/web_test_bluetooth_chooser_factory.cc
index fbd8150e..d7b2166 100644
--- a/content/web_test/browser/web_test_bluetooth_chooser_factory.cc
+++ b/content/web_test/browser/web_test_bluetooth_chooser_factory.cc
@@ -24,6 +24,9 @@
     factory->choosers_.insert(this);
   }
 
+  Chooser(const Chooser&) = delete;
+  Chooser& operator=(const Chooser&) = delete;
+
   ~Chooser() override {
     CheckFactory();
     factory_->choosers_.erase(this);
@@ -87,8 +90,6 @@
   }
 
   base::WeakPtr<WebTestBluetoothChooserFactory> factory_;
-
-  DISALLOW_COPY_AND_ASSIGN(Chooser);
 };
 
 WebTestBluetoothChooserFactory::WebTestBluetoothChooserFactory() {}
diff --git a/content/web_test/browser/web_test_bluetooth_fake_adapter_setter_impl.h b/content/web_test/browser/web_test_bluetooth_fake_adapter_setter_impl.h
index 46fba30..f9dc3aa 100644
--- a/content/web_test/browser/web_test_bluetooth_fake_adapter_setter_impl.h
+++ b/content/web_test/browser/web_test_bluetooth_fake_adapter_setter_impl.h
@@ -15,6 +15,12 @@
     : public mojom::WebTestBluetoothFakeAdapterSetter {
  public:
   WebTestBluetoothFakeAdapterSetterImpl();
+
+  WebTestBluetoothFakeAdapterSetterImpl(
+      const WebTestBluetoothFakeAdapterSetterImpl&) = delete;
+  WebTestBluetoothFakeAdapterSetterImpl& operator=(
+      const WebTestBluetoothFakeAdapterSetterImpl&) = delete;
+
   ~WebTestBluetoothFakeAdapterSetterImpl() override;
 
   static void Create(
@@ -22,8 +28,6 @@
 
  private:
   void Set(const std::string& adapter_name, SetCallback callback) override;
-
-  DISALLOW_COPY_AND_ASSIGN(WebTestBluetoothFakeAdapterSetterImpl);
 };
 
 }  // namespace content
diff --git a/content/web_test/browser/web_test_browser_context.h b/content/web_test/browser/web_test_browser_context.h
index e2c3835..f633295 100644
--- a/content/web_test/browser/web_test_browser_context.h
+++ b/content/web_test/browser/web_test_browser_context.h
@@ -28,6 +28,10 @@
 class WebTestBrowserContext final : public ShellBrowserContext {
  public:
   explicit WebTestBrowserContext(bool off_the_record);
+
+  WebTestBrowserContext(const WebTestBrowserContext&) = delete;
+  WebTestBrowserContext& operator=(const WebTestBrowserContext&) = delete;
+
   ~WebTestBrowserContext() override;
 
   // ShellBrowserContext overrides.
@@ -53,8 +57,6 @@
   std::unique_ptr<ClientHintsControllerDelegate>
       client_hints_controller_delegate_;
   std::unique_ptr<WebTestStorageAccessManager> storage_access_;
-
-  DISALLOW_COPY_AND_ASSIGN(WebTestBrowserContext);
 };
 
 }  // namespace content
diff --git a/content/web_test/browser/web_test_browser_main_parts.h b/content/web_test/browser/web_test_browser_main_parts.h
index 3351721..a6c543e4 100644
--- a/content/web_test/browser/web_test_browser_main_parts.h
+++ b/content/web_test/browser/web_test_browser_main_parts.h
@@ -19,6 +19,10 @@
 class WebTestBrowserMainParts : public ShellBrowserMainParts {
  public:
   explicit WebTestBrowserMainParts(const MainFunctionParams& parameters);
+
+  WebTestBrowserMainParts(const WebTestBrowserMainParts&) = delete;
+  WebTestBrowserMainParts& operator=(const WebTestBrowserMainParts&) = delete;
+
   ~WebTestBrowserMainParts() override;
 
  private:
@@ -30,8 +34,6 @@
 #if BUILDFLAG(ENABLE_PLUGINS)
   std::unique_ptr<ShellPluginServiceFilter> plugin_service_filter_;
 #endif
-
-  DISALLOW_COPY_AND_ASSIGN(WebTestBrowserMainParts);
 };
 
 }  // namespace content
diff --git a/content/web_test/browser/web_test_control_host.h b/content/web_test/browser/web_test_control_host.h
index b927f316..107a88c 100644
--- a/content/web_test/browser/web_test_control_host.h
+++ b/content/web_test/browser/web_test_control_host.h
@@ -52,6 +52,10 @@
 class WebTestResultPrinter {
  public:
   WebTestResultPrinter(std::ostream* output, std::ostream* error);
+
+  WebTestResultPrinter(const WebTestResultPrinter&) = delete;
+  WebTestResultPrinter& operator=(const WebTestResultPrinter&) = delete;
+
   ~WebTestResultPrinter() = default;
 
   void reset() { state_ = DURING_TEST; }
@@ -104,8 +108,6 @@
 
   bool capture_text_only_ = false;
   bool encode_binary_data_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(WebTestResultPrinter);
 };
 
 class WebTestControlHost : public WebContentsObserver,
diff --git a/content/web_test/browser/web_test_devtools_bindings.h b/content/web_test/browser/web_test_devtools_bindings.h
index ae674eed..2bf77e3 100644
--- a/content/web_test/browser/web_test_devtools_bindings.h
+++ b/content/web_test/browser/web_test_devtools_bindings.h
@@ -23,6 +23,9 @@
 
   void Attach() override;
 
+  WebTestDevToolsBindings(const WebTestDevToolsBindings&) = delete;
+  WebTestDevToolsBindings& operator=(const WebTestDevToolsBindings&) = delete;
+
   ~WebTestDevToolsBindings() override;
 
  private:
@@ -36,8 +39,6 @@
 
   GURL frontend_url_;
   std::unique_ptr<SecondaryObserver> secondary_observer_;
-
-  DISALLOW_COPY_AND_ASSIGN(WebTestDevToolsBindings);
 };
 
 }  // namespace content
diff --git a/content/web_test/browser/web_test_download_manager_delegate.h b/content/web_test/browser/web_test_download_manager_delegate.h
index aff924f..5998dd1 100644
--- a/content/web_test/browser/web_test_download_manager_delegate.h
+++ b/content/web_test/browser/web_test_download_manager_delegate.h
@@ -21,6 +21,12 @@
 class WebTestDownloadManagerDelegate : public ShellDownloadManagerDelegate {
  public:
   WebTestDownloadManagerDelegate();
+
+  WebTestDownloadManagerDelegate(const WebTestDownloadManagerDelegate&) =
+      delete;
+  WebTestDownloadManagerDelegate& operator=(
+      const WebTestDownloadManagerDelegate&) = delete;
+
   ~WebTestDownloadManagerDelegate() override;
 
   // ShellDownloadManagerDelegate implementation.
@@ -34,9 +40,6 @@
       bool from_download_cross_origin_redirect,
       bool content_initiated,
       content::CheckDownloadAllowedCallback check_download_allowed_cb) override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(WebTestDownloadManagerDelegate);
 };
 
 }  // namespace content
diff --git a/content/web_test/browser/web_test_first_device_bluetooth_chooser.h b/content/web_test/browser/web_test_first_device_bluetooth_chooser.h
index 20f04027..27a55b5 100644
--- a/content/web_test/browser/web_test_first_device_bluetooth_chooser.h
+++ b/content/web_test/browser/web_test_first_device_bluetooth_chooser.h
@@ -21,6 +21,12 @@
   // used.
   explicit WebTestFirstDeviceBluetoothChooser(
       const EventHandler& event_handler);
+
+  WebTestFirstDeviceBluetoothChooser(
+      const WebTestFirstDeviceBluetoothChooser&) = delete;
+  WebTestFirstDeviceBluetoothChooser& operator=(
+      const WebTestFirstDeviceBluetoothChooser&) = delete;
+
   ~WebTestFirstDeviceBluetoothChooser() override;
 
   // BluetoothChooser:
@@ -35,8 +41,6 @@
 
  private:
   EventHandler event_handler_;
-
-  DISALLOW_COPY_AND_ASSIGN(WebTestFirstDeviceBluetoothChooser);
 };
 
 }  // namespace content
diff --git a/content/web_test/browser/web_test_javascript_dialog_manager.h b/content/web_test/browser/web_test_javascript_dialog_manager.h
index 640c2c9..207bfc60 100644
--- a/content/web_test/browser/web_test_javascript_dialog_manager.h
+++ b/content/web_test/browser/web_test_javascript_dialog_manager.h
@@ -17,6 +17,12 @@
 class WebTestJavaScriptDialogManager : public ShellJavaScriptDialogManager {
  public:
   WebTestJavaScriptDialogManager();
+
+  WebTestJavaScriptDialogManager(const WebTestJavaScriptDialogManager&) =
+      delete;
+  WebTestJavaScriptDialogManager& operator=(
+      const WebTestJavaScriptDialogManager&) = delete;
+
   ~WebTestJavaScriptDialogManager() override;
 
   // JavaScriptDialogManager:
@@ -32,9 +38,6 @@
                              RenderFrameHost* render_frame_host,
                              bool is_reload,
                              DialogClosedCallback callback) override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(WebTestJavaScriptDialogManager);
 };
 
 }  // namespace content
diff --git a/content/web_test/browser/web_test_permission_manager.h b/content/web_test/browser/web_test_permission_manager.h
index d5786e15..965e5cf4 100644
--- a/content/web_test/browser/web_test_permission_manager.h
+++ b/content/web_test/browser/web_test_permission_manager.h
@@ -24,6 +24,10 @@
       public blink::test::mojom::PermissionAutomation {
  public:
   WebTestPermissionManager();
+
+  WebTestPermissionManager(const WebTestPermissionManager&) = delete;
+  WebTestPermissionManager& operator=(const WebTestPermissionManager&) = delete;
+
   ~WebTestPermissionManager() override;
 
   // PermissionManager overrides.
@@ -122,8 +126,6 @@
   SubscriptionId::Generator subscription_id_generator_;
 
   mojo::ReceiverSet<blink::test::mojom::PermissionAutomation> receivers_;
-
-  DISALLOW_COPY_AND_ASSIGN(WebTestPermissionManager);
 };
 
 }  // namespace content
diff --git a/content/web_test/browser/web_test_push_messaging_service.h b/content/web_test/browser/web_test_push_messaging_service.h
index b22c1a5..e92fd86 100644
--- a/content/web_test/browser/web_test_push_messaging_service.h
+++ b/content/web_test/browser/web_test_push_messaging_service.h
@@ -19,6 +19,11 @@
 class WebTestPushMessagingService : public PushMessagingService {
  public:
   WebTestPushMessagingService();
+
+  WebTestPushMessagingService(const WebTestPushMessagingService&) = delete;
+  WebTestPushMessagingService& operator=(const WebTestPushMessagingService&) =
+      delete;
+
   ~WebTestPushMessagingService() override;
 
   // PushMessagingService implementation:
@@ -53,8 +58,6 @@
   GURL CreateEndpoint(const std::string& subscription_id) const;
 
   int64_t subscribed_service_worker_registration_;
-
-  DISALLOW_COPY_AND_ASSIGN(WebTestPushMessagingService);
 };
 
 }  // namespace content
diff --git a/content/web_test/browser/web_test_storage_access_manager.h b/content/web_test/browser/web_test_storage_access_manager.h
index f85fed0..0d969a8a 100644
--- a/content/web_test/browser/web_test_storage_access_manager.h
+++ b/content/web_test/browser/web_test_storage_access_manager.h
@@ -23,6 +23,11 @@
     : public blink::test::mojom::StorageAccessAutomation {
  public:
   explicit WebTestStorageAccessManager(BrowserContext* browser_context);
+
+  WebTestStorageAccessManager(const WebTestStorageAccessManager&) = delete;
+  WebTestStorageAccessManager& operator=(const WebTestStorageAccessManager&) =
+      delete;
+
   ~WebTestStorageAccessManager() override;
 
   // blink::test::mojom::StorageAccessAutomation
@@ -43,8 +48,6 @@
 
   ContentSettingsForOneType content_settings_for_automation_;
   bool third_party_cookies_blocked_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(WebTestStorageAccessManager);
 };
 
 }  // namespace content
diff --git a/content/web_test/renderer/accessibility_controller.h b/content/web_test/renderer/accessibility_controller.h
index 300eb9ff..2e28490 100644
--- a/content/web_test/renderer/accessibility_controller.h
+++ b/content/web_test/renderer/accessibility_controller.h
@@ -33,6 +33,10 @@
 class AccessibilityController {
  public:
   explicit AccessibilityController(WebFrameTestProxy* web_frame_test_proxy);
+
+  AccessibilityController(const AccessibilityController&) = delete;
+  AccessibilityController& operator=(const AccessibilityController&) = delete;
+
   ~AccessibilityController();
 
   void Reset();
@@ -78,8 +82,6 @@
   std::unique_ptr<blink::WebAXContext> ax_context_;
 
   base::WeakPtrFactory<AccessibilityController> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(AccessibilityController);
 };
 
 }  // namespace content
diff --git a/content/web_test/renderer/app_banner_service.h b/content/web_test/renderer/app_banner_service.h
index cf051645..d1ce2ce 100644
--- a/content/web_test/renderer/app_banner_service.h
+++ b/content/web_test/renderer/app_banner_service.h
@@ -21,6 +21,10 @@
 class AppBannerService : public blink::mojom::AppBannerService {
  public:
   AppBannerService();
+
+  AppBannerService(const AppBannerService&) = delete;
+  AppBannerService& operator=(const AppBannerService&) = delete;
+
   ~AppBannerService() override;
 
   mojo::Remote<blink::mojom::AppBannerController>& controller() {
@@ -40,8 +44,6 @@
   mojo::Receiver<blink::mojom::AppBannerService> receiver_{this};
   mojo::Remote<blink::mojom::AppBannerEvent> event_;
   mojo::Remote<blink::mojom::AppBannerController> controller_;
-
-  DISALLOW_COPY_AND_ASSIGN(AppBannerService);
 };
 
 }  // namespace content
diff --git a/content/web_test/renderer/event_sender.h b/content/web_test/renderer/event_sender.h
index 76b90deba..7c06fc3 100644
--- a/content/web_test/renderer/event_sender.h
+++ b/content/web_test/renderer/event_sender.h
@@ -55,6 +55,10 @@
 class EventSender {
  public:
   EventSender(blink::WebFrameWidget*, content::TestRunner* test_runner);
+
+  EventSender(const EventSender&) = delete;
+  EventSender& operator=(const EventSender&) = delete;
+
   virtual ~EventSender();
 
   void Reset();
@@ -318,8 +322,6 @@
   base::TimeTicks last_event_timestamp_;
 
   base::WeakPtrFactory<EventSender> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(EventSender);
 };
 
 }  // namespace content
diff --git a/content/web_test/renderer/gamepad_controller.h b/content/web_test/renderer/gamepad_controller.h
index 9b9c227..0e069949 100644
--- a/content/web_test/renderer/gamepad_controller.h
+++ b/content/web_test/renderer/gamepad_controller.h
@@ -26,6 +26,10 @@
 class GamepadController : public base::SupportsWeakPtr<GamepadController> {
  public:
   GamepadController();
+
+  GamepadController(const GamepadController&) = delete;
+  GamepadController& operator=(const GamepadController&) = delete;
+
   ~GamepadController();
 
   void Reset();
@@ -95,8 +99,6 @@
   device::GamepadHardwareBuffer* gamepads_ = nullptr;
 
   base::WeakPtrFactory<GamepadController> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(GamepadController);
 };
 
 }  // namespace content
diff --git a/content/web_test/renderer/spell_check_client.h b/content/web_test/renderer/spell_check_client.h
index f5940ed..a048bc98 100644
--- a/content/web_test/renderer/spell_check_client.h
+++ b/content/web_test/renderer/spell_check_client.h
@@ -25,6 +25,10 @@
 class SpellCheckClient : public blink::WebTextCheckClient {
  public:
   explicit SpellCheckClient(blink::WebLocalFrame* frame);
+
+  SpellCheckClient(const SpellCheckClient&) = delete;
+  SpellCheckClient& operator=(const SpellCheckClient&) = delete;
+
   ~SpellCheckClient() override;
 
   void SetEnabled(bool enabled);
@@ -69,8 +73,6 @@
   v8::Persistent<v8::Function> resolved_callback_;
 
   base::WeakPtrFactory<SpellCheckClient> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(SpellCheckClient);
 };
 
 }  // namespace content
diff --git a/content/web_test/renderer/test_plugin.h b/content/web_test/renderer/test_plugin.h
index 5b09258..4308cf8 100644
--- a/content/web_test/renderer/test_plugin.h
+++ b/content/web_test/renderer/test_plugin.h
@@ -62,6 +62,10 @@
   static TestPlugin* Create(const blink::WebPluginParams& params,
                             TestRunner* test_runner,
                             blink::WebLocalFrame* frame);
+
+  TestPlugin(const TestPlugin&) = delete;
+  TestPlugin& operator=(const TestPlugin&) = delete;
+
   ~TestPlugin() override;
 
   static const blink::WebString& MimeType();
@@ -193,8 +197,6 @@
 
   bool is_persistent_;
   bool can_create_without_renderer_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestPlugin);
 };
 
 }  // namespace content
diff --git a/content/web_test/renderer/test_runner.h b/content/web_test/renderer/test_runner.h
index ef0a047..a3674ad 100644
--- a/content/web_test/renderer/test_runner.h
+++ b/content/web_test/renderer/test_runner.h
@@ -72,6 +72,10 @@
 class TestRunner {
  public:
   TestRunner();
+
+  TestRunner(const TestRunner&) = delete;
+  TestRunner& operator=(const TestRunner&) = delete;
+
   virtual ~TestRunner();
 
   void Install(WebFrameTestProxy* frame, SpellCheckClient* spell_check);
@@ -586,8 +590,6 @@
   mojom::WebTestRunTestConfiguration test_config_;
 
   base::WeakPtrFactory<TestRunner> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(TestRunner);
 };
 
 }  // namespace content
diff --git a/content/web_test/renderer/test_websocket_handshake_throttle_provider.h b/content/web_test/renderer/test_websocket_handshake_throttle_provider.h
index 4fd59ccd..b1f3e15 100644
--- a/content/web_test/renderer/test_websocket_handshake_throttle_provider.h
+++ b/content/web_test/renderer/test_websocket_handshake_throttle_provider.h
@@ -16,6 +16,12 @@
     : public blink::WebSocketHandshakeThrottleProvider {
  public:
   TestWebSocketHandshakeThrottleProvider() = default;
+
+  TestWebSocketHandshakeThrottleProvider(
+      const TestWebSocketHandshakeThrottleProvider&) = delete;
+  TestWebSocketHandshakeThrottleProvider& operator=(
+      const TestWebSocketHandshakeThrottleProvider&) = delete;
+
   ~TestWebSocketHandshakeThrottleProvider() override = default;
 
   std::unique_ptr<blink::WebSocketHandshakeThrottleProvider> Clone(
@@ -23,9 +29,6 @@
   std::unique_ptr<blink::WebSocketHandshakeThrottle> CreateThrottle(
       int render_frame_id,
       scoped_refptr<base::SingleThreadTaskRunner> task_runner) override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(TestWebSocketHandshakeThrottleProvider);
 };
 
 }  // namespace content
diff --git a/content/web_test/renderer/text_input_controller.h b/content/web_test/renderer/text_input_controller.h
index d5a4c26..3f11abf 100644
--- a/content/web_test/renderer/text_input_controller.h
+++ b/content/web_test/renderer/text_input_controller.h
@@ -27,6 +27,10 @@
 class TextInputController {
  public:
   explicit TextInputController(WebFrameTestProxy* web_frame_test_proxy);
+
+  TextInputController(const TextInputController&) = delete;
+  TextInputController& operator=(const TextInputController&) = delete;
+
   ~TextInputController();
 
   void Install(blink::WebLocalFrame* frame);
@@ -58,8 +62,6 @@
   WebFrameTestProxy* const web_frame_test_proxy_;
 
   base::WeakPtrFactory<TextInputController> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(TextInputController);
 };
 
 }  // namespace content
diff --git a/content/web_test/renderer/web_ax_object_proxy.cc b/content/web_test/renderer/web_ax_object_proxy.cc
index 4357df6..51e272a7 100644
--- a/content/web_test/renderer/web_ax_object_proxy.cc
+++ b/content/web_test/renderer/web_ax_object_proxy.cc
@@ -235,6 +235,10 @@
 class AttributesCollector {
  public:
   AttributesCollector() {}
+
+  AttributesCollector(const AttributesCollector&) = delete;
+  AttributesCollector& operator=(const AttributesCollector&) = delete;
+
   ~AttributesCollector() {}
 
   void CollectAttributes(const blink::WebAXObject& object) {
@@ -246,8 +250,6 @@
 
  private:
   std::string attributes_;
-
-  DISALLOW_COPY_AND_ASSIGN(AttributesCollector);
 };
 
 }  // namespace
diff --git a/content/web_test/renderer/web_ax_object_proxy.h b/content/web_test/renderer/web_ax_object_proxy.h
index d21a500..f7708be 100644
--- a/content/web_test/renderer/web_ax_object_proxy.h
+++ b/content/web_test/renderer/web_ax_object_proxy.h
@@ -35,6 +35,10 @@
   static gin::WrapperInfo kWrapperInfo;
 
   WebAXObjectProxy(const blink::WebAXObject& object, Factory* factory);
+
+  WebAXObjectProxy(const WebAXObjectProxy&) = delete;
+  WebAXObjectProxy& operator=(const WebAXObjectProxy&) = delete;
+
   ~WebAXObjectProxy() override;
 
   // gin::Wrappable:
@@ -239,8 +243,6 @@
   Factory* factory_;
 
   v8::Persistent<v8::Function> notification_callback_;
-
-  DISALLOW_COPY_AND_ASSIGN(WebAXObjectProxy);
 };
 
 class RootWebAXObjectProxy : public WebAXObjectProxy {
diff --git a/content/web_test/renderer/web_frame_test_proxy.cc b/content/web_test/renderer/web_frame_test_proxy.cc
index 16b5f8b3..5db1be5 100644
--- a/content/web_test/renderer/web_frame_test_proxy.cc
+++ b/content/web_test/renderer/web_frame_test_proxy.cc
@@ -127,6 +127,9 @@
   TestRenderFrameObserver(RenderFrame* frame, TestRunner* test_runner)
       : RenderFrameObserver(frame), test_runner_(test_runner) {}
 
+  TestRenderFrameObserver(const TestRenderFrameObserver&) = delete;
+  TestRenderFrameObserver& operator=(const TestRenderFrameObserver&) = delete;
+
   ~TestRenderFrameObserver() override {}
 
  private:
@@ -221,7 +224,6 @@
   }
 
   TestRunner* const test_runner_;
-  DISALLOW_COPY_AND_ASSIGN(TestRenderFrameObserver);
 };
 
 }  // namespace
diff --git a/content/web_test/renderer/web_frame_test_proxy.h b/content/web_test/renderer/web_frame_test_proxy.h
index f1762cae..cb078567 100644
--- a/content/web_test/renderer/web_frame_test_proxy.h
+++ b/content/web_test/renderer/web_frame_test_proxy.h
@@ -37,6 +37,10 @@
  public:
   WebFrameTestProxy(RenderFrameImpl::CreateParams params,
                     TestRunner* test_runner);
+
+  WebFrameTestProxy(const WebFrameTestProxy&) = delete;
+  WebFrameTestProxy& operator=(const WebFrameTestProxy&) = delete;
+
   ~WebFrameTestProxy() override;
 
   // RenderFrameImpl overrides.
@@ -115,8 +119,6 @@
 
   mojo::AssociatedReceiver<mojom::WebTestRenderFrame>
       web_test_render_frame_receiver_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(WebFrameTestProxy);
 };
 
 }  // namespace content
diff --git a/content/web_test/renderer/web_test_render_thread_observer.h b/content/web_test/renderer/web_test_render_thread_observer.h
index ad756b8..f7ce6cf 100644
--- a/content/web_test/renderer/web_test_render_thread_observer.h
+++ b/content/web_test/renderer/web_test_render_thread_observer.h
@@ -22,6 +22,11 @@
   static WebTestRenderThreadObserver* GetInstance();
 
   WebTestRenderThreadObserver();
+
+  WebTestRenderThreadObserver(const WebTestRenderThreadObserver&) = delete;
+  WebTestRenderThreadObserver& operator=(const WebTestRenderThreadObserver&) =
+      delete;
+
   ~WebTestRenderThreadObserver() override;
 
   TestRunner* test_runner() const { return test_runner_.get(); }
@@ -49,8 +54,6 @@
   std::unique_ptr<TestRunner> test_runner_;
 
   mojo::AssociatedReceiver<mojom::WebTestRenderThread> receiver_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(WebTestRenderThreadObserver);
 };
 
 }  // namespace content
diff --git a/docs/clangd.md b/docs/clangd.md
index 8ec8b6be5..b4955d0 100644
--- a/docs/clangd.md
+++ b/docs/clangd.md
@@ -8,15 +8,17 @@
 
 ## Quick Start
 
-* **Googlers**: clangd weekly is available by default on glinux
-  (`/usr/bin/clangd`)
+* **Googlers**: clangd is available by default on glinux (`/usr/bin/clangd`)
 * Make sure generated ninja files are up-to-date
 * Optional: build chrome normally to get generated headers
 * Generate compilation database (note: it's not regenerated automatically):
 ```
 tools/clang/scripts/generate_compdb.py -p out/<build> > compile_commands.json
 ```
-* Indexing is enabled by default (since clangd 9)
+* Indexing is enabled by default (since clangd 9), note that this might consume
+  lots of CPU and RAM. There's also a
+  [remote-index service](https://github.com/clangd/chrome-remote-index/blob/main/docs/index.md)
+  to have an instant project-wide index without consuming local resources
 * Use clangd in your favourite editor
 
 ## Getting clangd
@@ -34,10 +36,10 @@
 
 If you prefer to build clangd locally, use the following command to build from
 LLVM source, and you will get the binary at
-`out/Release/tools/clang/third_party/llvm/build/bin/clangd`.
+`out/Default/tools/clang/third_party/llvm/build/bin/clangd`.
 
 ```
-tools/clang/scripts/build_clang_tools_extra.py --fetch out/Release clangd
+tools/clang/scripts/build_clang_tools_extra.py --fetch out/Default clangd
 ```
 
 ## Setting Up
@@ -45,14 +47,14 @@
 1. Make sure generated ninja files are up-to-date.
 
 ```
-gn gen out/Release
+gn gen out/Default
 ```
 
 2. Generate the compilation database, clangd needs it to know how to build a
 source file.
 
 ```
-tools/clang/scripts/generate_compdb.py -p out/Release > compile_commands.json
+tools/clang/scripts/generate_compdb.py -p out/Default > compile_commands.json
 ```
 
 Note: the compilation database is not regenerated automatically. You need to
@@ -64,7 +66,7 @@
 empty plain scalar" while parsing it).
 
 ```
-tools/clang/scripts/generate_compdb.py -p out/Release | out-file -encoding utf8 compile_commands.json
+tools/clang/scripts/generate_compdb.py -p out/Default | out-file -encoding utf8 compile_commands.json
 ```
 
 3. Optional: build chrome normally. This ensures generated headers exist and are
@@ -72,10 +74,14 @@
 inaccurate results for files which depend on generated headers.
 
 ```
-ninja -C out/Release chrome
+ninja -C out/Default chrome
 ```
 
-4. Use clangd in your favourite editor, see detailed [instructions](
+4. Optional: configure clangd to use remote-index service for an instant
+   project-wide index and reduced local CPU and RAM usage. See
+   [instructions](https://github.com/clangd/chrome-remote-index/blob/main/docs/index.md).
+
+5. Use clangd in your favourite editor, see detailed [instructions](
 https://clangd.llvm.org/installation.html#editor-plugins).
 
 ## Background Indexing
@@ -96,6 +102,13 @@
 a 48-core, 64GB machine). A full index of Chromium (including v8, blink) takes
 ~550 MB disk space and ~2.7 GB memory in clangd.
 
+Note: [Remote-index service](https://github.com/clangd/chrome-remote-index/blob/main/docs/index.md)
+replaces background-index with some downsides like being ~a day old (Clangd will
+still know about your changes in the current editing session) and not covering
+all configurations (not available for mac&windows specific code or non-main
+branches).
+
 ## Questions
 
-If you have any questions, reach out to clangd-dev@lists.llvm.org.
+If you have any questions, reach out to
+[clangd/clangd](https://github.com/clangd/clangd) or clangd-dev@lists.llvm.org.
diff --git a/headless/BUILD.gn b/headless/BUILD.gn
index d2e073e..186385e 100644
--- a/headless/BUILD.gn
+++ b/headless/BUILD.gn
@@ -720,14 +720,19 @@
     "test/headless_client_browsertest.cc",
     "test/headless_devtools_client_browsertest.cc",
     "test/headless_origin_trials_browsertest.cc",
-    "test/headless_policy_browsertest.cc",
-    "test/headless_policy_browsertest.h",
     "test/headless_test_launcher.cc",
     "test/headless_web_contents_browsertest.cc",
     "test/test_network_interceptor.cc",
     "test/test_network_interceptor.h",
   ]
 
+  if (headless_use_policy) {
+    sources += [
+      "test/headless_policy_browsertest.cc",
+      "test/headless_policy_browsertest.h",
+    ]
+  }
+
   # TODO(https://crbug.com/1107396): These tests flakily timeout on fuchsia.
   if (!is_fuchsia) {
     sources += [
diff --git a/ios/chrome/browser/policy/client_data_delegate_ios.cc b/ios/chrome/browser/policy/client_data_delegate_ios.cc
index bb07e66..3d3e0828 100644
--- a/ios/chrome/browser/policy/client_data_delegate_ios.cc
+++ b/ios/chrome/browser/policy/client_data_delegate_ios.cc
@@ -4,36 +4,17 @@
 
 #include "ios/chrome/browser/policy/client_data_delegate_ios.h"
 
-#include <utility>
-
-#include "base/bind.h"
-#include "base/callback.h"
-#include "base/system/sys_info.h"
 #include "components/policy/core/common/cloud/cloud_policy_util.h"
 #include "components/policy/proto/device_management_backend.pb.h"
 
 namespace policy {
 
-namespace {
-
-void SetHardwareInfo(enterprise_management::RegisterBrowserRequest* request,
-                     base::OnceClosure callback,
-                     base::SysInfo::HardwareInfo hardware_info) {
-  request->set_device_model(hardware_info.model);
-  request->set_brand_name(hardware_info.manufacturer);
-  std::move(callback).Run();
-}
-
-}  // namespace
-
 void ClientDataDelegateIos::FillRegisterBrowserRequest(
-    enterprise_management::RegisterBrowserRequest* request,
-    base::OnceClosure callback) const {
+    enterprise_management::RegisterBrowserRequest* request) const {
   request->set_os_platform(GetOSPlatform());
   request->set_os_version(GetOSVersion());
-
-  base::SysInfo::GetHardwareInfo(
-      base::BindOnce(&SetHardwareInfo, request, std::move(callback)));
+  request->set_device_model(GetDeviceModel());
+  request->set_brand_name(GetDeviceManufacturer());
 }
 
 }  // namespace policy
diff --git a/ios/chrome/browser/policy/client_data_delegate_ios.h b/ios/chrome/browser/policy/client_data_delegate_ios.h
index ceca305..a8c72ac 100644
--- a/ios/chrome/browser/policy/client_data_delegate_ios.h
+++ b/ios/chrome/browser/policy/client_data_delegate_ios.h
@@ -18,8 +18,7 @@
   ~ClientDataDelegateIos() override = default;
 
   void FillRegisterBrowserRequest(
-      enterprise_management::RegisterBrowserRequest* request,
-      base::OnceClosure callback) const override;
+      enterprise_management::RegisterBrowserRequest* request) const override;
 };
 
 }  // namespace policy
diff --git a/ios/chrome/browser/policy/client_data_delegate_ios_unittest.cc b/ios/chrome/browser/policy/client_data_delegate_ios_unittest.cc
index ee5ce37..397e620 100644
--- a/ios/chrome/browser/policy/client_data_delegate_ios_unittest.cc
+++ b/ios/chrome/browser/policy/client_data_delegate_ios_unittest.cc
@@ -4,12 +4,6 @@
 
 #include "ios/chrome/browser/policy/client_data_delegate_ios.h"
 
-#include <utility>
-
-#include "base/bind.h"
-#include "base/callback_helpers.h"
-#include "base/system/sys_info.h"
-#include "base/test/task_environment.h"
 #include "components/policy/core/common/cloud/cloud_policy_util.h"
 #include "components/policy/proto/device_management_backend.pb.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -17,23 +11,12 @@
 namespace policy {
 
 TEST(ClientDataDelegateIosTest, FillRegisterBrowserRequest) {
-  base::test::TaskEnvironment task_environment;
   ClientDataDelegateIos client_data_delegate;
   enterprise_management::RegisterBrowserRequest request;
-  client_data_delegate.FillRegisterBrowserRequest(&request, base::DoNothing());
-  task_environment.RunUntilIdle();
+  client_data_delegate.FillRegisterBrowserRequest(&request);
 
-  base::SysInfo::HardwareInfo hardware_info;
-  base::SysInfo::GetHardwareInfo(base::BindOnce(
-      [](base::SysInfo::HardwareInfo* target_info,
-         base::SysInfo::HardwareInfo info) { *target_info = std::move(info); },
-      &hardware_info));
-  task_environment.RunUntilIdle();
-
-  EXPECT_FALSE(request.device_model().empty());
-  EXPECT_EQ(request.device_model(), hardware_info.model);
-  EXPECT_FALSE(request.brand_name().empty());
-  EXPECT_EQ(request.brand_name(), hardware_info.manufacturer);
+  EXPECT_EQ(request.device_model(), GetDeviceModel());
+  EXPECT_EQ(request.brand_name(), GetDeviceManufacturer());
 
   // Fields that shouldn't be filled on iOS due to Privacy concerns.
   EXPECT_TRUE(request.machine_name().empty());
diff --git a/ios/chrome/browser/ui/ntp/discover_feed_preview/BUILD.gn b/ios/chrome/browser/ui/ntp/discover_feed_preview/BUILD.gn
index f723b802..b15ab49 100644
--- a/ios/chrome/browser/ui/ntp/discover_feed_preview/BUILD.gn
+++ b/ios/chrome/browser/ui/ntp/discover_feed_preview/BUILD.gn
@@ -34,6 +34,7 @@
     "discover_feed_preview_view_controller.mm",
   ]
   deps = [
+    ":constants",
     "//ios/chrome/browser/ui/util",
     "//ios/chrome/common/ui/colors",
     "//ios/third_party/material_components_ios",
@@ -41,3 +42,11 @@
   ]
   configs += [ "//build/config/compiler:enable_arc" ]
 }
+
+source_set("constants") {
+  sources = [
+    "discover_feed_preview_constants.h",
+    "discover_feed_preview_constants.mm",
+  ]
+  configs += [ "//build/config/compiler:enable_arc" ]
+}
diff --git a/ios/chrome/browser/ui/ntp/discover_feed_preview/discover_feed_preview_constants.h b/ios/chrome/browser/ui/ntp/discover_feed_preview/discover_feed_preview_constants.h
new file mode 100644
index 0000000..2b616b4d
--- /dev/null
+++ b/ios/chrome/browser/ui/ntp/discover_feed_preview/discover_feed_preview_constants.h
@@ -0,0 +1,22 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_UI_NTP_DISCOVER_FEED_PREVIEW_DISCOVER_FEED_PREVIEW_CONSTANTS_H_
+#define IOS_CHROME_BROWSER_UI_NTP_DISCOVER_FEED_PREVIEW_DISCOVER_FEED_PREVIEW_CONSTANTS_H_
+
+#import <Foundation/Foundation.h>
+
+// Accessibility ID for preview URL bar.
+extern NSString* const kPreviewURLBarIdentifier;
+
+// Accessibility ID for preview URL origin.
+extern NSString* const kPreviewOriginIdentifier;
+
+// Accessibility ID for preview progress bar.
+extern NSString* const kPreviewProgressBarIdentifier;
+
+// Accessibility ID for preview web state view.
+extern NSString* const kPreviewWebStateViewIdentifier;
+
+#endif  // IOS_CHROME_BROWSER_UI_NTP_DISCOVER_FEED_PREVIEW_DISCOVER_FEED_PREVIEW_CONSTANTS_H_
diff --git a/ios/chrome/browser/ui/ntp/discover_feed_preview/discover_feed_preview_constants.mm b/ios/chrome/browser/ui/ntp/discover_feed_preview/discover_feed_preview_constants.mm
new file mode 100644
index 0000000..f2d8921
--- /dev/null
+++ b/ios/chrome/browser/ui/ntp/discover_feed_preview/discover_feed_preview_constants.mm
@@ -0,0 +1,16 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/chrome/browser/ui/ntp/discover_feed_preview/discover_feed_preview_constants.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+NSString* const kPreviewURLBarIdentifier = @"kPreviewURLBarIdentifier";
+NSString* const kPreviewOriginIdentifier = @"kPreviewOriginIdentifier";
+NSString* const kPreviewProgressBarIdentifier =
+    @"kPreviewProgressBarIdentifier";
+NSString* const kPreviewWebStateViewIdentifier =
+    @"kPreviewWebStateViewIdentifier";
diff --git a/ios/chrome/browser/ui/ntp/discover_feed_preview/discover_feed_preview_view_controller.mm b/ios/chrome/browser/ui/ntp/discover_feed_preview/discover_feed_preview_view_controller.mm
index fed9253d..1576cd36 100644
--- a/ios/chrome/browser/ui/ntp/discover_feed_preview/discover_feed_preview_view_controller.mm
+++ b/ios/chrome/browser/ui/ntp/discover_feed_preview/discover_feed_preview_view_controller.mm
@@ -6,6 +6,7 @@
 
 #import <MaterialComponents/MaterialProgressView.h>
 
+#import "ios/chrome/browser/ui/ntp/discover_feed_preview/discover_feed_preview_constants.h"
 #import "ios/chrome/browser/ui/util/uikit_ui_util.h"
 #import "ios/chrome/common/ui/colors/semantic_color_names.h"
 #include "ui/gfx/ios/uikit_util.h"
@@ -60,10 +61,12 @@
       [UIFont preferredFontForTextStyle:UIFontTextStyleFootnote];
   self.URLBarLabel.textColor = [UIColor colorNamed:kTextSecondaryColor];
   self.URLBarLabel.translatesAutoresizingMaskIntoConstraints = NO;
+  self.URLBarLabel.accessibilityIdentifier = kPreviewOriginIdentifier;
 
   UIView* URLBarView = [[UIView alloc] init];
   URLBarView.backgroundColor = [UIColor colorNamed:kBackgroundColor];
   URLBarView.translatesAutoresizingMaskIntoConstraints = NO;
+  URLBarView.accessibilityIdentifier = kPreviewURLBarIdentifier;
 
   [URLBarView addSubview:self.URLBarLabel];
   [NSLayoutConstraint activateConstraints:@[
@@ -88,8 +91,10 @@
   self.progressBar = [[MDCProgressView alloc] init];
   self.progressBar.translatesAutoresizingMaskIntoConstraints = NO;
   self.progressBar.hidden = YES;
+  self.progressBar.accessibilityIdentifier = kPreviewProgressBarIdentifier;
 
   self.webStateView.translatesAutoresizingMaskIntoConstraints = NO;
+  self.webStateView.accessibilityIdentifier = kPreviewWebStateViewIdentifier;
 
   [self.view addSubview:URLBarView];
   [self.view addSubview:separator];
diff --git a/ios/showcase/BUILD.gn b/ios/showcase/BUILD.gn
index d5b729d..c2f4d02 100644
--- a/ios/showcase/BUILD.gn
+++ b/ios/showcase/BUILD.gn
@@ -34,6 +34,7 @@
     "//ios/showcase/bubble",
     "//ios/showcase/credential_provider",
     "//ios/showcase/default_browser",
+    "//ios/showcase/discover_feed_preview",
     "//ios/showcase/first_run",
     "//ios/showcase/incognito_reauth",
     "//ios/showcase/infobars",
@@ -83,6 +84,7 @@
     "//ios/showcase/core:eg2_tests",
     "//ios/showcase/credential_provider:eg2_tests",
     "//ios/showcase/default_browser:eg2_tests",
+    "//ios/showcase/discover_feed_preview:eg2_tests",
     "//ios/showcase/infobars:eg2_tests",
     "//ios/showcase/text_badge_view:eg2_tests",
   ]
diff --git a/ios/showcase/core/showcase_model.mm b/ios/showcase/core/showcase_model.mm
index 2e9e4b7..a81ee5a9 100644
--- a/ios/showcase/core/showcase_model.mm
+++ b/ios/showcase/core/showcase_model.mm
@@ -189,6 +189,11 @@
       kClassForInstantiationKey : @"SCFirstRunScrollingScreenCoordinator",
       showcase::kUseCaseKey : @"New FRE screen with scrolling example",
     },
+    @{
+      showcase::kClassForDisplayKey : @"DiscoverFeedPreviewViewController",
+      showcase::kClassForInstantiationKey : @"SCDiscoverFeedPreviewCoordinator",
+      showcase::kUseCaseKey : @"Link Preview",
+    },
   ];
   DCHECK(IsShowcaseModelValid(model));
   return model;
diff --git a/ios/showcase/discover_feed_preview/BUILD.gn b/ios/showcase/discover_feed_preview/BUILD.gn
new file mode 100644
index 0000000..dd35c62e
--- /dev/null
+++ b/ios/showcase/discover_feed_preview/BUILD.gn
@@ -0,0 +1,35 @@
+# Copyright 2021 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.
+
+source_set("discover_feed_preview") {
+  sources = [
+    "sc_discover_feed_preview_coordinator.h",
+    "sc_discover_feed_preview_coordinator.mm",
+  ]
+  deps = [
+    "//ios/chrome/browser/ui/ntp/discover_feed_preview:discover_feed_preview_ui",
+    "//ios/chrome/common/ui/util",
+    "//ios/showcase/common",
+  ]
+  frameworks = [ "UIKit.framework" ]
+  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 = [ "sc_discover_feed_preview_coordinator_egtest.mm" ]
+  deps = [
+    "//base",
+    "//ios/chrome/browser/ui/ntp/discover_feed_preview:constants",
+    "//ios/showcase/test:eg2_test",
+    "//ios/testing/earl_grey:eg_test_support+eg2",
+    "//ios/third_party/earl_grey2:test_lib",
+  ]
+  frameworks = [ "UIKit.framework" ]
+}
diff --git a/ios/showcase/discover_feed_preview/OWNERS b/ios/showcase/discover_feed_preview/OWNERS
new file mode 100644
index 0000000..43a61b3
--- /dev/null
+++ b/ios/showcase/discover_feed_preview/OWNERS
@@ -0,0 +1,2 @@
+sczs@chromium.org
+tinazwang@chromium.org
diff --git a/ios/showcase/discover_feed_preview/sc_discover_feed_preview_coordinator.h b/ios/showcase/discover_feed_preview/sc_discover_feed_preview_coordinator.h
new file mode 100644
index 0000000..70e5691
--- /dev/null
+++ b/ios/showcase/discover_feed_preview/sc_discover_feed_preview_coordinator.h
@@ -0,0 +1,15 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_SHOWCASE_DISCOVER_FEED_PREVIEW_SC_DISCOVER_FEED_PREVIEW_COORDINATOR_H_
+#define IOS_SHOWCASE_DISCOVER_FEED_PREVIEW_SC_DISCOVER_FEED_PREVIEW_COORDINATOR_H_
+
+#import <UIKit/UIKit.h>
+
+#import "ios/showcase/common/navigation_coordinator.h"
+
+@interface SCDiscoverFeedPreviewCoordinator : NSObject <NavigationCoordinator>
+@end
+
+#endif  // IOS_SHOWCASE_DISCOVER_FEED_PREVIEW_SC_DISCOVER_FEED_PREVIEW_COORDINATOR_H_
diff --git a/ios/showcase/discover_feed_preview/sc_discover_feed_preview_coordinator.mm b/ios/showcase/discover_feed_preview/sc_discover_feed_preview_coordinator.mm
new file mode 100644
index 0000000..8b96f27
--- /dev/null
+++ b/ios/showcase/discover_feed_preview/sc_discover_feed_preview_coordinator.mm
@@ -0,0 +1,62 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/showcase/discover_feed_preview/sc_discover_feed_preview_coordinator.h"
+
+#import "ios/chrome/browser/ui/ntp/discover_feed_preview/discover_feed_preview_view_controller.h"
+#import "ios/chrome/common/ui/util/constraints_ui_util.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+// The wrapper view controller that centers the preview so that the preview
+// won't be covered by the top bar of the showcase navigation view controller.
+@interface PreviewContainerViewController : UIViewController
+@end
+
+@implementation PreviewContainerViewController
+- (void)viewDidLoad {
+  [super viewDidLoad];
+
+  UIStackView* containerStack = [[UIStackView alloc] init];
+  containerStack.translatesAutoresizingMaskIntoConstraints = NO;
+  containerStack.axis = UILayoutConstraintAxisVertical;
+
+  DiscoverFeedPreviewViewController* previewViewController =
+      [[DiscoverFeedPreviewViewController alloc]
+          initWithView:[[UIView alloc] init]
+                origin:@"test.url"];
+
+  [self addChildViewController:previewViewController];
+  [containerStack addArrangedSubview:previewViewController.view];
+  [self didMoveToParentViewController:previewViewController];
+
+  [self.view addSubview:containerStack];
+  AddSameCenterConstraints(containerStack, self.view);
+  [NSLayoutConstraint activateConstraints:@[
+    [containerStack.widthAnchor constraintEqualToConstant:300],
+    [containerStack.heightAnchor constraintGreaterThanOrEqualToConstant:100]
+  ]];
+
+  UIView* containerView = self.view;
+  containerView.backgroundColor = [UIColor whiteColor];
+
+  // Set loading state to yes so the progress bar will be shown.
+  [previewViewController setLoadingState:YES];
+}
+
+@end
+
+@implementation SCDiscoverFeedPreviewCoordinator
+
+@synthesize baseViewController;
+
+- (void)start {
+  [self.baseViewController
+      pushViewController:[[PreviewContainerViewController alloc] init]
+                animated:YES];
+}
+
+@end
diff --git a/ios/showcase/discover_feed_preview/sc_discover_feed_preview_coordinator_egtest.mm b/ios/showcase/discover_feed_preview/sc_discover_feed_preview_coordinator_egtest.mm
new file mode 100644
index 0000000..89fe1a2
--- /dev/null
+++ b/ios/showcase/discover_feed_preview/sc_discover_feed_preview_coordinator_egtest.mm
@@ -0,0 +1,66 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/chrome/browser/ui/ntp/discover_feed_preview/discover_feed_preview_constants.h"
+#import "ios/showcase/test/showcase_eg_utils.h"
+#import "ios/showcase/test/showcase_test_case.h"
+#import "ios/testing/earl_grey/earl_grey_test.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+namespace {
+using ::showcase_utils::Open;
+using ::showcase_utils::Close;
+}
+
+// Tests for the discover feed preview.
+@interface SCDiscoverFeedPreviewTestCase : ShowcaseTestCase
+@end
+
+@implementation SCDiscoverFeedPreviewTestCase
+
+- (void)setUp {
+  [super setUp];
+  Open(@"Link Preview");
+}
+
+- (void)tearDown {
+  Close();
+  [super tearDown];
+}
+
+// Tests that the Discover Feed Preview is correctly displaying.
+- (void)testDiscoverFeedPreview {
+  // Check the URL bar is presented.
+  [[EarlGrey
+      selectElementWithMatcher:grey_allOf(grey_accessibilityID(
+                                              kPreviewURLBarIdentifier),
+                                          grey_sufficientlyVisible(), nil)]
+      assertWithMatcher:grey_sufficientlyVisible()];
+
+  // Check the origin is set correctly.
+  [[EarlGrey
+      selectElementWithMatcher:grey_allOf(grey_accessibilityID(
+                                              kPreviewOriginIdentifier),
+                                          grey_sufficientlyVisible(), nil)]
+      assertWithMatcher:grey_text(@"test.url")];
+
+  // Check the loading bar is presented.
+  [[EarlGrey
+      selectElementWithMatcher:grey_allOf(grey_accessibilityID(
+                                              kPreviewProgressBarIdentifier),
+                                          grey_sufficientlyVisible(), nil)]
+      assertWithMatcher:grey_sufficientlyVisible()];
+
+  // Check the page content view is presented.
+  [[EarlGrey
+      selectElementWithMatcher:grey_allOf(grey_accessibilityID(
+                                              kPreviewWebStateViewIdentifier),
+                                          grey_sufficientlyVisible(), nil)]
+      assertWithMatcher:grey_sufficientlyVisible()];
+}
+
+@end
diff --git a/net/quic/dedicated_web_transport_http3_client.cc b/net/quic/dedicated_web_transport_http3_client.cc
index f2d7df7..c0b28eb 100644
--- a/net/quic/dedicated_web_transport_http3_client.cc
+++ b/net/quic/dedicated_web_transport_http3_client.cc
@@ -217,12 +217,13 @@
 DedicatedWebTransportHttp3Client::~DedicatedWebTransportHttp3Client() = default;
 
 void DedicatedWebTransportHttp3Client::Connect() {
-  if (state_ != NEW || next_connect_state_ != CONNECT_STATE_NONE) {
+  if (state_ != WebTransportState::NEW ||
+      next_connect_state_ != CONNECT_STATE_NONE) {
     NOTREACHED();
     return;
   }
 
-  TransitionToState(CONNECTING);
+  TransitionToState(WebTransportState::CONNECTING);
   next_connect_state_ = CONNECT_STATE_INIT;
   DoLoop(OK);
 }
@@ -282,7 +283,7 @@
   if (rv == OK || rv == ERR_IO_PENDING)
     return;
   SetErrorIfNecessary(rv);
-  TransitionToState(FAILED);
+  TransitionToState(WebTransportState::FAILED);
 }
 
 int DedicatedWebTransportHttp3Client::DoInit() {
@@ -465,7 +466,7 @@
 
 void DedicatedWebTransportHttp3Client::OnConnectStreamClosed() {
   SetErrorIfNecessary(ERR_FAILED);
-  TransitionToState(FAILED);
+  TransitionToState(WebTransportState::FAILED);
 }
 
 int DedicatedWebTransportHttp3Client::DoSendRequest() {
@@ -505,7 +506,7 @@
     return ERR_METHOD_NOT_SUPPORTED;
   }
 
-  TransitionToState(CONNECTED);
+  TransitionToState(WebTransportState::CONNECTED);
   return OK;
 }
 
@@ -515,27 +516,27 @@
   const WebTransportState last_state = state_;
   state_ = next_state;
   switch (next_state) {
-    case CONNECTING:
-      DCHECK_EQ(last_state, NEW);
+    case WebTransportState::CONNECTING:
+      DCHECK_EQ(last_state, WebTransportState::NEW);
       break;
 
-    case CONNECTED:
-      DCHECK_EQ(last_state, CONNECTING);
+    case WebTransportState::CONNECTED:
+      DCHECK_EQ(last_state, WebTransportState::CONNECTING);
       visitor_->OnConnected(http_response_info_->headers);
       break;
 
-    case CLOSED:
-      DCHECK_EQ(last_state, CONNECTED);
+    case WebTransportState::CLOSED:
+      DCHECK_EQ(last_state, WebTransportState::CONNECTED);
       visitor_->OnClosed();
       break;
 
-    case FAILED:
+    case WebTransportState::FAILED:
       DCHECK(error_.has_value());
-      if (last_state == CONNECTING) {
+      if (last_state == WebTransportState::CONNECTING) {
         visitor_->OnConnectionFailed(*error_);
         break;
       }
-      DCHECK_EQ(last_state, CONNECTED);
+      DCHECK_EQ(last_state, WebTransportState::CONNECTED);
       visitor_->OnError(*error_);
       break;
 
@@ -651,21 +652,21 @@
   }
 
   if (error == quic::QUIC_NO_ERROR) {
-    TransitionToState(CLOSED);
+    TransitionToState(WebTransportState::CLOSED);
     return;
   }
 
   SetErrorIfNecessary(ERR_QUIC_PROTOCOL_ERROR, error, error_details);
 
-  if (state_ == CONNECTING) {
+  if (state_ == WebTransportState::CONNECTING) {
     DoLoop(OK);
     return;
   }
 
   // `state_` can be FAILED when the stream associated with a WebTransport
   // session is closed.
-  if (state_ != FAILED)
-    TransitionToState(FAILED);
+  if (state_ != WebTransportState::FAILED)
+    TransitionToState(WebTransportState::FAILED);
 }
 
 void DedicatedWebTransportHttp3Client::OnDatagramProcessed(
diff --git a/net/quic/dedicated_web_transport_http3_client.h b/net/quic/dedicated_web_transport_http3_client.h
index a156669..e287891 100644
--- a/net/quic/dedicated_web_transport_http3_client.h
+++ b/net/quic/dedicated_web_transport_http3_client.h
@@ -157,7 +157,7 @@
   std::unique_ptr<QuicChromiumAlarmFactory> alarm_factory_;
   quic::QuicCryptoClientConfig crypto_config_;
 
-  WebTransportState state_ = NEW;
+  WebTransportState state_ = WebTransportState::NEW;
   ConnectState next_connect_state_ = CONNECT_STATE_NONE;
   absl::optional<WebTransportError> error_;
   bool retried_with_new_version_ = false;
diff --git a/net/quic/web_transport_client.cc b/net/quic/web_transport_client.cc
index f5726355..3299be7 100644
--- a/net/quic/web_transport_client.cc
+++ b/net/quic/web_transport_client.cc
@@ -29,6 +29,30 @@
 };
 }  // namespace
 
+std::ostream& operator<<(std::ostream& os, WebTransportState state) {
+  switch (state) {
+    case WebTransportState::NEW:
+      os << "NEW";
+      break;
+    case WebTransportState::CONNECTING:
+      os << "CONNECTING";
+      break;
+    case WebTransportState::CONNECTED:
+      os << "CONNECTED";
+      break;
+    case WebTransportState::CLOSED:
+      os << "CLOSED";
+      break;
+    case WebTransportState::FAILED:
+      os << "FAILED";
+      break;
+    default:
+      os << "[" << static_cast<int>(state) << "]";
+      break;
+  }
+  return os;
+}
+
 WebTransportClientVisitor::~WebTransportClientVisitor() = default;
 
 WebTransportParameters::WebTransportParameters() = default;
diff --git a/net/quic/web_transport_client.h b/net/quic/web_transport_client.h
index 451fa474..962645c3 100644
--- a/net/quic/web_transport_client.h
+++ b/net/quic/web_transport_client.h
@@ -33,7 +33,7 @@
 // These values are logged to UMA. Entries should not be renumbered and
 // numeric values should never be reused. Please keep in sync with
 // "QuicTransportClientState" in src/tools/metrics/histograms/enums.xml.
-enum WebTransportState {
+enum class WebTransportState {
   // The client object has been created but Connect() has not been called.
   NEW,
   // Connection establishment is in progress.  No application data can be sent
@@ -51,6 +51,8 @@
   NUM_STATES,
 };
 
+NET_EXPORT std::ostream& operator<<(std::ostream& os, WebTransportState state);
+
 // A visitor that gets notified about events that happen to a WebTransport
 // client.
 class NET_EXPORT WebTransportClientVisitor {
diff --git a/net/websockets/websocket_end_to_end_test.cc b/net/websockets/websocket_end_to_end_test.cc
index 68c3953..fe15596f 100644
--- a/net/websockets/websocket_end_to_end_test.cc
+++ b/net/websockets/websocket_end_to_end_test.cc
@@ -36,7 +36,6 @@
 #include "net/base/host_port_pair.h"
 #include "net/base/ip_endpoint.h"
 #include "net/base/isolation_info.h"
-#include "net/base/load_flags.h"
 #include "net/base/net_errors.h"
 #include "net/base/proxy_delegate.h"
 #include "net/base/url_util.h"
@@ -51,8 +50,6 @@
 #include "net/proxy_resolution/proxy_config_service_fixed.h"
 #include "net/proxy_resolution/proxy_config_with_annotation.h"
 #include "net/proxy_resolution/proxy_info.h"
-#include "net/socket/socket_test_util.h"
-#include "net/test/cert_test_util.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
 #include "net/test/embedded_test_server/http_request.h"
 #include "net/test/embedded_test_server/http_response.h"
@@ -63,10 +60,8 @@
 #include "net/url_request/url_request.h"
 #include "net/url_request/url_request_context.h"
 #include "net/url_request/url_request_test_util.h"
-#include "net/url_request/websocket_handshake_userdata_key.h"
 #include "net/websockets/websocket_channel.h"
 #include "net/websockets/websocket_event_interface.h"
-#include "net/websockets/websocket_test_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "url/gurl.h"
 #include "url/origin.h"
@@ -83,6 +78,13 @@
 
 static const char kEchoServer[] = "echo-with-no-extension";
 
+// Simplify changing URL schemes.
+GURL ReplaceUrlScheme(const GURL& in_url, const base::StringPiece& scheme) {
+  GURL::Replacements replacements;
+  replacements.SetSchemeStr(scheme);
+  return in_url.ReplaceComponents(replacements);
+}
+
 // An implementation of WebSocketEventInterface that waits for and records the
 // results of the connect.
 class ConnectTestingEventInterface : public WebSocketEventInterface {
@@ -516,6 +518,81 @@
   EXPECT_FALSE(ConnectAndWait(ws_url));
 }
 
+// Regression test for crbug.com/455215 "HSTS not applied to WebSocket"
+TEST_F(WebSocketEndToEndTest, HstsHttpsToWebSocket) {
+  EmbeddedTestServer https_server(net::EmbeddedTestServer::Type::TYPE_HTTPS);
+  https_server.SetSSLConfig(
+      net::EmbeddedTestServer::CERT_COMMON_NAME_IS_DOMAIN);
+  https_server.ServeFilesFromSourceDirectory("net/data/url_request_unittest");
+
+  SpawnedTestServer::SSLOptions ssl_options(
+      SpawnedTestServer::SSLOptions::CERT_COMMON_NAME_IS_DOMAIN);
+  SpawnedTestServer wss_server(SpawnedTestServer::TYPE_WSS, ssl_options,
+                               GetWebSocketTestDataDirectory());
+
+  ASSERT_TRUE(https_server.Start());
+  ASSERT_TRUE(wss_server.Start());
+  InitialiseContext();
+  // Set HSTS via https:
+  TestDelegate delegate;
+  GURL https_page = https_server.GetURL("/hsts-headers.html");
+  std::unique_ptr<URLRequest> request(context_.CreateRequest(
+      https_page, DEFAULT_PRIORITY, &delegate, TRAFFIC_ANNOTATION_FOR_TESTS));
+  request->Start();
+  delegate.RunUntilComplete();
+  EXPECT_EQ(OK, delegate.request_status());
+
+  // Check HSTS with ws:
+  // Change the scheme from wss: to ws: to verify that it is switched back.
+  GURL ws_url = ReplaceUrlScheme(wss_server.GetURL(kEchoServer), "ws");
+  EXPECT_TRUE(ConnectAndWait(ws_url));
+}
+
+TEST_F(WebSocketEndToEndTest, HstsWebSocketToHttps) {
+  EmbeddedTestServer https_server(net::EmbeddedTestServer::Type::TYPE_HTTPS);
+  https_server.SetSSLConfig(
+      net::EmbeddedTestServer::CERT_COMMON_NAME_IS_DOMAIN);
+  https_server.ServeFilesFromSourceDirectory("net/data/url_request_unittest");
+
+  SpawnedTestServer::SSLOptions ssl_options(
+      SpawnedTestServer::SSLOptions::CERT_COMMON_NAME_IS_DOMAIN);
+  SpawnedTestServer wss_server(SpawnedTestServer::TYPE_WSS, ssl_options,
+                               GetWebSocketTestDataDirectory());
+  ASSERT_TRUE(https_server.Start());
+  ASSERT_TRUE(wss_server.Start());
+  InitialiseContext();
+  // Set HSTS via wss:
+  GURL wss_url = wss_server.GetURL("set-hsts");
+  EXPECT_TRUE(ConnectAndWait(wss_url));
+
+  // Verify via http:
+  TestDelegate delegate;
+  GURL http_page =
+      ReplaceUrlScheme(https_server.GetURL("/simple.html"), "http");
+  std::unique_ptr<URLRequest> request(context_.CreateRequest(
+      http_page, DEFAULT_PRIORITY, &delegate, TRAFFIC_ANNOTATION_FOR_TESTS));
+  request->Start();
+  delegate.RunUntilComplete();
+  EXPECT_EQ(OK, delegate.request_status());
+  EXPECT_TRUE(request->url().SchemeIs("https"));
+}
+
+TEST_F(WebSocketEndToEndTest, HstsWebSocketToWebSocket) {
+  SpawnedTestServer::SSLOptions ssl_options(
+      SpawnedTestServer::SSLOptions::CERT_COMMON_NAME_IS_DOMAIN);
+  SpawnedTestServer wss_server(SpawnedTestServer::TYPE_WSS, ssl_options,
+                               GetWebSocketTestDataDirectory());
+  ASSERT_TRUE(wss_server.Start());
+  InitialiseContext();
+  // Set HSTS via wss:
+  GURL wss_url = wss_server.GetURL("set-hsts");
+  EXPECT_TRUE(ConnectAndWait(wss_url));
+
+  // Verify via wss:
+  GURL ws_url = ReplaceUrlScheme(wss_server.GetURL(kEchoServer), "ws");
+  EXPECT_TRUE(ConnectAndWait(ws_url));
+}
+
 // Regression test for crbug.com/180504 "WebSocket handshake fails when HTTP
 // headers have trailing LWS".
 TEST_F(WebSocketEndToEndTest, TrailingWhitespace) {
@@ -546,19 +623,9 @@
             event_interface_->extensions());
 }
 
-// Test not compatible with Mac because SpawnedTestServer on Mac uses an
-// obsolete version of SSL.
-// TODO(crbug.com/1248530): Reenable when we have a wss test server that
-// supports non-obsolete SSL on Mac.
-#if defined(OS_MAC)
-#define MAYBE_DnsSchemeUpgradeSupported DISABLED_DnsSchemeUpgradeSupported
-#else
-#define MAYBE_DnsSchemeUpgradeSupported DnsSchemeUpgradeSupported
-#endif
-
 // Test that ws->wss scheme upgrade is supported on receiving a DNS HTTPS
 // record.
-TEST_F(WebSocketEndToEndTest, MAYBE_DnsSchemeUpgradeSupported) {
+TEST_F(WebSocketEndToEndTest, DnsSchemeUpgradeSupported) {
   base::test::ScopedFeatureList features;
   features.InitAndEnableFeatureWithParameters(
       features::kUseDnsHttpsSvcb, {{"UseDnsHttpsSvcbHttpUpgrade", "true"}});
@@ -590,163 +657,6 @@
   EXPECT_EQ(event_interface_->response()->url, wss_url);
 }
 
-// These are not true end-to-end tests as the SpawnedTestServer doesn't
-// support TLS 1.2.
-// TODO(crbug.com/1248530): Make these be true end-to-end tests again when
-// SpawnedTestServer supports TLS 1.2 or EmbeddedTestServer supports
-// WebSockets.
-class WebSocketHstsTest : public TestWithTaskEnvironment {
- protected:
-  WebSocketHstsTest() : context_(true) {
-    context_.set_client_socket_factory(&socket_factory_);
-    context_.Init();
-  }
-
-  void MakeHttpConnection(const GURL& url) {
-    // Set up SSL details, because otherwise HSTS headers aren't processed.
-    SSLSocketDataProvider ssl_socket_data(net::ASYNC, net::OK);
-    ssl_socket_data.ssl_info.cert =
-        ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem");
-    ssl_socket_data.ssl_info.is_issued_by_known_root = true;
-    ssl_socket_data.ssl_info.ct_policy_compliance =
-        ct::CTPolicyCompliance::CT_POLICY_COMPLIES_VIA_SCTS;
-    ssl_socket_data.ssl_info.cert_status = 0;
-    socket_factory_.AddSSLSocketDataProvider(&ssl_socket_data);
-
-    req_ = context_.CreateRequest(url, DEFAULT_PRIORITY, &delegate_,
-                                  TRAFFIC_ANNOTATION_FOR_TESTS,
-                                  /*is_for_websockets=*/false);
-
-    MockWrite writes[] = {
-        MockWrite("GET / HTTP/1.1\r\n"
-                  "Host: www.example.org\r\n"
-                  "Connection: keep-alive\r\n"
-                  "User-Agent: \r\n"
-                  "Accept-Encoding: gzip, deflate\r\n"
-                  "Accept-Language: en-us,fr\r\n\r\n")};
-    MockRead reads[] = {MockRead("HTTP/1.1 200 OK\r\n"
-                                 "Strict-Transport-Security: max-age=123; "
-                                 "includeSubdomains\r\n\r\n"),
-                        MockRead(ASYNC, 0)};
-
-    StaticSocketDataProvider data(reads, writes);
-    socket_factory_.AddSocketDataProvider(&data);
-
-    req_->Start();
-    base::RunLoop().RunUntilIdle();
-  }
-
-  void MakeWebsocketConnection(const GURL& url) {
-    // Set up SSL details, because otherwise HSTS headers aren't processed.
-    SSLSocketDataProvider ssl_socket_data(net::ASYNC, net::OK);
-    ssl_socket_data.ssl_info.cert =
-        ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem");
-    ssl_socket_data.ssl_info.is_issued_by_known_root = true;
-    ssl_socket_data.ssl_info.ct_policy_compliance =
-        ct::CTPolicyCompliance::CT_POLICY_COMPLIES_VIA_SCTS;
-    ssl_socket_data.ssl_info.cert_status = 0;
-    socket_factory_.AddSSLSocketDataProvider(&ssl_socket_data);
-
-    req_ = context_.CreateRequest(url, DEFAULT_PRIORITY, &delegate_,
-                                  TRAFFIC_ANNOTATION_FOR_TESTS,
-                                  /*is_for_websockets=*/true);
-
-    HttpRequestHeaders headers;
-    headers.SetHeader("Connection", "Upgrade");
-    headers.SetHeader("Upgrade", "websocket");
-    headers.SetHeader("Origin", "null");
-    headers.SetHeader("Sec-WebSocket-Version", "13");
-    req_->SetExtraRequestHeaders(headers);
-
-    MockWrite writes[] = {
-        MockWrite("GET / HTTP/1.1\r\n"
-                  "Host: www.example.org\r\n"
-                  "Connection: Upgrade\r\n"
-                  "Upgrade: websocket\r\n"
-                  "Origin: null\r\n"
-                  "Sec-WebSocket-Version: 13\r\n"
-                  "User-Agent: \r\n"
-                  "Accept-Encoding: gzip, deflate\r\n"
-                  "Accept-Language: en-us,fr\r\n"
-                  "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\n"
-                  "Sec-WebSocket-Extensions: permessage-deflate; "
-                  "client_max_window_bits\r\n\r\n")};
-    MockRead reads[] = {
-        MockRead("HTTP/1.1 101 Switching Protocols\r\n"
-                 "Upgrade: websocket\r\n"
-                 "Connection: Upgrade\r\n"
-                 "Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n"
-                 "Strict-Transport-Security: max-age=123; "
-                 "includeSubdomains\r\n\r\n"),
-        MockRead(ASYNC, 0)};
-
-    StaticSocketDataProvider data(reads, writes);
-    socket_factory_.AddSocketDataProvider(&data);
-
-    req_->SetUserData(
-        kWebSocketHandshakeUserDataKey,
-        std::make_unique<TestWebSocketHandshakeStreamCreateHelper>());
-    req_->SetLoadFlags(LOAD_DISABLE_CACHE);
-    req_->Start();
-    base::RunLoop().RunUntilIdle();
-  }
-
-  TestURLRequestContext context_;
-  MockClientSocketFactory socket_factory_;
-  TestDelegate delegate_;
-  std::unique_ptr<URLRequest> req_;
-};
-
-// Regression test for crbug.com/455215 "HSTS not applied to WebSocket"
-TEST_F(WebSocketHstsTest, HTTPSToWebSocket) {
-  // Set HSTS via https:
-  MakeHttpConnection(GURL("https://www.example.org"));
-  EXPECT_EQ(OK, delegate_.request_status());
-
-  ASSERT_TRUE(context_.transport_security_state()->ShouldUpgradeToSSL(
-      "www.example.org"));
-
-  // Check HSTS by starting a request over ws: and verifying that it gets
-  // ugpraded to wss:.
-  MakeWebsocketConnection(GURL("ws://www.example.org"));
-  EXPECT_EQ(OK, delegate_.request_status());
-  EXPECT_TRUE(delegate_.response_completed());
-  EXPECT_TRUE(req_->url().SchemeIs("wss"));
-}
-
-TEST_F(WebSocketHstsTest, WebSocketToHTTP) {
-  // Set HSTS via wss:
-  MakeWebsocketConnection(GURL("wss://www.example.org"));
-  EXPECT_EQ(OK, delegate_.request_status());
-  EXPECT_TRUE(delegate_.response_completed());
-
-  ASSERT_TRUE(context_.transport_security_state()->ShouldUpgradeToSSL(
-      "www.example.org"));
-
-  // Check HSTS by starting a request over http: and verifying that it gets
-  // ugpraded to https:.
-  MakeHttpConnection(GURL("http://www.example.org"));
-  EXPECT_EQ(OK, delegate_.request_status());
-  EXPECT_TRUE(req_->url().SchemeIs("https"));
-}
-
-TEST_F(WebSocketHstsTest, WebSocketToWebSocket) {
-  // Set HSTS via wss:
-  MakeWebsocketConnection(GURL("wss://www.example.org"));
-  EXPECT_EQ(OK, delegate_.request_status());
-  EXPECT_TRUE(delegate_.response_completed());
-
-  ASSERT_TRUE(context_.transport_security_state()->ShouldUpgradeToSSL(
-      "www.example.org"));
-
-  // Check HSTS by starting a request over ws: and verifying that it gets
-  // ugpraded to wss:.
-  MakeWebsocketConnection(GURL("ws://www.example.org"));
-  EXPECT_EQ(OK, delegate_.request_status());
-  EXPECT_TRUE(delegate_.response_completed());
-  EXPECT_TRUE(req_->url().SchemeIs("wss"));
-}
-
 }  // namespace
 
 }  // namespace net
diff --git a/printing/BUILD.gn b/printing/BUILD.gn
index a250fb5e..040e0c3 100644
--- a/printing/BUILD.gn
+++ b/printing/BUILD.gn
@@ -241,6 +241,7 @@
   public_deps = [
     "//printing",
     "//printing/backend:test_support",
+    "//printing/mojom",
     "//ui/gfx/geometry",
   ]
   deps = [
diff --git a/printing/emf_win_unittest.cc b/printing/emf_win_unittest.cc
index a1a6f03..e830a101 100644
--- a/printing/emf_win_unittest.cc
+++ b/printing/emf_win_unittest.cc
@@ -91,7 +91,7 @@
 
   // Initialize it.
   PrintingContextWin context(this);
-  EXPECT_EQ(PrintingContext::OK,
+  EXPECT_EQ(mojom::ResultCode::kSuccess,
             context.InitWithSettingsForTest(std::move(settings)));
 
   base::FilePath emf_file;
diff --git a/printing/printed_document_android.cc b/printing/printed_document_android.cc
index 33b4ec7..a9d26e0 100644
--- a/printing/printed_document_android.cc
+++ b/printing/printed_document_android.cc
@@ -4,19 +4,20 @@
 
 #include "printing/printed_document.h"
 
+#include "printing/mojom/print.mojom.h"
 #include "printing/printing_context_android.h"
 
 namespace printing {
 
 bool PrintedDocument::RenderPrintedDocument(PrintingContext* context) {
-  if (context->NewPage() != PrintingContext::OK)
+  if (context->NewPage() != mojom::ResultCode::kSuccess)
     return false;
   {
     base::AutoLock lock(lock_);
     const MetafilePlayer* metafile = GetMetafile();
     static_cast<PrintingContextAndroid*>(context)->PrintDocument(*metafile);
   }
-  return context->PageDone() == PrintingContext::OK;
+  return context->PageDone() == mojom::ResultCode::kSuccess;
 }
 
 }  // namespace printing
diff --git a/printing/printed_document_chromeos.cc b/printing/printed_document_chromeos.cc
index 224acd89..6e997c31 100644
--- a/printing/printed_document_chromeos.cc
+++ b/printing/printed_document_chromeos.cc
@@ -8,6 +8,7 @@
 
 #if defined(USE_CUPS)
 #include "printing/metafile.h"
+#include "printing/mojom/print.mojom.h"
 #include "printing/printing_context_chromeos.h"
 #endif
 
@@ -17,7 +18,7 @@
 #if defined(USE_CUPS)
   DCHECK(context);
 
-  if (context->NewPage() != PrintingContext::OK)
+  if (context->NewPage() != mojom::ResultCode::kSuccess)
     return false;
   {
     base::AutoLock lock(lock_);
@@ -30,7 +31,7 @@
       LOG(WARNING) << "Failed to read data from metafile";
     }
   }
-  return context->PageDone() == PrintingContext::OK;
+  return context->PageDone() == mojom::ResultCode::kSuccess;
 #else
   NOTREACHED();
   return false;
diff --git a/printing/printed_document_linux.cc b/printing/printed_document_linux.cc
index c2e2a5d..d6f59cd7 100644
--- a/printing/printed_document_linux.cc
+++ b/printing/printed_document_linux.cc
@@ -6,6 +6,7 @@
 
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
+#include "printing/mojom/print.mojom.h"
 #include "printing/printing_context_linux.h"
 
 #if defined(OS_ANDROID) || BUILDFLAG(IS_CHROMEOS_ASH)
@@ -15,14 +16,14 @@
 namespace printing {
 
 bool PrintedDocument::RenderPrintedDocument(PrintingContext* context) {
-  if (context->NewPage() != PrintingContext::OK)
+  if (context->NewPage() != mojom::ResultCode::kSuccess)
     return false;
   {
     base::AutoLock lock(lock_);
     const MetafilePlayer* metafile = GetMetafile();
     static_cast<PrintingContextLinux*>(context)->PrintDocument(*metafile);
   }
-  return context->PageDone() == PrintingContext::OK;
+  return context->PageDone() == mojom::ResultCode::kSuccess;
 }
 
 }  // namespace printing
diff --git a/printing/printed_document_mac.cc b/printing/printed_document_mac.cc
index 204a969..0f30d2e 100644
--- a/printing/printed_document_mac.cc
+++ b/printing/printed_document_mac.cc
@@ -29,11 +29,11 @@
   size_t num_pages = expected_page_count();
   for (size_t metafile_page_number = 1; metafile_page_number <= num_pages;
        metafile_page_number++) {
-    if (context->NewPage() != PrintingContext::OK)
+    if (context->NewPage() != mojom::ResultCode::kSuccess)
       return false;
     metafile->RenderPage(metafile_page_number, context->context(), paper_rect,
                          /*autorotate=*/true, /*fit_to_page=*/false);
-    if (context->PageDone() != PrintingContext::OK)
+    if (context->PageDone() != mojom::ResultCode::kSuccess)
       return false;
   }
   return true;
diff --git a/printing/printed_document_win.cc b/printing/printed_document_win.cc
index 8806e53..9ef78e3b 100644
--- a/printing/printed_document_win.cc
+++ b/printing/printed_document_win.cc
@@ -81,7 +81,7 @@
 }
 
 bool PrintedDocument::RenderPrintedDocument(PrintingContext* context) {
-  if (context->NewPage() != PrintingContext::OK)
+  if (context->NewPage() != mojom::ResultCode::kSuccess)
     return false;
 
   std::wstring device_name =
@@ -92,7 +92,7 @@
     static_cast<PrintingContextWin*>(context)->PrintDocument(
         device_name, *(static_cast<const MetafileSkia*>(metafile)));
   }
-  return context->PageDone() == PrintingContext::OK;
+  return context->PageDone() == mojom::ResultCode::kSuccess;
 }
 
 }  // namespace printing
diff --git a/printing/printing_context.cc b/printing/printing_context.cc
index 744c3ac..cdfb2e0 100644
--- a/printing/printing_context.cc
+++ b/printing/printing_context.cc
@@ -81,13 +81,14 @@
   return result;
 }
 
-PrintingContext::Result PrintingContext::OnError() {
-  Result result = abort_printing_ ? CANCEL : FAILED;
+mojom::ResultCode PrintingContext::OnError() {
+  mojom::ResultCode result = abort_printing_ ? mojom::ResultCode::kCanceled
+                                             : mojom::ResultCode::kFailed;
   ResetSettings();
   return result;
 }
 
-PrintingContext::Result PrintingContext::UsePdfSettings() {
+mojom::ResultCode PrintingContext::UsePdfSettings() {
   base::Value pdf_settings(base::Value::Type::DICTIONARY);
   pdf_settings.SetBoolKey(kSettingHeaderFooterEnabled, false);
   pdf_settings.SetBoolKey(kSettingShouldPrintBackgrounds, false);
@@ -113,7 +114,7 @@
   return UpdatePrintSettings(std::move(pdf_settings));
 }
 
-PrintingContext::Result PrintingContext::UpdatePrintSettings(
+mojom::ResultCode PrintingContext::UpdatePrintSettings(
     base::Value job_settings) {
   ResetSettings();
   {
@@ -157,7 +158,7 @@
           kCloudPrintMarginInch * settings_->device_units_per_inch());
     }
     settings_->SetPrinterPrintableArea(paper_size, paper_rect, true);
-    return OK;
+    return mojom::ResultCode::kSuccess;
   }
 
   return UpdatePrinterSettings(
@@ -167,7 +168,7 @@
 }
 
 #if defined(OS_CHROMEOS)
-PrintingContext::Result PrintingContext::UpdatePrintSettingsFromPOD(
+mojom::ResultCode PrintingContext::UpdatePrintSettingsFromPOD(
     std::unique_ptr<PrintSettings> job_settings) {
   ResetSettings();
   settings_ = std::move(job_settings);
diff --git a/printing/printing_context.h b/printing/printing_context.h
index 753bc1d..eac7da5 100644
--- a/printing/printing_context.h
+++ b/printing/printing_context.h
@@ -40,20 +40,13 @@
     virtual std::string GetAppLocale() = 0;
   };
 
-  // Tri-state result for user behavior-dependent functions.
-  enum Result {
-    OK,
-    CANCEL,
-    FAILED,
-  };
-
   PrintingContext(const PrintingContext&) = delete;
   PrintingContext& operator=(const PrintingContext&) = delete;
   virtual ~PrintingContext();
 
   // Callback of AskUserForSettings, used to notify the PrintJobWorker when
   // print settings are available.
-  using PrintSettingsCallback = base::OnceCallback<void(Result)>;
+  using PrintSettingsCallback = base::OnceCallback<void(mojom::ResultCode)>;
 
   // Asks the user what printer and format should be used to print. Updates the
   // context with the select device settings. The result of the call is returned
@@ -69,10 +62,10 @@
 
   // Selects the user's default printer and format. Updates the context with the
   // default device settings.
-  virtual Result UseDefaultSettings() = 0;
+  virtual mojom::ResultCode UseDefaultSettings() = 0;
 
   // Updates the context with PDF printer settings.
-  Result UsePdfSettings();
+  mojom::ResultCode UsePdfSettings();
 
   // Returns paper size to be used for PDF or Cloud Print in device units.
   virtual gfx::Size GetPdfPaperSizeDeviceUnits() = 0;
@@ -80,17 +73,17 @@
   // Updates printer settings.
   // `external_preview` is true if pdf is going to be opened in external
   // preview. Used by MacOS only now to open Preview.app.
-  virtual Result UpdatePrinterSettings(bool external_preview,
-                                       bool show_system_dialog,
-                                       int page_count) = 0;
+  virtual mojom::ResultCode UpdatePrinterSettings(bool external_preview,
+                                                  bool show_system_dialog,
+                                                  int page_count) = 0;
 
   // Updates Print Settings. `job_settings` contains all print job
   // settings information.
-  Result UpdatePrintSettings(base::Value job_settings);
+  mojom::ResultCode UpdatePrintSettings(base::Value job_settings);
 
 #if defined(OS_CHROMEOS)
   // Updates Print Settings.
-  Result UpdatePrintSettingsFromPOD(
+  mojom::ResultCode UpdatePrintSettingsFromPOD(
       std::unique_ptr<PrintSettings> job_settings);
 #endif
 
@@ -104,17 +97,18 @@
   // like IPC message processing! Some printers have side-effects on this call
   // like virtual printers that ask the user for the path of the saved document;
   // for example a PDF printer.
-  virtual Result NewDocument(const std::u16string& document_name) = 0;
+  virtual mojom::ResultCode NewDocument(
+      const std::u16string& document_name) = 0;
 
   // Starts a new page.
-  virtual Result NewPage() = 0;
+  virtual mojom::ResultCode NewPage() = 0;
 
   // Closes the printed page.
-  virtual Result PageDone() = 0;
+  virtual mojom::ResultCode PageDone() = 0;
 
   // Closes the printing job. After this call the object is ready to start a new
   // document.
-  virtual Result DocumentDone() = 0;
+  virtual mojom::ResultCode DocumentDone() = 0;
 
   // Cancels printing. Can be used in a multi-threaded context. Takes effect
   // immediately.
@@ -128,7 +122,7 @@
 
 #if defined(OS_WIN)
   // Initializes with predefined settings.
-  virtual Result InitWithSettingsForTest(
+  virtual mojom::ResultCode InitWithSettingsForTest(
       std::unique_ptr<PrintSettings> settings) = 0;
 #endif
 
@@ -160,7 +154,7 @@
   void ResetSettings();
 
   // Does bookkeeping when an error occurs.
-  PrintingContext::Result OnError();
+  mojom::ResultCode OnError();
 
   // Complete print context settings.
   std::unique_ptr<PrintSettings> settings_;
diff --git a/printing/printing_context_android.cc b/printing/printing_context_android.cc
index 079722a..c91b80c 100644
--- a/printing/printing_context_android.cc
+++ b/printing/printing_context_android.cc
@@ -18,6 +18,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/values.h"
 #include "printing/metafile.h"
+#include "printing/mojom/print.mojom.h"
 #include "printing/print_job_constants.h"
 #include "printing/printing_jni_headers/PrintingContext_jni.h"
 #include "printing/units.h"
@@ -117,8 +118,8 @@
     jboolean success) {
   DCHECK(callback_);
   if (!success) {
-    // TODO(cimamoglu): Differentiate between FAILED And CANCEL.
-    std::move(callback_).Run(FAILED);
+    // TODO(cimamoglu): Differentiate between `kFailed` And `kCancel`.
+    std::move(callback_).Run(mojom::ResultCode::kFailed);
     return;
   }
 
@@ -145,7 +146,7 @@
   height = ConvertUnit(height, kMilsPerInch, dpi);
   SetSizes(settings_.get(), dpi, width, height);
 
-  std::move(callback_).Run(OK);
+  std::move(callback_).Run(mojom::ResultCode::kSuccess);
 }
 
 void PrintingContextAndroid::ShowSystemDialogDone(
@@ -153,7 +154,7 @@
     const JavaParamRef<jobject>& obj) {
   DCHECK(callback_);
   // Settings are not updated, callback is called only to unblock javascript.
-  std::move(callback_).Run(CANCEL);
+  std::move(callback_).Run(mojom::ResultCode::kCanceled);
 }
 
 void PrintingContextAndroid::PrintDocument(const MetafilePlayer& metafile) {
@@ -162,7 +163,7 @@
   metafile.SaveToFileDescriptor(fd_);
 }
 
-PrintingContext::Result PrintingContextAndroid::UseDefaultSettings() {
+mojom::ResultCode PrintingContextAndroid::UseDefaultSettings() {
   DCHECK(!in_print_job_);
 
   ResetSettings();
@@ -170,7 +171,7 @@
   gfx::Size physical_size = GetPdfPaperSizeDeviceUnits();
   SetSizes(settings_.get(), kDefaultPdfDpi, physical_size.width(),
            physical_size.height());
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
 gfx::Size PrintingContextAndroid::GetPdfPaperSizeDeviceUnits() {
@@ -198,7 +199,7 @@
   return gfx::Size(width, height);
 }
 
-PrintingContext::Result PrintingContextAndroid::UpdatePrinterSettings(
+mojom::ResultCode PrintingContextAndroid::UpdatePrinterSettings(
     bool external_preview,
     bool show_system_dialog,
     int page_count) {
@@ -207,44 +208,44 @@
 
   // Intentional No-op.
 
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
-PrintingContext::Result PrintingContextAndroid::NewDocument(
+mojom::ResultCode PrintingContextAndroid::NewDocument(
     const std::u16string& document_name) {
   DCHECK(!in_print_job_);
   in_print_job_ = true;
 
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
-PrintingContext::Result PrintingContextAndroid::NewPage() {
+mojom::ResultCode PrintingContextAndroid::NewPage() {
   if (abort_printing_)
-    return CANCEL;
+    return mojom::ResultCode::kCanceled;
   DCHECK(in_print_job_);
 
   // Intentional No-op.
 
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
-PrintingContext::Result PrintingContextAndroid::PageDone() {
+mojom::ResultCode PrintingContextAndroid::PageDone() {
   if (abort_printing_)
-    return CANCEL;
+    return mojom::ResultCode::kCanceled;
   DCHECK(in_print_job_);
 
   // Intentional No-op.
 
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
-PrintingContext::Result PrintingContextAndroid::DocumentDone() {
+mojom::ResultCode PrintingContextAndroid::DocumentDone() {
   if (abort_printing_)
-    return CANCEL;
+    return mojom::ResultCode::kCanceled;
   DCHECK(in_print_job_);
 
   ResetSettings();
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
 void PrintingContextAndroid::Cancel() {
diff --git a/printing/printing_context_android.h b/printing/printing_context_android.h
index 9fbeed6..34dbc5bb1 100644
--- a/printing/printing_context_android.h
+++ b/printing/printing_context_android.h
@@ -9,6 +9,7 @@
 
 #include "base/android/scoped_java_ref.h"
 #include "base/file_descriptor_posix.h"
+#include "printing/mojom/print.mojom.h"
 #include "printing/printing_context.h"
 
 namespace ui {
@@ -59,15 +60,15 @@
                           bool has_selection,
                           bool is_scripted,
                           PrintSettingsCallback callback) override;
-  Result UseDefaultSettings() override;
+  mojom::ResultCode UseDefaultSettings() override;
   gfx::Size GetPdfPaperSizeDeviceUnits() override;
-  Result UpdatePrinterSettings(bool external_preview,
-                               bool show_system_dialog,
-                               int page_count) override;
-  Result NewDocument(const std::u16string& document_name) override;
-  Result NewPage() override;
-  Result PageDone() override;
-  Result DocumentDone() override;
+  mojom::ResultCode UpdatePrinterSettings(bool external_preview,
+                                          bool show_system_dialog,
+                                          int page_count) override;
+  mojom::ResultCode NewDocument(const std::u16string& document_name) override;
+  mojom::ResultCode NewPage() override;
+  mojom::ResultCode PageDone() override;
+  mojom::ResultCode DocumentDone() override;
   void Cancel() override;
   void ReleaseContext() override;
   printing::NativeDrawingContext context() const override;
diff --git a/printing/printing_context_chromeos.cc b/printing/printing_context_chromeos.cc
index 2800993..0faf418 100644
--- a/printing/printing_context_chromeos.cc
+++ b/printing/printing_context_chromeos.cc
@@ -281,7 +281,7 @@
   NOTREACHED();
 }
 
-PrintingContext::Result PrintingContextChromeos::UseDefaultSettings() {
+mojom::ResultCode PrintingContextChromeos::UseDefaultSettings() {
   DCHECK(!in_print_job_);
 
   ResetSettings();
@@ -298,7 +298,7 @@
   }
 
   // Retrieve device information and set it
-  if (InitializeDevice(device_name) != OK) {
+  if (InitializeDevice(device_name) != mojom::ResultCode::kSuccess) {
     LOG(ERROR) << "Could not initialize printer";
     return OnError();
   }
@@ -316,7 +316,7 @@
       printer_->GetMediaMarginsByName(paper.vendor_id);
   SetPrintableArea(settings_.get(), media, margins, true /* flip landscape */);
 
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
 gfx::Size PrintingContextChromeos::GetPdfPaperSizeDeviceUnits() {
@@ -343,14 +343,16 @@
   return gfx::Size(width, height);
 }
 
-PrintingContext::Result PrintingContextChromeos::UpdatePrinterSettings(
+mojom::ResultCode PrintingContextChromeos::UpdatePrinterSettings(
     bool external_preview,
     bool show_system_dialog,
     int page_count) {
   DCHECK(!show_system_dialog);
 
-  if (InitializeDevice(base::UTF16ToUTF8(settings_->device_name())) != OK)
+  if (InitializeDevice(base::UTF16ToUTF8(settings_->device_name())) !=
+      mojom::ResultCode::kSuccess) {
     return OnError();
+  }
 
   // TODO(skau): Convert to DCHECK when https://crbug.com/613779 is resolved
   // Print quality suffers when this is set to the resolution reported by the
@@ -384,10 +386,10 @@
                                                 : kUsernamePlaceholder;
   }
 
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
-PrintingContext::Result PrintingContextChromeos::InitializeDevice(
+mojom::ResultCode PrintingContextChromeos::InitializeDevice(
     const std::string& device) {
   DCHECK(!in_print_job_);
 
@@ -399,10 +401,10 @@
 
   printer_ = std::move(printer);
 
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
-PrintingContext::Result PrintingContextChromeos::NewDocument(
+mojom::ResultCode PrintingContextChromeos::NewDocument(
     const std::u16string& document_name) {
   DCHECK(!in_print_job_);
   in_print_job_ = true;
@@ -441,34 +443,34 @@
     return OnError();
   }
 
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
-PrintingContext::Result PrintingContextChromeos::NewPage() {
+mojom::ResultCode PrintingContextChromeos::NewPage() {
   if (abort_printing_)
-    return CANCEL;
+    return mojom::ResultCode::kCanceled;
 
   DCHECK(in_print_job_);
 
   // Intentional No-op.
 
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
-PrintingContext::Result PrintingContextChromeos::PageDone() {
+mojom::ResultCode PrintingContextChromeos::PageDone() {
   if (abort_printing_)
-    return CANCEL;
+    return mojom::ResultCode::kCanceled;
 
   DCHECK(in_print_job_);
 
   // Intentional No-op.
 
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
-PrintingContext::Result PrintingContextChromeos::DocumentDone() {
+mojom::ResultCode PrintingContextChromeos::DocumentDone() {
   if (abort_printing_)
-    return CANCEL;
+    return mojom::ResultCode::kCanceled;
 
   DCHECK(in_print_job_);
 
@@ -486,7 +488,7 @@
   }
 
   ResetSettings();
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
 void PrintingContextChromeos::Cancel() {
@@ -503,10 +505,10 @@
   return nullptr;
 }
 
-PrintingContext::Result PrintingContextChromeos::StreamData(
+mojom::ResultCode PrintingContextChromeos::StreamData(
     const std::vector<char>& buffer) {
   if (abort_printing_)
-    return CANCEL;
+    return mojom::ResultCode::kCanceled;
 
   DCHECK(in_print_job_);
   DCHECK(printer_);
@@ -514,7 +516,7 @@
   if (!printer_->StreamData(buffer))
     return OnError();
 
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
 }  // namespace printing
diff --git a/printing/printing_context_chromeos.h b/printing/printing_context_chromeos.h
index 61b256c..4bd4c05 100644
--- a/printing/printing_context_chromeos.h
+++ b/printing/printing_context_chromeos.h
@@ -12,6 +12,7 @@
 #include "printing/backend/cups_connection.h"
 #include "printing/backend/cups_deleters.h"
 #include "printing/backend/cups_printer.h"
+#include "printing/mojom/print.mojom.h"
 #include "printing/printing_context.h"
 
 namespace printing {
@@ -33,20 +34,20 @@
                           bool has_selection,
                           bool is_scripted,
                           PrintSettingsCallback callback) override;
-  Result UseDefaultSettings() override;
+  mojom::ResultCode UseDefaultSettings() override;
   gfx::Size GetPdfPaperSizeDeviceUnits() override;
-  Result UpdatePrinterSettings(bool external_preview,
-                               bool show_system_dialog,
-                               int page_count) override;
-  Result NewDocument(const std::u16string& document_name) override;
-  Result NewPage() override;
-  Result PageDone() override;
-  Result DocumentDone() override;
+  mojom::ResultCode UpdatePrinterSettings(bool external_preview,
+                                          bool show_system_dialog,
+                                          int page_count) override;
+  mojom::ResultCode NewDocument(const std::u16string& document_name) override;
+  mojom::ResultCode NewPage() override;
+  mojom::ResultCode PageDone() override;
+  mojom::ResultCode DocumentDone() override;
   void Cancel() override;
   void ReleaseContext() override;
   printing::NativeDrawingContext context() const override;
 
-  Result StreamData(const std::vector<char>& buffer);
+  mojom::ResultCode StreamData(const std::vector<char>& buffer);
 
  private:
   // For testing. Use CreateForTesting() to create.
@@ -54,7 +55,7 @@
                           std::unique_ptr<CupsConnection> connection);
 
   // Lazily initializes `printer_`.
-  Result InitializeDevice(const std::string& device);
+  mojom::ResultCode InitializeDevice(const std::string& device);
 
   const std::unique_ptr<CupsConnection> connection_;
   std::unique_ptr<CupsPrinter> printer_;
diff --git a/printing/printing_context_linux.cc b/printing/printing_context_linux.cc
index 4af3ccdd..2d3458c7 100644
--- a/printing/printing_context_linux.cc
+++ b/printing/printing_context_linux.cc
@@ -11,6 +11,7 @@
 #include "base/notreached.h"
 #include "base/values.h"
 #include "printing/metafile.h"
+#include "printing/mojom/print.mojom.h"
 #include "printing/print_dialog_gtk_interface.h"
 #include "printing/print_job_constants.h"
 #include "printing/units.h"
@@ -75,7 +76,7 @@
     // Can only get here if the renderer is sending bad messages.
     // http://crbug.com/341777
     NOTREACHED();
-    std::move(callback).Run(FAILED);
+    std::move(callback).Run(mojom::ResultCode::kFailed);
     return;
   }
 
@@ -83,13 +84,13 @@
                             std::move(callback));
 }
 
-PrintingContext::Result PrintingContextLinux::UseDefaultSettings() {
+mojom::ResultCode PrintingContextLinux::UseDefaultSettings() {
   DCHECK(!in_print_job_);
 
   ResetSettings();
 
   if (!create_dialog_func_)
-    return OK;
+    return mojom::ResultCode::kSuccess;
 
   if (!print_dialog_) {
     print_dialog_ = create_dialog_func_(this);
@@ -97,7 +98,7 @@
   }
   print_dialog_->UseDefaultSettings();
 
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
 gfx::Size PrintingContextLinux::GetPdfPaperSizeDeviceUnits() {
@@ -107,7 +108,7 @@
   return gfx::Size();
 }
 
-PrintingContext::Result PrintingContextLinux::UpdatePrinterSettings(
+mojom::ResultCode PrintingContextLinux::UpdatePrinterSettings(
     bool external_preview,
     bool show_system_dialog,
     int page_count) {
@@ -116,7 +117,7 @@
   DCHECK(!external_preview) << "Not implemented";
 
   if (!create_dialog_func_)
-    return OK;
+    return mojom::ResultCode::kSuccess;
 
   if (!print_dialog_) {
     print_dialog_ = create_dialog_func_(this);
@@ -128,7 +129,7 @@
   print_dialog_->UpdateSettings(std::move(settings_));
   DCHECK(settings_);
 
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
 void PrintingContextLinux::InitWithSettings(
@@ -138,43 +139,43 @@
   settings_ = std::move(settings);
 }
 
-PrintingContext::Result PrintingContextLinux::NewDocument(
+mojom::ResultCode PrintingContextLinux::NewDocument(
     const std::u16string& document_name) {
   DCHECK(!in_print_job_);
   in_print_job_ = true;
 
   document_name_ = document_name;
 
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
-PrintingContext::Result PrintingContextLinux::NewPage() {
+mojom::ResultCode PrintingContextLinux::NewPage() {
   if (abort_printing_)
-    return CANCEL;
+    return mojom::ResultCode::kCanceled;
   DCHECK(in_print_job_);
 
   // Intentional No-op.
 
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
-PrintingContext::Result PrintingContextLinux::PageDone() {
+mojom::ResultCode PrintingContextLinux::PageDone() {
   if (abort_printing_)
-    return CANCEL;
+    return mojom::ResultCode::kCanceled;
   DCHECK(in_print_job_);
 
   // Intentional No-op.
 
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
-PrintingContext::Result PrintingContextLinux::DocumentDone() {
+mojom::ResultCode PrintingContextLinux::DocumentDone() {
   if (abort_printing_)
-    return CANCEL;
+    return mojom::ResultCode::kCanceled;
   DCHECK(in_print_job_);
 
   ResetSettings();
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
 void PrintingContextLinux::Cancel() {
diff --git a/printing/printing_context_linux.h b/printing/printing_context_linux.h
index 88c8c54..3d6df6cc 100644
--- a/printing/printing_context_linux.h
+++ b/printing/printing_context_linux.h
@@ -8,6 +8,7 @@
 #include <memory>
 #include <string>
 
+#include "printing/mojom/print.mojom.h"
 #include "printing/printing_context.h"
 
 namespace printing {
@@ -43,14 +44,14 @@
                           bool is_scripted,
                           PrintSettingsCallback callback) override;
   gfx::Size GetPdfPaperSizeDeviceUnits() override;
-  Result UseDefaultSettings() override;
-  Result UpdatePrinterSettings(bool external_preview,
-                               bool show_system_dialog,
-                               int page_count) override;
-  Result NewDocument(const std::u16string& document_name) override;
-  Result NewPage() override;
-  Result PageDone() override;
-  Result DocumentDone() override;
+  mojom::ResultCode UseDefaultSettings() override;
+  mojom::ResultCode UpdatePrinterSettings(bool external_preview,
+                                          bool show_system_dialog,
+                                          int page_count) override;
+  mojom::ResultCode NewDocument(const std::u16string& document_name) override;
+  mojom::ResultCode NewPage() override;
+  mojom::ResultCode PageDone() override;
+  mojom::ResultCode DocumentDone() override;
   void Cancel() override;
   void ReleaseContext() override;
   printing::NativeDrawingContext context() const override;
diff --git a/printing/printing_context_mac.h b/printing/printing_context_mac.h
index 0fb5c91..7fde07c7 100644
--- a/printing/printing_context_mac.h
+++ b/printing/printing_context_mac.h
@@ -30,15 +30,15 @@
                           bool has_selection,
                           bool is_scripted,
                           PrintSettingsCallback callback) override;
-  Result UseDefaultSettings() override;
+  mojom::ResultCode UseDefaultSettings() override;
   gfx::Size GetPdfPaperSizeDeviceUnits() override;
-  Result UpdatePrinterSettings(bool external_preview,
-                               bool show_system_dialog,
-                               int page_count) override;
-  Result NewDocument(const std::u16string& document_name) override;
-  Result NewPage() override;
-  Result PageDone() override;
-  Result DocumentDone() override;
+  mojom::ResultCode UpdatePrinterSettings(bool external_preview,
+                                          bool show_system_dialog,
+                                          int page_count) override;
+  mojom::ResultCode NewDocument(const std::u16string& document_name) override;
+  mojom::ResultCode NewPage() override;
+  mojom::ResultCode PageDone() override;
+  mojom::ResultCode DocumentDone() override;
   void Cancel() override;
   void ReleaseContext() override;
   printing::NativeDrawingContext context() const override;
diff --git a/printing/printing_context_mac.mm b/printing/printing_context_mac.mm
index dfa69dfe..dd9bb77 100644
--- a/printing/printing_context_mac.mm
+++ b/printing/printing_context_mac.mm
@@ -17,6 +17,7 @@
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/values.h"
+#include "printing/mojom/print.mojom.h"
 #include "printing/print_settings_initializer_mac.h"
 #include "printing/printing_features.h"
 #include "printing/units.h"
@@ -134,9 +135,9 @@
         print_info_.reset([[panel printInfo] retain]);
         settings_->set_ranges(GetPageRangesFromPrintInfo());
         InitPrintSettingsFromPrintInfo();
-        std::move(block_callback).Run(OK);
+        std::move(block_callback).Run(mojom::ResultCode::kSuccess);
       } else {
-        std::move(block_callback).Run(CANCEL);
+        std::move(block_callback).Run(mojom::ResultCode::kCanceled);
       }
     }];
   }
@@ -160,17 +161,17 @@
   return physical_size_device_units;
 }
 
-PrintingContext::Result PrintingContextMac::UseDefaultSettings() {
+mojom::ResultCode PrintingContextMac::UseDefaultSettings() {
   DCHECK(!in_print_job_);
 
   print_info_.reset([[NSPrintInfo sharedPrintInfo] copy]);
   settings_->set_ranges(GetPageRangesFromPrintInfo());
   InitPrintSettingsFromPrintInfo();
 
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
-PrintingContext::Result PrintingContextMac::UpdatePrinterSettings(
+mojom::ResultCode PrintingContextMac::UpdatePrinterSettings(
     bool external_preview,
     bool show_system_dialog,
     int page_count) {
@@ -204,7 +205,7 @@
   [print_info_.get() updateFromPMPrintSettings];
 
   InitPrintSettingsFromPrintInfo();
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
 bool PrintingContextMac::SetPrintPreviewJob() {
@@ -494,7 +495,7 @@
   return page_ranges;
 }
 
-PrintingContext::Result PrintingContextMac::NewDocument(
+mojom::ResultCode PrintingContextMac::NewDocument(
     const std::u16string& document_name) {
   DCHECK(!in_print_job_);
 
@@ -516,12 +517,12 @@
   if (status != noErr)
     return OnError();
 
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
-PrintingContext::Result PrintingContextMac::NewPage() {
+mojom::ResultCode PrintingContextMac::NewPage() {
   if (abort_printing_)
-    return CANCEL;
+    return mojom::ResultCode::kCanceled;
   DCHECK(in_print_job_);
   DCHECK(!context_);
 
@@ -537,12 +538,12 @@
   if (status != noErr)
     return OnError();
 
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
-PrintingContext::Result PrintingContextMac::PageDone() {
+mojom::ResultCode PrintingContextMac::PageDone() {
   if (abort_printing_)
-    return CANCEL;
+    return mojom::ResultCode::kCanceled;
   DCHECK(in_print_job_);
   DCHECK(context_);
 
@@ -553,12 +554,12 @@
     OnError();
   context_ = nullptr;
 
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
-PrintingContext::Result PrintingContextMac::DocumentDone() {
+mojom::ResultCode PrintingContextMac::DocumentDone() {
   if (abort_printing_)
-    return CANCEL;
+    return mojom::ResultCode::kCanceled;
   DCHECK(in_print_job_);
 
   PMPrintSession print_session =
@@ -568,7 +569,7 @@
     OnError();
 
   ResetSettings();
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
 void PrintingContextMac::Cancel() {
diff --git a/printing/printing_context_no_system_dialog.cc b/printing/printing_context_no_system_dialog.cc
index 59a943b..9e655e55 100644
--- a/printing/printing_context_no_system_dialog.cc
+++ b/printing/printing_context_no_system_dialog.cc
@@ -39,10 +39,10 @@
     bool is_scripted,
     PrintSettingsCallback callback) {
   // We don't want to bring up a dialog here.  Ever.  Just signal the callback.
-  std::move(callback).Run(OK);
+  std::move(callback).Run(mojom::ResultCode::kSuccess);
 }
 
-PrintingContext::Result PrintingContextNoSystemDialog::UseDefaultSettings() {
+mojom::ResultCode PrintingContextNoSystemDialog::UseDefaultSettings() {
   DCHECK(!in_print_job_);
 
   ResetSettings();
@@ -52,7 +52,7 @@
   gfx::Rect printable_area(0, 0, physical_size.width(), physical_size.height());
   DCHECK_EQ(settings_->device_units_per_inch(), kDefaultPdfDpi);
   settings_->SetPrinterPrintableArea(physical_size, printable_area, true);
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
 gfx::Size PrintingContextNoSystemDialog::GetPdfPaperSizeDeviceUnits() {
@@ -79,7 +79,7 @@
   return gfx::Size(width, height);
 }
 
-PrintingContext::Result PrintingContextNoSystemDialog::UpdatePrinterSettings(
+mojom::ResultCode PrintingContextNoSystemDialog::UpdatePrinterSettings(
     bool external_preview,
     bool show_system_dialog,
     int page_count) {
@@ -88,44 +88,44 @@
   if (settings_->dpi() == 0)
     UseDefaultSettings();
 
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
-PrintingContext::Result PrintingContextNoSystemDialog::NewDocument(
+mojom::ResultCode PrintingContextNoSystemDialog::NewDocument(
     const std::u16string& document_name) {
   DCHECK(!in_print_job_);
   in_print_job_ = true;
 
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
-PrintingContext::Result PrintingContextNoSystemDialog::NewPage() {
+mojom::ResultCode PrintingContextNoSystemDialog::NewPage() {
   if (abort_printing_)
-    return CANCEL;
+    return mojom::ResultCode::kCanceled;
   DCHECK(in_print_job_);
 
   // Intentional No-op.
 
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
-PrintingContext::Result PrintingContextNoSystemDialog::PageDone() {
+mojom::ResultCode PrintingContextNoSystemDialog::PageDone() {
   if (abort_printing_)
-    return CANCEL;
+    return mojom::ResultCode::kCanceled;
   DCHECK(in_print_job_);
 
   // Intentional No-op.
 
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
-PrintingContext::Result PrintingContextNoSystemDialog::DocumentDone() {
+mojom::ResultCode PrintingContextNoSystemDialog::DocumentDone() {
   if (abort_printing_)
-    return CANCEL;
+    return mojom::ResultCode::kCanceled;
   DCHECK(in_print_job_);
 
   ResetSettings();
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
 void PrintingContextNoSystemDialog::Cancel() {
diff --git a/printing/printing_context_no_system_dialog.h b/printing/printing_context_no_system_dialog.h
index d68a4969..314d8a3 100644
--- a/printing/printing_context_no_system_dialog.h
+++ b/printing/printing_context_no_system_dialog.h
@@ -8,6 +8,7 @@
 #include <string>
 
 #include "base/component_export.h"
+#include "printing/mojom/print.mojom.h"
 #include "printing/printing_context.h"
 
 namespace printing {
@@ -26,15 +27,15 @@
                           bool has_selection,
                           bool is_scripted,
                           PrintSettingsCallback callback) override;
-  Result UseDefaultSettings() override;
+  mojom::ResultCode UseDefaultSettings() override;
   gfx::Size GetPdfPaperSizeDeviceUnits() override;
-  Result UpdatePrinterSettings(bool external_preview,
-                               bool show_system_dialog,
-                               int page_count) override;
-  Result NewDocument(const std::u16string& document_name) override;
-  Result NewPage() override;
-  Result PageDone() override;
-  Result DocumentDone() override;
+  mojom::ResultCode UpdatePrinterSettings(bool external_preview,
+                                          bool show_system_dialog,
+                                          int page_count) override;
+  mojom::ResultCode NewDocument(const std::u16string& document_name) override;
+  mojom::ResultCode NewPage() override;
+  mojom::ResultCode PageDone() override;
+  mojom::ResultCode DocumentDone() override;
   void Cancel() override;
   void ReleaseContext() override;
   printing::NativeDrawingContext context() const override;
diff --git a/printing/printing_context_system_dialog_win.cc b/printing/printing_context_system_dialog_win.cc
index 891e957..acb040f 100644
--- a/printing/printing_context_system_dialog_win.cc
+++ b/printing/printing_context_system_dialog_win.cc
@@ -11,6 +11,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/current_thread.h"
 #include "printing/backend/win_helper.h"
+#include "printing/mojom/print.mojom.h"
 #include "printing/print_settings_initializer_win.h"
 #include "skia/ext/skia_utils_win.h"
 
@@ -69,7 +70,7 @@
 
   if (ShowPrintDialog(&dialog_options) != S_OK) {
     ResetSettings();
-    std::move(callback).Run(FAILED);
+    std::move(callback).Run(mojom::ResultCode::kFailed);
     return;
   }
 
@@ -142,7 +143,7 @@
   return true;
 }
 
-PrintingContext::Result PrintingContextSystemDialogWin::ParseDialogResultEx(
+mojom::ResultCode PrintingContextSystemDialogWin::ParseDialogResultEx(
     const PRINTDLGEX& dialog_options) {
   // If the user clicked OK or Apply then Cancel, but not only Cancel.
   if (dialog_options.dwResultAction != PD_RESULT_CANCEL) {
@@ -211,13 +212,15 @@
 
   switch (dialog_options.dwResultAction) {
     case PD_RESULT_PRINT:
-      return context() ? OK : FAILED;
+      return context() ? mojom::ResultCode::kSuccess
+                       : mojom::ResultCode::kFailed;
     case PD_RESULT_APPLY:
-      return context() ? CANCEL : FAILED;
+      return context() ? mojom::ResultCode::kCanceled
+                       : mojom::ResultCode::kFailed;
     case PD_RESULT_CANCEL:
-      return CANCEL;
+      return mojom::ResultCode::kCanceled;
     default:
-      return FAILED;
+      return mojom::ResultCode::kFailed;
   }
 }
 
diff --git a/printing/printing_context_system_dialog_win.h b/printing/printing_context_system_dialog_win.h
index 73397eb2..d44698f 100644
--- a/printing/printing_context_system_dialog_win.h
+++ b/printing/printing_context_system_dialog_win.h
@@ -11,6 +11,7 @@
 
 #include <string>
 
+#include "printing/mojom/print.mojom.h"
 #include "printing/printing_context_win.h"
 #include "ui/gfx/native_widget_types.h"
 
@@ -46,7 +47,7 @@
                                     bool selection_only);
 
   // Parses the result of a PRINTDLGEX result.
-  Result ParseDialogResultEx(const PRINTDLGEX& dialog_options);
+  mojom::ResultCode ParseDialogResultEx(const PRINTDLGEX& dialog_options);
 };
 
 }  // namespace printing
diff --git a/printing/printing_context_win.cc b/printing/printing_context_win.cc
index a0042fea..5206d8ff 100644
--- a/printing/printing_context_win.cc
+++ b/printing/printing_context_win.cc
@@ -35,7 +35,7 @@
 
 namespace {
 
-void AssignResult(PrintingContext::Result* out, PrintingContext::Result in) {
+void AssignResult(mojom::ResultCode* out, mojom::ResultCode in) {
   *out = in;
 }
 
@@ -74,7 +74,7 @@
   NOTIMPLEMENTED();
 }
 
-PrintingContext::Result PrintingContextWin::UseDefaultSettings() {
+mojom::ResultCode PrintingContextWin::UseDefaultSettings() {
   DCHECK(!in_print_job_);
 
   scoped_refptr<PrintBackend> backend =
@@ -83,7 +83,7 @@
   mojom::ResultCode result =
       backend->GetDefaultPrinterName(default_printer_name);
   if (result != mojom::ResultCode::kSuccess)
-    return FAILED;
+    return result;
 
   std::wstring default_printer = base::UTF8ToWide(default_printer_name);
   if (!default_printer.empty()) {
@@ -91,8 +91,10 @@
     if (printer.OpenPrinterWithName(default_printer.c_str())) {
       std::unique_ptr<DEVMODE, base::FreeDeleter> dev_mode =
           CreateDevMode(printer.Get(), nullptr);
-      if (InitializeSettings(default_printer, dev_mode.get()) == OK)
-        return OK;
+      if (InitializeSettings(default_printer, dev_mode.get()) ==
+          mojom::ResultCode::kSuccess) {
+        return mojom::ResultCode::kSuccess;
+      }
     }
   }
 
@@ -120,11 +122,13 @@
           continue;
         std::unique_ptr<DEVMODE, base::FreeDeleter> dev_mode =
             CreateDevMode(printer.Get(), nullptr);
-        if (InitializeSettings(info_2->pPrinterName, dev_mode.get()) == OK)
-          return OK;
+        if (InitializeSettings(info_2->pPrinterName, dev_mode.get()) ==
+            mojom::ResultCode::kSuccess) {
+          return mojom::ResultCode::kSuccess;
+        }
       }
       if (context_)
-        return OK;
+        return mojom::ResultCode::kSuccess;
     }
   }
 
@@ -160,7 +164,7 @@
                    paper_size.height() * settings_->device_units_per_inch());
 }
 
-PrintingContext::Result PrintingContextWin::UpdatePrinterSettings(
+mojom::ResultCode PrintingContextWin::UpdatePrinterSettings(
     bool external_preview,
     bool show_system_dialog,
     int page_count) {
@@ -237,7 +241,7 @@
 
   // Update data using DocumentProperties.
   if (show_system_dialog) {
-    PrintingContext::Result result = PrintingContext::FAILED;
+    mojom::ResultCode result = mojom::ResultCode::kFailed;
     AskUserForSettings(page_count, false, false,
                        base::BindOnce(&AssignResult, &result));
     return result;
@@ -258,7 +262,7 @@
                             scoped_dev_mode.get());
 }
 
-PrintingContext::Result PrintingContextWin::InitWithSettingsForTest(
+mojom::ResultCode PrintingContextWin::InitWithSettingsForTest(
     std::unique_ptr<PrintSettings> settings) {
   DCHECK(!in_print_job_);
 
@@ -267,7 +271,7 @@
   // TODO(maruel): settings_.ToDEVMODE()
   ScopedPrinterHandle printer;
   if (!printer.OpenPrinterWithName(base::as_wcstr(settings_->device_name())))
-    return FAILED;
+    return mojom::ResultCode::kFailed;
 
   std::unique_ptr<DEVMODE, base::FreeDeleter> dev_mode =
       CreateDevMode(printer.Get(), nullptr);
@@ -276,7 +280,7 @@
                             dev_mode.get());
 }
 
-PrintingContext::Result PrintingContextWin::NewDocument(
+mojom::ResultCode PrintingContextWin::NewDocument(
     const std::u16string& document_name) {
   DCHECK(!in_print_job_);
   if (!context_)
@@ -287,8 +291,10 @@
 
   in_print_job_ = true;
 
-  if (base::FeatureList::IsEnabled(printing::features::kUseXpsForPrinting))
-    return OK;  // This is all the new document context needed when using XPS.
+  if (base::FeatureList::IsEnabled(printing::features::kUseXpsForPrinting)) {
+    // This is all the new document context needed when using XPS.
+    return mojom::ResultCode::kSuccess;
+  }
 
   // Need more context setup when using GDI.
 
@@ -318,35 +324,35 @@
   if (StartDoc(context_, &di) <= 0)
     return OnError();
 
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
-PrintingContext::Result PrintingContextWin::NewPage() {
+mojom::ResultCode PrintingContextWin::NewPage() {
   if (abort_printing_)
-    return CANCEL;
+    return mojom::ResultCode::kCanceled;
   DCHECK(context_);
   DCHECK(in_print_job_);
 
   // Intentional No-op. MetafileSkia::SafePlayback takes care of calling
   // ::StartPage().
 
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
-PrintingContext::Result PrintingContextWin::PageDone() {
+mojom::ResultCode PrintingContextWin::PageDone() {
   if (abort_printing_)
-    return CANCEL;
+    return mojom::ResultCode::kCanceled;
   DCHECK(in_print_job_);
 
   // Intentional No-op. MetafileSkia::SafePlayback takes care of calling
   // ::EndPage().
 
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
-PrintingContext::Result PrintingContextWin::DocumentDone() {
+mojom::ResultCode PrintingContextWin::DocumentDone() {
   if (abort_printing_)
-    return CANCEL;
+    return mojom::ResultCode::kCanceled;
   DCHECK(in_print_job_);
   DCHECK(context_);
 
@@ -355,7 +361,7 @@
     return OnError();
 
   ResetSettings();
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
 void PrintingContextWin::Cancel() {
@@ -386,7 +392,7 @@
   return true;
 }
 
-PrintingContext::Result PrintingContextWin::InitializeSettings(
+mojom::ResultCode PrintingContextWin::InitializeSettings(
     const std::wstring& device_name,
     DEVMODE* dev_mode) {
   if (!dev_mode)
@@ -404,7 +410,7 @@
   PrintSettingsInitializerWin::InitPrintSettings(context_, *dev_mode,
                                                  settings_.get());
 
-  return OK;
+  return mojom::ResultCode::kSuccess;
 }
 
 HWND PrintingContextWin::GetRootWindow(gfx::NativeView view) {
diff --git a/printing/printing_context_win.h b/printing/printing_context_win.h
index f131f461..758a193 100644
--- a/printing/printing_context_win.h
+++ b/printing/printing_context_win.h
@@ -8,6 +8,7 @@
 #include <memory>
 #include <string>
 
+#include "printing/mojom/print.mojom.h"
 #include "printing/printing_context.h"
 #include "ui/gfx/native_widget_types.h"
 
@@ -32,19 +33,19 @@
                           bool has_selection,
                           bool is_scripted,
                           PrintSettingsCallback callback) override;
-  Result UseDefaultSettings() override;
+  mojom::ResultCode UseDefaultSettings() override;
   gfx::Size GetPdfPaperSizeDeviceUnits() override;
-  Result UpdatePrinterSettings(bool external_preview,
-                               bool show_system_dialog,
-                               int page_count) override;
-  Result NewDocument(const std::u16string& document_name) override;
-  Result NewPage() override;
-  Result PageDone() override;
-  Result DocumentDone() override;
+  mojom::ResultCode UpdatePrinterSettings(bool external_preview,
+                                          bool show_system_dialog,
+                                          int page_count) override;
+  mojom::ResultCode NewDocument(const std::u16string& document_name) override;
+  mojom::ResultCode NewPage() override;
+  mojom::ResultCode PageDone() override;
+  mojom::ResultCode DocumentDone() override;
   void Cancel() override;
   void ReleaseContext() override;
   printing::NativeDrawingContext context() const override;
-  Result InitWithSettingsForTest(
+  mojom::ResultCode InitWithSettingsForTest(
       std::unique_ptr<PrintSettings> settings) override;
 
  protected:
@@ -52,8 +53,8 @@
 
   // Reads the settings from the selected device context. Updates settings_ and
   // its margins.
-  virtual Result InitializeSettings(const std::wstring& device_name,
-                                    DEVMODE* dev_mode);
+  virtual mojom::ResultCode InitializeSettings(const std::wstring& device_name,
+                                               DEVMODE* dev_mode);
 
   void set_context(HDC context) { context_ = context; }
 
diff --git a/printing/printing_context_win_unittest.cc b/printing/printing_context_win_unittest.cc
index 62ada59..ab414a0 100644
--- a/printing/printing_context_win_unittest.cc
+++ b/printing/printing_context_win_unittest.cc
@@ -28,19 +28,17 @@
 class PrintingContextTest : public PrintingTest<testing::Test>,
                             public PrintingContext::Delegate {
  public:
-  void PrintSettingsCallback(PrintingContext::Result result) {
-    result_ = result;
-  }
+  void PrintSettingsCallback(mojom::ResultCode result) { result_ = result; }
 
   // PrintingContext::Delegate methods.
   gfx::NativeView GetParentView() override { return nullptr; }
   std::string GetAppLocale() override { return std::string(); }
 
  protected:
-  PrintingContext::Result result() const { return result_; }
+  mojom::ResultCode result() const { return result_; }
 
  private:
-  PrintingContext::Result result_;
+  mojom::ResultCode result_;
 };
 
 namespace {
@@ -156,7 +154,7 @@
       123, false, false,
       base::BindOnce(&PrintingContextTest::PrintSettingsCallback,
                      base::Unretained(this)));
-  EXPECT_EQ(PrintingContext::OK, result());
+  EXPECT_EQ(mojom::ResultCode::kSuccess, result());
   const PrintSettings& settings = context.settings();
   EXPECT_EQ(0u, settings.ranges().size());
 }
@@ -172,7 +170,7 @@
       123, false, false,
       base::BindOnce(&PrintingContextTest::PrintSettingsCallback,
                      base::Unretained(this)));
-  EXPECT_EQ(PrintingContext::OK, result());
+  EXPECT_EQ(mojom::ResultCode::kSuccess, result());
   const PrintSettings& settings = context.settings();
   EXPECT_NE(settings.color(), mojom::ColorModel::kUnknownColorModel);
 }
@@ -186,7 +184,7 @@
   settings->set_device_name(base::WideToUTF16(GetDefaultPrinter()));
   // Initialize it.
   PrintingContextWin context(this);
-  EXPECT_EQ(PrintingContext::OK,
+  EXPECT_EQ(mojom::ResultCode::kSuccess,
             context.InitWithSettingsForTest(std::move(settings)));
 
   // The print may lie to use and may not support world transformation.
diff --git a/printing/test_printing_context.cc b/printing/test_printing_context.cc
index 0a54c496e9..9d2e9ea222 100644
--- a/printing/test_printing_context.cc
+++ b/printing/test_printing_context.cc
@@ -12,6 +12,7 @@
 #include "base/notreached.h"
 #include "base/strings/utf_string_conversions.h"
 #include "build/build_config.h"
+#include "printing/mojom/print.mojom.h"
 #include "printing/print_settings.h"
 #include "printing/printing_context.h"
 #include "ui/gfx/geometry/size.h"
@@ -48,9 +49,9 @@
   NOTIMPLEMENTED();
 }
 
-PrintingContext::Result TestPrintingContext::UseDefaultSettings() {
+mojom::ResultCode TestPrintingContext::UseDefaultSettings() {
   NOTIMPLEMENTED();
-  return PrintingContext::FAILED;
+  return mojom::ResultCode::kFailed;
 }
 
 gfx::Size TestPrintingContext::GetPdfPaperSizeDeviceUnits() {
@@ -58,7 +59,7 @@
   return gfx::Size();
 }
 
-PrintingContext::Result TestPrintingContext::UpdatePrinterSettings(
+mojom::ResultCode TestPrintingContext::UpdatePrinterSettings(
     bool external_preview,
     bool show_system_dialog,
     int page_count) {
@@ -73,7 +74,7 @@
   if (found == device_settings_.end()) {
     DLOG(ERROR) << "No such device found in test printing context: `"
                 << device_name << "`";
-    return PrintingContext::FAILED;
+    return mojom::ResultCode::kFailed;
   }
 
   // Perform some initialization, akin to various platform-specific actions in
@@ -87,28 +88,28 @@
     settings_->advanced_settings().emplace(item.first, item.second.Clone());
 #endif
 
-  return PrintingContext::OK;
+  return mojom::ResultCode::kSuccess;
 }
 
-PrintingContext::Result TestPrintingContext::NewDocument(
+mojom::ResultCode TestPrintingContext::NewDocument(
     const std::u16string& document_name) {
   // No-op.
-  return PrintingContext::Result::OK;
+  return mojom::ResultCode::kSuccess;
 }
 
-PrintingContext::Result TestPrintingContext::NewPage() {
+mojom::ResultCode TestPrintingContext::NewPage() {
   NOTIMPLEMENTED();
-  return PrintingContext::Result::FAILED;
+  return mojom::ResultCode::kFailed;
 }
 
-PrintingContext::Result TestPrintingContext::PageDone() {
+mojom::ResultCode TestPrintingContext::PageDone() {
   NOTIMPLEMENTED();
-  return PrintingContext::Result::FAILED;
+  return mojom::ResultCode::kFailed;
 }
 
-PrintingContext::Result TestPrintingContext::DocumentDone() {
+mojom::ResultCode TestPrintingContext::DocumentDone() {
   NOTIMPLEMENTED();
-  return PrintingContext::Result::FAILED;
+  return mojom::ResultCode::kFailed;
 }
 
 void TestPrintingContext::Cancel() {
@@ -122,10 +123,10 @@
 }
 
 #if defined(OS_WIN)
-PrintingContext::Result TestPrintingContext::InitWithSettingsForTest(
+mojom::ResultCode TestPrintingContext::InitWithSettingsForTest(
     std::unique_ptr<PrintSettings> settings) {
   NOTIMPLEMENTED();
-  return PrintingContext::Result::FAILED;
+  return mojom::ResultCode::kFailed;
 }
 #endif  // defined(OS_WIN)
 
diff --git a/printing/test_printing_context.h b/printing/test_printing_context.h
index 88b14516..ed9ac232 100644
--- a/printing/test_printing_context.h
+++ b/printing/test_printing_context.h
@@ -10,6 +10,7 @@
 
 #include "base/containers/flat_map.h"
 #include "build/build_config.h"
+#include "printing/mojom/print.mojom.h"
 #include "printing/print_settings.h"
 #include "printing/printing_context.h"
 
@@ -47,20 +48,20 @@
                           bool has_selection,
                           bool is_scripted,
                           PrintSettingsCallback callback) override;
-  Result UseDefaultSettings() override;
+  mojom::ResultCode UseDefaultSettings() override;
   gfx::Size GetPdfPaperSizeDeviceUnits() override;
-  Result UpdatePrinterSettings(bool external_preview,
-                               bool show_system_dialog,
-                               int page_count) override;
-  Result NewDocument(const std::u16string& document_name) override;
-  Result NewPage() override;
-  Result PageDone() override;
-  Result DocumentDone() override;
+  mojom::ResultCode UpdatePrinterSettings(bool external_preview,
+                                          bool show_system_dialog,
+                                          int page_count) override;
+  mojom::ResultCode NewDocument(const std::u16string& document_name) override;
+  mojom::ResultCode NewPage() override;
+  mojom::ResultCode PageDone() override;
+  mojom::ResultCode DocumentDone() override;
   void Cancel() override;
   void ReleaseContext() override;
   NativeDrawingContext context() const override;
 #if defined(OS_WIN)
-  Result InitWithSettingsForTest(
+  mojom::ResultCode InitWithSettingsForTest(
       std::unique_ptr<PrintSettings> settings) override;
 #endif
 
diff --git a/remoting/host/chromeos/BUILD.gn b/remoting/host/chromeos/BUILD.gn
index 74d2ae5..031fabc 100644
--- a/remoting/host/chromeos/BUILD.gn
+++ b/remoting/host/chromeos/BUILD.gn
@@ -44,6 +44,13 @@
   ]
 }
 
+# ChromeOS enterprise specific stuff that is also accessed from other areas
+# like //remoting/host/it2me.
+# Split out in its own target to prevent cyclic dependencies.
+source_set("enterprise_support") {
+  sources = [ "chromeos_enterprise_params.h" ]
+}
+
 source_set("remoting_service") {
   sources = [
     "remote_support_host_ash.cc",
@@ -52,7 +59,10 @@
     "remoting_service.h",
   ]
 
-  public_deps = [ "//remoting/host/it2me:chrome_os_host" ]
+  public_deps = [
+    ":enterprise_support",
+    "//remoting/host/it2me:chrome_os_host",
+  ]
 
   configs += [ "//remoting/build/config:version" ]
 
diff --git a/remoting/host/chromeos/chromeos_enterprise_params.h b/remoting/host/chromeos/chromeos_enterprise_params.h
new file mode 100644
index 0000000..5fa8cbc
--- /dev/null
+++ b/remoting/host/chromeos/chromeos_enterprise_params.h
@@ -0,0 +1,21 @@
+// Copyright 2021 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 REMOTING_HOST_CHROMEOS_CHROMEOS_ENTERPRISE_PARAMS_H_
+#define REMOTING_HOST_CHROMEOS_CHROMEOS_ENTERPRISE_PARAMS_H_
+
+namespace remoting {
+
+// ChromeOS enterprise specific parameters.
+// These parameters are not exposed through the public Mojom APIs, for security
+// reasons.
+struct ChromeOsEnterpriseParams {
+  bool suppress_user_dialogs = false;
+  bool suppress_notifications = false;
+  bool terminate_upon_input = false;
+};
+
+}  // namespace remoting
+
+#endif  // REMOTING_HOST_CHROMEOS_CHROMEOS_ENTERPRISE_PARAMS_H_
diff --git a/remoting/host/chromeos/remote_support_host_ash.cc b/remoting/host/chromeos/remote_support_host_ash.cc
index 4dc86c7..072df7e 100644
--- a/remoting/host/chromeos/remote_support_host_ash.cc
+++ b/remoting/host/chromeos/remote_support_host_ash.cc
@@ -23,8 +23,10 @@
 
 RemoteSupportHostAsh::~RemoteSupportHostAsh() = default;
 
-void RemoteSupportHostAsh::StartSession(mojom::SupportSessionParamsPtr params,
-                                        StartSessionCallback callback) {
+void RemoteSupportHostAsh::StartSession(
+    mojom::SupportSessionParamsPtr params,
+    const absl::optional<ChromeOsEnterpriseParams>& enterprise_params,
+    StartSessionCallback callback) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   // Ensure there is at most one active remote support connection.
@@ -47,7 +49,7 @@
   response->set_observer(std::move(pending_receiver));
 
   it2me_native_message_host_ash_->Connect(
-      std::move(params),
+      std::move(params), enterprise_params,
       base::BindOnce(std::move(callback), std::move(response)),
       base::BindOnce(&RemoteSupportHostAsh::OnSessionDisconnected,
                      base::Unretained(this)));
diff --git a/remoting/host/chromeos/remote_support_host_ash.h b/remoting/host/chromeos/remote_support_host_ash.h
index 952400e..109e24e 100644
--- a/remoting/host/chromeos/remote_support_host_ash.h
+++ b/remoting/host/chromeos/remote_support_host_ash.h
@@ -12,10 +12,12 @@
 #include "mojo/public/cpp/bindings/remote_set.h"
 #include "remoting/host/it2me/it2me_native_messaging_host_ash.h"
 #include "remoting/host/mojom/remote_support.mojom.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 
 namespace remoting {
 
 class It2MeNativeMessageHostAsh;
+struct ChromeOsEnterpriseParams;
 
 // This class represents a remote support host instance which can be connected
 // to and controlled over an IPC channel. It wraps a remote support host
@@ -38,8 +40,10 @@
 
   // Allows the caller to start a new remote support session.  |callback| is
   // called with the result.
-  void StartSession(mojom::SupportSessionParamsPtr params,
-                    StartSessionCallback callback);
+  void StartSession(
+      mojom::SupportSessionParamsPtr params,
+      const absl::optional<ChromeOsEnterpriseParams>& enterprise_params,
+      StartSessionCallback callback);
 
  private:
   void OnSessionDisconnected();
diff --git a/remoting/host/it2me/BUILD.gn b/remoting/host/it2me/BUILD.gn
index ea9dfb9..e1cfdde 100644
--- a/remoting/host/it2me/BUILD.gn
+++ b/remoting/host/it2me/BUILD.gn
@@ -156,6 +156,7 @@
         "//extensions/browser/api/messaging:native_messaging",
         "//remoting/base:base",
         "//remoting/host:common",
+        "//remoting/host/chromeos:enterprise_support",
         "//remoting/host/mojom:mojom",
         "//remoting/host/native_messaging",
         "//skia",
diff --git a/remoting/host/it2me/it2me_native_messaging_host_ash.cc b/remoting/host/it2me/it2me_native_messaging_host_ash.cc
index 3d4fc1e..bd23f3d 100644
--- a/remoting/host/it2me/it2me_native_messaging_host_ash.cc
+++ b/remoting/host/it2me/it2me_native_messaging_host_ash.cc
@@ -13,6 +13,7 @@
 #include "base/time/time.h"
 #include "base/values.h"
 #include "extensions/browser/api/messaging/native_message_host.h"
+#include "remoting/host/chromeos/chromeos_enterprise_params.h"
 #include "remoting/host/chromoting_host_context.h"
 #include "remoting/host/it2me/it2me_native_messaging_host.h"
 #include "remoting/host/native_messaging/native_messaging_helpers.h"
@@ -20,6 +21,55 @@
 
 namespace remoting {
 
+namespace {
+
+bool ShouldSuppressNotifications(
+    const mojom::SupportSessionParams& params,
+    const absl::optional<ChromeOsEnterpriseParams>& enterprise_params) {
+  if (enterprise_params)
+    return enterprise_params.value().suppress_notifications;
+
+    // On non-debug builds, do not allow setting this value through the Mojom
+    // API.
+#if !defined(NDEBUG)
+  return params.suppress_notifications;
+#else
+  return false;
+#endif
+}
+
+bool ShouldSuppressUserDialog(
+    const mojom::SupportSessionParams& params,
+    const absl::optional<ChromeOsEnterpriseParams>& enterprise_params) {
+  if (enterprise_params)
+    return enterprise_params.value().suppress_user_dialogs;
+
+    // On non-debug builds, do not allow setting this value through the Mojom
+    // API.
+#if !defined(NDEBUG)
+  return params.suppress_user_dialogs;
+#else
+  return false;
+#endif
+}
+
+bool ShouldTerminateUponInput(
+    const mojom::SupportSessionParams& params,
+    const absl::optional<ChromeOsEnterpriseParams>& enterprise_params) {
+  if (enterprise_params)
+    return enterprise_params.value().terminate_upon_input;
+
+    // On non-debug builds, do not allow setting this value through the Mojom
+    // API.
+#if !defined(NDEBUG)
+  return params.terminate_upon_input;
+#else
+  return false;
+#endif
+}
+
+}  // namespace
+
 It2MeNativeMessageHostAsh::It2MeNativeMessageHostAsh() = default;
 It2MeNativeMessageHostAsh::~It2MeNativeMessageHostAsh() = default;
 
@@ -49,6 +99,7 @@
 
 void It2MeNativeMessageHostAsh::Connect(
     mojom::SupportSessionParamsPtr params,
+    const absl::optional<ChromeOsEnterpriseParams>& enterprise_params,
     base::OnceClosure connected_callback,
     base::OnceClosure disconnected_callback) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
@@ -64,9 +115,13 @@
 
   message.SetStringKey(kUserName, params->user_name);
   message.SetStringKey(kAuthServiceWithToken, params->oauth_access_token);
-  message.SetBoolKey(kSuppressUserDialogs, params->suppress_user_dialogs);
-  message.SetBoolKey(kSuppressNotifications, params->suppress_notifications);
-  message.SetBoolKey(kTerminateUponInput, params->terminate_upon_input);
+  message.SetBoolKey(kSuppressUserDialogs,
+                     ShouldSuppressUserDialog(*params, enterprise_params));
+  message.SetBoolKey(kSuppressNotifications,
+                     ShouldSuppressNotifications(*params, enterprise_params));
+  message.SetBoolKey(kTerminateUponInput,
+                     ShouldTerminateUponInput(*params, enterprise_params));
+  message.SetBoolKey(kIsEnterpriseAdminUser, enterprise_params.has_value());
 
   std::string message_json;
   base::JSONWriter::Write(message, &message_json);
diff --git a/remoting/host/it2me/it2me_native_messaging_host_ash.h b/remoting/host/it2me/it2me_native_messaging_host_ash.h
index 3c3d8df..ea9a9e7 100644
--- a/remoting/host/it2me/it2me_native_messaging_host_ash.h
+++ b/remoting/host/it2me/it2me_native_messaging_host_ash.h
@@ -14,6 +14,7 @@
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "remoting/host/mojom/remote_support.mojom.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 
 namespace base {
 class Value;
@@ -27,6 +28,7 @@
 
 class ChromotingHostContext;
 class PolicyWatcher;
+struct ChromeOsEnterpriseParams;
 
 // This class wraps the It2MeNativeMessageHost instance used on other platforms
 // and provides a way to interact with it using Mojo IPC.  This instance
@@ -55,9 +57,11 @@
 
   // Begins the connection process using the wrapped native message host.
   // |connected_callback| is run after the connection process has completed.
-  void Connect(mojom::SupportSessionParamsPtr params,
-               base::OnceClosure connected_callback,
-               base::OnceClosure disconnected_callback);
+  void Connect(
+      mojom::SupportSessionParamsPtr params,
+      const absl::optional<ChromeOsEnterpriseParams>& enterprise_params,
+      base::OnceClosure connected_callback,
+      base::OnceClosure disconnected_callback);
   // Disconnects an active session if one exists.
   void Disconnect();
 
diff --git a/services/network/throttling/scoped_throttling_token.cc b/services/network/throttling/scoped_throttling_token.cc
index 13b935c..99f6593 100644
--- a/services/network/throttling/scoped_throttling_token.cc
+++ b/services/network/throttling/scoped_throttling_token.cc
@@ -16,8 +16,6 @@
     const absl::optional<base::UnguessableToken>& throttling_profile_id) {
   if (!throttling_profile_id)
     return nullptr;
-  if (!ThrottlingController::HasInterceptor(*throttling_profile_id))
-    return nullptr;
   return base::WrapUnique(
       new ScopedThrottlingToken(net_log_source_id, *throttling_profile_id));
 }
diff --git a/services/network/throttling/throttling_controller.cc b/services/network/throttling/throttling_controller.cc
index 481150cb..c4f3f7a6 100644
--- a/services/network/throttling/throttling_controller.cc
+++ b/services/network/throttling/throttling_controller.cc
@@ -11,65 +11,53 @@
 
 namespace network {
 
-ThrottlingController* ThrottlingController::instance_ = nullptr;
-
 ThrottlingController::ThrottlingController() = default;
 ThrottlingController::~ThrottlingController() = default;
 
 // static
+ThrottlingController& ThrottlingController::instance() {
+  static base::NoDestructor<ThrottlingController> instance;
+  return *instance;
+}
+
+// static
 void ThrottlingController::SetConditions(
     const base::UnguessableToken& throttling_profile_id,
     std::unique_ptr<NetworkConditions> conditions) {
-  if (!instance_) {
-    if (!conditions)
-      return;
-    instance_ = new ThrottlingController();
-  }
-  instance_->SetNetworkConditions(throttling_profile_id, std::move(conditions));
+  instance().SetNetworkConditions(throttling_profile_id, std::move(conditions));
 }
 
 // static
 ThrottlingNetworkInterceptor* ThrottlingController::GetInterceptor(
     uint32_t net_log_source_id) {
-  if (!instance_)
-    return nullptr;
-  return instance_->FindInterceptor(net_log_source_id);
+  return instance().FindInterceptor(net_log_source_id);
 }
 
 // static
 void ThrottlingController::RegisterProfileIDForNetLogSource(
     uint32_t net_log_source_id,
     const base::UnguessableToken& throttling_profile_id) {
-  if (!instance_)
-    return;
-  instance_->Register(net_log_source_id, throttling_profile_id);
+  instance().Register(net_log_source_id, throttling_profile_id);
 }
 
 // static
 void ThrottlingController::UnregisterNetLogSource(uint32_t net_log_source_id) {
-  if (instance_)
-    instance_->Unregister(net_log_source_id);
+  instance().Unregister(net_log_source_id);
 }
 
 // static
 bool ThrottlingController::HasInterceptor(
     const base::UnguessableToken& throttling_profile_id) {
-  // Null |instance_| means there is no network condition registered.
-  if (!instance_)
-    return false;
+  DCHECK_CALLED_ON_VALID_THREAD(instance().thread_checker_);
 
-  DCHECK_CALLED_ON_VALID_THREAD(instance_->thread_checker_);
-
-  return instance_->interceptors_.find(throttling_profile_id) !=
-         instance_->interceptors_.end();
+  return instance().interceptors_.find(throttling_profile_id) !=
+         instance().interceptors_.end();
 }
 
 void ThrottlingController::Register(
     uint32_t net_log_source_id,
     const base::UnguessableToken& throttling_profile_id) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-  if (interceptors_.find(throttling_profile_id) == interceptors_.end())
-    return;
   net_log_source_profile_map_[net_log_source_id] = throttling_profile_id;
 }
 
@@ -106,10 +94,6 @@
           new NetworkConditions());
       it->second->UpdateConditions(std::move(online_conditions));
       interceptors_.erase(throttling_profile_id);
-      if (interceptors_.empty()) {
-        delete this;
-        instance_ = nullptr;
-      }
     } else {
       it->second->UpdateConditions(std::move(conditions));
     }
diff --git a/services/network/throttling/throttling_controller.h b/services/network/throttling/throttling_controller.h
index 4716e18..feb7633 100644
--- a/services/network/throttling/throttling_controller.h
+++ b/services/network/throttling/throttling_controller.h
@@ -10,6 +10,7 @@
 
 #include "base/component_export.h"
 #include "base/macros.h"
+#include "base/no_destructor.h"
 #include "base/threading/thread_checker.h"
 #include "base/unguessable_token.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
@@ -34,10 +35,13 @@
 
  private:
   friend class ScopedThrottlingToken;
+  friend class base::NoDestructor<ThrottlingController>;
 
   ThrottlingController();
   ~ThrottlingController();
 
+  static ThrottlingController& instance();
+
   // Registers the profile ID for the NetLog source. This is called from
   // ScopedThrottlingToken.
   static void RegisterProfileIDForNetLogSource(
@@ -64,8 +68,6 @@
 
   ThrottlingNetworkInterceptor* FindInterceptor(uint32_t net_log_source_id);
 
-  static ThrottlingController* instance_;
-
   using InterceptorMap =
       std::map<base::UnguessableToken,
                std::unique_ptr<ThrottlingNetworkInterceptor>>;
diff --git a/services/network/websocket_interceptor_unittest.cc b/services/network/websocket_interceptor_unittest.cc
index 6b4a7142..c9030a7 100644
--- a/services/network/websocket_interceptor_unittest.cc
+++ b/services/network/websocket_interceptor_unittest.cc
@@ -27,12 +27,6 @@
 class WebSocketInterceptorTest : public ::testing::Test {
  protected:
   WebSocketInterceptorTest() {
-    // Currently having _some_ emulated conditions is required at the
-    // socket creation time.
-    // TODO(dsv@chromium.org): Fix this in the throttler implementation.
-    ThrottlingController::SetConditions(
-        *kThrottlingProfileId,
-        std::make_unique<NetworkConditions>(/*offline=*/true));
     interceptor_ = std::make_unique<WebSocketInterceptor>(
         kNetLogSourceId, kThrottlingProfileId, WebSocketInterceptor::kOutgoing);
   }
diff --git a/sql/database.cc b/sql/database.cc
index a91935a..916dae0 100644
--- a/sql/database.cc
+++ b/sql/database.cc
@@ -431,7 +431,8 @@
     --total_changes_at_last_release_;
 
   // Cached pages may be re-used within the same transaction.
-  if (transaction_nesting())
+  DCHECK_GE(transaction_nesting_, 0);
+  if (transaction_nesting_)
     return;
 
   // If no changes have been made, skip flushing.  This allows the first page of
@@ -785,6 +786,7 @@
     return false;
   }
 
+  DCHECK_GE(transaction_nesting_, 0);
   if (transaction_nesting_ > 0) {
     DLOG(DCHECK) << "Cannot raze within a transaction";
     return false;
@@ -1020,6 +1022,7 @@
   }
 
   bool success = true;
+  DCHECK_GE(transaction_nesting_, 0);
   if (!transaction_nesting_) {
     needs_rollback_ = false;
 
@@ -1027,19 +1030,21 @@
     if (!begin.Run())
       return false;
   }
-  transaction_nesting_++;
+  ++transaction_nesting_;
   return success;
 }
 
 void Database::RollbackTransaction() {
   TRACE_EVENT0("sql", "Database::RollbackTransaction");
 
+  DCHECK_GE(transaction_nesting_, 0);
   if (!transaction_nesting_) {
     DCHECK(poisoned_) << "Rolling back a nonexistent transaction";
     return;
   }
 
-  transaction_nesting_--;
+  DCHECK_GT(transaction_nesting_, 0);
+  --transaction_nesting_;
 
   if (transaction_nesting_ > 0) {
     // Mark the outermost transaction as needing rollback.
@@ -1053,11 +1058,14 @@
 bool Database::CommitTransaction() {
   TRACE_EVENT0("sql", "Database::CommitTransaction");
 
+  DCHECK_GE(transaction_nesting_, 0);
   if (!transaction_nesting_) {
     DCHECK(poisoned_) << "Committing a nonexistent transaction";
     return false;
   }
-  transaction_nesting_--;
+
+  DCHECK_GT(transaction_nesting_, 0);
+  --transaction_nesting_;
 
   if (transaction_nesting_ > 0) {
     // Mark any nested transactions as failing after we've already got one.
@@ -1082,6 +1090,7 @@
 void Database::RollbackAllTransactions() {
   TRACE_EVENT0("sql", "Database::RollbackAllTransactions");
 
+  DCHECK_GE(transaction_nesting_, 0);
   if (transaction_nesting_ > 0) {
     transaction_nesting_ = 0;
     DoRollback();
diff --git a/sql/database.h b/sql/database.h
index a38be0b4..ec31ec6 100644
--- a/sql/database.h
+++ b/sql/database.h
@@ -374,6 +374,13 @@
   // be scoped transactions on the stack.
   void RollbackAllTransactions();
 
+  bool HasActiveTransactions() const {
+    DCHECK_GE(transaction_nesting_, 0);
+    return transaction_nesting_ > 0;
+  }
+
+  // Deprecated in favor of HasActiveTransactions().
+  //
   // Returns the current transaction nesting, which will be 0 if there are
   // no open transactions.
   int transaction_nesting() const { return transaction_nesting_; }
diff --git a/sql/transaction_unittest.cc b/sql/transaction_unittest.cc
index 2c89e3f0..1e6239b7 100644
--- a/sql/transaction_unittest.cc
+++ b/sql/transaction_unittest.cc
@@ -41,92 +41,147 @@
 
 TEST_F(SQLTransactionTest, Commit) {
   {
-    Transaction t(&db_);
-    EXPECT_FALSE(t.IsActiveForTesting());
-    EXPECT_TRUE(t.Begin());
-    EXPECT_TRUE(t.IsActiveForTesting());
+    Transaction transaction(&db_);
+    EXPECT_FALSE(db_.HasActiveTransactions());
+    EXPECT_FALSE(transaction.IsActiveForTesting());
 
-    EXPECT_TRUE(db_.Execute("INSERT INTO foo (a, b) VALUES (1, 2)"));
+    ASSERT_TRUE(transaction.Begin());
+    EXPECT_TRUE(db_.HasActiveTransactions());
+    EXPECT_TRUE(transaction.IsActiveForTesting());
 
-    t.Commit();
-    EXPECT_FALSE(t.IsActiveForTesting());
+    ASSERT_TRUE(db_.Execute("INSERT INTO foo (a, b) VALUES (1, 2)"));
+    ASSERT_EQ(1, CountFoo()) << "INSERT did not work as intended";
+
+    transaction.Commit();
+    EXPECT_FALSE(db_.HasActiveTransactions());
+    EXPECT_FALSE(transaction.IsActiveForTesting());
   }
 
-  EXPECT_EQ(1, CountFoo());
+  EXPECT_FALSE(db_.HasActiveTransactions());
+  EXPECT_EQ(1, CountFoo()) << "Transaction changes not committed";
 }
 
-TEST_F(SQLTransactionTest, Rollback) {
-  // Test some basic initialization, and that rollback runs when you exit the
-  // scope.
-  {
-    Transaction t(&db_);
-    EXPECT_FALSE(t.IsActiveForTesting());
-    EXPECT_TRUE(t.Begin());
-    EXPECT_TRUE(t.IsActiveForTesting());
+TEST_F(SQLTransactionTest, RollbackOnDestruction) {
+  EXPECT_FALSE(db_.HasActiveTransactions());
 
-    EXPECT_TRUE(db_.Execute("INSERT INTO foo (a, b) VALUES (1, 2)"));
+  {
+    Transaction transaction(&db_);
+    EXPECT_FALSE(db_.HasActiveTransactions());
+    EXPECT_FALSE(transaction.IsActiveForTesting());
+
+    ASSERT_TRUE(transaction.Begin());
+    EXPECT_TRUE(db_.HasActiveTransactions());
+    EXPECT_TRUE(transaction.IsActiveForTesting());
+
+    ASSERT_TRUE(db_.Execute("INSERT INTO foo (a, b) VALUES (1, 2)"));
+    ASSERT_EQ(1, CountFoo()) << "INSERT did not work as intended";
   }
 
-  // Nothing should have been committed since it was implicitly rolled back.
-  EXPECT_EQ(0, CountFoo());
+  EXPECT_FALSE(db_.HasActiveTransactions());
+  EXPECT_EQ(0, CountFoo()) << "Transaction changes not rolled back";
+}
 
-  // Test explicit rollback.
-  Transaction t2(&db_);
-  EXPECT_FALSE(t2.IsActiveForTesting());
-  EXPECT_TRUE(t2.Begin());
+TEST_F(SQLTransactionTest, ExplicitRollback) {
+  EXPECT_FALSE(db_.HasActiveTransactions());
 
-  EXPECT_TRUE(db_.Execute("INSERT INTO foo (a, b) VALUES (1, 2)"));
-  t2.Rollback();
-  EXPECT_FALSE(t2.IsActiveForTesting());
+  {
+    Transaction transaction(&db_);
+    EXPECT_FALSE(db_.HasActiveTransactions());
+    EXPECT_FALSE(transaction.IsActiveForTesting());
 
-  // Nothing should have been committed since it was explicitly rolled back.
-  EXPECT_EQ(0, CountFoo());
+    ASSERT_TRUE(transaction.Begin());
+    EXPECT_TRUE(db_.HasActiveTransactions());
+    EXPECT_TRUE(transaction.IsActiveForTesting());
+
+    ASSERT_TRUE(db_.Execute("INSERT INTO foo (a, b) VALUES (1, 2)"));
+    ASSERT_EQ(1, CountFoo()) << "INSERT did not work as intended";
+
+    transaction.Rollback();
+    EXPECT_FALSE(db_.HasActiveTransactions());
+    EXPECT_FALSE(transaction.IsActiveForTesting());
+    EXPECT_EQ(0, CountFoo()) << "Transaction changes not rolled back";
+  }
+
+  EXPECT_FALSE(db_.HasActiveTransactions());
+  EXPECT_EQ(0, CountFoo()) << "Transaction changes not rolled back";
 }
 
 // Rolling back any part of a transaction should roll back all of them.
 TEST_F(SQLTransactionTest, NestedRollback) {
+  EXPECT_FALSE(db_.HasActiveTransactions());
   EXPECT_EQ(0, db_.transaction_nesting());
 
   // Outermost transaction.
   {
-    Transaction outer(&db_);
-    EXPECT_TRUE(outer.Begin());
+    Transaction outer_txn(&db_);
+    EXPECT_FALSE(db_.HasActiveTransactions());
+    EXPECT_EQ(0, db_.transaction_nesting());
+
+    ASSERT_TRUE(outer_txn.Begin());
+    EXPECT_TRUE(db_.HasActiveTransactions());
     EXPECT_EQ(1, db_.transaction_nesting());
 
-    // The first inner one gets committed.
+    // First inner transaction is committed.
     {
-      Transaction inner1(&db_);
-      EXPECT_TRUE(inner1.Begin());
-      EXPECT_TRUE(db_.Execute("INSERT INTO foo (a, b) VALUES (1, 2)"));
+      Transaction committed_inner_txn(&db_);
+      EXPECT_TRUE(db_.HasActiveTransactions());
+      EXPECT_EQ(1, db_.transaction_nesting());
+
+      ASSERT_TRUE(committed_inner_txn.Begin());
+      EXPECT_TRUE(db_.HasActiveTransactions());
       EXPECT_EQ(2, db_.transaction_nesting());
 
-      inner1.Commit();
+      ASSERT_TRUE(db_.Execute("INSERT INTO foo (a, b) VALUES (1, 2)"));
+      ASSERT_EQ(1, CountFoo()) << "INSERT did not work as intended";
+
+      committed_inner_txn.Commit();
+      EXPECT_TRUE(db_.HasActiveTransactions());
       EXPECT_EQ(1, db_.transaction_nesting());
     }
 
-    // One row should have gotten inserted.
-    EXPECT_EQ(1, CountFoo());
+    EXPECT_TRUE(db_.HasActiveTransactions());
+    EXPECT_EQ(1, db_.transaction_nesting());
+    EXPECT_EQ(1, CountFoo()) << "First inner transaction did not commit";
 
-    // The second inner one gets rolled back.
+    // Second inner transaction is rolled back.
     {
-      Transaction inner2(&db_);
-      EXPECT_TRUE(inner2.Begin());
-      EXPECT_TRUE(db_.Execute("INSERT INTO foo (a, b) VALUES (1, 2)"));
+      Transaction rolled_back_inner_txn(&db_);
+      EXPECT_TRUE(db_.HasActiveTransactions());
+      EXPECT_EQ(1, db_.transaction_nesting());
+
+      ASSERT_TRUE(rolled_back_inner_txn.Begin());
+      EXPECT_TRUE(db_.HasActiveTransactions());
       EXPECT_EQ(2, db_.transaction_nesting());
 
-      inner2.Rollback();
+      ASSERT_TRUE(db_.Execute("INSERT INTO foo (a, b) VALUES (2, 3)"));
+      ASSERT_EQ(2, CountFoo()) << "INSERT did not work as intended";
+
+      rolled_back_inner_txn.Rollback();
+      EXPECT_TRUE(db_.HasActiveTransactions());
       EXPECT_EQ(1, db_.transaction_nesting());
+      EXPECT_EQ(2, CountFoo())
+          << "Nested transaction rollback deferred to top-level transaction";
     }
 
-    // A third inner one will fail in Begin since one has already been rolled
-    // back.
+    EXPECT_TRUE(db_.HasActiveTransactions());
     EXPECT_EQ(1, db_.transaction_nesting());
+    EXPECT_EQ(2, CountFoo())
+        << "Nested transaction rollback deferred to top-level transaction";
+
+    // Third inner transaction fails in Begin(), because a nested transaction
+    // has already been rolled back.
     {
-      Transaction inner3(&db_);
-      EXPECT_FALSE(inner3.Begin());
+      Transaction failed_inner_txn(&db_);
+      EXPECT_TRUE(db_.HasActiveTransactions());
+      EXPECT_EQ(1, db_.transaction_nesting());
+
+      EXPECT_FALSE(failed_inner_txn.Begin());
+      EXPECT_TRUE(db_.HasActiveTransactions());
       EXPECT_EQ(1, db_.transaction_nesting());
     }
   }
+
+  EXPECT_FALSE(db_.HasActiveTransactions());
   EXPECT_EQ(0, db_.transaction_nesting());
   EXPECT_EQ(0, CountFoo());
 }
diff --git a/testing/buildbot/chromium.android.fyi.json b/testing/buildbot/chromium.android.fyi.json
index 3fdb85e..5f581810 100644
--- a/testing/buildbot/chromium.android.fyi.json
+++ b/testing/buildbot/chromium.android.fyi.json
@@ -5850,7 +5850,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M95",
-              "revision": "version:95.0.4638.15"
+              "revision": "version:95.0.4638.16"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -6111,7 +6111,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M95",
-              "revision": "version:95.0.4638.15"
+              "revision": "version:95.0.4638.16"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
diff --git a/testing/buildbot/chromium.android.json b/testing/buildbot/chromium.android.json
index 2623a9f..40a1f51 100644
--- a/testing/buildbot/chromium.android.json
+++ b/testing/buildbot/chromium.android.json
@@ -57295,7 +57295,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M95",
-              "revision": "version:95.0.4638.15"
+              "revision": "version:95.0.4638.16"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -57559,7 +57559,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M95",
-              "revision": "version:95.0.4638.15"
+              "revision": "version:95.0.4638.16"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -57895,7 +57895,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M95",
-              "revision": "version:95.0.4638.15"
+              "revision": "version:95.0.4638.16"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -58156,7 +58156,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M95",
-              "revision": "version:95.0.4638.15"
+              "revision": "version:95.0.4638.16"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -58492,7 +58492,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M95",
-              "revision": "version:95.0.4638.15"
+              "revision": "version:95.0.4638.16"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -58753,7 +58753,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M95",
-              "revision": "version:95.0.4638.15"
+              "revision": "version:95.0.4638.16"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
diff --git a/testing/buildbot/variants.pyl b/testing/buildbot/variants.pyl
index 8a2c350..004ee38 100644
--- a/testing/buildbot/variants.pyl
+++ b/testing/buildbot/variants.pyl
@@ -387,7 +387,7 @@
         {
           'cipd_package': 'chromium/testing/weblayer-x86',
           'location': 'weblayer_instrumentation_test_M95',
-          'revision': 'version:95.0.4638.15',
+          'revision': 'version:95.0.4638.16',
         }
       ],
     },
@@ -459,7 +459,7 @@
         {
           'cipd_package': 'chromium/testing/weblayer-x86',
           'location': 'weblayer_instrumentation_test_M95',
-          'revision': 'version:95.0.4638.15',
+          'revision': 'version:95.0.4638.16',
         }
       ],
     },
@@ -531,7 +531,7 @@
         {
           'cipd_package': 'chromium/testing/weblayer-x86',
           'location': 'weblayer_instrumentation_test_M95',
-          'revision': 'version:95.0.4638.15',
+          'revision': 'version:95.0.4638.16',
         }
       ],
     },
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index 73dc285b..62daf58 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -3279,6 +3279,23 @@
             ]
         }
     ],
+    "DnsProxy": [
+        {
+            "platforms": [
+                "chromeos",
+                "chromeos_lacros"
+            ],
+            "experiments": [
+                {
+                    "name": "DnsProxyEnableDOH_Enabled",
+                    "enable_features": [
+                        "DnsProxyEnableDOH",
+                        "EnableDnsProxy"
+                    ]
+                }
+            ]
+        }
+    ],
     "DownloadBufferSize": [
         {
             "platforms": [
diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc
index 3f9f8bb1..086d2be4 100644
--- a/third_party/blink/common/features.cc
+++ b/third_party/blink/common/features.cc
@@ -746,10 +746,6 @@
   return base::FeatureList::IsEnabled(kCompressParkableStrings);
 }
 
-// Controls whether to auto select on contextual menu click in Chrome OS.
-const base::Feature kCrOSAutoSelect{"CrOSAutoSelect",
-                                    base::FEATURE_ENABLED_BY_DEFAULT};
-
 const base::Feature kCLSScrollAnchoring{"CLSScrollAnchoring",
                                         base::FEATURE_ENABLED_BY_DEFAULT};
 
diff --git a/third_party/blink/common/web_preferences/web_preferences.cc b/third_party/blink/common/web_preferences/web_preferences.cc
index 8a1315f7..8eb1bca 100644
--- a/third_party/blink/common/web_preferences/web_preferences.cc
+++ b/third_party/blink/common/web_preferences/web_preferences.cc
@@ -112,10 +112,7 @@
 #elif defined(OS_ANDROID)
       editing_behavior(mojom::EditingBehavior::kEditingAndroidBehavior),
 #elif BUILDFLAG(IS_CHROMEOS_ASH)
-      editing_behavior(
-          base::FeatureList::IsEnabled(blink::features::kCrOSAutoSelect)
-              ? mojom::EditingBehavior::kEditingChromeOSBehavior
-              : mojom::EditingBehavior::kEditingUnixBehavior),
+      editing_behavior(mojom::EditingBehavior::kEditingChromeOSBehavior),
 #elif defined(OS_POSIX)
       editing_behavior(mojom::EditingBehavior::kEditingUnixBehavior),
 #else
diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h
index 601a1bc..7ba3ce4 100644
--- a/third_party/blink/public/common/features.h
+++ b/third_party/blink/public/common/features.h
@@ -293,8 +293,6 @@
 BLINK_COMMON_EXPORT extern const base::Feature kCompressParkableStrings;
 BLINK_COMMON_EXPORT bool IsParkableStringsToDiskEnabled();
 
-BLINK_COMMON_EXPORT extern const base::Feature kCrOSAutoSelect;
-
 BLINK_COMMON_EXPORT extern const base::Feature kCLSScrollAnchoring;
 
 BLINK_COMMON_EXPORT extern const base::Feature kReducedReferrerGranularity;
diff --git a/third_party/blink/public/devtools_protocol/browser_protocol.pdl b/third_party/blink/public/devtools_protocol/browser_protocol.pdl
index b60ab38a..50247e18 100644
--- a/third_party/blink/public/devtools_protocol/browser_protocol.pdl
+++ b/third_party/blink/public/devtools_protocol/browser_protocol.pdl
@@ -7937,6 +7937,7 @@
       ContentWebBluetooth
       ContentWebUSB
       ContentMediaSession
+      ContentMediaSessionService
       EmbedderPopupBlockerTabHelper
       EmbedderSafeBrowsingTriggeredPopupBlocker
       EmbedderSafeBrowsingThreatDetails
diff --git a/third_party/blink/public/mojom/permissions/permission.mojom b/third_party/blink/public/mojom/permissions/permission.mojom
index 25f653a1..479ec95 100644
--- a/third_party/blink/public/mojom/permissions/permission.mojom
+++ b/third_party/blink/public/mojom/permissions/permission.mojom
@@ -30,7 +30,6 @@
   WINDOW_PLACEMENT,
   FONT_ACCESS,
   DISPLAY_CAPTURE,
-  FILE_HANDLING,
 };
 
 struct MidiPermissionDescriptor {
diff --git a/third_party/blink/public/platform/web_runtime_features.h b/third_party/blink/public/platform/web_runtime_features.h
index f56a3f9c5..6d417e3 100644
--- a/third_party/blink/public/platform/web_runtime_features.h
+++ b/third_party/blink/public/platform/web_runtime_features.h
@@ -218,8 +218,6 @@
   BLINK_PLATFORM_EXPORT static void EnableMediaControlsExpandGesture(bool);
   BLINK_PLATFORM_EXPORT static void EnableGetDisplayMedia(bool);
   BLINK_PLATFORM_EXPORT static void EnableAllowSyncXHRInPageDismissal(bool);
-  BLINK_PLATFORM_EXPORT static void
-  EnableSignedExchangePrefetchCacheForNavigations(bool);
   BLINK_PLATFORM_EXPORT static void EnableSignedExchangeSubresourcePrefetch(
       bool);
   BLINK_PLATFORM_EXPORT static void EnableSubresourceWebBundles(bool);
diff --git a/third_party/blink/renderer/core/animation/animatable.cc b/third_party/blink/renderer/core/animation/animatable.cc
index 1a4aed0..5a871625 100644
--- a/third_party/blink/renderer/core/animation/animatable.cc
+++ b/third_party/blink/renderer/core/animation/animatable.cc
@@ -31,7 +31,7 @@
 // the |element.animate| API is used to animate a CSS property which is blocked
 // by the permissions policy 'layout-animations'.
 void ReportPermissionsPolicyViolationsIfNecessary(
-    const ExecutionContext& context,
+    ExecutionContext& context,
     const KeyframeEffectModelBase& effect) {
   for (const auto& property_handle : effect.Properties()) {
     if (!property_handle.IsCSSProperty())
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 3d6dfd5e..f7efde43 100644
--- a/third_party/blink/renderer/core/css/element_rule_collector.cc
+++ b/third_party/blink/renderer/core/css/element_rule_collector.cc
@@ -199,7 +199,8 @@
 
 void ElementRuleCollector::AddElementStyleProperties(
     const CSSPropertyValueSet* property_set,
-    bool is_cacheable) {
+    bool is_cacheable,
+    bool is_inline_style) {
   if (!property_set)
     return;
   auto link_match_type = static_cast<unsigned>(CSSSelector::kMatchAll);
@@ -207,6 +208,7 @@
       property_set,
       AddMatchedPropertiesOptions::Builder()
           .SetLinkMatchType(AdjustLinkMatchType(inside_link_, link_match_type))
+          .SetIsInlineStyle(true)
           .Build());
   if (!is_cacheable)
     result_.SetIsCacheable(false);
diff --git a/third_party/blink/renderer/core/css/element_rule_collector.h b/third_party/blink/renderer/core/css/element_rule_collector.h
index 1ec6fb0..479f2d4 100644
--- a/third_party/blink/renderer/core/css/element_rule_collector.h
+++ b/third_party/blink/renderer/core/css/element_rule_collector.h
@@ -131,7 +131,8 @@
   void SortAndTransferMatchedRules();
   void ClearMatchedRules();
   void AddElementStyleProperties(const CSSPropertyValueSet*,
-                                 bool is_cacheable = true);
+                                 bool is_cacheable = true,
+                                 bool is_inline_style = false);
   void FinishAddingUARules() { result_.FinishAddingUARules(); }
   void FinishAddingUserRules() {
     result_.FinishAddingUserRules();
diff --git a/third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc b/third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc
index 740309b..7295965 100644
--- a/third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc
+++ b/third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc
@@ -7312,8 +7312,11 @@
   CSSPrimitiveValue* translate_y =
       css_parsing_utils::ConsumeLengthOrPercent(range, context, kValueRangeAll);
   if (translate_y) {
-    CSSValue* translate_z =
+    CSSPrimitiveValue* translate_z =
         css_parsing_utils::ConsumeLength(range, context, kValueRangeAll);
+
+    if (translate_z && translate_z->IsZero())
+      translate_z = nullptr;
     if (translate_y->IsZero() && !translate_z)
       return list;
 
diff --git a/third_party/blink/renderer/core/css/resolver/cascade_expansion.cc b/third_party/blink/renderer/core/css/resolver/cascade_expansion.cc
index c303df1a..1ed4279 100644
--- a/third_party/blink/renderer/core/css/resolver/cascade_expansion.cc
+++ b/third_party/blink/renderer/core/css/resolver/cascade_expansion.cc
@@ -137,6 +137,7 @@
   priority_ = CascadePriority(
       matched_properties_.types_.origin, metadata.important_,
       matched_properties_.types_.tree_order,
+      matched_properties_.types_.is_inline_style,
       matched_properties_.types_.layer_order,
       EncodeMatchResultPosition(matched_properties_index_, index_));
 
diff --git a/third_party/blink/renderer/core/css/resolver/cascade_map_test.cc b/third_party/blink/renderer/core/css/resolver/cascade_map_test.cc
index dfa4b02..7b2f5a4 100644
--- a/third_party/blink/renderer/core/css/resolver/cascade_map_test.cc
+++ b/third_party/blink/renderer/core/css/resolver/cascade_map_test.cc
@@ -13,13 +13,14 @@
 
 namespace {
 CascadePriority UaPriority(wtf_size_t position) {
-  return CascadePriority(CascadeOrigin::kUserAgent, false, 0, 0, position);
+  return CascadePriority(CascadeOrigin::kUserAgent, false, 0, false, 0,
+                         position);
 }
 CascadePriority UserPriority(wtf_size_t position) {
-  return CascadePriority(CascadeOrigin::kUser, false, 0, 0, position);
+  return CascadePriority(CascadeOrigin::kUser, false, 0, false, 0, position);
 }
 CascadePriority AuthorPriority(wtf_size_t position) {
-  return CascadePriority(CascadeOrigin::kAuthor, false, 0, 0, position);
+  return CascadePriority(CascadeOrigin::kAuthor, false, 0, false, 0, position);
 }
 
 bool AddTo(CascadeMap& map,
diff --git a/third_party/blink/renderer/core/css/resolver/cascade_priority.h b/third_party/blink/renderer/core/css/resolver/cascade_priority.h
index eb9bcc92..6f000a9 100644
--- a/third_party/blink/renderer/core/css/resolver/cascade_priority.h
+++ b/third_party/blink/renderer/core/css/resolver/cascade_priority.h
@@ -56,31 +56,35 @@
 // [1] https://drafts.csswg.org/css-cascade/#cascading
 // [2] https://drafts.csswg.org/css-scoping/#shadow-cascading
 // [3] https://drafts.csswg.org/css-cascade-5/#layer-ordering
+// [4] https://drafts.csswg.org/css-cascade-5/#style-attr
 class CORE_EXPORT CascadePriority {
  public:
   // The declaration is important if this bit is set on the encoded priority.
   static constexpr uint64_t kImportantBit = 19;            // of high_bits_
   static constexpr uint64_t kOriginImportanceOffset = 16;  // of high_bits_
+  static constexpr uint64_t kIsInlineStyleOffset = 52;     // of low_bits
   static constexpr uint64_t kLayerOrderOffset = 36;        // of low_bits_
 
   CascadePriority() : low_bits_(0), high_bits_(0) {}
   CascadePriority(CascadeOrigin origin)
-      : CascadePriority(origin, false, 0, 0, 0) {}
+      : CascadePriority(origin, false, 0, false, 0, 0) {}
   CascadePriority(CascadeOrigin origin, bool important)
-      : CascadePriority(origin, important, 0, 0, 0) {}
+      : CascadePriority(origin, important, 0, false, 0, 0) {}
   CascadePriority(CascadeOrigin origin, bool important, uint16_t tree_order)
-      : CascadePriority(origin, important, tree_order, 0, 0) {}
+      : CascadePriority(origin, important, tree_order, false, 0, 0) {}
 
   // For an explanation of 'tree_order', see css-scoping:
   // https://drafts.csswg.org/css-scoping/#shadow-cascading
   CascadePriority(CascadeOrigin origin,
                   bool important,
                   uint16_t tree_order,
+                  bool is_inline_style,
                   uint16_t layer_order,
                   uint32_t position)
-      : low_bits_(static_cast<uint64_t>(position) << 4 |
-                  EncodeLayerOrder(layer_order, important)
-                      << kLayerOrderOffset),
+      : low_bits_(
+            static_cast<uint64_t>(position) << 4 |
+            EncodeLayerOrder(layer_order, important) << kLayerOrderOffset |
+            static_cast<uint64_t>(is_inline_style) << kIsInlineStyleOffset),
         high_bits_(EncodeTreeOrder(tree_order, important) |
                    EncodeOriginImportance(origin, important)
                        << kOriginImportanceOffset) {}
@@ -123,9 +127,10 @@
   //  Bit  0-3 : generation
   //  Bit  4-35: position
   //  Bit 36-51: layer_order (encoded)
+  //  Bit    52: is_inline_style
   uint64_t low_bits_;
 
-  //  Bit 0-15: tree_order (encoded)
+  //  Bit  0-15: tree_order (encoded)
   //  Bit 16-23: origin/importance (encoded)
   uint32_t high_bits_;
 };
diff --git a/third_party/blink/renderer/core/css/resolver/cascade_priority_test.cc b/third_party/blink/renderer/core/css/resolver/cascade_priority_test.cc
index 56e8198..f352adf 100644
--- a/third_party/blink/renderer/core/css/resolver/cascade_priority_test.cc
+++ b/third_party/blink/renderer/core/css/resolver/cascade_priority_test.cc
@@ -10,13 +10,14 @@
 namespace {
 
 CascadePriority AuthorPriority(uint16_t tree_order, uint32_t position) {
-  return CascadePriority(CascadeOrigin::kAuthor, false, tree_order, 0,
+  return CascadePriority(CascadeOrigin::kAuthor, false, tree_order, false, 0,
                          position);
 }
 
 CascadePriority ImportantAuthorPriority(uint16_t tree_order,
                                         uint32_t position) {
-  return CascadePriority(CascadeOrigin::kAuthor, true, tree_order, 0, position);
+  return CascadePriority(CascadeOrigin::kAuthor, true, tree_order, false, 0,
+                         position);
 }
 
 }  // namespace
@@ -35,12 +36,12 @@
 
 TEST(CascadePriorityTest, OriginOperators) {
   std::vector<CascadePriority> priorities = {
-      CascadePriority(CascadeOrigin::kTransition, false, 0, 0, 0),
-      CascadePriority(CascadeOrigin::kAnimation, false, 0, 0, 0),
-      CascadePriority(CascadeOrigin::kAuthor, false, 0, 0, 0),
-      CascadePriority(CascadeOrigin::kUser, false, 0, 0, 0),
-      CascadePriority(CascadeOrigin::kUserAgent, false, 0, 0, 0),
-      CascadePriority(CascadeOrigin::kNone, false, 0, 0, 0)};
+      CascadePriority(CascadeOrigin::kTransition, false, 0, false, 0, 0),
+      CascadePriority(CascadeOrigin::kAnimation, false, 0, false, 0, 0),
+      CascadePriority(CascadeOrigin::kAuthor, false, 0, false, 0, 0),
+      CascadePriority(CascadeOrigin::kUser, false, 0, false, 0, 0),
+      CascadePriority(CascadeOrigin::kUserAgent, false, 0, false, 0, 0),
+      CascadePriority(CascadeOrigin::kNone, false, 0, false, 0, 0)};
 
   for (size_t i = 0; i < priorities.size(); ++i) {
     for (size_t j = i; j < priorities.size(); ++j) {
@@ -70,15 +71,15 @@
 
 TEST(CascadePriorityTest, OriginImportance) {
   std::vector<CascadePriority> priorities = {
-      CascadePriority(CascadeOrigin::kTransition, false, 0, 0, 0),
-      CascadePriority(CascadeOrigin::kUserAgent, true, 0, 0, 0),
-      CascadePriority(CascadeOrigin::kUser, true, 0, 0, 0),
-      CascadePriority(CascadeOrigin::kAuthor, true, 0, 0, 0),
-      CascadePriority(CascadeOrigin::kAnimation, false, 0, 0, 0),
-      CascadePriority(CascadeOrigin::kAuthor, false, 0, 0, 0),
-      CascadePriority(CascadeOrigin::kUser, false, 0, 0, 0),
-      CascadePriority(CascadeOrigin::kUserAgent, false, 0, 0, 0),
-      CascadePriority(CascadeOrigin::kNone, false, 0, 0, 0)};
+      CascadePriority(CascadeOrigin::kTransition, false, 0, false, 0, 0),
+      CascadePriority(CascadeOrigin::kUserAgent, true, 0, false, 0, 0),
+      CascadePriority(CascadeOrigin::kUser, true, 0, false, 0, 0),
+      CascadePriority(CascadeOrigin::kAuthor, true, 0, false, 0, 0),
+      CascadePriority(CascadeOrigin::kAnimation, false, 0, false, 0, 0),
+      CascadePriority(CascadeOrigin::kAuthor, false, 0, false, 0, 0),
+      CascadePriority(CascadeOrigin::kUser, false, 0, false, 0, 0),
+      CascadePriority(CascadeOrigin::kUserAgent, false, 0, false, 0, 0),
+      CascadePriority(CascadeOrigin::kNone, false, 0, false, 0, 0)};
 
   for (size_t i = 0; i < priorities.size(); ++i) {
     for (size_t j = i; j < priorities.size(); ++j)
@@ -90,20 +91,25 @@
   using Priority = CascadePriority;
   using Origin = CascadeOrigin;
 
-  EXPECT_FALSE(Priority(Origin::kUserAgent, false, 0, 0, 0).IsImportant());
-  EXPECT_FALSE(Priority(Origin::kUser, false, 0, 0, 0).IsImportant());
-  EXPECT_FALSE(Priority(Origin::kAuthor, false, 0, 0, 0).IsImportant());
-  EXPECT_FALSE(Priority(Origin::kAnimation, false, 0, 0, 0).IsImportant());
-  EXPECT_FALSE(Priority(Origin::kTransition, false, 0, 0, 0).IsImportant());
   EXPECT_FALSE(
-      Priority(Origin::kAuthor, false, 1024, 2048, 4096).IsImportant());
+      Priority(Origin::kUserAgent, false, 0, false, 0, 0).IsImportant());
+  EXPECT_FALSE(Priority(Origin::kUser, false, 0, false, 0, 0).IsImportant());
+  EXPECT_FALSE(Priority(Origin::kAuthor, false, 0, false, 0, 0).IsImportant());
+  EXPECT_FALSE(
+      Priority(Origin::kAnimation, false, 0, false, 0, 0).IsImportant());
+  EXPECT_FALSE(
+      Priority(Origin::kTransition, false, 0, false, 0, 0).IsImportant());
+  EXPECT_FALSE(
+      Priority(Origin::kAuthor, false, 1024, false, 2048, 4096).IsImportant());
 
-  EXPECT_TRUE(Priority(Origin::kUserAgent, true, 0, 0, 0).IsImportant());
-  EXPECT_TRUE(Priority(Origin::kUser, true, 0, 0, 0).IsImportant());
-  EXPECT_TRUE(Priority(Origin::kAuthor, true, 0, 0, 0).IsImportant());
-  EXPECT_TRUE(Priority(Origin::kAnimation, true, 0, 0, 0).IsImportant());
-  EXPECT_TRUE(Priority(Origin::kTransition, true, 0, 0, 0).IsImportant());
-  EXPECT_TRUE(Priority(Origin::kAuthor, true, 1024, 2048, 4096).IsImportant());
+  EXPECT_TRUE(Priority(Origin::kUserAgent, true, 0, false, 0, 0).IsImportant());
+  EXPECT_TRUE(Priority(Origin::kUser, true, 0, false, 0, 0).IsImportant());
+  EXPECT_TRUE(Priority(Origin::kAuthor, true, 0, false, 0, 0).IsImportant());
+  EXPECT_TRUE(Priority(Origin::kAnimation, true, 0, false, 0, 0).IsImportant());
+  EXPECT_TRUE(
+      Priority(Origin::kTransition, true, 0, false, 0, 0).IsImportant());
+  EXPECT_TRUE(
+      Priority(Origin::kAuthor, true, 1024, false, 2048, 4096).IsImportant());
 }
 
 static std::vector<CascadeOrigin> all_origins = {
@@ -111,15 +117,18 @@
     CascadeOrigin::kTransition, CascadeOrigin::kAnimation};
 
 TEST(CascadePriorityTest, GetOrigin) {
-  for (CascadeOrigin origin : all_origins)
-    EXPECT_EQ(CascadePriority(origin, false, 0, 0, 0).GetOrigin(), origin);
+  for (CascadeOrigin origin : all_origins) {
+    EXPECT_EQ(CascadePriority(origin, false, 0, false, 0, 0).GetOrigin(),
+              origin);
+  }
 
   for (CascadeOrigin origin : all_origins) {
     if (origin == CascadeOrigin::kAnimation)
       continue;
     if (origin == CascadeOrigin::kTransition)
       continue;
-    EXPECT_EQ(CascadePriority(origin, true, 0, 0, 0).GetOrigin(), origin);
+    EXPECT_EQ(CascadePriority(origin, true, 0, false, 0, 0).GetOrigin(),
+              origin);
   }
 }
 
@@ -265,22 +274,27 @@
 TEST(CascadePriorityTest, LayerOrder) {
   using Priority = CascadePriority;
   CascadeOrigin origin = CascadeOrigin::kAuthor;
-  EXPECT_GE(Priority(origin, false, 0, 1, 0), Priority(origin, false, 0, 0, 0));
-  EXPECT_GE(Priority(origin, false, 0, 7, 0), Priority(origin, false, 0, 6, 0));
-  EXPECT_GE(Priority(origin, false, 0, 42, 0),
-            Priority(origin, false, 0, 42, 0));
-  EXPECT_FALSE(Priority(origin, false, 0, 1, 0) >=
-               Priority(origin, false, 0, 8, 0));
+  EXPECT_GE(Priority(origin, false, 0, false, 1, 0),
+            Priority(origin, false, 0, false, 0, 0));
+  EXPECT_GE(Priority(origin, false, 0, false, 7, 0),
+            Priority(origin, false, 0, false, 6, 0));
+  EXPECT_GE(Priority(origin, false, 0, false, 42, 0),
+            Priority(origin, false, 0, false, 42, 0));
+  EXPECT_FALSE(Priority(origin, false, 0, false, 1, 0) >=
+               Priority(origin, false, 0, false, 8, 0));
 }
 
 TEST(CascadePriorityTest, LayerOrderImportant) {
   using Priority = CascadePriority;
   CascadeOrigin origin = CascadeOrigin::kAuthor;
-  EXPECT_GE(Priority(origin, true, 0, 0, 0), Priority(origin, true, 0, 1, 0));
-  EXPECT_GE(Priority(origin, true, 0, 6, 0), Priority(origin, true, 0, 7, 0));
-  EXPECT_GE(Priority(origin, true, 0, 42, 0), Priority(origin, true, 0, 42, 0));
-  EXPECT_FALSE(Priority(origin, true, 0, 8, 0) >=
-               Priority(origin, true, 0, 1, 0));
+  EXPECT_GE(Priority(origin, true, 0, false, 0, 0),
+            Priority(origin, true, 0, false, 1, 0));
+  EXPECT_GE(Priority(origin, true, 0, false, 6, 0),
+            Priority(origin, true, 0, false, 7, 0));
+  EXPECT_GE(Priority(origin, true, 0, false, 42, 0),
+            Priority(origin, true, 0, false, 42, 0));
+  EXPECT_FALSE(Priority(origin, true, 0, false, 8, 0) >=
+               Priority(origin, true, 0, false, 1, 0));
 }
 
 TEST(CascadePriorityTest, LayerOrderDifferentOrigin) {
@@ -288,10 +302,44 @@
   // Layer order does not matter if the origin is different.
   CascadeOrigin author = CascadeOrigin::kAuthor;
   CascadeOrigin transition = CascadeOrigin::kTransition;
-  EXPECT_GE(Priority(transition, false, 0, 1, 0),
-            Priority(author, false, 0, 42, 0));
-  EXPECT_GE(Priority(transition, false, 0, 1, 0),
-            Priority(author, false, 0, 1, 0));
+  EXPECT_GE(Priority(transition, false, 0, false, 1, 0),
+            Priority(author, false, 0, false, 42, 0));
+  EXPECT_GE(Priority(transition, false, 0, false, 1, 0),
+            Priority(author, false, 0, false, 1, 0));
+}
+
+TEST(CascadePriorityTest, InlineStyle) {
+  using Priority = CascadePriority;
+  CascadeOrigin author = CascadeOrigin::kAuthor;
+  CascadeOrigin user = CascadeOrigin::kUser;
+
+  // Non-important inline style priorities
+  EXPECT_GE(Priority(author, false, 0, true, 0, 0),
+            Priority(author, false, 0, false, 0, 1));
+  EXPECT_GE(Priority(author, false, 0, true, 0, 0),
+            Priority(author, false, 0, false, 1, 0));
+  EXPECT_GE(Priority(author, false, 1, true, 0, 0),
+            Priority(author, false, 0, false, 0, 0));
+  EXPECT_LT(Priority(author, false, 1, true, 0, 0),
+            Priority(author, false, 2, false, 0, 0));
+  EXPECT_GE(Priority(author, false, 0, true, 0, 0),
+            Priority(user, false, 0, false, 0, 0));
+  EXPECT_LT(Priority(author, false, 0, true, 0, 0),
+            Priority(author, true, 0, false, 0, 0));
+
+  // Important inline style priorities
+  EXPECT_GE(Priority(author, true, 0, true, 0, 0),
+            Priority(author, true, 0, false, 0, 1));
+  EXPECT_GE(Priority(author, true, 0, true, 0, 0),
+            Priority(author, true, 0, false, 1, 0));
+  EXPECT_LT(Priority(author, true, 1, true, 0, 0),
+            Priority(author, true, 0, false, 0, 0));
+  EXPECT_GE(Priority(author, true, 1, true, 0, 0),
+            Priority(author, true, 2, false, 0, 0));
+  EXPECT_LT(Priority(author, true, 0, true, 0, 0),
+            Priority(user, true, 0, false, 0, 0));
+  EXPECT_GE(Priority(author, true, 0, true, 0, 0),
+            Priority(author, false, 0, false, 0, 0));
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/css/resolver/match_result.cc b/third_party/blink/renderer/core/css/resolver/match_result.cc
index c23d6839..be56e19 100644
--- a/third_party/blink/renderer/core/css/resolver/match_result.cc
+++ b/third_party/blink/renderer/core/css/resolver/match_result.cc
@@ -60,6 +60,7 @@
           options.GetValidPropertyFilter());
   new_properties.types_.layer_order =
       clampTo<uint16_t>(options.GetLayerOrder());
+  new_properties.types_.is_inline_style = options.IsInlineStyle();
   new_properties.types_.origin = current_origin_;
   new_properties.types_.tree_order = current_tree_order_;
 }
diff --git a/third_party/blink/renderer/core/css/resolver/match_result.h b/third_party/blink/renderer/core/css/resolver/match_result.h
index 56987a3..c16077a8 100644
--- a/third_party/blink/renderer/core/css/resolver/match_result.h
+++ b/third_party/blink/renderer/core/css/resolver/match_result.h
@@ -63,6 +63,7 @@
     uint16_t tree_order;
     // https://drafts.csswg.org/css-cascade-5/#layer-ordering
     uint16_t layer_order;
+    bool is_inline_style;
   };
   Data types_;
 };
@@ -138,6 +139,7 @@
     return valid_property_filter_;
   }
   unsigned GetLayerOrder() const { return layer_order_; }
+  bool IsInlineStyle() const { return is_inline_style_; }
 
   // TODO(crbug.com/1095765): Add a flag for whether it's inline style.
 
@@ -145,6 +147,7 @@
   unsigned link_match_type_ = CSSSelector::kMatchAll;
   ValidPropertyFilter valid_property_filter_ = ValidPropertyFilter::kNoFilter;
   unsigned layer_order_ = CascadeLayerMap::kImplicitOuterLayerOrder;
+  bool is_inline_style_ = false;
 
   friend class Builder;
 };
@@ -170,6 +173,11 @@
     return *this;
   }
 
+  Builder& SetIsInlineStyle(bool is_inline_style) {
+    options_.is_inline_style_ = is_inline_style;
+    return *this;
+  }
+
  private:
   AddMatchedPropertiesOptions options_;
 };
diff --git a/third_party/blink/renderer/core/css/resolver/matched_properties_cache.cc b/third_party/blink/renderer/core/css/resolver/matched_properties_cache.cc
index 88e417f3..990e1b5 100644
--- a/third_party/blink/renderer/core/css/resolver/matched_properties_cache.cc
+++ b/third_party/blink/renderer/core/css/resolver/matched_properties_cache.cc
@@ -151,6 +151,9 @@
     if (properties[i].types_.valid_property_filter !=
         matched_properties_types[i].valid_property_filter)
       return false;
+    if (properties[i].types_.is_inline_style !=
+        matched_properties_types[i].is_inline_style)
+      return false;
   }
   return true;
 }
diff --git a/third_party/blink/renderer/core/css/resolver/style_adjuster.cc b/third_party/blink/renderer/core/css/resolver/style_adjuster.cc
index c0537cb..7308ce26 100644
--- a/third_party/blink/renderer/core/css/resolver/style_adjuster.cc
+++ b/third_party/blink/renderer/core/css/resolver/style_adjuster.cc
@@ -127,6 +127,20 @@
   return false;
 }
 
+void AdjustStyleForSvgElement(const SVGElement& element, ComputedStyle& style) {
+  // Disable some of text decoration properties.
+  //
+  // Note that SetFooBar() is more efficient than ResetFooBar() if the current
+  // value is same as the reset value.
+  style.SetTextDecorationSkipInk(ETextDecorationSkipInk::kAuto);
+  style.SetTextDecorationStyle(
+      ETextDecorationStyle::kSolid);  // crbug.com/1246719
+  style.SetTextDecorationThickness(TextDecorationThickness(Length::Auto()));
+  style.SetTextEmphasisMark(TextEmphasisMark::kNone);
+  style.SetTextUnderlineOffset(Length());  // crbug.com/1247912
+  style.SetTextUnderlinePosition(kTextUnderlinePositionAuto);
+}
+
 }  // namespace
 
 static EDisplay EquivalentBlockDisplay(EDisplay display) {
@@ -689,7 +703,12 @@
                        element->LayoutObjectIsNeeded(style))) {
     AdjustStyleForHTMLElement(style, *html_element);
   }
+
+  auto* svg_element = DynamicTo<SVGElement>(element);
   if (style.Display() != EDisplay::kNone) {
+    if (svg_element)
+      AdjustStyleForSvgElement(*svg_element, style);
+
     bool is_document_element =
         element && element->GetDocument().documentElement() == element;
     // Per the spec, position 'static' and 'relative' in the top layer compute
@@ -802,7 +821,6 @@
   AdjustStyleForEditing(style);
 
   bool is_svg_root = false;
-  auto* svg_element = DynamicTo<SVGElement>(element);
 
   if (svg_element) {
     is_svg_root = svg_element->IsOutermostSVGSVGElement();
@@ -847,6 +865,7 @@
       baseline = layout_parent_style.CssDominantBaseline();
     }
     style.SetCssDominantBaseline(baseline);
+
   } else if (element && element->IsMathMLElement()) {
     if (style.Display() == EDisplay::kContents) {
       // https://drafts.csswg.org/css-display/#unbox-mathml
diff --git a/third_party/blink/renderer/core/css/resolver/style_cascade.cc b/third_party/blink/renderer/core/css/resolver/style_cascade.cc
index 55559ee..4284c45 100644
--- a/third_party/blink/renderer/core/css/resolver/style_cascade.cc
+++ b/third_party/blink/renderer/core/css/resolver/style_cascade.cc
@@ -326,7 +326,7 @@
       auto name = active_interpolation.key.GetCSSPropertyName();
       uint32_t position = EncodeInterpolationPosition(
           name.Id(), i, active_interpolation.key.IsPresentationAttribute());
-      CascadePriority priority(entries[i].origin, false, 0, 0, position);
+      CascadePriority priority(entries[i].origin, false, 0, false, 0, position);
 
       CSSPropertyRef ref(name, GetDocument());
       DCHECK(ref.IsValid());
@@ -457,7 +457,7 @@
     auto name = entry.key.GetCSSPropertyName();
     uint32_t position = EncodeInterpolationPosition(
         name.Id(), index, entry.key.IsPresentationAttribute());
-    CascadePriority priority(origin, false, 0, 0, position);
+    CascadePriority priority(origin, false, 0, false, 0, position);
     priority = CascadePriority(priority, resolver.generation_);
 
     CSSPropertyRef ref(name, GetDocument());
diff --git a/third_party/blink/renderer/core/css/resolver/style_resolver.cc b/third_party/blink/renderer/core/css/resolver/style_resolver.cc
index fe541b7..6398d91d 100644
--- a/third_party/blink/renderer/core/css/resolver/style_resolver.cc
+++ b/third_party/blink/renderer/core/css/resolver/style_resolver.cc
@@ -519,7 +519,8 @@
     // Inline style is immutable as long as there is no CSSOM wrapper.
     bool is_inline_style_cacheable = !element.InlineStyle()->IsMutable();
     collector.AddElementStyleProperties(element.InlineStyle(),
-                                        is_inline_style_cacheable);
+                                        is_inline_style_cacheable,
+                                        true /* is_inline_style */);
   }
 
   collector.FinishAddingAuthorRulesForTreeScope(
diff --git a/third_party/blink/renderer/core/css/svg.css b/third_party/blink/renderer/core/css/svg.css
index cc3d810..557df4ed 100644
--- a/third_party/blink/renderer/core/css/svg.css
+++ b/third_party/blink/renderer/core/css/svg.css
@@ -59,10 +59,7 @@
 }
 
 text {
-   white-space: nowrap;
-
-   /* TODO(crbug.com/1247912): Enable text-underline-offset. */
-   text-underline-offset: auto !important;
+   white-space: nowrap
 }
 
 a:-webkit-any-link {
diff --git a/third_party/blink/renderer/core/execution_context/execution_context.cc b/third_party/blink/renderer/core/execution_context/execution_context.cc
index f71c1794..909a296 100644
--- a/third_party/blink/renderer/core/execution_context/execution_context.cc
+++ b/third_party/blink/renderer/core/execution_context/execution_context.cc
@@ -608,10 +608,27 @@
 }
 
 bool ExecutionContext::IsFeatureEnabled(
+    mojom::blink::DocumentPolicyFeature feature) const {
+  DCHECK(GetDocumentPolicyFeatureInfoMap().at(feature).default_value.Type() ==
+         mojom::blink::PolicyValueType::kBool);
+  return IsFeatureEnabled(feature, PolicyValue::CreateBool(true));
+}
+
+bool ExecutionContext::IsFeatureEnabled(
+    mojom::blink::DocumentPolicyFeature feature,
+    PolicyValue threshold_value) const {
+  // The default value for any feature should be true unless restricted by
+  // document policy
+  if (!RuntimeEnabledFeatures::DocumentPolicyEnabled())
+    return true;
+  return security_context_.IsFeatureEnabled(feature, threshold_value).enabled;
+}
+
+bool ExecutionContext::IsFeatureEnabled(
     mojom::blink::DocumentPolicyFeature feature,
     ReportOptions report_option,
     const String& message,
-    const String& source_file) const {
+    const String& source_file) {
   DCHECK(GetDocumentPolicyFeatureInfoMap().at(feature).default_value.Type() ==
          mojom::blink::PolicyValueType::kBool);
   return IsFeatureEnabled(feature, PolicyValue::CreateBool(true), report_option,
@@ -623,7 +640,7 @@
     PolicyValue threshold_value,
     ReportOptions report_option,
     const String& message,
-    const String& source_file) const {
+    const String& source_file) {
   // The default value for any feature should be true unless restricted by
   // document policy
   if (!RuntimeEnabledFeatures::DocumentPolicyEnabled())
diff --git a/third_party/blink/renderer/core/execution_context/execution_context.h b/third_party/blink/renderer/core/execution_context/execution_context.h
index 87a98170..4d42f1dd 100644
--- a/third_party/blink/renderer/core/execution_context/execution_context.h
+++ b/third_party/blink/renderer/core/execution_context/execution_context.h
@@ -338,17 +338,20 @@
       ReportOptions report_option = ReportOptions::kDoNotReport,
       const String& message = g_empty_string);
 
+  bool IsFeatureEnabled(mojom::blink::DocumentPolicyFeature) const;
+  bool IsFeatureEnabled(mojom::blink::DocumentPolicyFeature,
+                        PolicyValue threshold_value) const;
   bool IsFeatureEnabled(
       mojom::blink::DocumentPolicyFeature,
       ReportOptions report_option = ReportOptions::kDoNotReport,
       const String& message = g_empty_string,
-      const String& source_file = g_empty_string) const;
+      const String& source_file = g_empty_string);
   bool IsFeatureEnabled(
       mojom::blink::DocumentPolicyFeature,
       PolicyValue threshold_value,
       ReportOptions report_option = ReportOptions::kDoNotReport,
       const String& message = g_empty_string,
-      const String& source_file = g_empty_string) const;
+      const String& source_file = g_empty_string);
 
   // Report policy violations is delegated to Document because in order
   // to both remain const qualified and output console message, needs
diff --git a/third_party/blink/renderer/core/frame/settings.cc b/third_party/blink/renderer/core/frame/settings.cc
index 129589f..e7cdc4e 100644
--- a/third_party/blink/renderer/core/frame/settings.cc
+++ b/third_party/blink/renderer/core/frame/settings.cc
@@ -92,9 +92,7 @@
 #elif defined(OS_ANDROID)
       mojom::blink::EditingBehavior::kEditingAndroidBehavior
 #elif BUILDFLAG(IS_CHROMEOS_ASH)
-      base::FeatureList::IsEnabled(features::kCrOSAutoSelect)
-          ? mojom::blink::EditingBehavior::kEditingChromeOSBehavior
-          : mojom::blink::EditingBehavior::kEditingUnixBehavior
+      mojom::blink::EditingBehavior::kEditingChromeOSBehavior
 #else  // Rest of the UNIX-like systems
       mojom::blink::EditingBehavior::kEditingUnixBehavior
 #endif
diff --git a/third_party/blink/renderer/core/frame/ua_data_values.idl b/third_party/blink/renderer/core/frame/ua_data_values.idl
index 42c40b4..27e1ed6 100644
--- a/third_party/blink/renderer/core/frame/ua_data_values.idl
+++ b/third_party/blink/renderer/core/frame/ua_data_values.idl
@@ -5,7 +5,7 @@
 // https://github.com/WICG/ua-client-hints
 
 dictionary UADataValues {
-  FrozenArray<NavigatorUABrandVersion> brands;
+  sequence<NavigatorUABrandVersion> brands;
   boolean mobile;
   DOMString platform;
   DOMString platformVersion;
diff --git a/third_party/blink/renderer/core/html/forms/date_time_field_element.cc b/third_party/blink/renderer/core/html/forms/date_time_field_element.cc
index bd662d1..ae19caf 100644
--- a/third_party/blink/renderer/core/html/forms/date_time_field_element.cc
+++ b/third_party/blink/renderer/core/html/forms/date_time_field_element.cc
@@ -214,6 +214,7 @@
 void DateTimeFieldElement::SetDisabled() {
   // Set HTML attribute disabled to change apperance.
   SetBooleanAttribute(html_names::kDisabledAttr, true);
+  setAttribute(html_names::kAriaDisabledAttr, AtomicString("true"));
   SetNeedsStyleRecalc(kSubtreeStyleChange,
                       StyleChangeReasonForTracing::CreateWithExtraData(
                           style_change_reason::kPseudoClass,
diff --git a/third_party/blink/renderer/core/loader/preload_helper.cc b/third_party/blink/renderer/core/loader/preload_helper.cc
index 66d7bf08..8c9d7ae 100644
--- a/third_party/blink/renderer/core/loader/preload_helper.cc
+++ b/third_party/blink/renderer/core/loader/preload_helper.cc
@@ -576,8 +576,6 @@
           params.cross_origin);
     }
     link_fetch_params.SetSignedExchangePrefetchCacheEnabled(
-        RuntimeEnabledFeatures::
-            SignedExchangePrefetchCacheForNavigationsEnabled() ||
         RuntimeEnabledFeatures::SignedExchangeSubresourcePrefetchEnabled(
             document.GetExecutionContext()));
     return LinkPrefetchResource::Fetch(link_fetch_params, document.Fetcher());
diff --git a/third_party/blink/renderer/core/permissions_policy/layout_animations_policy.cc b/third_party/blink/renderer/core/permissions_policy/layout_animations_policy.cc
index c3703aa1..d70e279 100644
--- a/third_party/blink/renderer/core/permissions_policy/layout_animations_policy.cc
+++ b/third_party/blink/renderer/core/permissions_policy/layout_animations_policy.cc
@@ -38,7 +38,7 @@
 // static
 void LayoutAnimationsPolicy::ReportViolation(
     const CSSProperty& animated_property,
-    const ExecutionContext& context) {
+    ExecutionContext& context) {
   DCHECK(AffectedCSSProperties().Contains(&animated_property));
   context.IsFeatureEnabled(
       mojom::blink::DocumentPolicyFeature::kLayoutAnimations,
diff --git a/third_party/blink/renderer/core/permissions_policy/layout_animations_policy.h b/third_party/blink/renderer/core/permissions_policy/layout_animations_policy.h
index 080e98a..fc339aa 100644
--- a/third_party/blink/renderer/core/permissions_policy/layout_animations_policy.h
+++ b/third_party/blink/renderer/core/permissions_policy/layout_animations_policy.h
@@ -33,7 +33,7 @@
   // which is tracked by
   // Blink.UserCounters.FeaturePolicy.PotentialViolation.
   static void ReportViolation(const CSSProperty& animated_property,
-                              const ExecutionContext& context);
+                              ExecutionContext& context);
 
  private:
   LayoutAnimationsPolicy();
diff --git a/third_party/blink/renderer/modules/bluetooth/bluetooth_advertising_event.cc b/third_party/blink/renderer/modules/bluetooth/bluetooth_advertising_event.cc
index 4220a602..57b396b 100644
--- a/third_party/blink/renderer/modules/bluetooth/bluetooth_advertising_event.cc
+++ b/third_party/blink/renderer/modules/bluetooth/bluetooth_advertising_event.cc
@@ -16,22 +16,6 @@
 
 BluetoothAdvertisingEvent::BluetoothAdvertisingEvent(
     const AtomicString& event_type,
-    const BluetoothAdvertisingEventInit* initializer)
-    : Event(event_type, initializer),
-      device_(initializer->device()),
-      name_(initializer->name()),
-      appearance_(initializer->hasAppearance() ? initializer->appearance() : 0),
-      txPower_(initializer->hasTxPower() ? initializer->txPower() : 0),
-      rssi_(initializer->hasRssi() ? initializer->rssi() : 0),
-      manufacturer_data_map_(initializer->manufacturerData()),
-      service_data_map_(initializer->serviceData()) {
-  if (initializer->hasUuids()) {
-    uuids_ = initializer->uuids();
-  }
-}
-
-BluetoothAdvertisingEvent::BluetoothAdvertisingEvent(
-    const AtomicString& event_type,
     BluetoothDevice* device,
     mojom::blink::WebBluetoothAdvertisingEventPtr advertising_event)
     : Event(event_type, Bubbles::kYes, Cancelable::kYes),
@@ -45,7 +29,7 @@
       service_data_map_(MakeGarbageCollected<BluetoothServiceDataMap>(
           advertising_event->service_data)) {
   for (const String& uuid : advertising_event->uuids) {
-    uuids_.push_back(MakeGarbageCollected<V8UnionUUIDOrUnsignedLong>(uuid));
+    uuids_.push_back(uuid);
   }
 }  // namespace blink
 
@@ -53,7 +37,6 @@
 
 void BluetoothAdvertisingEvent::Trace(Visitor* visitor) const {
   visitor->Trace(device_);
-  visitor->Trace(uuids_);
   visitor->Trace(manufacturer_data_map_);
   visitor->Trace(service_data_map_);
   Event::Trace(visitor);
@@ -71,8 +54,7 @@
   return name_;
 }
 
-const HeapVector<Member<V8UnionUUIDOrUnsignedLong>>&
-BluetoothAdvertisingEvent::uuids() const {
+const Vector<String>& BluetoothAdvertisingEvent::uuids() const {
   return uuids_;
 }
 
diff --git a/third_party/blink/renderer/modules/bluetooth/bluetooth_advertising_event.h b/third_party/blink/renderer/modules/bluetooth/bluetooth_advertising_event.h
index e8ebf26..019d02b5 100644
--- a/third_party/blink/renderer/modules/bluetooth/bluetooth_advertising_event.h
+++ b/third_party/blink/renderer/modules/bluetooth/bluetooth_advertising_event.h
@@ -12,7 +12,6 @@
 namespace blink {
 
 class BluetoothDevice;
-class BluetoothAdvertisingEventInit;
 class BluetoothManufacturerDataMap;
 class BluetoothServiceDataMap;
 
@@ -20,9 +19,6 @@
   DEFINE_WRAPPERTYPEINFO();
 
  public:
-  BluetoothAdvertisingEvent(const AtomicString& event_type,
-                            const BluetoothAdvertisingEventInit* initializer);
-
   BluetoothAdvertisingEvent(
       const AtomicString& event_type,
       BluetoothDevice* device,
@@ -36,7 +32,7 @@
 
   BluetoothDevice* device() const;
   const String& name() const;
-  const HeapVector<Member<V8UnionUUIDOrUnsignedLong>>& uuids() const;
+  const Vector<String>& uuids() const;
   absl::optional<uint16_t> appearance() const { return appearance_; }
   absl::optional<int8_t> txPower() const { return txPower_; }
   absl::optional<int8_t> rssi() const { return rssi_; }
@@ -46,7 +42,7 @@
  private:
   Member<BluetoothDevice> device_;
   String name_;
-  HeapVector<Member<V8UnionUUIDOrUnsignedLong>> uuids_;
+  Vector<String> uuids_;
   absl::optional<uint16_t> appearance_;
   absl::optional<int8_t> txPower_;
   absl::optional<int8_t> rssi_;
diff --git a/third_party/blink/renderer/modules/bluetooth/bluetooth_advertising_event.idl b/third_party/blink/renderer/modules/bluetooth/bluetooth_advertising_event.idl
index 0d599c5..ec69db2b 100644
--- a/third_party/blink/renderer/modules/bluetooth/bluetooth_advertising_event.idl
+++ b/third_party/blink/renderer/modules/bluetooth/bluetooth_advertising_event.idl
@@ -11,8 +11,7 @@
 ] interface BluetoothAdvertisingEvent : Event {
 
   readonly attribute BluetoothDevice device;
-  // TODO(crbug.com/1187331): Make the type of |uuids| match the spec.
-  readonly attribute FrozenArray<(UUID or unsigned long)> uuids;
+  readonly attribute FrozenArray<UUID> uuids;
   [HighEntropy=Direct, MeasureAs=BluetoothAdvertisingEventName] readonly attribute DOMString? name;
   [HighEntropy=Direct, MeasureAs=BluetoothAdvertisingEventAppearance] readonly attribute unsigned short? appearance;
   [HighEntropy=Direct, MeasureAs=BluetoothAdvertisingEventTxPower] readonly attribute byte? txPower;
diff --git a/third_party/blink/renderer/modules/permissions/permission_descriptor.idl b/third_party/blink/renderer/modules/permissions/permission_descriptor.idl
index a9cf3be..80707769 100644
--- a/third_party/blink/renderer/modules/permissions/permission_descriptor.idl
+++ b/third_party/blink/renderer/modules/permissions/permission_descriptor.idl
@@ -36,7 +36,6 @@
     "storage-access",
     "window-placement",
     "font-access",
-    "file-handling",
 };
 
 // The PermissionDescriptor dictionary is a base to describe permissions. Some
diff --git a/third_party/blink/renderer/modules/permissions/permission_utils.cc b/third_party/blink/renderer/modules/permissions/permission_utils.cc
index 2bc01fe5..981d876 100644
--- a/third_party/blink/renderer/modules/permissions/permission_utils.cc
+++ b/third_party/blink/renderer/modules/permissions/permission_utils.cc
@@ -238,14 +238,6 @@
   if (name == "display-capture") {
     return CreatePermissionDescriptor(PermissionName::DISPLAY_CAPTURE);
   }
-  if (name == "file-handling") {
-    if (!RuntimeEnabledFeatures::FileHandlingEnabled(
-            ExecutionContext::From(script_state))) {
-      exception_state.ThrowTypeError("File Handling is not enabled.");
-      return nullptr;
-    }
-    return CreatePermissionDescriptor(PermissionName::FILE_HANDLING);
-  }
   return nullptr;
 }
 
diff --git a/third_party/blink/renderer/platform/exported/web_runtime_features.cc b/third_party/blink/renderer/platform/exported/web_runtime_features.cc
index 3c6bd5d1..6da9b71 100644
--- a/third_party/blink/renderer/platform/exported/web_runtime_features.cc
+++ b/third_party/blink/renderer/platform/exported/web_runtime_features.cc
@@ -595,12 +595,6 @@
   RuntimeEnabledFeatures::SetAllowSyncXHRInPageDismissalEnabled(enable);
 }
 
-void WebRuntimeFeatures::EnableSignedExchangePrefetchCacheForNavigations(
-    bool enable) {
-  RuntimeEnabledFeatures::SetSignedExchangePrefetchCacheForNavigationsEnabled(
-      enable);
-}
-
 void WebRuntimeFeatures::EnableSignedExchangeSubresourcePrefetch(bool enable) {
   RuntimeEnabledFeatures::SetSignedExchangeSubresourcePrefetchEnabled(enable);
 }
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
index 75425a2..5d20663 100644
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -2056,10 +2056,6 @@
       status: "experimental",
     },
     {
-      name: "SignedExchangePrefetchCacheForNavigations",
-      status: "experimental",
-    },
-    {
       name: "SignedExchangeSubresourcePrefetch",
       origin_trial_feature_name: "SignedExchangeSubresourcePrefetch",
       status: "experimental",
diff --git a/third_party/blink/web_tests/external/wpt/css/css-cascade/layer-vs-inline-style.html b/third_party/blink/web_tests/external/wpt/css/css-cascade/layer-vs-inline-style.html
new file mode 100644
index 0000000..9ddfbc3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-cascade/layer-vs-inline-style.html
@@ -0,0 +1,60 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-cascade-5/#cascade-sort">
+<link rel="author" title="Xiaocheng Hu" href="mailto:xiaochengh@chromium.org">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+#target, #reference {
+  width: 100px;
+  height: 100px;
+}
+
+#reference {
+  background-color: green;
+}
+</style>
+
+<div id="target"></div>
+<div id="reference"></div>
+
+<script>
+// In all tests, #target should have green background color, same as #reference
+
+const testCases = [
+  {
+    title: 'Normal inline style > normal layered style',
+    style: '@layer { #target { background-color: red; }}',
+    inlineStyle: 'background-color: green'
+  },
+  {
+    title: 'Normal inline style < important layered style',
+    style: '@layer { #target { background-color: green !important; }}',
+    inlineStyle: 'background-color: red'
+  },
+  {
+    title: 'Important inline style > normal layered style',
+    style: '@layer { #target { background-color: red; }}',
+    inlineStyle: 'background-color: green !important'
+  },
+  {
+    title: 'Important inline style > important layered style',
+    style: '@layer { #target { background-color: red !important; }}',
+    inlineStyle: 'background-color: green !important'
+  },
+];
+
+for (let testCase of testCases) {
+  var documentStyle = document.createElement('style');
+  documentStyle.appendChild(document.createTextNode(testCase['style']));
+  document.head.appendChild(documentStyle);
+
+  target.style = testCase['inlineStyle'];
+
+  test(function () {
+    assert_equals(getComputedStyle(target).backgroundColor,
+                  getComputedStyle(reference).backgroundColor);
+  }, testCase['title']);
+
+  documentStyle.remove();
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-cascade/presentational-hints-cascade.html b/third_party/blink/web_tests/external/wpt/css/css-cascade/presentational-hints-cascade.html
new file mode 100644
index 0000000..729dc71
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-cascade/presentational-hints-cascade.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-cascade-5/#preshint">
+<link rel="author" title="Xiaocheng Hu" href="mailto:xiaochengh@chromium.org">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+.test {
+  height: 100px;
+  background-color: green;
+}
+
+#target1 {
+  width: 100px;
+}
+</style>
+
+<img class=test id=target1 width=200>
+<img class=test id=target2 width=200 style="width: 100px">
+
+<script>
+test(() => {
+  assert_equals(getComputedStyle(target1).width, '100px');
+}, 'Presentational hints have lower precedence than regular author style sheets');
+
+test(() => {
+  assert_equals(getComputedStyle(target2).width, '100px');
+}, 'Presentational hints have lower precedence than the style attribute');
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/parsing/translate-parsing-valid-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-transforms/parsing/translate-parsing-valid-expected.txt
index 29d09db..6ab0457 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-transforms/parsing/translate-parsing-valid-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/parsing/translate-parsing-valid-expected.txt
@@ -8,12 +8,16 @@
 FAIL e.style['translate'] = "100px calc(10px - 10%)" should set the property value assert_equals: serialization should be canonical expected "100px calc(-10% + 10px)" but got "100px calc(10px - 10%)"
 PASS e.style['translate'] = "100px 200%" should set the property value
 PASS e.style['translate'] = "100% 200px" should set the property value
-FAIL e.style['translate'] = "100px 200px 0px" should set the property value assert_equals: serialization should be canonical expected "100px 200px" but got "100px 200px 0px"
-FAIL e.style['translate'] = "100px 0px 0px" should set the property value assert_equals: serialization should be canonical expected "100px" but got "100px 0px 0px"
+PASS e.style['translate'] = "100px 200px 0px" should set the property value
+PASS e.style['translate'] = "100px 0px 300px" should set the property value
+PASS e.style['translate'] = "100px 0px 0px" should set the property value
 PASS e.style['translate'] = "100px 200px 300px" should set the property value
 PASS e.style['translate'] = "100% 200% 300px" should set the property value
+PASS e.style['translate'] = "100% 0% 200px" should set the property value
+PASS e.style['translate'] = "0% 0% 100px" should set the property value
+PASS e.style['translate'] = "0em 0em 100px" should set the property value
 PASS e.style['translate'] = "calc(10% + 10px) calc(20% + 20px) calc(30em + 30px)" should set the property value
 PASS e.style['translate'] = "0" should set the property value
-FAIL e.style['translate'] = "1px 2px 0" should set the property value assert_equals: serialization should be canonical expected "1px 2px" but got "1px 2px 0px"
+PASS e.style['translate'] = "1px 2px 0" should set the property value
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/parsing/translate-parsing-valid.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/parsing/translate-parsing-valid.html
index 04440d5..132e0416 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-transforms/parsing/translate-parsing-valid.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/parsing/translate-parsing-valid.html
@@ -24,10 +24,15 @@
 test_valid_value("translate", "100% 200px");
 
 test_valid_value("translate", "100px 200px 0px", "100px 200px");
+test_valid_value("translate", "100px 0px 300px", "100px 0px 300px");
 test_valid_value("translate", "100px 0px 0px", "100px");
 test_valid_value("translate", "100px 200px 300px");
 test_valid_value("translate", "100% 200% 300px");
 
+test_valid_value("translate", "100% 0% 200px", "100% 0% 200px");
+test_valid_value("translate", "0% 0% 100px", "0% 0% 100px");
+test_valid_value("translate", "0em 0em 100px", "0em 0em 100px");
+
 test_valid_value("translate", "calc(10% + 10px) calc(20% + 20px) calc(30em + 30px)");
 
 test_valid_value("translate", "0", "0px");
diff --git a/third_party/blink/web_tests/fast/dom/HTMLAnchorElement/set-href-attribute-hostname-expected.txt b/third_party/blink/web_tests/fast/dom/HTMLAnchorElement/set-href-attribute-hostname-expected.txt
index b5b701b..8da1a40 100644
--- a/third_party/blink/web_tests/fast/dom/HTMLAnchorElement/set-href-attribute-hostname-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/HTMLAnchorElement/set-href-attribute-hostname-expected.txt
@@ -17,7 +17,9 @@
 Set a hostname that contains space in it
 FAIL a.href should be http://www.my domain.com/path/. Was http://www.other%20domain.com/path/.
 Set hostname on a local file
-PASS a.href is 'c:/path/testurl.html'
+FAIL a.href should be file://a/C:/path/testurl.html. Was c:/path/testurl.html.
+Set hostname to 'localhost' on a local file
+FAIL a.href should be file:///C:/path/testurl.html. Was c:/path/testurl.html.
 Set hostname to undefined
 PASS a.href is 'https://undefined:8080/path/'
 PASS successfullyParsed is true
diff --git a/third_party/blink/web_tests/fast/dom/HTMLAnchorElement/set-href-attribute-hostname.html b/third_party/blink/web_tests/fast/dom/HTMLAnchorElement/set-href-attribute-hostname.html
index 49bb9d40..ad13d7c 100644
--- a/third_party/blink/web_tests/fast/dom/HTMLAnchorElement/set-href-attribute-hostname.html
+++ b/third_party/blink/web_tests/fast/dom/HTMLAnchorElement/set-href-attribute-hostname.html
@@ -63,7 +63,20 @@
 debug("Set hostname on a local file");
 a.href = "c:/path/testurl.html";
 a.hostname= "a";
-shouldBe("a.href", "'c:/path/testurl.html'");
+// file: should be added only to the URL on Windows and not on other OSes,
+// but we can't easily detect platforms in a test.
+shouldBe("a.href", "'file://a/C:/path/testurl.html'");
+} catch(e) {
+debug("Exception: " + e.description);
+}
+
+try {
+debug("Set hostname to 'localhost' on a local file");
+a.href = "c:/path/testurl.html";
+a.hostname= "localhost";
+// file: should be added only to the URL on Windows and not on other OSes,
+// but we can't easily detect platforms in a test.
+shouldBe("a.href", "'file:///C:/path/testurl.html'");
 } catch(e) {
 debug("Exception: " + e.description);
 }
diff --git a/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-readonly-subfield-expected.txt b/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-readonly-subfield-expected.txt
deleted file mode 100644
index 9f1a7751..0000000
--- a/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-readonly-subfield-expected.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-Sub-fields in input[type=date] should be read-only in some cases. This requires window.internals.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-createDateInput argument order: min, max, value
-
-
-Year field:
-PASS isReadOnlyField(createDateInput("", "", ""), pseudoYear) is false
-PASS isReadOnlyField(createDateInput("2012-12-17", "", ""), pseudoYear) is false
-PASS isReadOnlyField(createDateInput("", "2012-12-17", ""), pseudoYear) is false
-PASS isReadOnlyField(createDateInput("", "", "2012-12-17"), pseudoYear) is false
-PASS isReadOnlyField(createDateInput("2012-01-01", "2012-12-31", ""), pseudoYear) is true
-PASS isReadOnlyField(createDateInput("2012-01-01", "2013-12-31", ""), pseudoYear) is false
-PASS isReadOnlyField(createDateInput("2012-01-01", "2012-12-31", "2012-05-30"), pseudoYear) is true
-PASS isReadOnlyField(createDateInput("2012-01-01", "2012-12-31", "2013-01-01"), pseudoYear) is false
-Month field:
-PASS isReadOnlyField(createDateInput("", "", ""), pseudoMonth) is false
-PASS isReadOnlyField(createDateInput("2012-12-17", "", ""), pseudoMonth) is false
-PASS isReadOnlyField(createDateInput("", "2012-12-17", ""), pseudoMonth) is false
-PASS isReadOnlyField(createDateInput("", "", "2012-12-17"), pseudoMonth) is false
-PASS isReadOnlyField(createDateInput("2012-12-01", "2012-12-31", ""), pseudoMonth) is true
-PASS isReadOnlyField(createDateInput("2012-11-01", "2013-12-31", ""), pseudoMonth) is false
-PASS isReadOnlyField(createDateInput("2012-12-01", "2013-12-31", ""), pseudoMonth) is false
-PASS isReadOnlyField(createDateInput("2012-12-01", "2012-12-31", "2012-12-15"), pseudoMonth) is true
-PASS isReadOnlyField(createDateInput("2012-12-01", "2012-12-31", "2012-11-30"), pseudoMonth) is false
-Day field:
-We should not make all the fields readonly by min/max, so day field is always editable.
-PASS isReadOnlyField(createDateInput("", "", ""), pseudoDay) is false
-PASS isReadOnlyField(createDateInput("2012-12-17", "", ""), pseudoDay) is false
-PASS isReadOnlyField(createDateInput("", "2012-12-17", ""), pseudoDay) is false
-PASS isReadOnlyField(createDateInput("", "", "2012-12-17"), pseudoDay) is false
-PASS isReadOnlyField(createDateInput("2012-12-17", "2012-12-17", ""), pseudoDay) is false
-PASS isReadOnlyField(createDateInput("2012-12-17", "2013-12-18", ""), pseudoDay) is false
-PASS isReadOnlyField(createDateInput("2012-11-17", "2012-12-17", ""), pseudoDay) is false
-PASS isReadOnlyField(createDateInput("2012-12-17", "2013-12-17", ""), pseudoDay) is false
-PASS isReadOnlyField(createDateInput("2012-12-17", "2012-12-17", "2012-12-17"), pseudoDay) is false
-PASS isReadOnlyField(createDateInput("2012-12-17", "2012-12-17", "2012-12-18"), pseudoDay) is false
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-readonly-subfield.html b/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-readonly-subfield.html
index 8bef81600..90d3be3 100644
--- a/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-readonly-subfield.html
+++ b/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-readonly-subfield.html
@@ -1,9 +1,12 @@
 <!DOCTYPE html>
 <body>
-<script src="../../../resources/js-test.js"></script>
+<script src="../../../resources/testharness.js"></script>
+<script src="../../../resources/testharnessreport.js"></script>
 <script>
+'use strict';
+
 function createDateInput(min, max, value) {
-    var input = document.createElement('input');
+    let input = document.createElement('input');
     input.type = 'date';
     if (min)
         input.min = min;
@@ -16,53 +19,66 @@
 
 // FIXME: Rename this function and the test file.
 function isReadOnlyField(input, pseudo) {
-    var node = internals.shadowRoot(input).querySelector('*[pseudo="' + pseudo + '"]');
+    if(!window.internals)
+        assert_unreached('This requires window.internals.');
+
+    let node = internals.shadowRoot(input).querySelector('*[pseudo="' + pseudo + '"]');
     if (!node)
-        testFailed('Requested node is missing.');
-    return node && node.hasAttribute('disabled');
+        assert_unreached('Requested node is missing.');
+    return node.hasAttribute('disabled')  && (node.getAttribute('aria-disabled') == "true");
 }
 
-var pseudoDay = '-webkit-datetime-edit-day-field';
-var pseudoMonth = '-webkit-datetime-edit-month-field';
-var pseudoYear = '-webkit-datetime-edit-year-field';
+function assertReadOnly(field, input) {
+    let pseudo = `-webkit-datetime-edit-${field}-field`;
+    assert_true(isReadOnlyField(input, pseudo), `The ${field} spinbutton should be read-only`)
+}
 
-description('Sub-fields in input[type=date] should be read-only in some cases. This requires window.internals.');
-debug('createDateInput argument order: min, max, value');
-debug('');
+function assertNotReadOnly(field, input) {
+    let pseudo = `-webkit-datetime-edit-${field}-field`;
+    assert_false(isReadOnlyField(input, pseudo), `The ${field} spinbutton should not be read-only`)
+}
 
-debug('Year field:');
-shouldBeFalse('isReadOnlyField(createDateInput("", "", ""), pseudoYear)');
-shouldBeFalse('isReadOnlyField(createDateInput("2012-12-17", "", ""), pseudoYear)');
-shouldBeFalse('isReadOnlyField(createDateInput("", "2012-12-17", ""), pseudoYear)');
-shouldBeFalse('isReadOnlyField(createDateInput("", "", "2012-12-17"), pseudoYear)');
-shouldBeTrue('isReadOnlyField(createDateInput("2012-01-01", "2012-12-31", ""), pseudoYear)');
-shouldBeFalse('isReadOnlyField(createDateInput("2012-01-01", "2013-12-31", ""), pseudoYear)');
-shouldBeTrue('isReadOnlyField(createDateInput("2012-01-01", "2012-12-31", "2012-05-30"), pseudoYear)');
-shouldBeFalse('isReadOnlyField(createDateInput("2012-01-01", "2012-12-31", "2013-01-01"), pseudoYear)');
+test(()=>{
 
-debug('Month field:');
-shouldBeFalse('isReadOnlyField(createDateInput("", "", ""), pseudoMonth)');
-shouldBeFalse('isReadOnlyField(createDateInput("2012-12-17", "", ""), pseudoMonth)');
-shouldBeFalse('isReadOnlyField(createDateInput("", "2012-12-17", ""), pseudoMonth)');
-shouldBeFalse('isReadOnlyField(createDateInput("", "", "2012-12-17"), pseudoMonth)');
-shouldBeTrue('isReadOnlyField(createDateInput("2012-12-01", "2012-12-31", ""), pseudoMonth)');
-shouldBeFalse('isReadOnlyField(createDateInput("2012-11-01", "2013-12-31", ""), pseudoMonth)');
-shouldBeFalse('isReadOnlyField(createDateInput("2012-12-01", "2013-12-31", ""), pseudoMonth)');
-shouldBeTrue('isReadOnlyField(createDateInput("2012-12-01", "2012-12-31", "2012-12-15"), pseudoMonth)');
-shouldBeFalse('isReadOnlyField(createDateInput("2012-12-01", "2012-12-31", "2012-11-30"), pseudoMonth)');
+    assertNotReadOnly('year', createDateInput("", "", ""));
+    assertNotReadOnly('year', createDateInput("2012-12-17", "", ""));
+    assertNotReadOnly('year', createDateInput("", "2012-12-17", ""));
+    assertNotReadOnly('year', createDateInput("", "", "2012-12-17"));
+    assertReadOnly('year', createDateInput("2012-01-01", "2012-12-31", ""))
+    assertNotReadOnly('year', createDateInput("2012-01-01", "2013-12-31", ""));
+    assertReadOnly('year', createDateInput("2012-01-01", "2012-12-31", "2012-05-30"))
+    assertNotReadOnly('year', createDateInput("2012-01-01", "2012-12-31", "2013-01-01"));
 
-debug('Day field:');
-debug('We should not make all the fields readonly by min/max, so day field is always editable.');
-shouldBeFalse('isReadOnlyField(createDateInput("", "", ""), pseudoDay)');
-shouldBeFalse('isReadOnlyField(createDateInput("2012-12-17", "", ""), pseudoDay)');
-shouldBeFalse('isReadOnlyField(createDateInput("", "2012-12-17", ""), pseudoDay)');
-shouldBeFalse('isReadOnlyField(createDateInput("", "", "2012-12-17"), pseudoDay)');
-shouldBeFalse('isReadOnlyField(createDateInput("2012-12-17", "2012-12-17", ""), pseudoDay)');
-shouldBeFalse('isReadOnlyField(createDateInput("2012-12-17", "2013-12-18", ""), pseudoDay)');
-shouldBeFalse('isReadOnlyField(createDateInput("2012-11-17", "2012-12-17", ""), pseudoDay)');
-shouldBeFalse('isReadOnlyField(createDateInput("2012-12-17", "2013-12-17", ""), pseudoDay)');
-shouldBeFalse('isReadOnlyField(createDateInput("2012-12-17", "2012-12-17", "2012-12-17"), pseudoDay)');
-shouldBeFalse('isReadOnlyField(createDateInput("2012-12-17", "2012-12-17", "2012-12-18"), pseudoDay)');
+}, 'The year spinbutton in input[type=date] should be read-only in some cases.')
+
+test(()=>{
+
+    assertNotReadOnly('month', createDateInput("", "", ""));
+    assertNotReadOnly('month', createDateInput("2012-12-17", "", ""));
+    assertNotReadOnly('month', createDateInput("", "2012-12-17", ""));
+    assertNotReadOnly('month', createDateInput("", "", "2012-12-17"));
+    assertReadOnly('month', createDateInput("2012-12-01", "2012-12-31", ""))
+    assertNotReadOnly('month', createDateInput("2012-11-01", "2013-12-31", ""));
+    assertNotReadOnly('month', createDateInput("2012-12-01", "2013-12-31", ""));
+    assertReadOnly('month', createDateInput("2012-12-01", "2012-12-31", "2012-12-15"))
+    assertNotReadOnly('month', createDateInput("2012-12-01", "2012-12-31", "2012-11-30"));
+
+}, 'The month spinbutton in input[type=date] should be read-only in some cases.')
+
+test(()=>{
+
+    assertNotReadOnly('day', createDateInput("", "", ""));
+    assertNotReadOnly('day', createDateInput("2012-12-17", "", ""));
+    assertNotReadOnly('day', createDateInput("", "2012-12-17", ""));
+    assertNotReadOnly('day', createDateInput("", "", "2012-12-17"));
+    assertNotReadOnly('day', createDateInput("2012-12-17", "2012-12-17", ""));
+    assertNotReadOnly('day', createDateInput("2012-12-17", "2013-12-18", ""));
+    assertNotReadOnly('day', createDateInput("2012-11-17", "2012-12-17", ""));
+    assertNotReadOnly('day', createDateInput("2012-12-17", "2013-12-17", ""));
+    assertNotReadOnly('day', createDateInput("2012-12-17", "2012-12-17", "2012-12-17"));
+    assertNotReadOnly('day', createDateInput("2012-12-17", "2012-12-17", "2012-12-18"));
+
+}, 'The day spinbutton in input[type=date] should be always editable.')
 
 </script>
 </body>
diff --git a/third_party/blink/web_tests/fast/url/script-tests/relative-win.js b/third_party/blink/web_tests/fast/url/script-tests/relative-win.js
index f2dfdde4..0cece3e 100644
--- a/third_party/blink/web_tests/fast/url/script-tests/relative-win.js
+++ b/third_party/blink/web_tests/fast/url/script-tests/relative-win.js
@@ -24,7 +24,7 @@
   ["file:///C:/foo", "/z:/bar", "file:///Z:/bar"],
   // Treat absolute paths as being off of the drive.
   ["file:///C:/foo", "/bar", "file:///C:/bar"],
-  ["file://localhost/C:/foo", "/bar", "file://localhost/C:/bar"],
+  ["file://localhost/C:/foo", "/bar", "file:///C:/bar"],
   ["file:///C:/foo/com/", "/bar", "file:///C:/bar"],
   // On Windows, two slashes without a drive letter when the base is a file
   // means that the path is UNC.
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/network/websocket/offline-no-recieve.js b/third_party/blink/web_tests/http/tests/inspector-protocol/network/websocket/offline-no-recieve.js
index 9b0cf05..887d5e23 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/network/websocket/offline-no-recieve.js
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/network/websocket/offline-no-recieve.js
@@ -8,16 +8,6 @@
 
   await dp.Network.enable();
 
-  // Currently having _some_ emulated conditions is required at the socket
-  // creation time.
-  // TODO(dsv@chromium.org): Fix this in the throttler implementation.
-  await dp.Network.emulateNetworkConditions({
-    offline: false,
-    downloadThroughput: 1000000,
-    uploadThroughput: 1000000,
-    latency: 0,
-  });
-
   await session.evaluateAsync(`
         log = '';
         new Promise((resolve) => {
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/network/websocket/offline-no-send.js b/third_party/blink/web_tests/http/tests/inspector-protocol/network/websocket/offline-no-send.js
index caafb85a..3d1dffa 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/network/websocket/offline-no-send.js
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/network/websocket/offline-no-send.js
@@ -8,16 +8,6 @@
 
   await dp.Network.enable();
 
-  // Currently having _some_ emulated conditions is required at the socket
-  // creation time.
-  // TODO(dsv@chromium.org): Fix this in the throttler implementation.
-  await dp.Network.emulateNetworkConditions({
-    offline: false,
-    downloadThroughput: 1000000,
-    uploadThroughput: 1000000,
-    latency: 0,
-  });
-
   await session.evaluateAsync(`
         log = '';
         new Promise((resolve) => {
diff --git a/third_party/blink/web_tests/platform/linux/fast/dom/HTMLAnchorElement/set-href-attribute-hostname-expected.txt b/third_party/blink/web_tests/platform/linux/fast/dom/HTMLAnchorElement/set-href-attribute-hostname-expected.txt
index b5b701b..8da1a40 100644
--- a/third_party/blink/web_tests/platform/linux/fast/dom/HTMLAnchorElement/set-href-attribute-hostname-expected.txt
+++ b/third_party/blink/web_tests/platform/linux/fast/dom/HTMLAnchorElement/set-href-attribute-hostname-expected.txt
@@ -17,7 +17,9 @@
 Set a hostname that contains space in it
 FAIL a.href should be http://www.my domain.com/path/. Was http://www.other%20domain.com/path/.
 Set hostname on a local file
-PASS a.href is 'c:/path/testurl.html'
+FAIL a.href should be file://a/C:/path/testurl.html. Was c:/path/testurl.html.
+Set hostname to 'localhost' on a local file
+FAIL a.href should be file:///C:/path/testurl.html. Was c:/path/testurl.html.
 Set hostname to undefined
 PASS a.href is 'https://undefined:8080/path/'
 PASS successfullyParsed is true
diff --git a/third_party/blink/web_tests/platform/linux/fast/url/relative-win-expected.txt b/third_party/blink/web_tests/platform/linux/fast/url/relative-win-expected.txt
index 4e50dcd..5361246 100644
--- a/third_party/blink/web_tests/platform/linux/fast/url/relative-win-expected.txt
+++ b/third_party/blink/web_tests/platform/linux/fast/url/relative-win-expected.txt
@@ -8,13 +8,13 @@
 FAIL canonicalize('/../bar.html') should be file:///C:/bar.html. Was file:///bar.html.
 FAIL canonicalize('\\\\another\\path') should be . Was http://another/path.
 FAIL canonicalize('//c:/foo') should be file:///C:/foo. Was file://c:/foo.
-FAIL canonicalize('//localhost/c:/foo') should be file:///C:/foo. Was file://localhost/c:/foo.
+FAIL canonicalize('//localhost/c:/foo') should be file:///C:/foo. Was file:///c:/foo.
 FAIL canonicalize('c:') should be . Was c:.
 FAIL canonicalize('c:/foo') should be . Was c:/foo.
 FAIL canonicalize('c:\\foo') should be . Was c:\foo.
 FAIL canonicalize('/z:/bar') should be file:///Z:/bar. Was file:///z:/bar.
 FAIL canonicalize('/bar') should be file:///C:/bar. Was file:///bar.
-FAIL canonicalize('/bar') should be file://localhost/C:/bar. Was file://localhost/bar.
+FAIL canonicalize('/bar') should be file:///C:/bar. Was file:///bar.
 FAIL canonicalize('/bar') should be file:///C:/bar. Was file:///bar.
 PASS canonicalize('//somehost/path') is 'file://somehost/path'
 FAIL canonicalize('/\\//somehost/path') should be file://somehost/path. Was file:///somehost/path.
diff --git a/third_party/blink/web_tests/platform/mac/fast/url/relative-win-expected.txt b/third_party/blink/web_tests/platform/mac/fast/url/relative-win-expected.txt
index 4e50dcd..5361246 100644
--- a/third_party/blink/web_tests/platform/mac/fast/url/relative-win-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/fast/url/relative-win-expected.txt
@@ -8,13 +8,13 @@
 FAIL canonicalize('/../bar.html') should be file:///C:/bar.html. Was file:///bar.html.
 FAIL canonicalize('\\\\another\\path') should be . Was http://another/path.
 FAIL canonicalize('//c:/foo') should be file:///C:/foo. Was file://c:/foo.
-FAIL canonicalize('//localhost/c:/foo') should be file:///C:/foo. Was file://localhost/c:/foo.
+FAIL canonicalize('//localhost/c:/foo') should be file:///C:/foo. Was file:///c:/foo.
 FAIL canonicalize('c:') should be . Was c:.
 FAIL canonicalize('c:/foo') should be . Was c:/foo.
 FAIL canonicalize('c:\\foo') should be . Was c:\foo.
 FAIL canonicalize('/z:/bar') should be file:///Z:/bar. Was file:///z:/bar.
 FAIL canonicalize('/bar') should be file:///C:/bar. Was file:///bar.
-FAIL canonicalize('/bar') should be file://localhost/C:/bar. Was file://localhost/bar.
+FAIL canonicalize('/bar') should be file:///C:/bar. Was file:///bar.
 FAIL canonicalize('/bar') should be file:///C:/bar. Was file:///bar.
 PASS canonicalize('//somehost/path') is 'file://somehost/path'
 FAIL canonicalize('/\\//somehost/path') should be file://somehost/path. Was file:///somehost/path.
diff --git a/third_party/blink/web_tests/platform/win/external/wpt/url/a-element-expected.txt b/third_party/blink/web_tests/platform/win/external/wpt/url/a-element-expected.txt
index 41a2455..bf1cca7c 100644
--- a/third_party/blink/web_tests/platform/win/external/wpt/url/a-element-expected.txt
+++ b/third_party/blink/web_tests/platform/win/external/wpt/url/a-element-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 664 tests; 365 PASS, 299 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 664 tests; 369 PASS, 295 FAIL, 0 TIMEOUT, 0 NOTRUN.
 PASS Loading data…
 PASS Parsing: <http://example	.
 org> against <http://example.org/foo/bar>
@@ -454,7 +454,7 @@
 PASS Parsing: <..> against <file:///C:/>
 PASS Parsing: <..> against <file:///>
 PASS Parsing: </> against <file:///C:/a/b>
-FAIL Parsing: </> against <file://h/C:/a/b> assert_equals: href expected "file://h/C:/" but got "file:///C:/"
+PASS Parsing: </> against <file://h/C:/a/b>
 PASS Parsing: </> against <file://h/a/b>
 FAIL Parsing: <//d:> against <file:///C:/a/b> assert_equals: href expected "file:///d:" but got "file:///D:"
 FAIL Parsing: <//d:/..> against <file:///C:/a/b> assert_equals: href expected "file:///d:/" but got "file:///D:/"
@@ -497,9 +497,9 @@
 FAIL Parsing: </c|/foo/bar> against <file:///c:/baz/qux> assert_equals: href expected "file:///c:/foo/bar" but got "file:///C:/foo/bar"
 FAIL Parsing: <file:\c:\foo\bar> against <file:///c:/baz/qux> assert_equals: href expected "file:///c:/foo/bar" but got "file:///C:/foo/bar"
 FAIL Parsing: </c:/foo/bar> against <file://host/path> assert_equals: href expected "file://host/c:/foo/bar" but got "file:///C:/foo/bar"
-FAIL Parsing: <file://example.net/C:/> against <about:blank> assert_equals: href expected "file://example.net/C:/" but got "file:///C:/"
-FAIL Parsing: <file://1.2.3.4/C:/> against <about:blank> assert_equals: href expected "file://1.2.3.4/C:/" but got "file:///C:/"
-FAIL Parsing: <file://[1::8]/C:/> against <about:blank> assert_equals: href expected "file://[1::8]/C:/" but got "file:///C:/"
+PASS Parsing: <file://example.net/C:/> against <about:blank>
+PASS Parsing: <file://1.2.3.4/C:/> against <about:blank>
+PASS Parsing: <file://[1::8]/C:/> against <about:blank>
 FAIL Parsing: <C|/> against <file://host/> assert_equals: href expected "file://host/C:/" but got "file:///C:/"
 FAIL Parsing: </C:/> against <file://host/> assert_equals: href expected "file://host/C:/" but got "file:///C:/"
 FAIL Parsing: <file:C:/> against <file://host/> assert_equals: href expected "file://host/C:/" but got "file:///C:/"
diff --git a/third_party/blink/web_tests/platform/win/external/wpt/url/a-element-xhtml-expected.txt b/third_party/blink/web_tests/platform/win/external/wpt/url/a-element-xhtml-expected.txt
index 41a2455..bf1cca7c 100644
--- a/third_party/blink/web_tests/platform/win/external/wpt/url/a-element-xhtml-expected.txt
+++ b/third_party/blink/web_tests/platform/win/external/wpt/url/a-element-xhtml-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 664 tests; 365 PASS, 299 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 664 tests; 369 PASS, 295 FAIL, 0 TIMEOUT, 0 NOTRUN.
 PASS Loading data…
 PASS Parsing: <http://example	.
 org> against <http://example.org/foo/bar>
@@ -454,7 +454,7 @@
 PASS Parsing: <..> against <file:///C:/>
 PASS Parsing: <..> against <file:///>
 PASS Parsing: </> against <file:///C:/a/b>
-FAIL Parsing: </> against <file://h/C:/a/b> assert_equals: href expected "file://h/C:/" but got "file:///C:/"
+PASS Parsing: </> against <file://h/C:/a/b>
 PASS Parsing: </> against <file://h/a/b>
 FAIL Parsing: <//d:> against <file:///C:/a/b> assert_equals: href expected "file:///d:" but got "file:///D:"
 FAIL Parsing: <//d:/..> against <file:///C:/a/b> assert_equals: href expected "file:///d:/" but got "file:///D:/"
@@ -497,9 +497,9 @@
 FAIL Parsing: </c|/foo/bar> against <file:///c:/baz/qux> assert_equals: href expected "file:///c:/foo/bar" but got "file:///C:/foo/bar"
 FAIL Parsing: <file:\c:\foo\bar> against <file:///c:/baz/qux> assert_equals: href expected "file:///c:/foo/bar" but got "file:///C:/foo/bar"
 FAIL Parsing: </c:/foo/bar> against <file://host/path> assert_equals: href expected "file://host/c:/foo/bar" but got "file:///C:/foo/bar"
-FAIL Parsing: <file://example.net/C:/> against <about:blank> assert_equals: href expected "file://example.net/C:/" but got "file:///C:/"
-FAIL Parsing: <file://1.2.3.4/C:/> against <about:blank> assert_equals: href expected "file://1.2.3.4/C:/" but got "file:///C:/"
-FAIL Parsing: <file://[1::8]/C:/> against <about:blank> assert_equals: href expected "file://[1::8]/C:/" but got "file:///C:/"
+PASS Parsing: <file://example.net/C:/> against <about:blank>
+PASS Parsing: <file://1.2.3.4/C:/> against <about:blank>
+PASS Parsing: <file://[1::8]/C:/> against <about:blank>
 FAIL Parsing: <C|/> against <file://host/> assert_equals: href expected "file://host/C:/" but got "file:///C:/"
 FAIL Parsing: </C:/> against <file://host/> assert_equals: href expected "file://host/C:/" but got "file:///C:/"
 FAIL Parsing: <file:C:/> against <file://host/> assert_equals: href expected "file://host/C:/" but got "file:///C:/"
diff --git a/third_party/blink/web_tests/platform/win/external/wpt/url/url-constructor.any-expected.txt b/third_party/blink/web_tests/platform/win/external/wpt/url/url-constructor.any-expected.txt
index b0e3591..12de146 100644
--- a/third_party/blink/web_tests/platform/win/external/wpt/url/url-constructor.any-expected.txt
+++ b/third_party/blink/web_tests/platform/win/external/wpt/url/url-constructor.any-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 666 tests; 463 PASS, 203 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 666 tests; 467 PASS, 199 FAIL, 0 TIMEOUT, 0 NOTRUN.
 PASS Loading data…
 PASS Parsing: <http://example	.
 org> against <http://example.org/foo/bar>
@@ -536,7 +536,7 @@
 PASS Parsing: <..> against <file:///C:/>
 PASS Parsing: <..> against <file:///>
 PASS Parsing: </> against <file:///C:/a/b>
-FAIL Parsing: </> against <file://h/C:/a/b> assert_equals: href expected "file://h/C:/" but got "file:///C:/"
+PASS Parsing: </> against <file://h/C:/a/b>
 PASS Parsing: </> against <file://h/a/b>
 FAIL Parsing: <//d:> against <file:///C:/a/b> assert_equals: href expected "file:///d:" but got "file:///D:"
 FAIL Parsing: <//d:/..> against <file:///C:/a/b> assert_equals: href expected "file:///d:/" but got "file:///D:/"
@@ -579,9 +579,9 @@
 FAIL Parsing: </c|/foo/bar> against <file:///c:/baz/qux> assert_equals: href expected "file:///c:/foo/bar" but got "file:///C:/foo/bar"
 FAIL Parsing: <file:\c:\foo\bar> against <file:///c:/baz/qux> assert_equals: href expected "file:///c:/foo/bar" but got "file:///C:/foo/bar"
 FAIL Parsing: </c:/foo/bar> against <file://host/path> assert_equals: href expected "file://host/c:/foo/bar" but got "file:///C:/foo/bar"
-FAIL Parsing: <file://example.net/C:/> against <about:blank> assert_equals: href expected "file://example.net/C:/" but got "file:///C:/"
-FAIL Parsing: <file://1.2.3.4/C:/> against <about:blank> assert_equals: href expected "file://1.2.3.4/C:/" but got "file:///C:/"
-FAIL Parsing: <file://[1::8]/C:/> against <about:blank> assert_equals: href expected "file://[1::8]/C:/" but got "file:///C:/"
+PASS Parsing: <file://example.net/C:/> against <about:blank>
+PASS Parsing: <file://1.2.3.4/C:/> against <about:blank>
+PASS Parsing: <file://[1::8]/C:/> against <about:blank>
 FAIL Parsing: <C|/> against <file://host/> assert_equals: href expected "file://host/C:/" but got "file:///C:/"
 FAIL Parsing: </C:/> against <file://host/> assert_equals: href expected "file://host/C:/" but got "file:///C:/"
 FAIL Parsing: <file:C:/> against <file://host/> assert_equals: href expected "file://host/C:/" but got "file:///C:/"
diff --git a/third_party/blink/web_tests/platform/win/external/wpt/url/url-constructor.any.worker-expected.txt b/third_party/blink/web_tests/platform/win/external/wpt/url/url-constructor.any.worker-expected.txt
index b0e3591..12de146 100644
--- a/third_party/blink/web_tests/platform/win/external/wpt/url/url-constructor.any.worker-expected.txt
+++ b/third_party/blink/web_tests/platform/win/external/wpt/url/url-constructor.any.worker-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 666 tests; 463 PASS, 203 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 666 tests; 467 PASS, 199 FAIL, 0 TIMEOUT, 0 NOTRUN.
 PASS Loading data…
 PASS Parsing: <http://example	.
 org> against <http://example.org/foo/bar>
@@ -536,7 +536,7 @@
 PASS Parsing: <..> against <file:///C:/>
 PASS Parsing: <..> against <file:///>
 PASS Parsing: </> against <file:///C:/a/b>
-FAIL Parsing: </> against <file://h/C:/a/b> assert_equals: href expected "file://h/C:/" but got "file:///C:/"
+PASS Parsing: </> against <file://h/C:/a/b>
 PASS Parsing: </> against <file://h/a/b>
 FAIL Parsing: <//d:> against <file:///C:/a/b> assert_equals: href expected "file:///d:" but got "file:///D:"
 FAIL Parsing: <//d:/..> against <file:///C:/a/b> assert_equals: href expected "file:///d:/" but got "file:///D:/"
@@ -579,9 +579,9 @@
 FAIL Parsing: </c|/foo/bar> against <file:///c:/baz/qux> assert_equals: href expected "file:///c:/foo/bar" but got "file:///C:/foo/bar"
 FAIL Parsing: <file:\c:\foo\bar> against <file:///c:/baz/qux> assert_equals: href expected "file:///c:/foo/bar" but got "file:///C:/foo/bar"
 FAIL Parsing: </c:/foo/bar> against <file://host/path> assert_equals: href expected "file://host/c:/foo/bar" but got "file:///C:/foo/bar"
-FAIL Parsing: <file://example.net/C:/> against <about:blank> assert_equals: href expected "file://example.net/C:/" but got "file:///C:/"
-FAIL Parsing: <file://1.2.3.4/C:/> against <about:blank> assert_equals: href expected "file://1.2.3.4/C:/" but got "file:///C:/"
-FAIL Parsing: <file://[1::8]/C:/> against <about:blank> assert_equals: href expected "file://[1::8]/C:/" but got "file:///C:/"
+PASS Parsing: <file://example.net/C:/> against <about:blank>
+PASS Parsing: <file://1.2.3.4/C:/> against <about:blank>
+PASS Parsing: <file://[1::8]/C:/> against <about:blank>
 FAIL Parsing: <C|/> against <file://host/> assert_equals: href expected "file://host/C:/" but got "file:///C:/"
 FAIL Parsing: </C:/> against <file://host/> assert_equals: href expected "file://host/C:/" but got "file:///C:/"
 FAIL Parsing: <file:C:/> against <file://host/> assert_equals: href expected "file://host/C:/" but got "file:///C:/"
diff --git a/third_party/blink/web_tests/platform/win/external/wpt/url/url-setters-a-area.window-expected.txt b/third_party/blink/web_tests/platform/win/external/wpt/url/url-setters-a-area.window-expected.txt
index 121dd507..6763308 100644
--- a/third_party/blink/web_tests/platform/win/external/wpt/url/url-setters-a-area.window-expected.txt
+++ b/third_party/blink/web_tests/platform/win/external/wpt/url/url-setters-a-area.window-expected.txt
@@ -151,8 +151,8 @@
 PASS <area>: Setting <http://example.net>.host = '' The empty host is not valid for special schemes
 FAIL <a>: Setting <view-source+http://example.net/foo>.host = '' The empty host is OK for non-special schemes assert_equals: expected "view-source+http:///foo" but got "view-source+http://example.net/foo"
 FAIL <area>: Setting <view-source+http://example.net/foo>.host = '' The empty host is OK for non-special schemes assert_equals: expected "view-source+http:///foo" but got "view-source+http://example.net/foo"
-FAIL <a>: Setting <a:/foo>.host = 'example.net' Path-only URLs can gain a host assert_equals: expected "a://example.net/foo" but got "file:///A:/foo"
-FAIL <area>: Setting <a:/foo>.host = 'example.net' Path-only URLs can gain a host assert_equals: expected "a://example.net/foo" but got "file:///A:/foo"
+FAIL <a>: Setting <a:/foo>.host = 'example.net' Path-only URLs can gain a host assert_equals: expected "a://example.net/foo" but got "file://example.net/A:/foo"
+FAIL <area>: Setting <a:/foo>.host = 'example.net' Path-only URLs can gain a host assert_equals: expected "a://example.net/foo" but got "file://example.net/A:/foo"
 PASS <a>: Setting <http://example.net>.host = '0x7F000001:8080' IPv4 address syntax is normalized
 PASS <area>: Setting <http://example.net>.host = '0x7F000001:8080' IPv4 address syntax is normalized
 PASS <a>: Setting <http://example.net>.host = '[::0:01]:2' IPv6 address syntax is normalized
@@ -249,8 +249,8 @@
 PASS <area>: Setting <http://example.net>.hostname = '' The empty host is not valid for special schemes
 FAIL <a>: Setting <view-source+http://example.net/foo>.hostname = '' The empty host is OK for non-special schemes assert_equals: expected "view-source+http:///foo" but got "view-source+http://example.net/foo"
 FAIL <area>: Setting <view-source+http://example.net/foo>.hostname = '' The empty host is OK for non-special schemes assert_equals: expected "view-source+http:///foo" but got "view-source+http://example.net/foo"
-FAIL <a>: Setting <a:/foo>.hostname = 'example.net' Path-only URLs can gain a host assert_equals: expected "a://example.net/foo" but got "file:///A:/foo"
-FAIL <area>: Setting <a:/foo>.hostname = 'example.net' Path-only URLs can gain a host assert_equals: expected "a://example.net/foo" but got "file:///A:/foo"
+FAIL <a>: Setting <a:/foo>.hostname = 'example.net' Path-only URLs can gain a host assert_equals: expected "a://example.net/foo" but got "file://example.net/A:/foo"
+FAIL <area>: Setting <a:/foo>.hostname = 'example.net' Path-only URLs can gain a host assert_equals: expected "a://example.net/foo" but got "file://example.net/A:/foo"
 PASS <a>: Setting <http://example.net:8080>.hostname = '0x7F000001' IPv4 address syntax is normalized
 PASS <area>: Setting <http://example.net:8080>.hostname = '0x7F000001' IPv4 address syntax is normalized
 PASS <a>: Setting <http://example.net>.hostname = '[::0:01]' IPv6 address syntax is normalized
diff --git a/third_party/blink/web_tests/platform/win/fast/dom/HTMLAnchorElement/set-href-attribute-hostname-expected.txt b/third_party/blink/web_tests/platform/win/fast/dom/HTMLAnchorElement/set-href-attribute-hostname-expected.txt
index 3915284..e36e256e 100644
--- a/third_party/blink/web_tests/platform/win/fast/dom/HTMLAnchorElement/set-href-attribute-hostname-expected.txt
+++ b/third_party/blink/web_tests/platform/win/fast/dom/HTMLAnchorElement/set-href-attribute-hostname-expected.txt
@@ -17,7 +17,9 @@
 Set a hostname that contains space in it
 FAIL a.href should be http://www.my domain.com/path/. Was http://www.other%20domain.com/path/.
 Set hostname on a local file
-FAIL a.href should be c:/path/testurl.html. Was file:///C:/path/testurl.html.
+PASS a.href is 'file://a/C:/path/testurl.html'
+Set hostname to 'localhost' on a local file
+PASS a.href is 'file:///C:/path/testurl.html'
 Set hostname to undefined
 PASS a.href is 'https://undefined:8080/path/'
 PASS successfullyParsed is true
diff --git a/third_party/blink/web_tests/platform/win/fast/url/relative-win-expected.txt b/third_party/blink/web_tests/platform/win/fast/url/relative-win-expected.txt
index f84c2ee..a05f999d 100644
--- a/third_party/blink/web_tests/platform/win/fast/url/relative-win-expected.txt
+++ b/third_party/blink/web_tests/platform/win/fast/url/relative-win-expected.txt
@@ -14,7 +14,7 @@
 FAIL canonicalize('c:\\foo') should be . Was file:///C:/foo.
 PASS canonicalize('/z:/bar') is 'file:///Z:/bar'
 PASS canonicalize('/bar') is 'file:///C:/bar'
-FAIL canonicalize('/bar') should be file://localhost/C:/bar. Was file:///C:/bar.
+PASS canonicalize('/bar') is 'file:///C:/bar'
 PASS canonicalize('/bar') is 'file:///C:/bar'
 PASS canonicalize('//somehost/path') is 'file://somehost/path'
 PASS canonicalize('/\\//somehost/path') is 'file://somehost/path'
diff --git a/third_party/blink/web_tests/svg/text/text-decoration-skip-ink-expected.svg b/third_party/blink/web_tests/svg/text/text-decoration-skip-ink-expected.svg
new file mode 100644
index 0000000..7ba8114
--- /dev/null
+++ b/third_party/blink/web_tests/svg/text/text-decoration-skip-ink-expected.svg
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="800" height="600">
+<style>
+#t1, #g1 {
+  font-size: 40px;
+  text-decoration: underline;
+}
+#t2 {
+  font-size: 20px;
+  text-decoration: underline;
+}
+</style>
+<text id="t1" x="20" y="40">Not scaled yyy</text>
+<text id="t2" x="10" y="80" transform="scale(2)">Scaled qqq</text>
+<g id="g1"><text x="20" y="280">Wrapped with &lt;g></text></g>
+</svg>
diff --git a/third_party/blink/web_tests/svg/text/text-decoration-skip-ink.svg b/third_party/blink/web_tests/svg/text/text-decoration-skip-ink.svg
new file mode 100644
index 0000000..33d3d243
--- /dev/null
+++ b/third_party/blink/web_tests/svg/text/text-decoration-skip-ink.svg
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="800" height="600">
+<style>
+#t1, #g1 {
+  font-size: 40px;
+  text-decoration: underline;
+  text-decoration-skip-ink: none;
+}
+#t2 {
+  font-size: 20px;
+  text-decoration: underline;
+  text-decoration-skip-ink: none;
+}
+</style>
+<text id="t1" x="20" y="40">Not scaled yyy</text>
+<text id="t2" x="10" y="80" transform="scale(2)">Scaled qqq</text>
+<g id="g1"><text x="20" y="280">Wrapped with &lt;g></text></g>
+</svg>
diff --git a/third_party/blink/web_tests/svg/text/text-decoration-style-expected.svg b/third_party/blink/web_tests/svg/text/text-decoration-style-expected.svg
new file mode 100644
index 0000000..433cc6d
--- /dev/null
+++ b/third_party/blink/web_tests/svg/text/text-decoration-style-expected.svg
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="800" height="600">
+<style>
+#t1, #g1 {
+  font-size: 40px;
+  text-decoration: underline;
+}
+#t2 {
+  font-size: 20px;
+  text-decoration: underline;
+}
+</style>
+<text id="t1" x="20" y="40">Not scaled</text>
+<text id="t2" x="10" y="80" transform="scale(2)">Scaled</text>
+<g id="g1"><text x="20" y="280">Wrapped with &lt;g></text></g>
+</svg>
diff --git a/third_party/blink/web_tests/svg/text/text-decoration-style.svg b/third_party/blink/web_tests/svg/text/text-decoration-style.svg
new file mode 100644
index 0000000..e50e1587
--- /dev/null
+++ b/third_party/blink/web_tests/svg/text/text-decoration-style.svg
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="800" height="600">
+<style>
+#t1, #g1 {
+  font-size: 40px;
+  text-decoration: underline;
+  text-decoration-style: wavy;
+}
+#t2 {
+  font-size: 20px;
+  text-decoration: underline;
+  text-decoration-style: dotted;
+}
+</style>
+<text id="t1" x="20" y="40">Not scaled</text>
+<text id="t2" x="10" y="80" transform="scale(2)">Scaled</text>
+<g id="g1"><text x="20" y="280">Wrapped with &lt;g></text></g>
+</svg>
diff --git a/third_party/blink/web_tests/svg/text/text-decoration-thickness-expected.svg b/third_party/blink/web_tests/svg/text/text-decoration-thickness-expected.svg
new file mode 100644
index 0000000..433cc6d
--- /dev/null
+++ b/third_party/blink/web_tests/svg/text/text-decoration-thickness-expected.svg
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="800" height="600">
+<style>
+#t1, #g1 {
+  font-size: 40px;
+  text-decoration: underline;
+}
+#t2 {
+  font-size: 20px;
+  text-decoration: underline;
+}
+</style>
+<text id="t1" x="20" y="40">Not scaled</text>
+<text id="t2" x="10" y="80" transform="scale(2)">Scaled</text>
+<g id="g1"><text x="20" y="280">Wrapped with &lt;g></text></g>
+</svg>
diff --git a/third_party/blink/web_tests/svg/text/text-decoration-thickness.svg b/third_party/blink/web_tests/svg/text/text-decoration-thickness.svg
new file mode 100644
index 0000000..9e00c62
--- /dev/null
+++ b/third_party/blink/web_tests/svg/text/text-decoration-thickness.svg
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="800" height="600">
+<style>
+#t1, #g1 {
+  font-size: 40px;
+  text-decoration: underline;
+  text-decoration-thickness: 5px;
+}
+#t2 {
+  font-size: 20px;
+  text-decoration: underline;
+  text-decoration-thickness: 5px;
+}
+</style>
+<text id="t1" x="20" y="40">Not scaled</text>
+<text id="t2" x="10" y="80" transform="scale(2)">Scaled</text>
+<g id="g1"><text x="20" y="280">Wrapped with &lt;g></text></g>
+</svg>
diff --git a/third_party/blink/web_tests/svg/text/text-emphasis-style-expected.svg b/third_party/blink/web_tests/svg/text/text-emphasis-style-expected.svg
new file mode 100644
index 0000000..4290a21
--- /dev/null
+++ b/third_party/blink/web_tests/svg/text/text-emphasis-style-expected.svg
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="800" height="600">
+<style>
+#t1, #g1 {
+  font-size: 40px;
+}
+#t2 {
+  font-size: 20px;
+}
+</style>
+<text id="t1" x="20" y="60">Not scaled</text>
+<text id="t2" x="10" y="100" transform="scale(2)">Scaled</text>
+<g id="g1"><text x="20" y="300">Wrapped with &lt;g></text></g>
+</svg>
diff --git a/third_party/blink/web_tests/svg/text/text-emphasis-style.svg b/third_party/blink/web_tests/svg/text/text-emphasis-style.svg
new file mode 100644
index 0000000..bdcbc4c9
--- /dev/null
+++ b/third_party/blink/web_tests/svg/text/text-emphasis-style.svg
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="800" height="600">
+<style>
+#t1, #g1 {
+  font-size: 40px;
+  text-emphasis-style: circle;
+  -webkit-text-emphasis-style: circle;
+}
+#t2 {
+  font-size: 20px;
+  text-emphasis-style: '✔';
+  -webkit-text-emphasis-style: '✔';
+}
+</style>
+<text id="t1" x="20" y="60">Not scaled</text>
+<text id="t2" x="10" y="100" transform="scale(2)">Scaled</text>
+<g id="g1"><text x="20" y="300">Wrapped with &lt;g></text></g>
+</svg>
diff --git a/third_party/blink/web_tests/svg/text/text-underline-offset-expected.svg b/third_party/blink/web_tests/svg/text/text-underline-offset-expected.svg
index f64bbdc..433cc6d 100644
--- a/third_party/blink/web_tests/svg/text/text-underline-offset-expected.svg
+++ b/third_party/blink/web_tests/svg/text/text-underline-offset-expected.svg
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="800" height="600">
 <style>
-#t1 {
+#t1, #g1 {
   font-size: 40px;
   text-decoration: underline;
 }
@@ -12,4 +12,5 @@
 </style>
 <text id="t1" x="20" y="40">Not scaled</text>
 <text id="t2" x="10" y="80" transform="scale(2)">Scaled</text>
+<g id="g1"><text x="20" y="280">Wrapped with &lt;g></text></g>
 </svg>
diff --git a/third_party/blink/web_tests/svg/text/text-underline-offset.svg b/third_party/blink/web_tests/svg/text/text-underline-offset.svg
index c26404d..8e51273 100644
--- a/third_party/blink/web_tests/svg/text/text-underline-offset.svg
+++ b/third_party/blink/web_tests/svg/text/text-underline-offset.svg
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="800" height="600">
 <style>
-#t1 {
+#t1, #g1 {
   font-size: 40px;
   text-decoration: underline;
   text-underline-offset: 40px;
@@ -14,4 +14,5 @@
 </style>
 <text id="t1" x="20" y="40">Not scaled</text>
 <text id="t2" x="10" y="80" transform="scale(2)">Scaled</text>
+<g id="g1"><text x="20" y="280">Wrapped with &lt;g></text></g>
 </svg>
diff --git a/third_party/blink/web_tests/svg/text/text-underline-position-expected.svg b/third_party/blink/web_tests/svg/text/text-underline-position-expected.svg
new file mode 100644
index 0000000..5e566cf3
--- /dev/null
+++ b/third_party/blink/web_tests/svg/text/text-underline-position-expected.svg
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="800" height="600">
+<style>
+text {
+  writing-mode: vertical-rl;
+  letter-spacing: 10px;
+}
+#t1, #g1 {
+  font-size: 40px;
+  text-decoration: underline;
+}
+#t2 {
+  font-size: 20px;
+  text-decoration: underline;
+}
+</style>
+<text id="t1" x="40" y="20">Not scaled</text>
+<text id="t2" x="80" y="10" transform="scale(2)">Scaled</text>
+<g id="g1"><text x="280" y="20">Wrapped with &lt;g></text></g>
+</svg>
diff --git a/third_party/blink/web_tests/svg/text/text-underline-position.svg b/third_party/blink/web_tests/svg/text/text-underline-position.svg
new file mode 100644
index 0000000..0ebc254
--- /dev/null
+++ b/third_party/blink/web_tests/svg/text/text-underline-position.svg
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="800" height="600">
+<style>
+text {
+  writing-mode: vertical-rl;
+  letter-spacing: 10px;
+}
+#t1, #g1 {
+  font-size: 40px;
+  text-decoration: underline;
+  text-underline-position: left;
+}
+#t2 {
+  font-size: 20px;
+  text-decoration: underline;
+  text-underline-position: right;
+}
+</style>
+<text id="t1" x="40" y="20">Not scaled</text>
+<text id="t2" x="80" y="10" transform="scale(2)">Scaled</text>
+<g id="g1"><text x="280" y="20">Wrapped with &lt;g></text></g>
+</svg>
diff --git a/third_party/blink/web_tests/transforms/translate-parsing.html b/third_party/blink/web_tests/transforms/translate-parsing.html
index 8e66608..0ebebd3 100644
--- a/third_party/blink/web_tests/transforms/translate-parsing.html
+++ b/third_party/blink/web_tests/transforms/translate-parsing.html
@@ -12,7 +12,7 @@
 expect('none').parsesAs('none').isComputedTo('none');
 expect('10px').parsesAs('10px').isComputedTo('10px');
 expect('10px -2.5px').parsesAs('10px -2.5px').isComputedTo('10px -2.5px');
-expect('10px -2.5px 0').parsesAs('10px -2.5px 0px').isComputedTo('10px -2.5px');
+expect('10px -2.5px 0').parsesAs('10px -2.5px').isComputedTo('10px -2.5px');
 
 expect('42.5%').parsesAs('42.5%').isComputedTo('42.5%');
 expect('42.5% -20.5%').parsesAs('42.5% -20.5%').isComputedTo('42.5% -20.5%');
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 8f0d1c8..b40d28c 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -7092,6 +7092,7 @@
   <int value="131080" label="kContent-kWebBluetooth"/>
   <int value="131081" label="kContent-kWebUSB"/>
   <int value="131082" label="kContent-kMediaSession"/>
+  <int value="131083" label="kContent-kMediaSessionService"/>
   <int value="196608" label="kEmbedder-kUnknown"/>
   <int value="196609" label="kEmbedder-kPopupBlockerTabHelper"/>
   <int value="196610" label="kEmbedder-kSafeBrowsingTriggeredPopupBlocker"/>
@@ -48160,6 +48161,7 @@
   <int value="-1449590570" label="RestrictGamepadAccess:enabled"/>
   <int value="-1449358747" label="RemoveStatusBarInWebApps:enabled"/>
   <int value="-1448511207" label="UseMessagesStagingUrl:disabled"/>
+  <int value="-1448309039" label="VerticalSnapState:enabled"/>
   <int value="-1447147245" label="VideoPlayerNativeControls:enabled"/>
   <int value="-1446625028" label="CrostiniUsbAllowUnsupported:enabled"/>
   <int value="-1446425986" label="ProtectSyncCredentialOnReauth:disabled"/>
@@ -48715,6 +48717,7 @@
   <int value="-1027254093" label="LockScreenNotifications:disabled"/>
   <int value="-1027124889" label="NtlmV2Enabled:enabled"/>
   <int value="-1026192558" label="OopRasterizationDDL:enabled"/>
+  <int value="-1026082043" label="VerticalSnapState:disabled"/>
   <int value="-1025125875" label="AssistantTimersV2:disabled"/>
   <int value="-1024731815" label="MessagesForAndroidNearOomReduction:enabled"/>
   <int value="-1024065253" label="EnableWireGuard:disabled"/>
@@ -62407,6 +62410,7 @@
   <int value="216" label="Nearby Share: Contacts"/>
   <int value="217" label="Nearby Share: Data Usage"/>
   <int value="218" label="Phone Hub Apps: On/Off"/>
+  <int value="219" label="Phone Hub Camera Roll: On/Off"/>
   <int value="300" label="Add Account"/>
   <int value="301" label="Remove Account"/>
   <int value="302" label="Split Sync On/Off"/>
diff --git a/tools/metrics/histograms/metadata/arc/histograms.xml b/tools/metrics/histograms/metadata/arc/histograms.xml
index ca4e222..ca6cd14b 100644
--- a/tools/metrics/histograms/metadata/arc/histograms.xml
+++ b/tools/metrics/histograms/metadata/arc/histograms.xml
@@ -1582,6 +1582,9 @@
 
 <histogram name="Arc.ShareFilesOnExit" enum="ArcShareFilesOnExit"
     expires_after="M75">
+  <obsolete>
+    Removed in September 2021. Feature launched in 2018, no longer tracked.
+  </obsolete>
   <owner>weifangsun@google.com</owner>
   <owner>djacobo@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/history/histograms.xml b/tools/metrics/histograms/metadata/history/histograms.xml
index 601cfbe2..dcafc46 100644
--- a/tools/metrics/histograms/metadata/history/histograms.xml
+++ b/tools/metrics/histograms/metadata/history/histograms.xml
@@ -383,6 +383,17 @@
   </summary>
 </histogram>
 
+<histogram name="History.Clusters.Actions.LinksOpened" units="links opened"
+    expires_after="2022-02-25">
+  <owner>manukh@chromium.org</owner>
+  <owner>chrome-memories@google.com</owner>
+  <summary>
+    Logged when the user closed the chrome://history/journeys page (e.g. closed
+    tab, navigated in the same tab, or closed browser). Logs the # of links
+    opened from the journeys page.
+  </summary>
+</histogram>
+
 <histogram name="History.DatabaseAdvancedMetricsTime" units="ms"
     expires_after="M77">
   <owner>shess@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/phonehub/histograms.xml b/tools/metrics/histograms/metadata/phonehub/histograms.xml
index 5e7faab..34afcb1 100644
--- a/tools/metrics/histograms/metadata/phonehub/histograms.xml
+++ b/tools/metrics/histograms/metadata/phonehub/histograms.xml
@@ -148,6 +148,7 @@
         Base histogram. Use suffixes of this histogram instead.
       </obsolete>
     </variant>
+    <variant name=".CameraRoll" summary="Camera roll sub-feature."/>
     <variant name=".NotificationBadge"
         summary="Notification badge sub-feature.">
       <obsolete>
diff --git a/tools/metrics/histograms/metadata/software/histograms.xml b/tools/metrics/histograms/metadata/software/histograms.xml
index bff54a9..031d86e 100644
--- a/tools/metrics/histograms/metadata/software/histograms.xml
+++ b/tools/metrics/histograms/metadata/software/histograms.xml
@@ -218,7 +218,7 @@
 </histogram>
 
 <histogram name="SoftwareReporter.IPCDisconnected"
-    enum="SoftwareReporterIPCDisconnected" expires_after="M95">
+    enum="SoftwareReporterIPCDisconnected" expires_after="2022-08-25">
   <owner>drubery@chromium.org</owner>
   <owner>bdea@chromium.org</owner>
   <owner>chrome-safebrowsing-alerts@google.com</owner>
@@ -242,7 +242,7 @@
 </histogram>
 
 <histogram name="SoftwareReporter.LogsUploadEnabled"
-    enum="SoftwareReporterLogsUploadEnabled" expires_after="M95">
+    enum="SoftwareReporterLogsUploadEnabled" expires_after="2022-08-25">
   <owner>drubery@chromium.org</owner>
   <owner>bdea@chromium.org</owner>
   <owner>chrome-safebrowsing-alerts@google.com</owner>
@@ -255,7 +255,7 @@
 </histogram>
 
 <histogram name="SoftwareReporter.LogsUploadResult"
-    enum="SoftwareReporterLogsUploadResult" expires_after="M95">
+    enum="SoftwareReporterLogsUploadResult" expires_after="2022-08-25">
   <owner>drubery@chromium.org</owner>
   <owner>bdea@chromium.org</owner>
   <owner>chrome-safebrowsing-alerts@google.com</owner>
@@ -268,7 +268,8 @@
 </histogram>
 
 <histogram name="SoftwareReporter.LogsUploadResultRegistryError"
-    enum="SoftwareReporterLogsUploadResultRegistryError" expires_after="M95">
+    enum="SoftwareReporterLogsUploadResultRegistryError"
+    expires_after="2022-08-25">
   <owner>drubery@chromium.org</owner>
   <owner>bdea@chromium.org</owner>
   <owner>chrome-safebrowsing-alerts@google.com</owner>
@@ -302,7 +303,7 @@
 </histogram>
 
 <histogram name="SoftwareReporter.MinorVersion" units="units"
-    expires_after="2021-09-19">
+    expires_after="2022-08-25">
   <owner>drubery@chromium.org</owner>
   <owner>chrome-safebrowsing-alerts@google.com</owner>
   <summary>
diff --git a/ui/base/ime/ash/BUILD.gn b/ui/base/ime/ash/BUILD.gn
index 3401cc9..0d0ba4ff 100644
--- a/ui/base/ime/ash/BUILD.gn
+++ b/ui/base/ime/ash/BUILD.gn
@@ -23,7 +23,7 @@
 }
 
 component("ash") {
-  output_name = "ui_base_ime_chromeos"
+  output_name = "ui_base_ime_ash"
 
   sources = [
     "component_extension_ime_manager.cc",
@@ -60,7 +60,7 @@
     "input_method_util.h",
   ]
 
-  defines = [ "IS_UI_BASE_IME_CHROMEOS_IMPL" ]
+  defines = [ "IS_UI_BASE_IME_ASH_IMPL" ]
 
   public_deps = [
     "//ui/base/ime",
diff --git a/ui/base/ime/ash/component_extension_ime_manager.h b/ui/base/ime/ash/component_extension_ime_manager.h
index 844de92..daea43ce 100644
--- a/ui/base/ime/ash/component_extension_ime_manager.h
+++ b/ui/base/ime/ash/component_extension_ime_manager.h
@@ -20,7 +20,7 @@
 namespace chromeos {
 
 // Represents an engine in component extension IME.
-struct COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) ComponentExtensionEngine {
+struct COMPONENT_EXPORT(UI_BASE_IME_ASH) ComponentExtensionEngine {
   ComponentExtensionEngine();
   ComponentExtensionEngine(const ComponentExtensionEngine& other);
   ~ComponentExtensionEngine();
@@ -34,7 +34,7 @@
 };
 
 // Represents a component extension IME.
-struct COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) ComponentExtensionIME {
+struct COMPONENT_EXPORT(UI_BASE_IME_ASH) ComponentExtensionIME {
   ComponentExtensionIME();
   ComponentExtensionIME(const ComponentExtensionIME& other);
   ~ComponentExtensionIME();
@@ -47,7 +47,7 @@
 };
 
 // This class manages component extension input method.
-class COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) ComponentExtensionIMEManager {
+class COMPONENT_EXPORT(UI_BASE_IME_ASH) ComponentExtensionIMEManager {
  public:
   ComponentExtensionIMEManager(
       std::unique_ptr<ComponentExtensionIMEManagerDelegate> delegate);
diff --git a/ui/base/ime/ash/component_extension_ime_manager_delegate.h b/ui/base/ime/ash/component_extension_ime_manager_delegate.h
index 8f0495f..e436d34 100644
--- a/ui/base/ime/ash/component_extension_ime_manager_delegate.h
+++ b/ui/base/ime/ash/component_extension_ime_manager_delegate.h
@@ -16,8 +16,7 @@
 struct ComponentExtensionIME;
 
 // Provides an interface to list/load/unload for component extension IME.
-class COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS)
-    ComponentExtensionIMEManagerDelegate {
+class COMPONENT_EXPORT(UI_BASE_IME_ASH) ComponentExtensionIMEManagerDelegate {
  public:
   virtual ~ComponentExtensionIMEManagerDelegate() = default;
 
diff --git a/ui/base/ime/ash/extension_ime_util.h b/ui/base/ime/ash/extension_ime_util.h
index fa9ba47..0279e048c 100644
--- a/ui/base/ime/ash/extension_ime_util.h
+++ b/ui/base/ime/ash/extension_ime_util.h
@@ -15,93 +15,93 @@
 // Extension IME related utilities.
 namespace extension_ime_util {
 
-COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) extern const char kXkbExtensionId[];
-COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) extern const char kM17nExtensionId[];
-COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) extern const char kHangulExtensionId[];
-COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) extern const char kMozcExtensionId[];
-COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) extern const char kT13nExtensionId[];
-COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS)
+COMPONENT_EXPORT(UI_BASE_IME_ASH) extern const char kXkbExtensionId[];
+COMPONENT_EXPORT(UI_BASE_IME_ASH) extern const char kM17nExtensionId[];
+COMPONENT_EXPORT(UI_BASE_IME_ASH) extern const char kHangulExtensionId[];
+COMPONENT_EXPORT(UI_BASE_IME_ASH) extern const char kMozcExtensionId[];
+COMPONENT_EXPORT(UI_BASE_IME_ASH) extern const char kT13nExtensionId[];
+COMPONENT_EXPORT(UI_BASE_IME_ASH)
 extern const char kChinesePinyinExtensionId[];
-COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS)
+COMPONENT_EXPORT(UI_BASE_IME_ASH)
 extern const char kChineseZhuyinExtensionId[];
-COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS)
+COMPONENT_EXPORT(UI_BASE_IME_ASH)
 extern const char kChineseCangjieExtensionId[];
 
 // Extension id, path (relative to |chrome::DIR_RESOURCES|) and IME engine
 // id for the builtin-in Braille IME extension.
-COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS)
+COMPONENT_EXPORT(UI_BASE_IME_ASH)
 extern const char kBrailleImeExtensionId[];
-COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS)
+COMPONENT_EXPORT(UI_BASE_IME_ASH)
 extern const char kBrailleImeExtensionPath[];
-COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) extern const char kBrailleImeEngineId[];
+COMPONENT_EXPORT(UI_BASE_IME_ASH) extern const char kBrailleImeEngineId[];
 
 // The fake language name used for ARC IMEs.
-COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) extern const char kArcImeLanguage[];
+COMPONENT_EXPORT(UI_BASE_IME_ASH) extern const char kArcImeLanguage[];
 
 // Returns InputMethodID for |engine_id| in |extension_id| of extension IME.
 // This function does not check |extension_id| is installed extension IME nor
 // |engine_id| is really a member of |extension_id|.
-std::string COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS)
+std::string COMPONENT_EXPORT(UI_BASE_IME_ASH)
     GetInputMethodID(const std::string& extension_id,
                      const std::string& engine_id);
 
 // Returns InputMethodID for |engine_id| in |extension_id| of component
 // extension IME, This function does not check |extension_id| is component one
 // nor |engine_id| is really a member of |extension_id|.
-std::string COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS)
+std::string COMPONENT_EXPORT(UI_BASE_IME_ASH)
     GetComponentInputMethodID(const std::string& extension_id,
                               const std::string& engine_id);
 
 // Returns InputMethodID for |engine_id| in |extension_id| of ARC IME.
 // This function does not check |extension_id| is one for ARC IME nor
 // |engine_id| is really an installed ARC IME.
-std::string COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS)
+std::string COMPONENT_EXPORT(UI_BASE_IME_ASH)
     GetArcInputMethodID(const std::string& extension_id,
                         const std::string& engine_id);
 
 // Returns extension ID if |input_method_id| is extension IME ID or component
 // extension IME ID. Otherwise returns an empty string ("").
-std::string COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS)
+std::string COMPONENT_EXPORT(UI_BASE_IME_ASH)
     GetExtensionIDFromInputMethodID(const std::string& input_method_id);
 
 // Returns InputMethodID from engine id (e.g. xkb:fr:fra), or returns itself if
 // the |engine_id| is not a known engine id.
 // The caller must make sure the |engine_id| is from system input methods
 // instead of 3rd party input methods.
-std::string COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS)
+std::string COMPONENT_EXPORT(UI_BASE_IME_ASH)
     GetInputMethodIDByEngineID(const std::string& engine_id);
 
 // Returns true if |input_method_id| is extension IME ID. This function does not
 // check |input_method_id| is installed extension IME.
-bool COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS)
+bool COMPONENT_EXPORT(UI_BASE_IME_ASH)
     IsExtensionIME(const std::string& input_method_id);
 
 // Returns true if |input_method_id| is component extension IME ID. This
 // function does not check |input_method_id| is really allowlisted one or not.
 // If you want to check |input_method_id| is allowlisted component extension
 // IME, please use ComponentExtensionIMEManager::Isallowlisted instead.
-bool COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS)
+bool COMPONENT_EXPORT(UI_BASE_IME_ASH)
     IsComponentExtensionIME(const std::string& input_method_id);
 
 // Returns true if |input_method_id| is a Arc IME ID. This function does not
 // check |input_method_id| is really a installed Arc IME.
-bool COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS)
+bool COMPONENT_EXPORT(UI_BASE_IME_ASH)
     IsArcIME(const std::string& input_method_id);
 
 // Returns true if the |input_method_id| is the extension based xkb keyboard,
 // otherwise returns false.
-bool COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS)
+bool COMPONENT_EXPORT(UI_BASE_IME_ASH)
     IsKeyboardLayoutExtension(const std::string& input_method_id);
 
 // Returns input method component id from the extension-based InputMethodID
 // for component IME extensions. This function does not check that
 // |input_method_id| is installed.
-std::string COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS)
+std::string COMPONENT_EXPORT(UI_BASE_IME_ASH)
     GetComponentIDByInputMethodID(const std::string& input_method_id);
 
 // Returns true if |input_method_id| refers to a CrOS 1P experimental
 // multilingual input method.
-bool COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS)
+bool COMPONENT_EXPORT(UI_BASE_IME_ASH)
     IsExperimentalMultilingual(const std::string& input_method_id);
 
 }  // namespace extension_ime_util
diff --git a/ui/base/ime/ash/fake_ime_keyboard.h b/ui/base/ime/ash/fake_ime_keyboard.h
index f2b3e6f..2d18fdb 100644
--- a/ui/base/ime/ash/fake_ime_keyboard.h
+++ b/ui/base/ime/ash/fake_ime_keyboard.h
@@ -16,8 +16,7 @@
 namespace chromeos {
 namespace input_method {
 
-class COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) FakeImeKeyboard
-    : public ImeKeyboard {
+class COMPONENT_EXPORT(UI_BASE_IME_ASH) FakeImeKeyboard : public ImeKeyboard {
  public:
   FakeImeKeyboard();
   ~FakeImeKeyboard() override;
diff --git a/ui/base/ime/ash/fake_input_method_delegate.h b/ui/base/ime/ash/fake_input_method_delegate.h
index c86447e..12d6004f 100644
--- a/ui/base/ime/ash/fake_input_method_delegate.h
+++ b/ui/base/ime/ash/fake_input_method_delegate.h
@@ -16,7 +16,7 @@
 namespace chromeos {
 namespace input_method {
 
-class COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) FakeInputMethodDelegate
+class COMPONENT_EXPORT(UI_BASE_IME_ASH) FakeInputMethodDelegate
     : public InputMethodDelegate {
  public:
   using LanguageNameLocalizationCallback =
diff --git a/ui/base/ime/ash/ime_assistive_window_handler_interface.h b/ui/base/ime/ash/ime_assistive_window_handler_interface.h
index a37ed16..3ec406f 100644
--- a/ui/base/ime/ash/ime_assistive_window_handler_interface.h
+++ b/ui/base/ime/ash/ime_assistive_window_handler_interface.h
@@ -38,8 +38,7 @@
 };
 
 // A interface to handle the assistive windows related method call.
-class COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS)
-    IMEAssistiveWindowHandlerInterface {
+class COMPONENT_EXPORT(UI_BASE_IME_ASH) IMEAssistiveWindowHandlerInterface {
  public:
   virtual ~IMEAssistiveWindowHandlerInterface() = default;
 
diff --git a/ui/base/ime/ash/ime_bridge.h b/ui/base/ime/ash/ime_bridge.h
index 2561672..e18cdc4d 100644
--- a/ui/base/ime/ash/ime_bridge.h
+++ b/ui/base/ime/ash/ime_bridge.h
@@ -21,7 +21,7 @@
 
 // IMEBridge provides access of each IME related handler. This class
 // is used for IME implementation.
-class COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) IMEBridge {
+class COMPONENT_EXPORT(UI_BASE_IME_ASH) IMEBridge {
  public:
   virtual ~IMEBridge();
 
diff --git a/ui/base/ime/ash/ime_bridge_observer.h b/ui/base/ime/ash/ime_bridge_observer.h
index e318fcad..45dc95f8 100644
--- a/ui/base/ime/ash/ime_bridge_observer.h
+++ b/ui/base/ime/ash/ime_bridge_observer.h
@@ -11,7 +11,7 @@
 namespace ui {
 
 // A interface to observe changes in the IMEBridge.
-class COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) IMEBridgeObserver
+class COMPONENT_EXPORT(UI_BASE_IME_ASH) IMEBridgeObserver
     : public base::CheckedObserver {
  public:
   // Called when requesting to switch the engine handler from ui::InputMethod.
diff --git a/ui/base/ime/ash/ime_candidate_window_handler_interface.h b/ui/base/ime/ash/ime_candidate_window_handler_interface.h
index 570ca890..037292e 100644
--- a/ui/base/ime/ash/ime_candidate_window_handler_interface.h
+++ b/ui/base/ime/ash/ime_candidate_window_handler_interface.h
@@ -22,8 +22,7 @@
 namespace chromeos {
 
 // A interface to handle the candidate window related method call.
-class COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS)
-    IMECandidateWindowHandlerInterface {
+class COMPONENT_EXPORT(UI_BASE_IME_ASH) IMECandidateWindowHandlerInterface {
  public:
   virtual ~IMECandidateWindowHandlerInterface() = default;
 
diff --git a/ui/base/ime/ash/ime_engine_handler_interface.h b/ui/base/ime/ash/ime_engine_handler_interface.h
index 1d79c35..d808769b 100644
--- a/ui/base/ime/ash/ime_engine_handler_interface.h
+++ b/ui/base/ime/ash/ime_engine_handler_interface.h
@@ -32,7 +32,7 @@
 }  // namespace ime
 
 // A interface to handle the engine handler method call.
-class COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) IMEEngineHandlerInterface {
+class COMPONENT_EXPORT(UI_BASE_IME_ASH) IMEEngineHandlerInterface {
  public:
   using KeyEventDoneCallback = base::OnceCallback<void(bool)>;
 
diff --git a/ui/base/ime/ash/ime_input_context_handler_interface.h b/ui/base/ime/ash/ime_input_context_handler_interface.h
index 82179208..fabf00a 100644
--- a/ui/base/ime/ash/ime_input_context_handler_interface.h
+++ b/ui/base/ime/ash/ime_input_context_handler_interface.h
@@ -24,7 +24,7 @@
 
 // All strings related to IME operations should be UTF-16 encoded and all
 // indices/ranges relative to those strings should be UTF-16 code units.
-class COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) IMEInputContextHandlerInterface {
+class COMPONENT_EXPORT(UI_BASE_IME_ASH) IMEInputContextHandlerInterface {
  public:
   // Called when the engine commit a text.
   virtual void CommitText(
diff --git a/ui/base/ime/ash/ime_keyboard.h b/ui/base/ime/ash/ime_keyboard.h
index c20fc86..e6c070f62 100644
--- a/ui/base/ime/ash/ime_keyboard.h
+++ b/ui/base/ime/ash/ime_keyboard.h
@@ -20,7 +20,7 @@
   unsigned int repeat_interval_in_ms;
 };
 
-class COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) ImeKeyboard {
+class COMPONENT_EXPORT(UI_BASE_IME_ASH) ImeKeyboard {
  public:
   class Observer {
    public:
diff --git a/ui/base/ime/ash/ime_keyboard_impl.h b/ui/base/ime/ash/ime_keyboard_impl.h
index bbe998d..99fdd00 100644
--- a/ui/base/ime/ash/ime_keyboard_impl.h
+++ b/ui/base/ime/ash/ime_keyboard_impl.h
@@ -17,8 +17,7 @@
 namespace input_method {
 
 // Version of ImeKeyboard used when chrome is run on device.
-class COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) ImeKeyboardImpl
-    : public ImeKeyboard {
+class COMPONENT_EXPORT(UI_BASE_IME_ASH) ImeKeyboardImpl : public ImeKeyboard {
  public:
   ImeKeyboardImpl(ui::InputController* input_controller);
   ~ImeKeyboardImpl() override;
diff --git a/ui/base/ime/ash/ime_keymap.h b/ui/base/ime/ash/ime_keymap.h
index bc12dcef..9f167b9 100644
--- a/ui/base/ime/ash/ime_keymap.h
+++ b/ui/base/ime/ash/ime_keymap.h
@@ -12,11 +12,11 @@
 namespace ui {
 
 // Translates the DOM4 key code string to ui::KeyboardCode.
-COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS)
+COMPONENT_EXPORT(UI_BASE_IME_ASH)
 KeyboardCode DomKeycodeToKeyboardCode(const std::string& code);
 
 // Translates the ui::KeyboardCode to DOM4 key code string.
-COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS)
+COMPONENT_EXPORT(UI_BASE_IME_ASH)
 std::string KeyboardCodeToDomKeycode(KeyboardCode code);
 
 }  // namespace ui
diff --git a/ui/base/ime/ash/input_method_ash.h b/ui/base/ime/ash/input_method_ash.h
index ee11c84..a01afb0 100644
--- a/ui/base/ime/ash/input_method_ash.h
+++ b/ui/base/ime/ash/input_method_ash.h
@@ -25,7 +25,7 @@
 namespace ui {
 
 // A `ui::InputMethod` implementation for Ash.
-class COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) InputMethodAsh
+class COMPONENT_EXPORT(UI_BASE_IME_ASH) InputMethodAsh
     : public InputMethodBase,
       public IMEInputContextHandlerInterface {
  public:
diff --git a/ui/base/ime/ash/input_method_descriptor.h b/ui/base/ime/ash/input_method_descriptor.h
index ec4c2ca..9cb4aba33 100644
--- a/ui/base/ime/ash/input_method_descriptor.h
+++ b/ui/base/ime/ash/input_method_descriptor.h
@@ -15,7 +15,7 @@
 namespace input_method {
 
 // A structure which represents an input method.
-class COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) InputMethodDescriptor {
+class COMPONENT_EXPORT(UI_BASE_IME_ASH) InputMethodDescriptor {
  public:
   InputMethodDescriptor();
   InputMethodDescriptor(const std::string& id,
diff --git a/ui/base/ime/ash/input_method_manager.h b/ui/base/ime/ash/input_method_manager.h
index cf9672c..b047239 100644
--- a/ui/base/ime/ash/input_method_manager.h
+++ b/ui/base/ime/ash/input_method_manager.h
@@ -35,7 +35,7 @@
 // This class manages input methods handles. Classes can add themselves as
 // observers. Clients can get an instance of this library class by:
 // InputMethodManager::Get().
-class COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) InputMethodManager {
+class COMPONENT_EXPORT(UI_BASE_IME_ASH) InputMethodManager {
  public:
   enum class UIStyle {
     kLogin,
@@ -264,17 +264,17 @@
 
   // Gets the global instance of InputMethodManager. Initialize() must be called
   // first.
-  static COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) InputMethodManager* Get();
+  static COMPONENT_EXPORT(UI_BASE_IME_ASH) InputMethodManager* Get();
 
   // Sets the global instance. |instance| will be owned by the internal pointer
   // and deleted by Shutdown().
   // TODO(nona): Instanciate InputMethodManagerImpl inside of this function once
   //             crbug.com/164375 is fixed.
-  static COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) void Initialize(
+  static COMPONENT_EXPORT(UI_BASE_IME_ASH) void Initialize(
       InputMethodManager* instance);
 
   // Destroy the global instance.
-  static COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) void Shutdown();
+  static COMPONENT_EXPORT(UI_BASE_IME_ASH) void Shutdown();
 
   // Adds an observer to receive notifications of input method related
   // changes as desribed in the Observer class above.
diff --git a/ui/base/ime/ash/input_method_ukm.h b/ui/base/ime/ash/input_method_ukm.h
index 0dfc160..2cb5d55 100644
--- a/ui/base/ime/ash/input_method_ukm.h
+++ b/ui/base/ime/ash/input_method_ukm.h
@@ -14,7 +14,7 @@
 
 // Records an event in UKM, under the InputMethod.NonCompliantApi metric.
 // Ignores invalid sources.
-COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS)
+COMPONENT_EXPORT(UI_BASE_IME_ASH)
 void RecordUkmNonCompliantApi(
     ukm::SourceId source,
     chromeos::ime::mojom::InputMethodApiOperation operation);
@@ -22,7 +22,7 @@
 // Records an event in UKM, under the InputMethod.Assistive.Match metric.
 // Ignores invalid sources.
 // `type` is a value in the chromeos.AssistiveType enum.
-COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS)
+COMPONENT_EXPORT(UI_BASE_IME_ASH)
 void RecordUkmAssistiveMatch(ukm::SourceId source, int64_t type);
 
 }  // namespace ui
diff --git a/ui/base/ime/ash/input_method_util.h b/ui/base/ime/ash/input_method_util.h
index 764b522..b1ca1455 100644
--- a/ui/base/ime/ash/input_method_util.h
+++ b/ui/base/ime/ash/input_method_util.h
@@ -28,7 +28,7 @@
 };
 
 // A class which provides miscellaneous input method utility functions.
-class COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) InputMethodUtil {
+class COMPONENT_EXPORT(UI_BASE_IME_ASH) InputMethodUtil {
  public:
   explicit InputMethodUtil(InputMethodDelegate* delegate);
   ~InputMethodUtil();
diff --git a/ui/base/ime/ash/mock_component_extension_ime_manager.h b/ui/base/ime/ash/mock_component_extension_ime_manager.h
index aae0d8f..f846374d 100644
--- a/ui/base/ime/ash/mock_component_extension_ime_manager.h
+++ b/ui/base/ime/ash/mock_component_extension_ime_manager.h
@@ -10,7 +10,7 @@
 
 namespace chromeos {
 
-class COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) MockComponentExtensionIMEManager
+class COMPONENT_EXPORT(UI_BASE_IME_ASH) MockComponentExtensionIMEManager
     : public ComponentExtensionIMEManager {
  public:
   input_method::InputMethodDescriptors GetXkbIMEAsInputMethodDescriptor()
diff --git a/ui/base/ime/ash/mock_component_extension_ime_manager_delegate.h b/ui/base/ime/ash/mock_component_extension_ime_manager_delegate.h
index d09f471..624e79e 100644
--- a/ui/base/ime/ash/mock_component_extension_ime_manager_delegate.h
+++ b/ui/base/ime/ash/mock_component_extension_ime_manager_delegate.h
@@ -14,8 +14,7 @@
 namespace chromeos {
 namespace input_method {
 
-class COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS)
-    MockComponentExtensionIMEManagerDelegate
+class COMPONENT_EXPORT(UI_BASE_IME_ASH) MockComponentExtensionIMEManagerDelegate
     : public ComponentExtensionIMEManagerDelegate {
  public:
   MockComponentExtensionIMEManagerDelegate();
diff --git a/ui/base/ime/ash/mock_ime_candidate_window_handler.h b/ui/base/ime/ash/mock_ime_candidate_window_handler.h
index 29e820e..8166f08 100644
--- a/ui/base/ime/ash/mock_ime_candidate_window_handler.h
+++ b/ui/base/ime/ash/mock_ime_candidate_window_handler.h
@@ -14,7 +14,7 @@
 
 namespace chromeos {
 
-class COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) MockIMECandidateWindowHandler
+class COMPONENT_EXPORT(UI_BASE_IME_ASH) MockIMECandidateWindowHandler
     : public IMECandidateWindowHandlerInterface {
  public:
   struct UpdateLookupTableArg {
diff --git a/ui/base/ime/ash/mock_ime_engine_handler.h b/ui/base/ime/ash/mock_ime_engine_handler.h
index f0e8202e..dc2416c 100644
--- a/ui/base/ime/ash/mock_ime_engine_handler.h
+++ b/ui/base/ime/ash/mock_ime_engine_handler.h
@@ -15,7 +15,7 @@
 
 namespace chromeos {
 
-class COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) MockIMEEngineHandler
+class COMPONENT_EXPORT(UI_BASE_IME_ASH) MockIMEEngineHandler
     : public ui::IMEEngineHandlerInterface {
  public:
   MockIMEEngineHandler();
diff --git a/ui/base/ime/ash/mock_ime_input_context_handler.h b/ui/base/ime/ash/mock_ime_input_context_handler.h
index f4e5bbb..9ccf922 100644
--- a/ui/base/ime/ash/mock_ime_input_context_handler.h
+++ b/ui/base/ime/ash/mock_ime_input_context_handler.h
@@ -18,7 +18,7 @@
 namespace ui {
 class InputMethod;
 
-class COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) MockIMEInputContextHandler
+class COMPONENT_EXPORT(UI_BASE_IME_ASH) MockIMEInputContextHandler
     : public IMEInputContextHandlerInterface {
  public:
   struct UpdateCompositionTextArg {
diff --git a/ui/base/ime/ash/mock_input_method_manager.h b/ui/base/ime/ash/mock_input_method_manager.h
index ba5df0e..3abdb55 100644
--- a/ui/base/ime/ash/mock_input_method_manager.h
+++ b/ui/base/ime/ash/mock_input_method_manager.h
@@ -17,7 +17,7 @@
 class ImeKeyboard;
 
 // The mock InputMethodManager for testing.
-class COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) MockInputMethodManager
+class COMPONENT_EXPORT(UI_BASE_IME_ASH) MockInputMethodManager
     : public InputMethodManager,
       public ui::VirtualKeyboardController {
  public:
diff --git a/ui/compositor/total_animation_throughput_reporter_unittest.cc b/ui/compositor/total_animation_throughput_reporter_unittest.cc
index 69b0f2a8..0fc452d 100644
--- a/ui/compositor/total_animation_throughput_reporter_unittest.cc
+++ b/ui/compositor/total_animation_throughput_reporter_unittest.cc
@@ -23,24 +23,13 @@
 #if defined(ADDRESS_SANITIZER) || defined(MEMORY_SANITIZER) || \
     defined(THREAD_SANITIZER) || defined(LEAK_SANITIZER) ||    \
     defined(UNDEFINED_SANITIZER)
-#define SANITIZER_ENABLED 1
-#endif
-
-// TODO(crbug.com/1217783, crbug.com/1216715): Time check is flaky on fuchia and
-// lacros, linux ozone and sanitizer build.
-#if defined(OS_FUCHSIA) || defined(OS_LINUX) ||                    \
-    BUILDFLAG(IS_CHROMEOS_LACROS) || defined(ADDRESS_SANITIZER) || \
-    defined(MEMORY_SANITIZER) || defined(THREAD_SANITIZER) ||      \
-    defined(LEAK_SANITIZER) || defined(UNDEFINED_SANITIZER)
-#define TIME_CHECK_ENABLED 0
-#else
-#define TIME_CHECK_ENABLED 1
+#define SANITIZER_ENABLED
 #endif
 
 namespace ui {
 namespace {
 
-#if TIME_CHECK_ENABLED
+#if !defined(SANITIZER_ENABLED)
 // Returns the delta from current time to the (start + duration) time.
 // This is used to compute how long it should wait from now to reach
 // the `start + duration` time.
@@ -98,7 +87,8 @@
 }
 
 // Tests the longest animation will trigger the report.
-TEST_F(TotalAnimationThroughputReporterTest, MultipleAnimations) {
+// TODO(crbug.com/1217783): Test is flaky.
+TEST_F(TotalAnimationThroughputReporterTest, DISABLED_MultipleAnimations) {
   Layer layer1;
   layer1.SetOpacity(0.5f);
   root_layer()->Add(&layer1);
@@ -124,7 +114,7 @@
     settings.SetTransitionDuration(base::TimeDelta::FromMilliseconds(96));
     layer2.SetOpacity(1.0f);
   }
-#if TIME_CHECK_ENABLED
+#if !defined(SANITIZER_ENABLED)
   auto start = base::TimeTicks::Now();
 #endif
   Advance(base::TimeDelta::FromMilliseconds(32));
@@ -132,7 +122,7 @@
 
   // The following check may fail on sanitizer builds which
   // runs slwer.
-#if TIME_CHECK_ENABLED
+#if !defined(SANITIZER_ENABLED)
   auto sixty_four_ms_from_start = DeltaFromNowToTarget(start, 64);
   ASSERT_TRUE(sixty_four_ms_from_start > base::TimeDelta());
   Advance(sixty_four_ms_from_start);
@@ -172,7 +162,9 @@
 }
 
 // Tests adding new animation will extends the duration.
-TEST_F(TotalAnimationThroughputReporterTest, AddAnimationWhileAnimating) {
+// TODO(crbug.com/1216715): Test is flaky.
+TEST_F(TotalAnimationThroughputReporterTest,
+       DISABLED_AddAnimationWhileAnimating) {
   Layer layer1;
   layer1.SetOpacity(0.5f);
   root_layer()->Add(&layer1);
@@ -187,7 +179,7 @@
     settings.SetTransitionDuration(base::TimeDelta::FromMilliseconds(48));
     layer1.SetOpacity(1.0f);
   }
-#if TIME_CHECK_ENABLED
+#if !defined(SANITIZER_ENABLED)
   base::TimeTicks start = base::TimeTicks::Now();
 #endif
   Advance(base::TimeDelta::FromMilliseconds(32));
@@ -208,7 +200,7 @@
 
   // The following check may fail on sanitizer builds which
   // runs slwer.
-#if TIME_CHECK_ENABLED
+#if !defined(SANITIZER_ENABLED)
   // The animation time is extended by 32ms.
   auto sixty_four_ms_from_start = DeltaFromNowToTarget(start, 64);
   ASSERT_TRUE(sixty_four_ms_from_start > base::TimeDelta());
diff --git a/ui/gtk/gtk_ui.cc b/ui/gtk/gtk_ui.cc
index 2af5200..bf3fa588 100644
--- a/ui/gtk/gtk_ui.cc
+++ b/ui/gtk/gtk_ui.cc
@@ -33,6 +33,9 @@
 #include "ui/base/ime/linux/linux_input_method_context.h"
 #include "ui/base/ime/linux/linux_input_method_context_factory.h"
 #include "ui/base/linux/linux_ui_delegate.h"
+#include "ui/color/color_id.h"
+#include "ui/color/color_provider.h"
+#include "ui/color/color_provider_manager.h"
 #include "ui/display/display.h"
 #include "ui/events/keycodes/dom/dom_code.h"
 #include "ui/events/keycodes/dom/dom_keyboard_layout_manager.h"
@@ -883,6 +886,25 @@
 }
 
 void GtkUi::UpdateColors() {
+  // TODO(tluk): The below code sets various ThemeProvider colors for GTK. Some
+  // of these definitions leverage colors that were previously defined by
+  // NativeThemeGtk and are now defined as GTK ColorMixers. These ThemeProvider
+  // color definitions should be added as recipes to a browser ColorMixer once
+  // the Color Pipeline project begins rollout into c/b/ui. In the meantime
+  // use the ColorProvider instance from the ColorProviderManager corresponding
+  // to the theme bits associated with the NativeThemeGtk instance to ensure
+  // we do not regress existing behavior during the transition.
+  const auto color_scheme = native_theme_->GetDefaultSystemColorScheme();
+  const auto* color_provider =
+      ui::ColorProviderManager::Get().GetColorProviderFor(
+          {(color_scheme == ui::NativeTheme::ColorScheme::kDark)
+               ? ui::ColorProviderManager::ColorMode::kDark
+               : ui::ColorProviderManager::ColorMode::kLight,
+           (color_scheme == ui::NativeTheme::ColorScheme::kPlatformHighContrast)
+               ? ui::ColorProviderManager::ContrastMode::kHigh
+               : ui::ColorProviderManager::ContrastMode::kNormal,
+           ui::ColorProviderManager::SystemTheme::kCustom});
+
   SkColor location_bar_border = GetBorderColor("GtkEntry#entry");
   if (SkColorGetA(location_bar_border))
     colors_[ThemeProperties::COLOR_LOCATION_BAR_BORDER] = location_bar_border;
@@ -903,10 +925,9 @@
   colors_[ThemeProperties::COLOR_TOOLBAR_VERTICAL_SEPARATOR] = tab_border;
 
   colors_[ThemeProperties::COLOR_NTP_BACKGROUND] =
-      native_theme_->GetSystemColor(
-          ui::NativeTheme::kColorId_TextfieldDefaultBackground);
-  colors_[ThemeProperties::COLOR_NTP_TEXT] = native_theme_->GetSystemColor(
-      ui::NativeTheme::kColorId_TextfieldDefaultColor);
+      color_provider->GetColor(ui::kColorTextfieldBackground);
+  colors_[ThemeProperties::COLOR_NTP_TEXT] =
+      color_provider->GetColor(ui::kColorTextfieldForeground);
   colors_[ThemeProperties::COLOR_NTP_HEADER] =
       GetBorderColor("GtkButton#button");
 
@@ -920,26 +941,24 @@
       tab_text_color;
   colors_[ThemeProperties::COLOR_BOOKMARK_TEXT] = tab_text_color;
 
-  colors_[ThemeProperties::COLOR_NTP_LINK] = native_theme_->GetSystemColor(
-      ui::NativeTheme::kColorId_TextfieldSelectionBackgroundFocused);
+  colors_[ThemeProperties::COLOR_NTP_LINK] =
+      color_provider->GetColor(ui::kColorTextfieldSelectionBackground);
 
   // Generate the colors that we pass to Blink.
-  focus_ring_color_ = native_theme_->GetSystemColor(
-      ui::NativeTheme::kColorId_FocusedBorderColor);
+  focus_ring_color_ =
+      color_provider->GetColor(ui::kColorFocusableBorderFocused);
 
   // Some GTK themes only define the text selection colors on the GtkEntry
   // class, so we need to use that for getting selection colors.
-  active_selection_bg_color_ = native_theme_->GetSystemColor(
-      ui::NativeTheme::kColorId_TextfieldSelectionBackgroundFocused);
-  active_selection_fg_color_ = native_theme_->GetSystemColor(
-      ui::NativeTheme::kColorId_TextfieldSelectionColor);
+  active_selection_bg_color_ =
+      color_provider->GetColor(ui::kColorTextfieldSelectionBackground);
+  active_selection_fg_color_ =
+      color_provider->GetColor(ui::kColorTextfieldSelectionForeground);
 
   colors_[ThemeProperties::COLOR_TAB_THROBBER_SPINNING] =
-      native_theme_->GetSystemColor(
-          ui::NativeTheme::kColorId_ThrobberSpinningColor);
+      color_provider->GetColor(ui::kColorThrobber);
   colors_[ThemeProperties::COLOR_TAB_THROBBER_WAITING] =
-      native_theme_->GetSystemColor(
-          ui::NativeTheme::kColorId_ThrobberWaitingColor);
+      color_provider->GetColor(ui::kColorThrobberPreconnect);
 
   // Generate colors that depend on whether or not a custom window frame is
   // used.  These colors belong in |color_map| below, not |colors_|.
@@ -991,11 +1010,9 @@
         background_tab_text_color_inactive;
 
     color_map[ThemeProperties::COLOR_OMNIBOX_TEXT] =
-        native_theme_->GetSystemColor(
-            ui::NativeTheme::kColorId_TextfieldDefaultColor);
+        color_provider->GetColor(ui::kColorTextfieldForeground);
     color_map[ThemeProperties::COLOR_OMNIBOX_BACKGROUND] =
-        native_theme_->GetSystemColor(
-            ui::NativeTheme::kColorId_TextfieldDefaultBackground);
+        color_provider->GetColor(ui::kColorTextfieldBackground);
 
     // These colors represent the border drawn around tabs and between
     // the tabstrip and toolbar.
diff --git a/ui/gtk/native_theme_gtk.cc b/ui/gtk/native_theme_gtk.cc
index ec2f417a..1f735c18 100644
--- a/ui/gtk/native_theme_gtk.cc
+++ b/ui/gtk/native_theme_gtk.cc
@@ -189,10 +189,8 @@
   // have a light variant and aren't affected by the setting.  Because of this,
   // experimentally check if the theme is dark by checking if the window
   // background color is dark.
-  const auto window_bg_color = SkColorFromColorId(kColorId_WindowBackground);
-  set_use_dark_colors(
-      IsForcedDarkMode() ||
-      (window_bg_color && color_utils::IsDark(window_bg_color.value())));
+  set_use_dark_colors(IsForcedDarkMode() || color_utils::IsDark(GetSystemColor(
+                                                kColorId_WindowBackground)));
   set_preferred_color_scheme(CalculatePreferredColorScheme());
 
   // GTK doesn't have a native high contrast setting.  Rather, it's implied by
diff --git a/ui/gtk/printing/print_dialog_gtk.cc b/ui/gtk/printing/print_dialog_gtk.cc
index 62108f0..414e653e 100644
--- a/ui/gtk/printing/print_dialog_gtk.cc
+++ b/ui/gtk/printing/print_dialog_gtk.cc
@@ -23,6 +23,7 @@
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "base/values.h"
 #include "printing/metafile.h"
+#include "printing/mojom/print.mojom.h"
 #include "printing/print_job_constants.h"
 #include "printing/print_settings.h"
 #include "ui/aura/window.h"
@@ -515,12 +516,12 @@
       settings->set_selection_only(print_selection_only);
       InitPrintSettingsGtk(gtk_settings_, page_setup_, settings.get());
       context_->InitWithSettings(std::move(settings));
-      std::move(callback_).Run(PrintingContextLinux::OK);
+      std::move(callback_).Run(printing::mojom::ResultCode::kSuccess);
       return;
     }
     case GTK_RESPONSE_DELETE_EVENT:  // Fall through.
     case GTK_RESPONSE_CANCEL: {
-      std::move(callback_).Run(PrintingContextLinux::CANCEL);
+      std::move(callback_).Run(printing::mojom::ResultCode::kCanceled);
       return;
     }
     case GTK_RESPONSE_APPLY:
@@ -586,5 +587,5 @@
   gtk::ClearAuraTransientParent(dialog_, window);
   window->RemoveObserver(this);
   if (callback_)
-    std::move(callback_).Run(PrintingContextLinux::CANCEL);
+    std::move(callback_).Run(printing::mojom::ResultCode::kCanceled);
 }
diff --git a/ui/ozone/platform/wayland/host/wayland_pointer.cc b/ui/ozone/platform/wayland/host/wayland_pointer.cc
index 7f45ac1..d6680f6 100644
--- a/ui/ozone/platform/wayland/host/wayland_pointer.cc
+++ b/ui/ozone/platform/wayland/host/wayland_pointer.cc
@@ -143,12 +143,22 @@
   } else {
     return;
   }
+  // If we did not receive the axis event source explicitly, set it to the mouse
+  // wheel so far.  Should this be a part of some complex event coming from the
+  // different source, the compositor will let us know sooner or later.
+  if (!pointer->axis_source_received_)
+    pointer->delegate_->OnPointerAxisSourceEvent(WL_POINTER_AXIS_SOURCE_WHEEL);
   pointer->delegate_->OnPointerAxisEvent(offset);
 }
 
+// ---- Version 5 ----
+
 // static
 void WaylandPointer::Frame(void* data, wl_pointer* obj) {
   WaylandPointer* pointer = static_cast<WaylandPointer*>(data);
+  // The frame event ends the sequence of pointer events.  Clear the flag.  The
+  // next frame will set it when necessary.
+  pointer->axis_source_received_ = false;
   pointer->delegate_->OnPointerFrameEvent();
 }
 
@@ -157,6 +167,7 @@
                                 wl_pointer* obj,
                                 uint32_t axis_source) {
   WaylandPointer* pointer = static_cast<WaylandPointer*>(data);
+  pointer->axis_source_received_ = true;
   pointer->delegate_->OnPointerAxisSourceEvent(axis_source);
 }
 
diff --git a/ui/ozone/platform/wayland/host/wayland_pointer.h b/ui/ozone/platform/wayland/host/wayland_pointer.h
index 33daf4a0..997a8fba 100644
--- a/ui/ozone/platform/wayland/host/wayland_pointer.h
+++ b/ui/ozone/platform/wayland/host/wayland_pointer.h
@@ -79,6 +79,14 @@
   WaylandConnection* const connection_;
   Delegate* const delegate_;
 
+  // Whether the axis source event has been received for the current frame.
+  //
+  // The axis source event is optional, and the frame event can be sent with no
+  // source set previously.  However, the delegate expects the axis source to be
+  // set explicitly for the axis events.  Hence, we set the default source when
+  // possible so that the sequence of pointer events has it set.
+  bool axis_source_received_ = false;
+
   DISALLOW_COPY_AND_ASSIGN(WaylandPointer);
 };
 
diff --git a/ui/ozone/platform/wayland/host/wayland_pointer_unittest.cc b/ui/ozone/platform/wayland/host/wayland_pointer_unittest.cc
index 45d06aed..6a0108e7 100644
--- a/ui/ozone/platform/wayland/host/wayland_pointer_unittest.cc
+++ b/ui/ozone/platform/wayland/host/wayland_pointer_unittest.cc
@@ -246,65 +246,43 @@
   ASSERT_TRUE(event4->IsMouseWheelEvent());
 }
 
-TEST_P(WaylandPointerTest, AxisVertical) {
+TEST_P(WaylandPointerTest, Axis) {
   wl_pointer_send_enter(pointer_->resource(), 1, surface_->resource(),
                         wl_fixed_from_int(0), wl_fixed_from_int(0));
-  wl_pointer_send_button(pointer_->resource(), 2, 1002, BTN_RIGHT,
-                         WL_POINTER_BUTTON_STATE_PRESSED);
 
   Sync();
 
-  std::unique_ptr<Event> event;
-  EXPECT_CALL(delegate_, DispatchEvent(_)).WillOnce(CloneEvent(&event));
-  // Wayland servers typically send a value of 10 per mouse wheel click.
-  wl_pointer_send_axis_source(pointer_->resource(),
-                              WL_POINTER_AXIS_SOURCE_WHEEL);
-  wl_pointer_send_axis(pointer_->resource(), 1003,
-                       WL_POINTER_AXIS_VERTICAL_SCROLL, wl_fixed_from_int(20));
-  wl_pointer_send_frame(pointer_->resource());
+  for (uint32_t axis :
+       {WL_POINTER_AXIS_VERTICAL_SCROLL, WL_POINTER_AXIS_HORIZONTAL_SCROLL}) {
+    for (bool send_axis_source : {false, true}) {
+      std::unique_ptr<Event> event;
+      EXPECT_CALL(delegate_, DispatchEvent(_)).WillOnce(CloneEvent(&event));
 
-  Sync();
+      if (send_axis_source) {
+        // The axis source event is optional.  When it is not set within the
+        // event frame, we assume the mouse wheel.
+        wl_pointer_send_axis_source(pointer_->resource(),
+                                    WL_POINTER_AXIS_SOURCE_WHEEL);
+      }
 
-  ASSERT_TRUE(event);
-  ASSERT_TRUE(event->IsMouseWheelEvent());
-  auto* mouse_wheel_event = event->AsMouseWheelEvent();
-  EXPECT_EQ(gfx::Vector2d(0, -2 * MouseWheelEvent::kWheelDelta),
-            mouse_wheel_event->offset());
-  EXPECT_EQ(EF_RIGHT_MOUSE_BUTTON, mouse_wheel_event->button_flags());
-  EXPECT_EQ(0, mouse_wheel_event->changed_button_flags());
-  EXPECT_EQ(gfx::PointF(), mouse_wheel_event->location_f());
-  EXPECT_EQ(gfx::PointF(), mouse_wheel_event->root_location_f());
-}
+      // Wayland servers typically send a value of 10 per mouse wheel click.
+      wl_pointer_send_axis(pointer_->resource(), 1003, axis,
+                           wl_fixed_from_int(10));
+      wl_pointer_send_frame(pointer_->resource());
 
-TEST_P(WaylandPointerTest, AxisHorizontal) {
-  wl_pointer_send_enter(pointer_->resource(), 1, surface_->resource(),
-                        wl_fixed_from_int(50), wl_fixed_from_int(75));
-  wl_pointer_send_button(pointer_->resource(), 2, 1002, BTN_LEFT,
-                         WL_POINTER_BUTTON_STATE_PRESSED);
+      Sync();
 
-  Sync();
-
-  std::unique_ptr<Event> event;
-  EXPECT_CALL(delegate_, DispatchEvent(_)).WillOnce(CloneEvent(&event));
-  // Wayland servers typically send a value of 10 per mouse wheel click.
-  wl_pointer_send_axis_source(pointer_->resource(),
-                              WL_POINTER_AXIS_SOURCE_WHEEL);
-  wl_pointer_send_axis(pointer_->resource(), 1003,
-                       WL_POINTER_AXIS_HORIZONTAL_SCROLL,
-                       wl_fixed_from_int(10));
-  wl_pointer_send_frame(pointer_->resource());
-
-  Sync();
-
-  ASSERT_TRUE(event);
-  ASSERT_TRUE(event->IsMouseWheelEvent());
-  auto* mouse_wheel_event = event->AsMouseWheelEvent();
-  EXPECT_EQ(gfx::Vector2d(-MouseWheelEvent::kWheelDelta, 0),
-            mouse_wheel_event->offset());
-  EXPECT_EQ(EF_LEFT_MOUSE_BUTTON, mouse_wheel_event->button_flags());
-  EXPECT_EQ(0, mouse_wheel_event->changed_button_flags());
-  EXPECT_EQ(gfx::PointF(50, 75), mouse_wheel_event->location_f());
-  EXPECT_EQ(gfx::PointF(50, 75), mouse_wheel_event->root_location_f());
+      ASSERT_TRUE(event);
+      ASSERT_TRUE(event->IsMouseWheelEvent());
+      auto* mouse_wheel_event = event->AsMouseWheelEvent();
+      EXPECT_EQ(axis == WL_POINTER_AXIS_VERTICAL_SCROLL
+                    ? gfx::Vector2d(0, -MouseWheelEvent::kWheelDelta)
+                    : gfx::Vector2d(-MouseWheelEvent::kWheelDelta, 0),
+                mouse_wheel_event->offset());
+      EXPECT_EQ(gfx::PointF(), mouse_wheel_event->location_f());
+      EXPECT_EQ(gfx::PointF(), mouse_wheel_event->root_location_f());
+    }
+  }
 }
 
 TEST_P(WaylandPointerTest, SetBitmap) {
diff --git a/ui/views/animation/animation_builder.cc b/ui/views/animation/animation_builder.cc
index d206cd9a..f3c0548c 100644
--- a/ui/views/animation/animation_builder.cc
+++ b/ui/views/animation/animation_builder.cc
@@ -168,6 +168,15 @@
 AnimationBuilder::AnimationBuilder() = default;
 
 AnimationBuilder::~AnimationBuilder() {
+  DCHECK(!next_animation_observer_)
+      << "Callbacks were scheduled without creating a sequence block "
+         "afterwards. There are no animations to run these callbacks on.";
+  // The observer needs to outlive the AnimationBuilder and will manage its own
+  // lifetime. GetAttachedToSequence should not return false here. This is
+  // DCHECKed in the observer’s destructor.
+  if (animation_observer_ && animation_observer_->GetAttachedToSequence())
+    animation_observer_.release();
+
   for (auto it = layer_animation_sequences_.begin();
        it != layer_animation_sequences_.end();) {
     auto* const target = it->first;
@@ -279,7 +288,6 @@
   }
 
   values_.clear();
-  animation_observer_.release();
 }
 
 std::unique_ptr<AnimationAbortHandle> AnimationBuilder::GetAbortHandle() {
@@ -289,9 +297,9 @@
 }
 
 AnimationBuilder::Observer* AnimationBuilder::GetObserver() {
-  if (!animation_observer_)
-    animation_observer_ = std::make_unique<Observer>();
-  return animation_observer_.get();
+  if (!next_animation_observer_)
+    next_animation_observer_ = std::make_unique<Observer>();
+  return next_animation_observer_.get();
 }
 
 // static
@@ -301,6 +309,18 @@
 }
 
 AnimationSequenceBlock AnimationBuilder::NewSequence() {
+  // Each sequence should have its own observer.
+
+  // The observer needs to outlive the AnimationBuilder and will manage its own
+  // lifetime. GetAttachedToSequence should not return false here. This is
+  // DCHECKed in the observer’s destructor.
+  if (animation_observer_ && animation_observer_->GetAttachedToSequence())
+    animation_observer_.release();
+  if (next_animation_observer_) {
+    animation_observer_ = std::move(next_animation_observer_);
+    next_animation_observer_.reset();
+  }
+
   end_ = base::TimeDelta();
   return AnimationSequenceBlock(base::PassKey<AnimationBuilder>(), this,
                                 base::TimeDelta());
diff --git a/ui/views/animation/animation_builder.h b/ui/views/animation/animation_builder.h
index bc6f6cf..f8bc941 100644
--- a/ui/views/animation/animation_builder.h
+++ b/ui/views/animation/animation_builder.h
@@ -57,6 +57,8 @@
     void OnLayerAnimationScheduled(
         ui::LayerAnimationSequence* sequence) override;
 
+    bool GetAttachedToSequence() const { return attached_to_sequence_; }
+
    protected:
     void OnAttachedToSequence(ui::LayerAnimationSequence* sequence) override;
     void OnDetachedFromSequence(ui::LayerAnimationSequence* sequence) override;
@@ -146,6 +148,10 @@
   std::multimap<ui::Layer*, std::unique_ptr<ui::LayerAnimationSequence>>
       layer_animation_sequences_;
   std::unique_ptr<Observer> animation_observer_;
+  // Sets up observer callbacks before .Once() or .Repeatedly() is called to
+  // start the sequence. next_animation_observer_ is moved to
+  // animation_observer_ once .Once() or Repeatedly() is called.
+  std::unique_ptr<Observer> next_animation_observer_;
   absl::optional<ui::LayerAnimator::PreemptionStrategy> preemption_strategy_;
 
   // Data for the current sequence.
diff --git a/ui/views/animation/animation_builder_unittest.cc b/ui/views/animation/animation_builder_unittest.cc
index e4dcb09..b2ef8c4e 100644
--- a/ui/views/animation/animation_builder_unittest.cc
+++ b/ui/views/animation/animation_builder_unittest.cc
@@ -335,7 +335,10 @@
         .SetOpacity(first_animating_view, 0.4f)
         .Offset(base::TimeDelta())
         .SetDuration(kDelay * 2)
-        .SetOpacity(second_animating_view, 0.9f);
+        .SetOpacity(second_animating_view, 0.9f)
+        .Then()
+        .SetDuration(kDelay)
+        .SetOpacity(second_animating_view, 0.4f);
   }
 
   // Only one Observer should have been created in the above block. Make sure
@@ -346,6 +349,8 @@
 
   EXPECT_TRUE(started);
   Step(kDelay * 2);
+  EXPECT_FALSE(ended);
+  Step(kDelay);
   EXPECT_TRUE(ended);
 }
 
diff --git a/ui/webui/resources/cr_components/chromeos/traffic_counters/traffic_counters.js b/ui/webui/resources/cr_components/chromeos/traffic_counters/traffic_counters.js
index 5b87a97..4f1f8882 100644
--- a/ui/webui/resources/cr_components/chromeos/traffic_counters/traffic_counters.js
+++ b/ui/webui/resources/cr_components/chromeos/traffic_counters/traffic_counters.js
@@ -68,6 +68,28 @@
 }
 
 /**
+ * Converts a mojo time to JS. TODO(b/200327630)
+ * @param {!mojoBase.mojom.Time} mojoTime
+ * @return {!Date}
+ */
+function convertMojoTimeToJS(mojoTime) {
+  // The JS Date() is based off of the number of milliseconds since the
+  // UNIX epoch (1970-01-01 00::00:00 UTC), while |internalValue| of the
+  // base::Time (represented in mojom.Time) represents the number of
+  // microseconds since the Windows FILETIME epoch (1601-01-01 00:00:00 UTC).
+  // This computes the final JS time by computing the epoch delta and the
+  // conversion from microseconds to milliseconds.
+  const windowsEpoch = Date.UTC(1601, 0, 1, 0, 0, 0, 0);
+  const unixEpoch = Date.UTC(1970, 0, 1, 0, 0, 0, 0);
+  // |epochDeltaInMs| equals to base::Time::kTimeToMicrosecondsOffset.
+  const epochDeltaInMs = unixEpoch - windowsEpoch;
+  const timeInMs = Number(mojoTime.internalValue) / 1000;
+
+  return new Date(timeInMs - epochDeltaInMs);
+}
+
+
+/**
  * @constructor
  * @extends {PolymerElement}
  * @implements {I18nBehaviorInterface}
@@ -309,10 +331,10 @@
    * @private
    */
   lastResetTimeString_(network) {
-    if (network.lastResetTime === null) {
+    if (network.lastResetTime === null || network.lastResetTime === undefined) {
       return '';
     }
-    return JSON.stringify(network.lastResetTime.internalValue, replacer, '\t');
+    return convertMojoTimeToJS(network.lastResetTime).toLocaleString();
   }
 }
 customElements.define(TrafficCountersElement.is, TrafficCountersElement);
diff --git a/url/gurl.cc b/url/gurl.cc
index 734aa0b..ab90b97 100644
--- a/url/gurl.cc
+++ b/url/gurl.cc
@@ -238,7 +238,7 @@
 
   output.Complete();
 
-  ProcessFileOrFileSystemURLAfterReplaceComponents(result);
+  result.ProcessFileSystemURLAfterReplaceComponents();
   return result;
 }
 
@@ -258,31 +258,18 @@
 
   output.Complete();
 
-  ProcessFileOrFileSystemURLAfterReplaceComponents(result);
+  result.ProcessFileSystemURLAfterReplaceComponents();
 
   return result;
 }
 
-void GURL::ProcessFileOrFileSystemURLAfterReplaceComponents(GURL& url) const {
-  if (!url.is_valid_)
+void GURL::ProcessFileSystemURLAfterReplaceComponents() {
+  if (!is_valid_)
     return;
-  if (url.SchemeIsFileSystem()) {
-    url.inner_url_ =
-        std::make_unique<GURL>(url.spec_.data(), url.parsed_.Length(),
-                               *url.parsed_.inner_parsed(), true);
+  if (SchemeIsFileSystem()) {
+    inner_url_ = std::make_unique<GURL>(spec_.data(), parsed_.Length(),
+                                        *parsed_.inner_parsed(), true);
   }
-#ifdef WIN32
-  if (url.SchemeIsFile()) {
-    // On Win32, some file URLs created through ReplaceComponents used to lose
-    // its hostname after getting reparsed (e.g. when it's sent through IPC) due
-    // to special handling of file URLs with Windows-drive paths in the URL
-    // parser. To make the behavior for URLs modified through ReplaceComponents
-    // (instead of getting fully reparsed) the same, immediately reparse the
-    // URL here to trigger the special handling.
-    // See https://crbug.com/1214098.
-    url = GURL(url.spec());
-  }
-#endif
 }
 
 GURL GURL::GetOrigin() const {
diff --git a/url/gurl.h b/url/gurl.h
index 38ba831..e499580 100644
--- a/url/gurl.h
+++ b/url/gurl.h
@@ -468,7 +468,7 @@
     return base::StringPiece(&spec_[comp.begin], comp.len);
   }
 
-  void ProcessFileOrFileSystemURLAfterReplaceComponents(GURL& url) const;
+  void ProcessFileSystemURLAfterReplaceComponents();
 
   // The actual text of the URL, in canonical ASCII form.
   std::string spec_;
diff --git a/url/ipc/url_param_traits_unittest.cc b/url/ipc/url_param_traits_unittest.cc
index 9103f80..c35b310 100644
--- a/url/ipc/url_param_traits_unittest.cc
+++ b/url/ipc/url_param_traits_unittest.cc
@@ -109,17 +109,9 @@
         GURL("file://hostname/").ReplaceComponents(repl);
 
     EXPECT_EQ(kNewPath, url_made_with_replace_components.path());
-#ifdef WIN32
-    // Due to the reparsing logic in ReplaceComponents, the hostname is stripped
-    // for this URL too.
-    EXPECT_EQ("", url_made_with_replace_components.host());
-    EXPECT_EQ("file:///C:/dir/file.txt",
-              url_made_with_replace_components.spec());
-#else
     EXPECT_EQ("hostname", url_made_with_replace_components.host());
     EXPECT_EQ("file://hostname/C:/dir/file.txt",
               url_made_with_replace_components.spec());
-#endif
     // This is the MAIN VERIFICATION in this test. This used to fail on Windows,
     // see https://crbug.com/1214098.
     ExpectSerializationRoundtrips(url_made_with_replace_components);
@@ -130,15 +122,8 @@
     // hostname directly.
     GURL url_created_directly("file://hostname/C:/dir/file.txt");
     EXPECT_EQ("/C:/dir/file.txt", url_created_directly.path());
-#ifdef WIN32
-    // On Win32, the hostname will be reset by DoParseUNC.
-    EXPECT_EQ("", url_created_directly.host());
-    EXPECT_EQ("file:///C:/dir/file.txt", url_created_directly.spec());
-#else
-    // On other platforms, the hostname is kept.
     EXPECT_EQ("hostname", url_created_directly.host());
     EXPECT_EQ("file://hostname/C:/dir/file.txt", url_created_directly.spec());
-#endif
     ExpectSerializationRoundtrips(url_created_directly);
 
     // The URL created directly and the URL created through ReplaceComponents
@@ -151,4 +136,24 @@
     EXPECT_EQ(url_created_directly.spec(),
               url_made_with_replace_components.spec());
   }
+
+  {
+    // #4: Try to create a URL with a Windows drive letter and "localhost" as
+    // hostname directly.
+    GURL url_created_directly("file://localhost/C:/dir/file.txt");
+    EXPECT_EQ("/C:/dir/file.txt", url_created_directly.path());
+    EXPECT_EQ("", url_created_directly.host());
+    EXPECT_EQ("file:///C:/dir/file.txt", url_created_directly.spec());
+    ExpectSerializationRoundtrips(url_created_directly);
+
+    // The URL created directly and the URL created through ReplaceComponents
+    // should be the same.
+    GURL::Replacements repl;
+    const std::string kNewPath = "/C:/dir/file.txt";
+    repl.SetPath(kNewPath.c_str(), url::Component(0, kNewPath.length()));
+    GURL url_made_with_replace_components =
+        GURL("file://localhost/").ReplaceComponents(repl);
+    EXPECT_EQ(url_created_directly.spec(),
+              url_made_with_replace_components.spec());
+  }
 }
diff --git a/url/mojom/url_gurl_mojom_traits_unittest.cc b/url/mojom/url_gurl_mojom_traits_unittest.cc
index 886ca37..b1ae635 100644
--- a/url/mojom/url_gurl_mojom_traits_unittest.cc
+++ b/url/mojom/url_gurl_mojom_traits_unittest.cc
@@ -120,17 +120,9 @@
         GURL("file://hostname/").ReplaceComponents(repl);
 
     EXPECT_EQ(kNewPath, url_made_with_replace_components.path());
-#ifdef WIN32
-    // Due to the reparsing logic in ReplaceComponents, the hostname is stripped
-    // for this URL too.
-    EXPECT_EQ("", url_made_with_replace_components.host());
-    EXPECT_EQ("file:///C:/dir/file.txt",
-              url_made_with_replace_components.spec());
-#else
     EXPECT_EQ("hostname", url_made_with_replace_components.host());
     EXPECT_EQ("file://hostname/C:/dir/file.txt",
               url_made_with_replace_components.spec());
-#endif
     // This is the MAIN VERIFICATION in this test. This used to fail on Windows,
     // see https://crbug.com/1214098.
     ExpectSerializationRoundtrips(url_made_with_replace_components);
@@ -141,15 +133,8 @@
     // hostname directly.
     GURL url_created_directly("file://hostname/C:/dir/file.txt");
     EXPECT_EQ("/C:/dir/file.txt", url_created_directly.path());
-#ifdef WIN32
-    // On Win32, the hostname will be reset by DoParseUNC.
-    EXPECT_EQ("", url_created_directly.host());
-    EXPECT_EQ("file:///C:/dir/file.txt", url_created_directly.spec());
-#else
-    // On other platforms, the hostname is kept.
     EXPECT_EQ("hostname", url_created_directly.host());
     EXPECT_EQ("file://hostname/C:/dir/file.txt", url_created_directly.spec());
-#endif
     ExpectSerializationRoundtrips(url_created_directly);
 
     // The URL created directly and the URL created through ReplaceComponents
@@ -162,6 +147,26 @@
     EXPECT_EQ(url_created_directly.spec(),
               url_made_with_replace_components.spec());
   }
+
+  {
+    // #4: Try to create a URL with a Windows drive letter and "localhost" as
+    // hostname directly.
+    GURL url_created_directly("file://localhost/C:/dir/file.txt");
+    EXPECT_EQ("/C:/dir/file.txt", url_created_directly.path());
+    EXPECT_EQ("", url_created_directly.host());
+    EXPECT_EQ("file:///C:/dir/file.txt", url_created_directly.spec());
+    ExpectSerializationRoundtrips(url_created_directly);
+
+    // The URL created directly and the URL created through ReplaceComponents
+    // should be the same.
+    GURL::Replacements repl;
+    const std::string kNewPath = "/C:/dir/file.txt";
+    repl.SetPath(kNewPath.c_str(), url::Component(0, kNewPath.length()));
+    GURL url_made_with_replace_components =
+        GURL("file://localhost/").ReplaceComponents(repl);
+    EXPECT_EQ(url_created_directly.spec(),
+              url_made_with_replace_components.spec());
+  }
 }
 
 // Test of basic Origin serialization.
diff --git a/url/origin_abstract_tests.h b/url/origin_abstract_tests.h
index 78f4c4a0..af1390e 100644
--- a/url/origin_abstract_tests.h
+++ b/url/origin_abstract_tests.h
@@ -370,15 +370,7 @@
       {"file:///etc/passwd", {"file", "", 0}},
       {"file://example.com/etc/passwd", {"file", "example.com", 0}},
       {"file:///", {"file", "", 0}},
-
-#ifdef WIN32
-      // TODO(https://crbug.com/1214098): Consider unifying URL parsing behavior
-      // on all platforms (or at least make sure that serialization always
-      // round-trips - see https://crbug.com/1214098).
-      {"file://hostname/C:/dir/file.txt", {"file", "", 0}},
-#else
       {"file://hostname/C:/dir/file.txt", {"file", "hostname", 0}},
-#endif
 
       // HTTP URLs
       {"http://example.com/", {"http", "example.com", 80}},
diff --git a/url/url_canon_fileurl.cc b/url/url_canon_fileurl.cc
index 6d6ade9..0aff54e 100644
--- a/url/url_canon_fileurl.cc
+++ b/url/url_canon_fileurl.cc
@@ -4,6 +4,7 @@
 
 // Functions for canonicalizing "file:" URLs.
 
+#include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
 #include "url/url_canon.h"
 #include "url/url_canon_internal.h"
@@ -14,6 +15,44 @@
 
 namespace {
 
+bool IsLocalhost(const char* spec, int begin, int end) {
+  if (begin > end)
+    return false;
+  return base::StringPiece(&spec[begin], end - begin) == "localhost";
+}
+
+bool IsLocalhost(const char16_t* spec, int begin, int end) {
+  if (begin > end)
+    return false;
+  return base::StringPiece16(&spec[begin], end - begin) == u"localhost";
+}
+
+template <typename CHAR>
+int DoFindWindowsDriveLetter(const CHAR* spec, int begin, int end) {
+  if (begin > end)
+    return -1;
+
+  // First guess the beginning of the drive letter.
+  // If there is something that looks like a drive letter in the spec between
+  // begin and end, store its position in drive_letter_pos.
+  int drive_letter_pos =
+      DoesContainWindowsDriveSpecUntil(spec, begin, end, end);
+  if (drive_letter_pos < begin)
+    return -1;
+
+  // Check if the path up to the drive letter candidate can be canonicalized as
+  // "/".
+  Component sub_path = MakeRange(begin, drive_letter_pos);
+  RawCanonOutput<1024> output;
+  Component output_path;
+  bool success = CanonicalizePath(spec, sub_path, &output, &output_path);
+  if (!success || output_path.len != 1 || output.at(output_path.begin) != '/') {
+    return -1;
+  }
+
+  return drive_letter_pos;
+}
+
 #ifdef WIN32
 
 // Given a pointer into the spec, this copies and canonicalizes the drive
@@ -21,41 +60,16 @@
 // spec, it won't do anything. The index of the next character in the input
 // spec is returned (after the colon when a drive spec is found, the begin
 // offset if one is not).
-template<typename CHAR>
-int FileDoDriveSpec(const CHAR* spec, int begin, int end,
-                    CanonOutput* output) {
-  // The path could be one of several things: /foo/bar, c:/foo/bar, /c:/foo,
-  // /./c:/foo, (with backslashes instead of slashes as well). The code
-  // first guesses the beginning of the drive letter, then verifies that the
-  // path up to that point can be canonicalised as "/". If it can, then the
-  // found drive letter is indeed a drive letter, otherwise the path has no
-  // drive letter in it.
-  if (begin > end)  // Nothing to search in.
-    return begin;   // Found no letter, so didn't consum any characters.
-
-  // If there is something that looks like a drive letter in the spec between
-  // being and end, store its position in drive_letter_pos.
-  int drive_letter_pos =
-      DoesContainWindowsDriveSpecUntil(spec, begin, end, end);
+template <typename CHAR>
+int FileDoDriveSpec(const CHAR* spec, int begin, int end, CanonOutput* output) {
+  int drive_letter_pos = FindWindowsDriveLetter(spec, begin, end);
   if (drive_letter_pos < begin)
-    return begin;  // Found no letter, so didn't consum any characters.
+    return begin;
 
-  // Check if the path up to the drive letter candidate can be canonicalized as
-  // "/".
-  Component sub_path = MakeRange(begin, drive_letter_pos);
-  Component output_path;
-  const int initial_length = output->length();
-  bool success = CanonicalizePath(spec, sub_path, output, &output_path);
-  if (!success || output_path.len != 1 ||
-      output->at(output_path.begin) != '/') {
-    // Undo writing the canonicalized path.
-    output->set_length(initial_length);
-    return begin;  // Found no letter, so didn't consum any characters.
-  }
+  // By now, a valid drive letter is confirmed at position drive_letter_pos,
+  // followed by a valid drive letter separator (a colon or a pipe).
 
-  // By now, "/" has been written to the output and a valid drive letter is
-  // confirmed at position drive_letter_pos, followed by a valid drive letter
-  // separator (a colon or a pipe).
+  output->push_back('/');
 
   // Normalize Windows drive letters to uppercase.
   if (base::IsAsciiLower(spec[drive_letter_pos]))
@@ -88,9 +102,12 @@
   // drive colon (if any, Windows only), or the first slash of the path.
   bool success = true;
   if (after_drive < path.end()) {
-    // Use the regular path canonicalizer to canonicalize the rest of the
-    // path. Give it a fake output component to write into. DoCanonicalizeFile
-    // will compute the full path component.
+    // Use the regular path canonicalizer to canonicalize the rest of the path
+    // after the drive.
+    //
+    // Give it a fake output component to write into, since we will be
+    // calculating the out_path ourselves (consisting of both the drive and the
+    // path we canonicalize here).
     Component sub_path = MakeRange(after_drive, path.end());
     Component fake_output_path;
     success = CanonicalizePath(spec, sub_path, output, &fake_output_path);
@@ -120,19 +137,33 @@
   output->Append("file://", 7);
   new_parsed->scheme.len = 4;
 
+  // If the host is localhost, and the path starts with a Windows drive letter,
+  // remove the host component. This does the following transformation:
+  //     file://localhost/C:/hello.txt -> file:///C:/hello.txt
+  //
+  // Note: we do this on every platform per URL Standard, not just Windows.
+  //
+  // TODO(https://crbug.com/688961): According to the latest URL spec, this
+  // transformation should be done regardless of the path.
+  Component host_range = parsed.host;
+  if (IsLocalhost(source.host, host_range.begin, host_range.end()) &&
+      FindWindowsDriveLetter(source.path, parsed.path.begin,
+                             parsed.path.end()) >= parsed.path.begin) {
+    host_range.reset();
+  }
+
   // Append the host. For many file URLs, this will be empty. For UNC, this
   // will be present.
   // TODO(brettw) This doesn't do any checking for host name validity. We
   // should probably handle validity checking of UNC hosts differently than
   // for regular IP hosts.
-  bool success = CanonicalizeHost(source.host, parsed.host,
-                                  output, &new_parsed->host);
+  bool success =
+      CanonicalizeHost(source.host, host_range, output, &new_parsed->host);
   success &= DoFileCanonicalizePath<CHAR, UCHAR>(source.path, parsed.path,
                                     output, &new_parsed->path);
+
   CanonicalizeQuery(source.query, parsed.query, query_converter,
                     output, &new_parsed->query);
-
-  // Ignore failure for refs since the URL can probably still be loaded.
   CanonicalizeRef(source.ref, parsed.ref, output, &new_parsed->ref);
 
   return success;
@@ -140,6 +171,14 @@
 
 } // namespace
 
+int FindWindowsDriveLetter(const char* spec, int begin, int end) {
+  return DoFindWindowsDriveLetter(spec, begin, end);
+}
+
+int FindWindowsDriveLetter(const char16_t* spec, int begin, int end) {
+  return DoFindWindowsDriveLetter(spec, begin, end);
+}
+
 bool CanonicalizeFileURL(const char* spec,
                          int spec_len,
                          const Parsed& parsed,
diff --git a/url/url_canon_internal.h b/url/url_canon_internal.h
index 5ace5f2..b486673 100644
--- a/url/url_canon_internal.h
+++ b/url/url_canon_internal.h
@@ -418,6 +418,17 @@
                                      int path_begin_in_output,
                                      CanonOutput* output);
 
+// Find the position of a bona fide Windows drive letter in the given path. If
+// no leading drive letter is found, -1 is returned. This function correctly
+// treats /c:/foo and /./c:/foo as having drive letters, and /def/c:/foo as not
+// having a drive letter.
+//
+// Exported for tests.
+COMPONENT_EXPORT(URL)
+int FindWindowsDriveLetter(const char* spec, int begin, int end);
+COMPONENT_EXPORT(URL)
+int FindWindowsDriveLetter(const char16_t* spec, int begin, int end);
+
 #ifndef WIN32
 
 // Implementations of Windows' int-to-string conversions
diff --git a/url/url_canon_unittest.cc b/url/url_canon_unittest.cc
index 9594fa75..9596375a 100644
--- a/url/url_canon_unittest.cc
+++ b/url/url_canon_unittest.cc
@@ -6,6 +6,7 @@
 #include <stddef.h>
 
 #include "base/cxx17_backports.h"
+#include "base/strings/string_piece.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/gtest_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -2510,6 +2511,47 @@
   }
 }
 
+TEST(URLCanonTest, FindWindowsDriveLetter) {
+  struct TestCase {
+    base::StringPiece spec;
+    int begin;
+    int end;  // -1 for end of spec
+    int expected_drive_letter_pos;
+  } cases[] = {
+      {"/", 0, -1, -1},
+
+      {"c:/foo", 0, -1, 0},
+      {"/c:/foo", 0, -1, 1},
+      {"//c:/foo", 0, -1, -1},  // "//" does not canonicalize to "/"
+      {"\\C|\\foo", 0, -1, 1},
+      {"/cd:/foo", 0, -1, -1},  // "/c" does not canonicalize to "/"
+      {"/./c:/foo", 0, -1, 3},
+      {"/.//c:/foo", 0, -1, -1},  // "/.//" does not canonicalize to "/"
+      {"/././c:/foo", 0, -1, 5},
+      {"/abc/c:/foo", 0, -1, -1},  // "/abc/" does not canonicalize to "/"
+      {"/abc/./../c:/foo", 0, -1, 10},
+
+      {"/c:/c:/foo", 3, -1, 4},  // actual input is "/c:/foo"
+      {"/c:/foo", 3, -1, -1},    // actual input is "/foo"
+      {"/c:/foo", 0, 1, -1},     // actual input is "/"
+  };
+
+  for (const auto& c : cases) {
+    int end = c.end;
+    if (end == -1)
+      end = c.spec.size();
+
+    EXPECT_EQ(c.expected_drive_letter_pos,
+              FindWindowsDriveLetter(c.spec.data(), c.begin, end))
+        << "for " << c.spec << "[" << c.begin << ":" << end << "] (UTF-8)";
+
+    std::u16string spec16 = base::ASCIIToUTF16(c.spec);
+    EXPECT_EQ(c.expected_drive_letter_pos,
+              FindWindowsDriveLetter(spec16.data(), c.begin, end))
+        << "for " << c.spec << "[" << c.begin << ":" << end << "] (UTF-16)";
+  }
+}
+
 TEST(URLCanonTest, IDNToASCII) {
   RawCanonOutputW<1024> output;
 
diff --git a/url/url_file.h b/url/url_file.h
index 91b2ddc..cc8eb59 100644
--- a/url/url_file.h
+++ b/url/url_file.h
@@ -13,15 +13,11 @@
 
 namespace url {
 
-#ifdef WIN32
-
 // We allow both "c:" and "c|" as drive identifiers.
 inline bool IsWindowsDriveSeparator(char16_t ch) {
   return ch == ':' || ch == '|';
 }
 
-#endif  // WIN32
-
 // Returns the index of the next slash in the input after the given index, or
 // spec_len if the end of the input is reached.
 template<typename CHAR>
@@ -32,8 +28,6 @@
   return idx;
 }
 
-#ifdef WIN32
-
 // DoesContainWindowsDriveSpecUntil returns the least number between
 // start_offset and max_offset such that the spec has a valid drive
 // specification starting at that offset. Otherwise it returns -1. This function
@@ -74,6 +68,8 @@
                                           spec_len) == start_offset;
 }
 
+#ifdef WIN32
+
 // Returns true if the start_offset in the given text looks like it begins a
 // UNC path, for example "\\". This function explicitly handles start_offset
 // values that are equal to or larger than the spec_len to simplify callers.
diff --git a/url/url_parse_file.cc b/url/url_parse_file.cc
index 7d86c7b..e0ff060 100644
--- a/url/url_parse_file.cc
+++ b/url/url_parse_file.cc
@@ -42,48 +42,24 @@
 
 namespace {
 
-// A subcomponent of DoInitFileURL, the input of this function should be a UNC
+// A subcomponent of DoParseFileURL, the input of this function should be a UNC
 // path name, with the index of the first character after the slashes following
 // the scheme given in |after_slashes|. This will initialize the host, path,
 // query, and ref, and leave the other output components untouched
-// (DoInitFileURL handles these for us).
-template<typename CHAR>
+// (DoParseFileURL handles these for us).
+template <typename CHAR>
 void DoParseUNC(const CHAR* spec,
                 int after_slashes,
                 int spec_len,
-               Parsed* parsed) {
+                Parsed* parsed) {
   int next_slash = FindNextSlash(spec, after_slashes, spec_len);
-  if (next_slash == spec_len) {
-    // No additional slash found, as in "file://foo", treat the text as the
-    // host with no path (this will end up being UNC to server "foo").
-    int host_len = spec_len - after_slashes;
-    if (host_len)
-      parsed->host = Component(after_slashes, host_len);
-    else
-      parsed->host.reset();
-    parsed->path.reset();
-    return;
-  }
 
-#ifdef WIN32
-  // See if we have something that looks like a path following the first
-  // component. As in "file://localhost/c:/", we get "c:/" out. We want to
-  // treat this as a having no host but the path given. Works on Windows only.
-  if (DoesBeginWindowsDriveSpec(spec, next_slash + 1, spec_len)) {
-    parsed->host.reset();
-    ParsePathInternal(spec, MakeRange(next_slash, spec_len),
-                      &parsed->path, &parsed->query, &parsed->ref);
-    return;
-  }
-#endif
-
-  // Otherwise, everything up until that first slash we found is the host name,
-  // which will end up being the UNC host. For example "file://foo/bar.txt"
-  // will get a server name of "foo" and a path of "/bar". Later, on Windows,
-  // this should be treated as the filename "\\foo\bar.txt" in proper UNC
-  // notation.
-  int host_len = next_slash - after_slashes;
-  if (host_len)
+  // Everything up until that first slash we found (or end of string) is the
+  // host name, which will end up being the UNC host. For example,
+  // "file://foo/bar.txt" will get a server name of "foo" and a path of "/bar".
+  // Later, on Windows, this should be treated as the filename "\\foo\bar.txt"
+  // in proper UNC notation.
+  if (after_slashes < next_slash)
     parsed->host = MakeRange(after_slashes, next_slash);
   else
     parsed->host.reset();
@@ -98,7 +74,7 @@
 // A subcomponent of DoParseFileURL, the input should be a local file, with the
 // beginning of the path indicated by the index in |path_begin|. This will
 // initialize the host, path, query, and ref, and leave the other output
-// components untouched (DoInitFileURL handles these for us).
+// components untouched (DoParseFileURL handles these for us).
 template<typename CHAR>
 void DoParseLocalFile(const CHAR* spec,
                       int path_begin,
diff --git a/url/url_parse_unittest.cc b/url/url_parse_unittest.cc
index a3f8065..c3362a2 100644
--- a/url/url_parse_unittest.cc
+++ b/url/url_parse_unittest.cc
@@ -374,8 +374,8 @@
 {"FiLe:c|",                  "FiLe", NULL, NULL, NULL,     -1, "c|",          NULL, NULL},
 {"FILE:/\\\\/server/file",   "FILE", NULL, NULL, "server", -1, "/file",       NULL, NULL},
 {"file://server/",           "file", NULL, NULL, "server", -1, "/",           NULL, NULL},
-{"file://localhost/c:/",     "file", NULL, NULL, NULL,     -1, "/c:/",        NULL, NULL},
-{"file://127.0.0.1/c|\\",    "file", NULL, NULL, NULL,     -1, "/c|\\",       NULL, NULL},
+{"file://localhost/c:/",     "file", NULL, NULL, "localhost", -1, "/c:/",     NULL, NULL},
+{"file://127.0.0.1/c|\\",    "file", NULL, NULL, "127.0.0.1", -1, "/c|\\",    NULL, NULL},
 {"file:/",                   "file", NULL, NULL, NULL,     -1, NULL,          NULL, NULL},
 {"file:",                    "file", NULL, NULL, NULL,     -1, NULL,          NULL, NULL},
   // If there is a Windows drive letter, treat any number of slashes as the