diff --git a/.gitignore b/.gitignore
index bc6b5134..c01e2ae9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -186,6 +186,7 @@
 /ios/third_party/material_roboto_font_loader_ios/src
 /ios/third_party/material_sprited_animation_view_ios/src
 /ios/third_party/material_text_accessibility_ios/src
+/ios/third_party/motion_interchange_objc/src
 /ios/third_party/ochamcrest/src
 /ios_internal
 /libassistant
diff --git a/DEPS b/DEPS
index d2eb95be..f4c3312e 100644
--- a/DEPS
+++ b/DEPS
@@ -90,7 +90,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling build tools
   # and whatever else without interference from each other.
-  'buildtools_revision': '505de88083136eefd056e5ee4ca0f01fe9b33de8',
+  'buildtools_revision': '282996b8c3cf7f05bbb5209432e9fe8162c6e7ac',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
@@ -222,6 +222,11 @@
       'condition': 'checkout_ios',
   },
 
+  'src/ios/third_party/motion_interchange_objc/src': {
+      'url': Var('chromium_git') + '/external/github.com/material-motion/motion-interchange-objc.git' + '@' + '26d91bf724adec6880cbc83a95d4cb4fb94847b6',
+      'condition': 'checkout_ios',
+  },
+
   'src/ios/third_party/ochamcrest/src': {
       'url': Var('chromium_git') + '/external/github.com/hamcrest/OCHamcrest.git' + '@' + '92d9c14d13bb864255e65c09383564653896916b',
       'condition': 'checkout_ios',
diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc
index 7e9ef80..b97ab4c4 100644
--- a/cc/trees/layer_tree_host_unittest.cc
+++ b/cc/trees/layer_tree_host_unittest.cc
@@ -8242,14 +8242,15 @@
 
     auto* recorder = static_cast<ukm::TestUkmRecorder*>(
         impl->ukm_manager()->recorder_for_testing());
-    auto* source = recorder->GetSourceForUrl(url_);
-    ASSERT_TRUE(source);
 
-    EXPECT_EQ(recorder->entries_count(), 1u);
-    recorder->ExpectMetric(*source, kUserInteraction, kCheckerboardArea, 0);
-    recorder->ExpectMetric(*source, kUserInteraction, kMissingTiles, 0);
-    recorder->ExpectMetric(*source, kUserInteraction, kCheckerboardAreaRatio,
-                           0);
+    const auto& entries = recorder->GetEntriesByName(kUserInteraction);
+    EXPECT_EQ(1u, entries.size());
+    for (const auto* entry : entries) {
+      recorder->ExpectEntrySourceHasUrl(entry, url_);
+      recorder->ExpectEntryMetric(entry, kCheckerboardArea, 0);
+      recorder->ExpectEntryMetric(entry, kMissingTiles, 0);
+      recorder->ExpectEntryMetric(entry, kCheckerboardAreaRatio, 0);
+    }
 
     EndTest();
   }
diff --git a/cc/trees/ukm_manager_unittest.cc b/cc/trees/ukm_manager_unittest.cc
index d59604d..b934159 100644
--- a/cc/trees/ukm_manager_unittest.cc
+++ b/cc/trees/ukm_manager_unittest.cc
@@ -9,85 +9,73 @@
 
 namespace cc {
 namespace {
+
+const char kTestUrl1[] = "chrome://test";
+const char kTestUrl2[] = "chrome://test2";
+
 const char kUserInteraction[] = "Compositor.UserInteraction";
 const char kCheckerboardArea[] = "CheckerboardedContentArea";
 const char kCheckerboardAreaRatio[] = "CheckerboardedContentAreaRatio";
 const char kMissingTiles[] = "NumMissingTiles";
 
-class UkmRecorderForTest : public ukm::TestUkmRecorder {
- public:
-  UkmRecorderForTest() = default;
-  ~UkmRecorderForTest() override {
-    ExpectMetrics(*source_, kUserInteraction, kCheckerboardArea,
-                  expected_final_checkerboard_);
-    ExpectMetrics(*source_, kUserInteraction, kMissingTiles,
-                  expected_final_missing_tiles_);
-    ExpectMetrics(*source_, kUserInteraction, kCheckerboardAreaRatio,
-                  expected_final_checkerboard_ratio_);
-  }
-
-  std::vector<int64_t> expected_final_checkerboard_;
-  std::vector<int64_t> expected_final_missing_tiles_;
-  std::vector<int64_t> expected_final_checkerboard_ratio_;
-  ukm::UkmSource* source_ = nullptr;
-};
-
 class UkmManagerTest : public testing::Test {
  public:
-  UkmManagerTest() : manager_(std::make_unique<UkmRecorderForTest>()) {
-    UpdateURL(GURL("chrome://test"));
-  }
-
-  void TearDown() override { ukm_source_ = nullptr; }
-
-  UkmRecorderForTest* recorder() {
-    return static_cast<UkmRecorderForTest*>(manager_.recorder_for_testing());
+  UkmManagerTest() {
+    auto recorder = std::make_unique<ukm::TestUkmRecorder>();
+    test_ukm_recorder_ = recorder.get();
+    manager_ = std::make_unique<UkmManager>(std::move(recorder));
+    manager_->SetSourceURL(GURL(kTestUrl1));
   }
 
  protected:
-  void UpdateURL(const GURL& url) {
-    manager_.SetSourceURL(url);
-    ukm_source_ = const_cast<ukm::UkmSource*>(recorder()->GetSourceForUrl(url));
-  }
-
-  UkmManager manager_;
-  ukm::UkmSource* ukm_source_ = nullptr;
+  ukm::TestUkmRecorder* test_ukm_recorder_;
+  std::unique_ptr<UkmManager> manager_;
 };
 
 TEST_F(UkmManagerTest, Basic) {
-  manager_.SetUserInteractionInProgress(true);
-  manager_.AddCheckerboardStatsForFrame(5, 1, 10);
-  manager_.AddCheckerboardStatsForFrame(15, 3, 30);
-  manager_.SetUserInteractionInProgress(false);
+  manager_->SetUserInteractionInProgress(true);
+  manager_->AddCheckerboardStatsForFrame(5, 1, 10);
+  manager_->AddCheckerboardStatsForFrame(15, 3, 30);
+  manager_->SetUserInteractionInProgress(false);
 
   // We should see a single entry for the interaction above.
-  EXPECT_EQ(recorder()->entries_count(), 1u);
-  EXPECT_TRUE(recorder()->HasEntry(*ukm_source_, kUserInteraction));
-  recorder()->ExpectMetric(*ukm_source_, kUserInteraction, kCheckerboardArea,
-                           10);
-  recorder()->ExpectMetric(*ukm_source_, kUserInteraction, kMissingTiles, 2);
-  recorder()->ExpectMetric(*ukm_source_, kUserInteraction,
-                           kCheckerboardAreaRatio, 50);
+  const auto& entries = test_ukm_recorder_->GetEntriesByName(kUserInteraction);
+  ukm::SourceId original_id = ukm::kInvalidSourceId;
+  EXPECT_EQ(1u, entries.size());
+  for (const auto* entry : entries) {
+    original_id = entry->source_id;
+    EXPECT_NE(ukm::kInvalidSourceId, entry->source_id);
+    test_ukm_recorder_->ExpectEntrySourceHasUrl(entry, GURL(kTestUrl1));
+    test_ukm_recorder_->ExpectEntryMetric(entry, kCheckerboardArea, 10);
+    test_ukm_recorder_->ExpectEntryMetric(entry, kMissingTiles, 2);
+    test_ukm_recorder_->ExpectEntryMetric(entry, kCheckerboardAreaRatio, 50);
+  }
+  test_ukm_recorder_->Purge();
 
   // Try pushing some stats while no user interaction is happening. No entries
   // should be pushed.
-  manager_.AddCheckerboardStatsForFrame(6, 1, 10);
-  manager_.AddCheckerboardStatsForFrame(99, 3, 100);
-  EXPECT_EQ(recorder()->entries_count(), 1u);
-  manager_.SetUserInteractionInProgress(true);
-  EXPECT_EQ(recorder()->entries_count(), 1u);
+  manager_->AddCheckerboardStatsForFrame(6, 1, 10);
+  manager_->AddCheckerboardStatsForFrame(99, 3, 100);
+  EXPECT_EQ(0u, test_ukm_recorder_->entries_count());
+  manager_->SetUserInteractionInProgress(true);
+  EXPECT_EQ(0u, test_ukm_recorder_->entries_count());
 
   // Record a few entries and change the source before the interaction ends. The
   // stats collected up till this point should be recorded before the source is
   // swapped.
-  manager_.AddCheckerboardStatsForFrame(10, 1, 100);
-  manager_.AddCheckerboardStatsForFrame(30, 5, 100);
-  recorder()->expected_final_checkerboard_ = {10, 20};
-  recorder()->expected_final_missing_tiles_ = {2, 3};
-  recorder()->expected_final_checkerboard_ratio_ = {50, 20};
-  recorder()->source_ = ukm_source_;
+  manager_->AddCheckerboardStatsForFrame(10, 1, 100);
+  manager_->AddCheckerboardStatsForFrame(30, 5, 100);
 
-  UpdateURL(GURL("chrome://test2"));
+  manager_->SetSourceURL(GURL(kTestUrl2));
+
+  const auto& entries2 = test_ukm_recorder_->GetEntriesByName(kUserInteraction);
+  EXPECT_EQ(1u, entries2.size());
+  for (const auto* entry : entries2) {
+    EXPECT_EQ(original_id, entry->source_id);
+    test_ukm_recorder_->ExpectEntryMetric(entry, kCheckerboardArea, 20);
+    test_ukm_recorder_->ExpectEntryMetric(entry, kMissingTiles, 3);
+    test_ukm_recorder_->ExpectEntryMetric(entry, kCheckerboardAreaRatio, 20);
+  }
 }
 
 }  // namespace
diff --git a/chrome/browser/autofill/autofill_metrics_browsertest.cc b/chrome/browser/autofill/autofill_metrics_browsertest.cc
index 294daaa4..eb715d0 100644
--- a/chrome/browser/autofill/autofill_metrics_browsertest.cc
+++ b/chrome/browser/autofill/autofill_metrics_browsertest.cc
@@ -86,11 +86,9 @@
 
   // Make sure the UKM were logged for the main frame url and none for the
   // iframe url.
-  std::vector<const ukm::UkmSource*> sources =
-      test_ukm_recorder_->GetSourcesForUrl(iframe_url.spec().c_str());
-  EXPECT_TRUE(sources.empty());
-  sources = test_ukm_recorder_->GetSourcesForUrl(main_frame_url.spec().c_str());
-  EXPECT_FALSE(sources.empty());
+  for (const auto& kv : test_ukm_recorder_->GetSources()) {
+    EXPECT_NE(iframe_url, kv.second->url());
+  }
 }
 
 IN_PROC_BROWSER_TEST_F(AutofillMetricsMetricsBrowserTest,
@@ -111,11 +109,9 @@
 
   // Make sure the UKM were logged for the main frame url and none for the
   // iframe url.
-  std::vector<const ukm::UkmSource*> sources =
-      test_ukm_recorder_->GetSourcesForUrl(iframe_url.spec().c_str());
-  EXPECT_TRUE(sources.empty());
-  sources = test_ukm_recorder_->GetSourcesForUrl(main_frame_url.spec().c_str());
-  EXPECT_FALSE(sources.empty());
+  for (const auto& kv : test_ukm_recorder_->GetSources()) {
+    EXPECT_NE(iframe_url, kv.second->url());
+  }
 }
 
 class SitePerProcessAutofillMetricsMetricsBrowserTest
@@ -156,11 +152,9 @@
 
   // Make sure the UKM were logged for the main frame url and none for the
   // iframe url.
-  std::vector<const ukm::UkmSource*> sources =
-      test_ukm_recorder_->GetSourcesForUrl(iframe_url.spec().c_str());
-  EXPECT_TRUE(sources.empty());
-  sources = test_ukm_recorder_->GetSourcesForUrl(main_frame_url.spec().c_str());
-  EXPECT_FALSE(sources.empty());
+  for (const auto& kv : test_ukm_recorder_->GetSources()) {
+    EXPECT_NE(iframe_url, kv.second->url());
+  }
 }
 
 IN_PROC_BROWSER_TEST_F(SitePerProcessAutofillMetricsMetricsBrowserTest,
@@ -182,9 +176,7 @@
 
   // Make sure the UKM were logged for the main frame url and none for the
   // iframe url.
-  std::vector<const ukm::UkmSource*> sources =
-      test_ukm_recorder_->GetSourcesForUrl(iframe_url.spec().c_str());
-  EXPECT_TRUE(sources.empty());
-  sources = test_ukm_recorder_->GetSourcesForUrl(main_frame_url.spec().c_str());
-  EXPECT_FALSE(sources.empty());
+  for (const auto& kv : test_ukm_recorder_->GetSources()) {
+    EXPECT_NE(iframe_url, kv.second->url());
+  }
 }
diff --git a/chrome/browser/chromeos/power/ml/user_activity_logger.cc b/chrome/browser/chromeos/power/ml/user_activity_logger.cc
index a475caf6..26ea908 100644
--- a/chrome/browser/chromeos/power/ml/user_activity_logger.cc
+++ b/chrome/browser/chromeos/power/ml/user_activity_logger.cc
@@ -29,6 +29,7 @@
       session_manager_(session_manager),
       binding_(this, std::move(request)),
       idle_delay_(base::TimeDelta::FromSeconds(kIdleDelaySeconds)) {
+  DCHECK(logger_delegate_);
   DCHECK(idle_event_notifier);
   idle_event_observer_.Add(idle_event_notifier);
 
@@ -118,7 +119,6 @@
     const IdleEventNotifier::ActivityData& activity_data) {
   idle_event_observed_ = true;
   ExtractFeatures(activity_data);
-  // TODO(renjieliu): call get open tab url function here.
 }
 
 void UserActivityLogger::OnSessionStateChanged() {
@@ -196,6 +196,7 @@
     features_.set_on_battery(
         *external_power_ == power_manager::PowerSupplyProperties::DISCONNECTED);
   }
+  logger_delegate_->UpdateOpenTabsURLs();
 }
 
 void UserActivityLogger::MaybeLogEvent(
diff --git a/chrome/browser/chromeos/power/ml/user_activity_logger_unittest.cc b/chrome/browser/chromeos/power/ml/user_activity_logger_unittest.cc
index 92f168d..7a5de4e6 100644
--- a/chrome/browser/chromeos/power/ml/user_activity_logger_unittest.cc
+++ b/chrome/browser/chromeos/power/ml/user_activity_logger_unittest.cc
@@ -38,14 +38,19 @@
 
   const std::vector<UserActivityEvent>& events() const { return events_; }
 
+  int num_update_open_tabs_urls_calls() const {
+    return num_update_open_tabs_urls_calls_;
+  }
+
   // UserActivityLoggerDelegate overrides:
   void LogActivity(const UserActivityEvent& event) override {
     events_.push_back(event);
   }
-  void UpdateOpenTabsURLs() override {}
+  void UpdateOpenTabsURLs() override { ++num_update_open_tabs_urls_calls_; }
 
  private:
   std::vector<UserActivityEvent> events_;
+  int num_update_open_tabs_urls_calls_ = 0;
 
   DISALLOW_COPY_AND_ASSIGN(TestingUserActivityLoggerDelegate);
 };
@@ -111,20 +116,17 @@
 
   void ReportIdleSleep() { fake_power_manager_client_.SendSuspendDone(); }
 
-  const std::vector<UserActivityEvent>& GetEvents() {
-    return delegate_.events();
-  }
-
   const scoped_refptr<base::TestMockTimeTaskRunner>& GetTaskRunner() {
     return task_runner_;
   }
 
+  TestingUserActivityLoggerDelegate delegate_;
+
  private:
   scoped_refptr<base::TestMockTimeTaskRunner> task_runner_;
   const base::TestMockTimeTaskRunner::ScopedContext scoped_context_;
 
   ui::UserActivityDetector user_activity_detector_;
-  TestingUserActivityLoggerDelegate delegate_;
   std::unique_ptr<IdleEventNotifier> idle_event_notifier_;
   chromeos::FakePowerManagerClient fake_power_manager_client_;
   session_manager::SessionManager session_manager_;
@@ -139,7 +141,7 @@
   ReportIdleEvent({now, now});
   ReportUserActivity(nullptr);
 
-  const std::vector<UserActivityEvent>& events = GetEvents();
+  const std::vector<UserActivityEvent>& events = delegate_.events();
   ASSERT_EQ(1U, events.size());
 
   UserActivityEvent::Event expected_event;
@@ -155,7 +157,7 @@
   base::Time now = base::Time::UnixEpoch();
   ReportIdleEvent({now, now});
 
-  EXPECT_EQ(0U, GetEvents().size());
+  EXPECT_EQ(0U, delegate_.events().size());
 }
 
 // Get a user event, then an idle event, then another user event,
@@ -168,7 +170,7 @@
   // Another user event.
   ReportUserActivity(nullptr);
 
-  const std::vector<UserActivityEvent>& events = GetEvents();
+  const std::vector<UserActivityEvent>& events = delegate_.events();
   ASSERT_EQ(1U, events.size());
 
   UserActivityEvent::Event expected_event;
@@ -191,7 +193,7 @@
   // Second user event.
   ReportUserActivity(nullptr);
 
-  const std::vector<UserActivityEvent>& events = GetEvents();
+  const std::vector<UserActivityEvent>& events = delegate_.events();
   ASSERT_EQ(2U, events.size());
 
   UserActivityEvent::Event expected_event;
@@ -208,7 +210,7 @@
   ReportIdleEvent({now, now});
 
   ReportLidEvent(chromeos::PowerManagerClient::LidState::CLOSED);
-  const auto& events = GetEvents();
+  const auto& events = delegate_.events();
   ASSERT_EQ(1U, events.size());
 
   UserActivityEvent::Event expected_event;
@@ -227,7 +229,7 @@
   ReportPowerChangeEvent(power_manager::PowerSupplyProperties::AC, 25.0f);
   ReportPowerChangeEvent(power_manager::PowerSupplyProperties::DISCONNECTED,
                          28.0f);
-  const auto& events = GetEvents();
+  const auto& events = delegate_.events();
   ASSERT_EQ(1U, events.size());
 
   UserActivityEvent::Event expected_event;
@@ -242,7 +244,7 @@
   ReportIdleEvent({now, now});
 
   ReportVideoStart();
-  const auto& events = GetEvents();
+  const auto& events = delegate_.events();
   ASSERT_EQ(1U, events.size());
 
   UserActivityEvent::Event expected_event;
@@ -259,7 +261,7 @@
   ReportScreenIdle();
   GetTaskRunner()->FastForwardUntilNoTasksRemain();
 
-  const auto& events = GetEvents();
+  const auto& events = delegate_.events();
   ASSERT_EQ(1U, events.size());
 
   UserActivityEvent::Event expected_event;
@@ -281,7 +283,7 @@
   ReportUserActivity(nullptr);
   GetTaskRunner()->FastForwardUntilNoTasksRemain();
 
-  const auto& events = GetEvents();
+  const auto& events = delegate_.events();
   ASSERT_EQ(1U, events.size());
 
   UserActivityEvent::Event expected_event;
@@ -296,7 +298,7 @@
   ReportIdleEvent({now, now});
 
   ReportScreenLocked();
-  const auto& events = GetEvents();
+  const auto& events = delegate_.events();
   ASSERT_EQ(1U, events.size());
 
   UserActivityEvent::Event expected_event;
@@ -311,7 +313,7 @@
   ReportIdleEvent({now, now});
 
   ReportIdleSleep();
-  const auto& events = GetEvents();
+  const auto& events = delegate_.events();
   ASSERT_EQ(1U, events.size());
 
   UserActivityEvent::Event expected_event;
@@ -329,7 +331,7 @@
   ReportIdleEvent({});
   ReportUserActivity(nullptr);
 
-  const auto& events = GetEvents();
+  const auto& events = delegate_.events();
   ASSERT_EQ(1U, events.size());
 
   const UserActivityEvent::Features& features = events[0].features();
@@ -338,6 +340,16 @@
   EXPECT_DOUBLE_EQ(false, features.on_battery());
 }
 
+TEST_F(UserActivityLoggerTest, UpdateOpenTabsURLsCalledTimes) {
+  ReportIdleEvent({});
+  ReportUserActivity(nullptr);
+  EXPECT_EQ(1, delegate_.num_update_open_tabs_urls_calls());
+
+  ReportIdleEvent({});
+  ReportUserActivity(nullptr);
+  EXPECT_EQ(2, delegate_.num_update_open_tabs_urls_calls());
+}
+
 }  // namespace ml
 }  // namespace power
 }  // namespace chromeos
diff --git a/chrome/browser/content_settings/sound_content_setting_observer_unittest.cc b/chrome/browser/content_settings/sound_content_setting_observer_unittest.cc
index 3f890e1..0154c54 100644
--- a/chrome/browser/content_settings/sound_content_setting_observer_unittest.cc
+++ b/chrome/browser/content_settings/sound_content_setting_observer_unittest.cc
@@ -69,17 +69,17 @@
   }
 
   bool RecordedSiteMuted() {
-    const ukm::UkmSource* source = test_ukm_recorder_->GetSourceForUrl(kURL1);
-    if (!source)
-      return false;
-    return test_ukm_recorder_->HasEntry(*source, kSiteMutedEvent);
+    auto entries = test_ukm_recorder_->GetEntriesByName(kSiteMutedEvent);
+    return !entries.empty();
   }
 
   void ExpectRecordedForReason(SoundContentSettingObserver::MuteReason reason) {
-    const ukm::UkmSource* source = test_ukm_recorder_->GetSourceForUrl(kURL1);
-    EXPECT_NE(nullptr, source);
-    test_ukm_recorder_->ExpectMetric(*source, kSiteMutedEvent, kSiteMutedReason,
-                                     reason);
+    auto entries = test_ukm_recorder_->GetEntriesByName(kSiteMutedEvent);
+    EXPECT_EQ(1u, entries.size());
+    for (const auto* const entry : entries) {
+      test_ukm_recorder_->ExpectEntrySourceHasUrl(entry, GURL(kURL1));
+      test_ukm_recorder_->ExpectEntryMetric(entry, kSiteMutedReason, reason);
+    }
   }
 
 // TabMutedReason does not exist on Android.
diff --git a/chrome/browser/media/media_engagement_contents_observer_unittest.cc b/chrome/browser/media/media_engagement_contents_observer_unittest.cc
index 2c886db3..0c2481c0 100644
--- a/chrome/browser/media/media_engagement_contents_observer_unittest.cc
+++ b/chrome/browser/media/media_engagement_contents_observer_unittest.cc
@@ -233,11 +233,15 @@
         {Entry::kPlaybacks_SecondsSinceLastName, seconds_since_playback},
     };
 
-    const ukm::UkmSource* source =
-        test_ukm_recorder_.GetSourceForUrl(url.spec().c_str());
-    EXPECT_EQ(url, source->url());
-    EXPECT_EQ(1, test_ukm_recorder_.CountEntries(*source, Entry::kEntryName));
-    test_ukm_recorder_.ExpectEntry(*source, Entry::kEntryName, metrics);
+    auto entries = test_ukm_recorder_.GetEntriesByName(Entry::kEntryName);
+    EXPECT_EQ(1u, entries.size());
+    for (const auto* const entry : entries) {
+      test_ukm_recorder_.ExpectEntrySourceHasUrl(entry, url);
+      for (const auto& metric : metrics) {
+        test_ukm_recorder_.ExpectEntryMetric(entry, metric.first,
+                                             metric.second);
+      }
+    }
   }
 
   void ExpectUkmIgnoredEntries(GURL url, std::vector<int64_t> entries) {
diff --git a/chrome/browser/metrics/oom/out_of_memory_reporter_unittest.cc b/chrome/browser/metrics/oom/out_of_memory_reporter_unittest.cc
index 5b22a7a..170a900 100644
--- a/chrome/browser/metrics/oom/out_of_memory_reporter_unittest.cc
+++ b/chrome/browser/metrics/oom/out_of_memory_reporter_unittest.cc
@@ -152,13 +152,15 @@
   }
 
   void CheckUkmMetricRecorded(const GURL& url, int64_t time_delta) {
-    const ukm::UkmSource* source =
-        *test_ukm_recorder_->GetSourcesForUrl(url.spec().c_str()).begin();
-    std::vector<int64_t> metrics = test_ukm_recorder_->GetMetricValues(
-        source->id(), ukm::builders::Tab_RendererOOM::kEntryName,
-        ukm::builders::Tab_RendererOOM::kTimeSinceLastNavigationName);
-    EXPECT_EQ(1u, metrics.size());
-    EXPECT_EQ(time_delta, metrics.at(0));
+    const auto& entries = test_ukm_recorder_->GetEntriesByName(
+        ukm::builders::Tab_RendererOOM::kEntryName);
+    EXPECT_EQ(1u, entries.size());
+    for (const auto* entry : entries) {
+      test_ukm_recorder_->ExpectEntrySourceHasUrl(entry, url);
+      test_ukm_recorder_->ExpectEntryMetric(
+          entry, ukm::builders::Tab_RendererOOM::kTimeSinceLastNavigationName,
+          time_delta);
+    }
   }
 
  protected:
@@ -191,9 +193,9 @@
                      base::Unretained(process()),
                      base::TERMINATION_STATUS_ABNORMAL_TERMINATION, 0));
   EXPECT_FALSE(last_oom_url_.has_value());
-  EXPECT_FALSE(
-      test_ukm_recorder_->HasEntry(*test_ukm_recorder_->GetSourceForUrl(url),
-                                   ukm::builders::Tab_RendererOOM::kEntryName));
+  const auto& entries = test_ukm_recorder_->GetEntriesByName(
+      ukm::builders::Tab_RendererOOM::kEntryName);
+  EXPECT_EQ(0u, entries.size());
 }
 
 TEST_F(OutOfMemoryReporterTest, SubframeNavigation_IsNotLogged) {
@@ -237,6 +239,5 @@
   SimulateOOMAndWait();
   EXPECT_FALSE(last_oom_url_.has_value());
   // Only the first OOM is recorded.
-  EXPECT_EQ(1u, test_ukm_recorder_->entries_count());
   CheckUkmMetricRecorded(url2, 3000);
 }
diff --git a/chrome/browser/metrics/process_memory_metrics_emitter_unittest.cc b/chrome/browser/metrics/process_memory_metrics_emitter_unittest.cc
index e9c0f8a..06d925c7 100644
--- a/chrome/browser/metrics/process_memory_metrics_emitter_unittest.cc
+++ b/chrome/browser/metrics/process_memory_metrics_emitter_unittest.cc
@@ -11,6 +11,7 @@
 #include "build/build_config.h"
 #include "chrome/browser/metrics/renderer_uptime_tracker.h"
 #include "components/ukm/test_ukm_recorder.h"
+#include "services/metrics/public/cpp/ukm_builders.h"
 #include "services/metrics/public/cpp/ukm_recorder.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -25,6 +26,8 @@
 
 namespace {
 
+using UkmEntry = ukm::builders::Memory_Experimental;
+
 // Provide fake to surface ReceivedMemoryDump and ReceivedProcessInfos to public
 // visibility.
 class ProcessMemoryMetricsEmitterFake : public ProcessMemoryMetricsEmitter {
@@ -321,17 +324,29 @@
 
  protected:
   void CheckMemoryUkmEntryMetrics(
-      size_t entry_num,
-      base::flat_map<const char*, int64_t> expected) {
-    const ukm::mojom::UkmEntry* entry = test_ukm_recorder_.GetEntry(entry_num);
-    CHECK(entry != nullptr);
-    EXPECT_EQ(expected.size(), entry->metrics.size());
-    for (auto it = expected.begin(); it != expected.end(); ++it) {
-      const ukm::mojom::UkmMetric* actual =
-          test_ukm_recorder_.FindMetric(entry, it->first);
-      CHECK(actual != nullptr) << "Metric '" << it->first << "' is missing.";
-      EXPECT_EQ(it->second, actual->value);
+      const std::vector<base::flat_map<const char*, int64_t>>& expected,
+      size_t expected_total_memory_entries = 1u) {
+    const auto& entries =
+        test_ukm_recorder_.GetEntriesByName(UkmEntry::kEntryName);
+    size_t i = 0;
+    size_t total_memory_entries = 0;
+    for (const auto* entry : entries) {
+      if (test_ukm_recorder_.EntryHasMetric(
+              entry, UkmEntry::kTotal2_PrivateMemoryFootprintName)) {
+        total_memory_entries++;
+        continue;
+      }
+      if (i >= expected.size()) {
+        FAIL() << "Unexpected non-total entry.";
+        continue;
+      }
+      for (const auto& kv : expected[i]) {
+        test_ukm_recorder_.ExpectEntryMetric(entry, kv.first, kv.second);
+      }
+      i++;
     }
+    EXPECT_EQ(expected_total_memory_entries, total_memory_entries);
+    EXPECT_EQ(expected.size() + expected_total_memory_entries, entries.size());
   }
 
   base::test::ScopedTaskEnvironment scoped_task_environment_;
@@ -354,8 +369,9 @@
   emitter->ReceivedProcessInfos(ProcessInfoVector());
   emitter->ReceivedMemoryDump(true, std::move(global_dump));
 
-  EXPECT_EQ(2u, test_ukm_recorder_.entries_count());
-  CheckMemoryUkmEntryMetrics(0, expected_metrics);
+  std::vector<base::flat_map<const char*, int64_t>> expected_entries;
+  expected_entries.push_back(expected_metrics);
+  CheckMemoryUkmEntryMetrics(expected_entries);
 }
 
 INSTANTIATE_TEST_CASE_P(SinglePtype,
@@ -379,8 +395,9 @@
   emitter->ReceivedProcessInfos(ProcessInfoVector());
   emitter->ReceivedMemoryDump(true, std::move(global_dump));
 
-  EXPECT_EQ(2u, test_ukm_recorder_.entries_count());
-  CheckMemoryUkmEntryMetrics(0, expected_metrics);
+  std::vector<base::flat_map<const char*, int64_t>> expected_entries;
+  expected_entries.push_back(expected_metrics);
+  CheckMemoryUkmEntryMetrics(expected_entries);
 }
 
 TEST_F(ProcessMemoryMetricsEmitterTest, CollectsManyProcessUKMsSingleDump) {
@@ -403,10 +420,7 @@
   emitter->ReceivedProcessInfos(ProcessInfoVector());
   emitter->ReceivedMemoryDump(true, std::move(global_dump));
 
-  EXPECT_EQ(7u, test_ukm_recorder_.entries_count());
-  for (size_t i = 0; i < entries_ptypes.size(); ++i) {
-    CheckMemoryUkmEntryMetrics(i, entries_metrics[i]);
-  }
+  CheckMemoryUkmEntryMetrics(entries_metrics);
 }
 
 TEST_F(ProcessMemoryMetricsEmitterTest, CollectsManyProcessUKMsManyDumps) {
@@ -431,10 +445,7 @@
     emitter->ReceivedMemoryDump(true, std::move(global_dump));
   }
 
-  EXPECT_EQ(8u, test_ukm_recorder_.entries_count());
-  for (size_t i = 0; i < entries_ptypes.size(); ++i) {
-    CheckMemoryUkmEntryMetrics(i, entries_metrics[i]);
-  }
+  CheckMemoryUkmEntryMetrics(entries_metrics, 2u);
 }
 
 TEST_F(ProcessMemoryMetricsEmitterTest, ReceiveProcessInfoFirst) {
@@ -450,25 +461,23 @@
   emitter->ReceivedProcessInfos(GetProcessInfo(test_ukm_recorder_));
   emitter->ReceivedMemoryDump(true, std::move(global_dump));
 
-  EXPECT_EQ(1,
-            test_ukm_recorder_.CountEntries(
-                *test_ukm_recorder_.GetSourceForUrl("http://www.url201.com/"),
-                "Memory.Experimental"));
+  auto entries = test_ukm_recorder_.GetEntriesByName(UkmEntry::kEntryName);
+  ASSERT_EQ(entries.size(), 2u);
+  int total_memory_entries = 0;
+  for (const auto* const entry : entries) {
+    if (test_ukm_recorder_.EntryHasMetric(
+            entry, UkmEntry::kTotal2_PrivateMemoryFootprintName)) {
+      total_memory_entries++;
+    } else {
+      test_ukm_recorder_.ExpectEntrySourceHasUrl(
+          entry, GURL("http://www.url201.com/"));
+    }
+  }
+  EXPECT_EQ(1, total_memory_entries);
 
-  EXPECT_EQ(0,
-            test_ukm_recorder_.CountEntries(
-                *test_ukm_recorder_.GetSourceForUrl("http://www.url2021.com/"),
-                "Memory.Experimental"));
-
-  EXPECT_EQ(0,
-            test_ukm_recorder_.CountEntries(
-                *test_ukm_recorder_.GetSourceForUrl("http://www.url2022.com/"),
-                "Memory.Experimental"));
-
-  // The second entry is for total memory, which we don't care about in this
-  // test.
-  EXPECT_EQ(2u, test_ukm_recorder_.entries_count());
-  CheckMemoryUkmEntryMetrics(0, expected_metrics);
+  std::vector<base::flat_map<const char*, int64_t>> expected_entries;
+  expected_entries.push_back(expected_metrics);
+  CheckMemoryUkmEntryMetrics(expected_entries);
 }
 
 TEST_F(ProcessMemoryMetricsEmitterTest, ReceiveProcessInfoSecond) {
@@ -484,25 +493,23 @@
   emitter->ReceivedMemoryDump(true, std::move(global_dump));
   emitter->ReceivedProcessInfos(GetProcessInfo(test_ukm_recorder_));
 
-  EXPECT_EQ(1,
-            test_ukm_recorder_.CountEntries(
-                *test_ukm_recorder_.GetSourceForUrl("http://www.url201.com/"),
-                "Memory.Experimental"));
+  auto entries = test_ukm_recorder_.GetEntriesByName(UkmEntry::kEntryName);
+  ASSERT_EQ(entries.size(), 2u);
+  int total_memory_entries = 0;
+  for (const auto* const entry : entries) {
+    if (test_ukm_recorder_.EntryHasMetric(
+            entry, UkmEntry::kTotal2_PrivateMemoryFootprintName)) {
+      total_memory_entries++;
+    } else {
+      test_ukm_recorder_.ExpectEntrySourceHasUrl(
+          entry, GURL("http://www.url201.com/"));
+    }
+  }
+  EXPECT_EQ(1, total_memory_entries);
 
-  EXPECT_EQ(0,
-            test_ukm_recorder_.CountEntries(
-                *test_ukm_recorder_.GetSourceForUrl("http://www.url2021.com/"),
-                "Memory.Experimental"));
-
-  EXPECT_EQ(0,
-            test_ukm_recorder_.CountEntries(
-                *test_ukm_recorder_.GetSourceForUrl("http://www.url2022.com/"),
-                "Memory.Experimental"));
-
-  // The second entry is for total memory, which we don't care about in this
-  // test.
-  EXPECT_EQ(2u, test_ukm_recorder_.entries_count());
-  CheckMemoryUkmEntryMetrics(0, expected_metrics);
+  std::vector<base::flat_map<const char*, int64_t>> expected_entries;
+  expected_entries.push_back(expected_metrics);
+  CheckMemoryUkmEntryMetrics(expected_entries);
 }
 
 TEST_F(ProcessMemoryMetricsEmitterTest, ProcessInfoHasTwoURLs) {
@@ -520,18 +527,22 @@
   emitter->ReceivedProcessInfos(GetProcessInfo(test_ukm_recorder_));
 
   // Check that if there are two URLs, neither is emitted.
-  EXPECT_EQ(1,
-            test_ukm_recorder_.CountEntries(
-                *test_ukm_recorder_.GetSourceForUrl("http://www.url201.com/"),
-                "Memory.Experimental"));
-
-  EXPECT_EQ(0,
-            test_ukm_recorder_.CountEntries(
-                *test_ukm_recorder_.GetSourceForUrl("http://www.url2021.com/"),
-                "Memory.Experimental"));
-
-  EXPECT_EQ(0,
-            test_ukm_recorder_.CountEntries(
-                *test_ukm_recorder_.GetSourceForUrl("http://www.url2022.com/"),
-                "Memory.Experimental"));
+  auto entries = test_ukm_recorder_.GetEntriesByName(UkmEntry::kEntryName);
+  int total_memory_entries = 0;
+  int entries_with_urls = 0;
+  for (const auto* const entry : entries) {
+    if (test_ukm_recorder_.EntryHasMetric(
+            entry, UkmEntry::kTotal2_PrivateMemoryFootprintName)) {
+      total_memory_entries++;
+    } else {
+      if (test_ukm_recorder_.GetSourceForSourceId(entry->source_id)) {
+        entries_with_urls++;
+        test_ukm_recorder_.ExpectEntrySourceHasUrl(
+            entry, GURL("http://www.url201.com/"));
+      }
+    }
+  }
+  EXPECT_EQ(4u, entries.size());
+  EXPECT_EQ(1, total_memory_entries);
+  EXPECT_EQ(1, entries_with_urls);
 }
diff --git a/chrome/browser/page_load_metrics/observers/document_write_page_load_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/document_write_page_load_metrics_observer_unittest.cc
index 16a8af8..e355954 100644
--- a/chrome/browser/page_load_metrics/observers/document_write_page_load_metrics_observer_unittest.cc
+++ b/chrome/browser/page_load_metrics/observers/document_write_page_load_metrics_observer_unittest.cc
@@ -64,16 +64,20 @@
       internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint,
       contentful_paint.InMilliseconds(), 1);
 
-  const ukm::UkmSource* source =
-      test_ukm_recorder().GetSourceForUrl("https://www.google.com/");
-  EXPECT_TRUE(
-      test_ukm_recorder().HasEntry(*source, internal::kUkmDocWriteBlockName));
-  test_ukm_recorder().ExpectMetric(
-      *source, internal::kUkmDocWriteBlockName,
-      internal::kUkmParseBlockedOnScriptLoadDocumentWrite, 5);
-  test_ukm_recorder().ExpectMetric(
-      *source, internal::kUkmDocWriteBlockName,
-      internal::kUkmParseBlockedOnScriptExecutionDocumentWrite, 3);
+  std::map<ukm::SourceId, ukm::mojom::UkmEntryPtr> entries =
+      test_ukm_recorder().GetMergedEntriesByName(
+          internal::kUkmDocWriteBlockName);
+  EXPECT_EQ(1u, entries.size());
+  for (const auto& kv : entries) {
+    test_ukm_recorder().ExpectEntrySourceHasUrl(
+        kv.second.get(), GURL("https://www.google.com/"));
+    test_ukm_recorder().ExpectEntryMetric(
+        kv.second.get(), internal::kUkmParseBlockedOnScriptLoadDocumentWrite,
+        5);
+    test_ukm_recorder().ExpectEntryMetric(
+        kv.second.get(),
+        internal::kUkmParseBlockedOnScriptExecutionDocumentWrite, 3);
+  }
 
   NavigateAndCommit(GURL("https://www.example.com/"));
 
@@ -102,9 +106,17 @@
   histogram_tester().ExpectTotalCount(
       internal::kHistogramDocWriteBlockReloadCount, 1);
 
-  test_ukm_recorder().ExpectMetric(
-      *test_ukm_recorder().GetSourceForUrl("https://www.google.com/"),
-      internal::kUkmDocWriteBlockName, internal::kUkmDocWriteBlockReload, true);
+  auto entries =
+      test_ukm_recorder().GetEntriesByName(internal::kUkmDocWriteBlockName);
+  EXPECT_EQ(1u, entries.size());
+  const ukm::mojom::UkmEntry* entry1 = nullptr;
+  for (const auto* const entry : entries) {
+    test_ukm_recorder().ExpectEntrySourceHasUrl(
+        entry, GURL("https://www.google.com/"));
+    test_ukm_recorder().ExpectEntryMetric(
+        entry, internal::kUkmDocWriteBlockReload, true);
+    entry1 = entry;
+  }
 
   // Another reload.
   NavigateAndCommit(GURL("https://www.example.com/"));
@@ -113,9 +125,16 @@
   histogram_tester().ExpectTotalCount(
       internal::kHistogramDocWriteBlockReloadCount, 2);
 
-  test_ukm_recorder().ExpectMetric(
-      *test_ukm_recorder().GetSourceForUrl("https://www.example.com/"),
-      internal::kUkmDocWriteBlockName, internal::kUkmDocWriteBlockReload, true);
+  auto entries2 =
+      test_ukm_recorder().GetEntriesByName(internal::kUkmDocWriteBlockName);
+  EXPECT_EQ(2u, entries2.size());
+  for (const auto* const entry : entries2) {
+    if (entry != entry1)
+      test_ukm_recorder().ExpectEntrySourceHasUrl(
+          entry, GURL("https://www.example.com/"));
+    test_ukm_recorder().ExpectEntryMetric(
+        entry, internal::kUkmDocWriteBlockReload, true);
+  }
 
   // Another metadata update should not increase reload count.
   metadata.behavior_flags |=
@@ -126,8 +145,6 @@
 
   histogram_tester().ExpectTotalCount(internal::kHistogramDocWriteBlockCount,
                                       0);
-
-  EXPECT_EQ(2ul, test_ukm_recorder().entries_count());
 }
 
 TEST_F(DocumentWritePageLoadMetricsObserverTest, NoPossibleBlock) {
diff --git a/chrome/browser/page_load_metrics/observers/from_gws_page_load_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/from_gws_page_load_metrics_observer_unittest.cc
index 59f276c4..3920065 100644
--- a/chrome/browser/page_load_metrics/observers/from_gws_page_load_metrics_observer_unittest.cc
+++ b/chrome/browser/page_load_metrics/observers/from_gws_page_load_metrics_observer_unittest.cc
@@ -223,11 +223,12 @@
       internal::kHistogramFromGWSLoad,
       timing.document_timing->load_event_start.value().InMilliseconds(), 1);
 
-  EXPECT_EQ(1ul, test_ukm_recorder().entries_count());
-  const ukm::UkmSource* source =
-      test_ukm_recorder().GetSourceForUrl(kExampleUrl);
-  EXPECT_TRUE(test_ukm_recorder().HasEntry(*source,
-                                           internal::kUkmFromGoogleSearchName));
+  auto entries =
+      test_ukm_recorder().GetEntriesByName(internal::kUkmFromGoogleSearchName);
+  EXPECT_EQ(1u, entries.size());
+  for (const auto* const entry : entries) {
+    test_ukm_recorder().ExpectEntrySourceHasUrl(entry, GURL(kExampleUrl));
+  }
 }
 
 TEST_F(FromGWSPageLoadMetricsObserverTest, SearchPreviousCommittedUrl2) {
@@ -249,11 +250,12 @@
       internal::kHistogramFromGWSFirstTextPaint,
       timing.paint_timing->first_text_paint.value().InMilliseconds(), 1);
 
-  EXPECT_EQ(1ul, test_ukm_recorder().entries_count());
-  const ukm::UkmSource* source =
-      test_ukm_recorder().GetSourceForUrl(kExampleUrl);
-  EXPECT_TRUE(test_ukm_recorder().HasEntry(*source,
-                                           internal::kUkmFromGoogleSearchName));
+  auto entries =
+      test_ukm_recorder().GetEntriesByName(internal::kUkmFromGoogleSearchName);
+  EXPECT_EQ(1u, entries.size());
+  for (const auto* const entry : entries) {
+    test_ukm_recorder().ExpectEntrySourceHasUrl(entry, GURL(kExampleUrl));
+  }
 }
 
 TEST_F(FromGWSPageLoadMetricsObserverTest, SearchPreviousCommittedUrl3) {
@@ -275,11 +277,12 @@
       internal::kHistogramFromGWSFirstTextPaint,
       timing.paint_timing->first_text_paint.value().InMilliseconds(), 1);
 
-  EXPECT_EQ(1ul, test_ukm_recorder().entries_count());
-  const ukm::UkmSource* source =
-      test_ukm_recorder().GetSourceForUrl(kExampleUrl);
-  EXPECT_TRUE(test_ukm_recorder().HasEntry(*source,
-                                           internal::kUkmFromGoogleSearchName));
+  auto entries =
+      test_ukm_recorder().GetEntriesByName(internal::kUkmFromGoogleSearchName);
+  EXPECT_EQ(1u, entries.size());
+  for (const auto* const entry : entries) {
+    test_ukm_recorder().ExpectEntrySourceHasUrl(entry, GURL(kExampleUrl));
+  }
 }
 
 TEST_F(FromGWSPageLoadMetricsObserverTest, SearchPreviousCommittedUrl4) {
@@ -301,11 +304,12 @@
       internal::kHistogramFromGWSFirstTextPaint,
       timing.paint_timing->first_text_paint.value().InMilliseconds(), 1);
 
-  EXPECT_EQ(1ul, test_ukm_recorder().entries_count());
-  const ukm::UkmSource* source =
-      test_ukm_recorder().GetSourceForUrl(kExampleUrl);
-  EXPECT_TRUE(test_ukm_recorder().HasEntry(*source,
-                                           internal::kUkmFromGoogleSearchName));
+  auto entries =
+      test_ukm_recorder().GetEntriesByName(internal::kUkmFromGoogleSearchName);
+  EXPECT_EQ(1u, entries.size());
+  for (const auto* const entry : entries) {
+    test_ukm_recorder().ExpectEntrySourceHasUrl(entry, GURL(kExampleUrl));
+  }
 }
 
 TEST_F(FromGWSPageLoadMetricsObserverTest, SearchToNonSearchToOtherPage) {
@@ -335,11 +339,12 @@
       internal::kHistogramFromGWSFirstTextPaint,
       timing.paint_timing->first_text_paint.value().InMilliseconds(), 1);
 
-  EXPECT_EQ(1ul, test_ukm_recorder().entries_count());
-  const ukm::UkmSource* source =
-      test_ukm_recorder().GetSourceForUrl(kExampleUrl);
-  EXPECT_TRUE(test_ukm_recorder().HasEntry(*source,
-                                           internal::kUkmFromGoogleSearchName));
+  auto entries =
+      test_ukm_recorder().GetEntriesByName(internal::kUkmFromGoogleSearchName);
+  EXPECT_EQ(1u, entries.size());
+  for (const auto* const entry : entries) {
+    test_ukm_recorder().ExpectEntrySourceHasUrl(entry, GURL(kExampleUrl));
+  }
 }
 
 TEST_F(FromGWSPageLoadMetricsObserverTest, SearchToNonSearchToSearch) {
@@ -369,11 +374,12 @@
       internal::kHistogramFromGWSFirstTextPaint,
       timing.paint_timing->first_text_paint.value().InMilliseconds(), 1);
 
-  EXPECT_EQ(1ul, test_ukm_recorder().entries_count());
-  const ukm::UkmSource* source =
-      test_ukm_recorder().GetSourceForUrl(kExampleUrl);
-  EXPECT_TRUE(test_ukm_recorder().HasEntry(*source,
-                                           internal::kUkmFromGoogleSearchName));
+  auto entries =
+      test_ukm_recorder().GetEntriesByName(internal::kUkmFromGoogleSearchName);
+  EXPECT_EQ(1u, entries.size());
+  for (const auto* const entry : entries) {
+    test_ukm_recorder().ExpectEntrySourceHasUrl(entry, GURL(kExampleUrl));
+  }
 }
 
 TEST_F(FromGWSPageLoadMetricsObserverTest,
@@ -415,13 +421,12 @@
       internal::kHistogramFromGWSFirstTextPaint,
       timing3.paint_timing->first_text_paint.value().InMilliseconds(), 1);
 
-  std::vector<const ukm::UkmSource*> sources =
-      test_ukm_recorder().GetSourcesForUrl(kExampleUrl);
-  EXPECT_EQ(2ul, sources.size());
-  EXPECT_TRUE(test_ukm_recorder().HasEntry(*sources.at(0),
-                                           internal::kUkmFromGoogleSearchName));
-  EXPECT_TRUE(test_ukm_recorder().HasEntry(*sources.at(1),
-                                           internal::kUkmFromGoogleSearchName));
+  auto entries =
+      test_ukm_recorder().GetEntriesByName(internal::kUkmFromGoogleSearchName);
+  EXPECT_EQ(2u, entries.size());
+  for (const auto* const entry : entries) {
+    test_ukm_recorder().ExpectEntrySourceHasUrl(entry, GURL(kExampleUrl));
+  }
 }
 
 TEST_F(FromGWSPageLoadMetricsObserverTest,
@@ -461,13 +466,12 @@
       internal::kHistogramFromGWSFirstTextPaint,
       timing.paint_timing->first_text_paint.value().InMilliseconds(), 1);
 
-  std::vector<const ukm::UkmSource*> sources =
-      test_ukm_recorder().GetSourcesForUrl(kExampleUrl);
-  EXPECT_EQ(2ul, sources.size());
-  EXPECT_TRUE(test_ukm_recorder().HasEntry(*sources.at(0),
-                                           internal::kUkmFromGoogleSearchName));
-  EXPECT_TRUE(test_ukm_recorder().HasEntry(*sources.at(1),
-                                           internal::kUkmFromGoogleSearchName));
+  auto entries =
+      test_ukm_recorder().GetEntriesByName(internal::kUkmFromGoogleSearchName);
+  EXPECT_EQ(2u, entries.size());
+  for (const auto* const entry : entries) {
+    test_ukm_recorder().ExpectEntrySourceHasUrl(entry, GURL(kExampleUrl));
+  }
 }
 
 TEST_F(FromGWSPageLoadMetricsObserverTest,
@@ -491,11 +495,12 @@
       internal::kHistogramFromGWSFirstTextPaint,
       timing.paint_timing->first_text_paint.value().InMilliseconds(), 1);
 
-  EXPECT_EQ(1ul, test_ukm_recorder().entries_count());
-  const ukm::UkmSource* source =
-      test_ukm_recorder().GetSourceForUrl(kExampleUrl);
-  EXPECT_TRUE(test_ukm_recorder().HasEntry(*source,
-                                           internal::kUkmFromGoogleSearchName));
+  auto entries =
+      test_ukm_recorder().GetEntriesByName(internal::kUkmFromGoogleSearchName);
+  EXPECT_EQ(1u, entries.size());
+  for (const auto* const entry : entries) {
+    test_ukm_recorder().ExpectEntrySourceHasUrl(entry, GURL(kExampleUrl));
+  }
 }
 
 TEST_F(FromGWSPageLoadMetricsObserverTest,
diff --git a/chrome/browser/page_load_metrics/observers/local_network_requests_page_load_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/local_network_requests_page_load_metrics_observer_unittest.cc
index b23fec00..0a7928c 100644
--- a/chrome/browser/page_load_metrics/observers/local_network_requests_page_load_metrics_observer_unittest.cc
+++ b/chrome/browser/page_load_metrics/observers/local_network_requests_page_load_metrics_observer_unittest.cc
@@ -178,39 +178,40 @@
 
   void ExpectUkmPageDomainMetric(const internal::PageAddressInfo& page,
                                  const internal::DomainType domain_type) {
-    EXPECT_EQ(1ul, test_ukm_recorder().sources_count());
-    const ukm::UkmSource* source =
-        test_ukm_recorder().GetSourceForUrl(page.url);
-    EXPECT_EQ(GURL(page.url), source->url());
-
-    test_ukm_recorder().ExpectEntry(
-        *source, internal::kUkmPageDomainEventName,
-        {{internal::kUkmDomainTypeName, static_cast<int>(domain_type)}});
+    auto entries =
+        test_ukm_recorder().GetEntriesByName(internal::kUkmPageDomainEventName);
+    EXPECT_EQ(1u, entries.size());
+    for (const auto* const entry : entries) {
+      test_ukm_recorder().ExpectEntrySourceHasUrl(entry, GURL(page.url));
+      test_ukm_recorder().ExpectEntryMetric(entry, internal::kUkmDomainTypeName,
+                                            static_cast<int>(domain_type));
+    }
   }
 
   void ExpectMetricsAndHistograms(
       const internal::PageAddressInfo& page,
       const std::vector<internal::UkmMetricInfo>& expected_metrics,
       const std::map<std::string, int>& expected_histograms) {
-    // The page domain info UKM entry will always be created, so we expect that
-    // there should be one more UKM entry than the expected number of metrics
-    // entries.
-    EXPECT_EQ(expected_metrics.size() + 1, test_ukm_recorder().entries_count());
-
-    const ukm::UkmSource* source =
-        test_ukm_recorder().GetSourceForUrl(page.url);
-    for (auto entry : expected_metrics) {
-      std::vector<std::pair<const char*, int64_t>> metric_values = {
-          {internal::kUkmResourceTypeName, entry.resource_type},
-          {internal::kUkmSuccessfulCountName, entry.success_count},
-          {internal::kUkmFailedCountName, entry.failed_count}};
-      if (entry.resource_type == internal::RESOURCE_TYPE_LOCALHOST) {
-        // Localhost page load
-        metric_values.push_back(
-            {internal::kUkmPortTypeName, static_cast<int>(entry.port_type)});
+    auto entries = test_ukm_recorder().GetEntriesByName(
+        internal::kUkmLocalNetworkRequestsEventName);
+    ASSERT_EQ(entries.size(), expected_metrics.size());
+    for (size_t i = 0; i < entries.size() && i < expected_metrics.size(); i++) {
+      test_ukm_recorder().ExpectEntrySourceHasUrl(entries[i], GURL(page.url));
+      test_ukm_recorder().ExpectEntryMetric(entries[i],
+                                            internal::kUkmResourceTypeName,
+                                            expected_metrics[i].resource_type);
+      test_ukm_recorder().ExpectEntryMetric(entries[i],
+                                            internal::kUkmSuccessfulCountName,
+                                            expected_metrics[i].success_count);
+      test_ukm_recorder().ExpectEntryMetric(entries[i],
+                                            internal::kUkmFailedCountName,
+                                            expected_metrics[i].failed_count);
+      if (expected_metrics[i].resource_type ==
+          internal::RESOURCE_TYPE_LOCALHOST) {
+        test_ukm_recorder().ExpectEntryMetric(
+            entries[i], internal::kUkmPortTypeName,
+            static_cast<int>(expected_metrics[i].port_type));
       }
-      test_ukm_recorder().ExpectEntry(
-          *source, internal::kUkmLocalNetworkRequestsEventName, metric_values);
     }
 
     // Should have generated UMA histograms for all requests made.
diff --git a/chrome/browser/page_load_metrics/observers/previews_ukm_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/previews_ukm_observer_unittest.cc
index 7dbb88c..b664ac3 100644
--- a/chrome/browser/page_load_metrics/observers/previews_ukm_observer_unittest.cc
+++ b/chrome/browser/page_load_metrics/observers/previews_ukm_observer_unittest.cc
@@ -18,6 +18,7 @@
 #include "components/ukm/test_ukm_recorder.h"
 #include "components/ukm/ukm_source.h"
 #include "content/public/test/web_contents_tester.h"
+#include "services/metrics/public/cpp/ukm_builders.h"
 
 namespace previews {
 
@@ -85,22 +86,25 @@
                    bool client_lofi_expected,
                    bool lite_page_expected,
                    bool opt_out_expected) {
-    const ukm::UkmSource* source =
-        test_ukm_recorder().GetSourceForUrl(kDefaultTestUrl);
+    using UkmEntry = ukm::builders::Previews;
+    auto entries = test_ukm_recorder().GetEntriesByName(UkmEntry::kEntryName);
     if (!server_lofi_expected && !client_lofi_expected && !lite_page_expected &&
         !opt_out_expected) {
-      EXPECT_EQ(0u, test_ukm_recorder().entries_count());
+      EXPECT_EQ(0u, entries.size());
       return;
     }
-
-    EXPECT_EQ(server_lofi_expected, test_ukm_recorder().HasMetric(
-                                        *source, "Previews", "server_lofi"));
-    EXPECT_EQ(client_lofi_expected, test_ukm_recorder().HasMetric(
-                                        *source, "Previews", "client_lofi"));
-    EXPECT_EQ(lite_page_expected,
-              test_ukm_recorder().HasMetric(*source, "Previews", "lite_page"));
-    EXPECT_EQ(opt_out_expected,
-              test_ukm_recorder().HasMetric(*source, "Previews", "opt_out"));
+    EXPECT_EQ(1u, entries.size());
+    for (const auto* const entry : entries) {
+      test_ukm_recorder().ExpectEntrySourceHasUrl(entry, GURL(kDefaultTestUrl));
+      EXPECT_EQ(server_lofi_expected, test_ukm_recorder().EntryHasMetric(
+                                          entry, UkmEntry::kserver_lofiName));
+      EXPECT_EQ(client_lofi_expected, test_ukm_recorder().EntryHasMetric(
+                                          entry, UkmEntry::kclient_lofiName));
+      EXPECT_EQ(lite_page_expected, test_ukm_recorder().EntryHasMetric(
+                                        entry, UkmEntry::klite_pageName));
+      EXPECT_EQ(opt_out_expected, test_ukm_recorder().EntryHasMetric(
+                                      entry, UkmEntry::kopt_outName));
+    }
   }
 
  protected:
diff --git a/chrome/browser/page_load_metrics/observers/service_worker_page_load_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/service_worker_page_load_metrics_observer_unittest.cc
index c930859..50b5a0d 100644
--- a/chrome/browser/page_load_metrics/observers/service_worker_page_load_metrics_observer_unittest.cc
+++ b/chrome/browser/page_load_metrics/observers/service_worker_page_load_metrics_observer_unittest.cc
@@ -206,11 +206,12 @@
   histogram_tester().ExpectTotalCount(
       internal::kHistogramServiceWorkerParseStartForwardBackNoStore, 0);
 
-  EXPECT_EQ(1ul, test_ukm_recorder().entries_count());
-  const ukm::UkmSource* source =
-      test_ukm_recorder().GetSourceForUrl(kDefaultTestUrl);
-  EXPECT_TRUE(
-      test_ukm_recorder().HasEntry(*source, internal::kUkmServiceWorkerName));
+  const auto& entries =
+      test_ukm_recorder().GetEntriesByName(internal::kUkmServiceWorkerName);
+  EXPECT_EQ(1u, entries.size());
+  for (const auto* entry : entries) {
+    test_ukm_recorder().ExpectEntrySourceHasUrl(entry, GURL(kDefaultTestUrl));
+  }
 
   AssertNoInboxHistogramsLogged();
   AssertNoSearchHistogramsLogged();
@@ -257,11 +258,12 @@
   // histogram_tester().ExpectTotalCount(
   //     internal::kBackgroundHistogramServiceWorkerParseStart, 1);
 
-  EXPECT_EQ(1ul, test_ukm_recorder().entries_count());
-  const ukm::UkmSource* source =
-      test_ukm_recorder().GetSourceForUrl(kDefaultTestUrl);
-  EXPECT_TRUE(
-      test_ukm_recorder().HasEntry(*source, internal::kUkmServiceWorkerName));
+  const auto& entries =
+      test_ukm_recorder().GetEntriesByName(internal::kUkmServiceWorkerName);
+  EXPECT_EQ(1u, entries.size());
+  for (const auto* entry : entries) {
+    test_ukm_recorder().ExpectEntrySourceHasUrl(entry, GURL(kDefaultTestUrl));
+  }
 
   AssertNoInboxHistogramsLogged();
   AssertNoSearchHistogramsLogged();
diff --git a/chrome/browser/page_load_metrics/observers/subresource_filter_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/subresource_filter_metrics_observer_unittest.cc
index 7f7c642..0191f0b 100644
--- a/chrome/browser/page_load_metrics/observers/subresource_filter_metrics_observer_unittest.cc
+++ b/chrome/browser/page_load_metrics/observers/subresource_filter_metrics_observer_unittest.cc
@@ -104,18 +104,18 @@
         internal::kHistogramSubresourceFilterActivationDecision,
         static_cast<int>(decision), 1);
 
-    ASSERT_EQ(1ul, test_ukm_recorder().entries_count());
-    const ukm::UkmSource* source = test_ukm_recorder().GetSourceForUrl(url);
-    EXPECT_TRUE(test_ukm_recorder().HasEntry(
-        *source, internal::kUkmSubresourceFilterName));
-    test_ukm_recorder().ExpectMetric(
-        *source, internal::kUkmSubresourceFilterName,
-        internal::kUkmSubresourceFilterActivationDecision,
-        static_cast<int64_t>(decision));
-    if (level == subresource_filter::ActivationLevel::DRYRUN) {
-      test_ukm_recorder().ExpectMetric(
-          *source, internal::kUkmSubresourceFilterName,
-          internal::kUkmSubresourceFilterDryRun, true);
+    const auto& entries = test_ukm_recorder().GetEntriesByName(
+        internal::kUkmSubresourceFilterName);
+    EXPECT_EQ(1u, entries.size());
+    for (const auto* entry : entries) {
+      test_ukm_recorder().ExpectEntrySourceHasUrl(entry, GURL(url));
+      test_ukm_recorder().ExpectEntryMetric(
+          entry, internal::kUkmSubresourceFilterActivationDecision,
+          static_cast<int64_t>(decision));
+      if (level == subresource_filter::ActivationLevel::DRYRUN) {
+        test_ukm_recorder().ExpectEntryMetric(
+            entry, internal::kUkmSubresourceFilterDryRun, true);
+      }
     }
   }
 
diff --git a/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer_unittest.cc
index 6d24a43..0c80189 100644
--- a/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer_unittest.cc
+++ b/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer_unittest.cc
@@ -103,30 +103,32 @@
   // Simulate closing the tab.
   DeleteContents();
 
-  EXPECT_EQ(1ul, test_ukm_recorder().sources_count());
-  const ukm::UkmSource* source = test_ukm_recorder().GetSourceForUrl(kTestUrl1);
-  EXPECT_EQ(GURL(kTestUrl1), source->url());
+  std::map<ukm::SourceId, ukm::mojom::UkmEntryPtr> merged_entries =
+      test_ukm_recorder().GetMergedEntriesByName(
+          internal::kUkmPageLoadEventName);
+  EXPECT_EQ(1ul, merged_entries.size());
 
-  EXPECT_GE(test_ukm_recorder().entries_count(), 1ul);
-  test_ukm_recorder().ExpectMetric(*source, internal::kUkmPageLoadEventName,
-                                   internal::kUkmPageTransition,
-                                   ui::PAGE_TRANSITION_LINK);
-  test_ukm_recorder().ExpectMetric(*source, internal::kUkmPageLoadEventName,
-                                   internal::kUkmParseStartName, 100);
-  test_ukm_recorder().ExpectMetric(*source, internal::kUkmPageLoadEventName,
-                                   internal::kUkmDomContentLoadedName, 200);
-  test_ukm_recorder().ExpectMetric(*source, internal::kUkmPageLoadEventName,
-                                   internal::kUkmFirstPaintName, 250);
-  test_ukm_recorder().ExpectMetric(*source, internal::kUkmPageLoadEventName,
-                                   internal::kUkmFirstContentfulPaintName, 300);
-  test_ukm_recorder().ExpectMetric(*source, internal::kUkmPageLoadEventName,
-                                   internal::kUkmLoadEventName, 500);
-  EXPECT_FALSE(
-      test_ukm_recorder().HasMetric(*source, internal::kUkmPageLoadEventName,
-                                    internal::kUkmFirstMeaningfulPaintName));
-  EXPECT_TRUE(
-      test_ukm_recorder().HasMetric(*source, internal::kUkmPageLoadEventName,
-                                    internal::kUkmForegroundDurationName));
+  for (const auto& kv : merged_entries) {
+    test_ukm_recorder().ExpectEntrySourceHasUrl(kv.second.get(),
+                                                GURL(kTestUrl1));
+    test_ukm_recorder().ExpectEntryMetric(kv.second.get(),
+                                          internal::kUkmPageTransition,
+                                          ui::PAGE_TRANSITION_LINK);
+    test_ukm_recorder().ExpectEntryMetric(kv.second.get(),
+                                          internal::kUkmParseStartName, 100);
+    test_ukm_recorder().ExpectEntryMetric(
+        kv.second.get(), internal::kUkmDomContentLoadedName, 200);
+    test_ukm_recorder().ExpectEntryMetric(kv.second.get(),
+                                          internal::kUkmFirstPaintName, 250);
+    test_ukm_recorder().ExpectEntryMetric(
+        kv.second.get(), internal::kUkmFirstContentfulPaintName, 300);
+    test_ukm_recorder().ExpectEntryMetric(kv.second.get(),
+                                          internal::kUkmLoadEventName, 500);
+    EXPECT_FALSE(test_ukm_recorder().EntryHasMetric(
+        kv.second.get(), internal::kUkmFirstMeaningfulPaintName));
+    EXPECT_TRUE(test_ukm_recorder().EntryHasMetric(
+        kv.second.get(), internal::kUkmForegroundDurationName));
+  }
 }
 
 TEST_F(UkmPageLoadMetricsObserverTest, FailedProvisionalLoad) {
@@ -144,33 +146,31 @@
   // Simulate closing the tab.
   DeleteContents();
 
-  EXPECT_EQ(1ul, test_ukm_recorder().sources_count());
-  const ukm::UkmSource* source = test_ukm_recorder().GetSourceForUrl(kTestUrl1);
-  EXPECT_EQ(GURL(kTestUrl1), source->url());
-
-  EXPECT_GE(test_ukm_recorder().entries_count(), 1ul);
+  std::map<ukm::SourceId, ukm::mojom::UkmEntryPtr> merged_entries =
+      test_ukm_recorder().GetMergedEntriesByName(
+          internal::kUkmPageLoadEventName);
+  EXPECT_EQ(1ul, merged_entries.size());
 
   // Make sure that only the following metrics are logged. In particular, no
   // paint/document/etc timing metrics should be logged for failed provisional
   // loads.
-  EXPECT_EQ(5, test_ukm_recorder().CountMetricsForEventName(
-                   *source, internal::kUkmPageLoadEventName));
-  test_ukm_recorder().ExpectMetric(*source, internal::kUkmPageLoadEventName,
-                                   internal::kUkmPageTransition,
-                                   ui::PAGE_TRANSITION_LINK);
-  test_ukm_recorder().ExpectMetric(
-      *source, internal::kUkmPageLoadEventName,
-      internal::kUkmEffectiveConnectionType,
-      metrics::SystemProfileProto::Network::EFFECTIVE_CONNECTION_TYPE_2G);
-  test_ukm_recorder().ExpectMetric(
-      *source, internal::kUkmPageLoadEventName, internal::kUkmNetErrorCode,
-      static_cast<int64_t>(net::ERR_TIMED_OUT) * -1);
-  EXPECT_TRUE(
-      test_ukm_recorder().HasMetric(*source, internal::kUkmPageLoadEventName,
-                                    internal::kUkmForegroundDurationName));
-  EXPECT_TRUE(
-      test_ukm_recorder().HasMetric(*source, internal::kUkmPageLoadEventName,
-                                    internal::kUkmFailedProvisionaLoadName));
+  for (const auto& kv : merged_entries) {
+    test_ukm_recorder().ExpectEntrySourceHasUrl(kv.second.get(),
+                                                GURL(kTestUrl1));
+    test_ukm_recorder().ExpectEntryMetric(kv.second.get(),
+                                          internal::kUkmPageTransition,
+                                          ui::PAGE_TRANSITION_LINK);
+    test_ukm_recorder().ExpectEntryMetric(
+        kv.second.get(), internal::kUkmEffectiveConnectionType,
+        metrics::SystemProfileProto::Network::EFFECTIVE_CONNECTION_TYPE_2G);
+    test_ukm_recorder().ExpectEntryMetric(
+        kv.second.get(), internal::kUkmNetErrorCode,
+        static_cast<int64_t>(net::ERR_TIMED_OUT) * -1);
+    EXPECT_TRUE(test_ukm_recorder().EntryHasMetric(
+        kv.second.get(), internal::kUkmForegroundDurationName));
+    EXPECT_TRUE(test_ukm_recorder().EntryHasMetric(
+        kv.second.get(), internal::kUkmFailedProvisionaLoadName));
+  }
 }
 
 TEST_F(UkmPageLoadMetricsObserverTest, FirstMeaningfulPaint) {
@@ -187,16 +187,19 @@
   // Simulate closing the tab.
   DeleteContents();
 
-  EXPECT_EQ(1ul, test_ukm_recorder().sources_count());
-  const ukm::UkmSource* source = test_ukm_recorder().GetSourceForUrl(kTestUrl1);
-  EXPECT_EQ(GURL(kTestUrl1), source->url());
+  std::map<ukm::SourceId, ukm::mojom::UkmEntryPtr> merged_entries =
+      test_ukm_recorder().GetMergedEntriesByName(
+          internal::kUkmPageLoadEventName);
+  EXPECT_EQ(1ul, merged_entries.size());
 
-  EXPECT_GE(test_ukm_recorder().entries_count(), 1ul);
-  test_ukm_recorder().ExpectMetric(*source, internal::kUkmPageLoadEventName,
-                                   internal::kUkmFirstMeaningfulPaintName, 600);
-  EXPECT_TRUE(
-      test_ukm_recorder().HasMetric(*source, internal::kUkmPageLoadEventName,
-                                    internal::kUkmForegroundDurationName));
+  for (const auto& kv : merged_entries) {
+    test_ukm_recorder().ExpectEntrySourceHasUrl(kv.second.get(),
+                                                GURL(kTestUrl1));
+    test_ukm_recorder().ExpectEntryMetric(
+        kv.second.get(), internal::kUkmFirstMeaningfulPaintName, 600);
+    EXPECT_TRUE(test_ukm_recorder().EntryHasMetric(
+        kv.second.get(), internal::kUkmForegroundDurationName));
+  }
 }
 
 TEST_F(UkmPageLoadMetricsObserverTest, MultiplePageLoads) {
@@ -222,37 +225,40 @@
   // Simulate closing the tab.
   DeleteContents();
 
-  EXPECT_EQ(2ul, test_ukm_recorder().sources_count());
-  const ukm::UkmSource* source1 =
-      test_ukm_recorder().GetSourceForUrl(kTestUrl1);
-  const ukm::UkmSource* source2 =
-      test_ukm_recorder().GetSourceForUrl(kTestUrl2);
-  EXPECT_EQ(GURL(kTestUrl1), source1->url());
-  EXPECT_EQ(GURL(kTestUrl2), source2->url());
-  EXPECT_NE(source1->id(), source2->id());
+  std::map<ukm::SourceId, ukm::mojom::UkmEntryPtr> merged_entries =
+      test_ukm_recorder().GetMergedEntriesByName(
+          internal::kUkmPageLoadEventName);
+  EXPECT_EQ(2ul, merged_entries.size());
+  const ukm::mojom::UkmEntry* entry1 = nullptr;
+  const ukm::mojom::UkmEntry* entry2 = nullptr;
+  for (const auto& kv : merged_entries) {
+    if (test_ukm_recorder().EntryHasMetric(
+            kv.second.get(), internal::kUkmFirstContentfulPaintName)) {
+      entry1 = kv.second.get();
+    } else {
+      entry2 = kv.second.get();
+    }
+  }
+  ASSERT_NE(entry1, nullptr);
+  ASSERT_NE(entry2, nullptr);
 
-  EXPECT_GE(test_ukm_recorder().entries_count(), 2ul);
+  test_ukm_recorder().ExpectEntrySourceHasUrl(entry1, GURL(kTestUrl1));
+  test_ukm_recorder().ExpectEntryMetric(
+      entry1, internal::kUkmFirstContentfulPaintName, 200);
+  EXPECT_FALSE(test_ukm_recorder().EntryHasMetric(
+      entry1, internal::kUkmFirstMeaningfulPaintName));
+  EXPECT_TRUE(test_ukm_recorder().EntryHasMetric(
+      entry1, internal::kUkmForegroundDurationName));
 
-  test_ukm_recorder().ExpectMetric(*source1, internal::kUkmPageLoadEventName,
-                                   internal::kUkmFirstContentfulPaintName, 200);
+  test_ukm_recorder().ExpectEntrySourceHasUrl(entry2, GURL(kTestUrl2));
   EXPECT_FALSE(
-      test_ukm_recorder().HasMetric(*source2, internal::kUkmPageLoadEventName,
-                                    internal::kUkmFirstMeaningfulPaintName));
-  EXPECT_TRUE(
-      test_ukm_recorder().HasMetric(*source1, internal::kUkmPageLoadEventName,
-                                    internal::kUkmForegroundDurationName));
-
-  EXPECT_FALSE(test_ukm_recorder().HasMetric(
-      *source2, internal::kUkmPageLoadEventName, internal::kUkmParseStartName));
-  EXPECT_FALSE(
-      test_ukm_recorder().HasMetric(*source2, internal::kUkmPageLoadEventName,
-                                    internal::kUkmFirstContentfulPaintName));
-  EXPECT_FALSE(
-      test_ukm_recorder().HasMetric(*source2, internal::kUkmPageLoadEventName,
-                                    internal::kUkmFirstMeaningfulPaintName));
-  EXPECT_TRUE(
-      test_ukm_recorder().HasMetric(*source2, internal::kUkmPageLoadEventName,
-                                    internal::kUkmForegroundDurationName));
+      test_ukm_recorder().EntryHasMetric(entry2, internal::kUkmParseStartName));
+  EXPECT_FALSE(test_ukm_recorder().EntryHasMetric(
+      entry2, internal::kUkmFirstContentfulPaintName));
+  EXPECT_FALSE(test_ukm_recorder().EntryHasMetric(
+      entry2, internal::kUkmFirstMeaningfulPaintName));
+  EXPECT_TRUE(test_ukm_recorder().EntryHasMetric(
+      entry2, internal::kUkmForegroundDurationName));
 }
 
 TEST_F(UkmPageLoadMetricsObserverTest, NetworkQualityEstimates) {
@@ -270,21 +276,24 @@
   // Simulate closing the tab.
   DeleteContents();
 
-  EXPECT_EQ(1ul, test_ukm_recorder().sources_count());
-  const ukm::UkmSource* source = test_ukm_recorder().GetSourceForUrl(kTestUrl1);
-  EXPECT_EQ(GURL(kTestUrl1), source->url());
+  std::map<ukm::SourceId, ukm::mojom::UkmEntryPtr> merged_entries =
+      test_ukm_recorder().GetMergedEntriesByName(
+          internal::kUkmPageLoadEventName);
+  EXPECT_EQ(1ul, merged_entries.size());
 
-  EXPECT_GE(test_ukm_recorder().entries_count(), 1ul);
-  test_ukm_recorder().ExpectMetric(
-      *source, internal::kUkmPageLoadEventName,
-      internal::kUkmEffectiveConnectionType,
-      metrics::SystemProfileProto::Network::EFFECTIVE_CONNECTION_TYPE_3G);
-  test_ukm_recorder().ExpectMetric(*source, internal::kUkmPageLoadEventName,
-                                   internal::kUkmHttpRttEstimate, 100);
-  test_ukm_recorder().ExpectMetric(*source, internal::kUkmPageLoadEventName,
-                                   internal::kUkmTransportRttEstimate, 200);
-  test_ukm_recorder().ExpectMetric(*source, internal::kUkmPageLoadEventName,
-                                   internal::kUkmDownstreamKbpsEstimate, 300);
+  for (const auto& kv : merged_entries) {
+    test_ukm_recorder().ExpectEntrySourceHasUrl(kv.second.get(),
+                                                GURL(kTestUrl1));
+    test_ukm_recorder().ExpectEntryMetric(
+        kv.second.get(), internal::kUkmEffectiveConnectionType,
+        metrics::SystemProfileProto::Network::EFFECTIVE_CONNECTION_TYPE_3G);
+    test_ukm_recorder().ExpectEntryMetric(kv.second.get(),
+                                          internal::kUkmHttpRttEstimate, 100);
+    test_ukm_recorder().ExpectEntryMetric(
+        kv.second.get(), internal::kUkmTransportRttEstimate, 200);
+    test_ukm_recorder().ExpectEntryMetric(
+        kv.second.get(), internal::kUkmDownstreamKbpsEstimate, 300);
+  }
 }
 
 TEST_F(UkmPageLoadMetricsObserverTest, PageTransitionReload) {
@@ -295,12 +304,16 @@
   // Simulate closing the tab.
   DeleteContents();
 
-  EXPECT_EQ(1ul, test_ukm_recorder().sources_count());
-  const ukm::UkmSource* source = test_ukm_recorder().GetSourceForUrl(kTestUrl1);
-  EXPECT_EQ(GURL(kTestUrl1), source->url());
+  std::map<ukm::SourceId, ukm::mojom::UkmEntryPtr> merged_entries =
+      test_ukm_recorder().GetMergedEntriesByName(
+          internal::kUkmPageLoadEventName);
+  EXPECT_EQ(1ul, merged_entries.size());
 
-  EXPECT_GE(test_ukm_recorder().entries_count(), 1ul);
-  test_ukm_recorder().ExpectMetric(*source, internal::kUkmPageLoadEventName,
-                                   internal::kUkmPageTransition,
-                                   ui::PAGE_TRANSITION_RELOAD);
+  for (const auto& kv : merged_entries) {
+    test_ukm_recorder().ExpectEntrySourceHasUrl(kv.second.get(),
+                                                GURL(kTestUrl1));
+    test_ukm_recorder().ExpectEntryMetric(kv.second.get(),
+                                          internal::kUkmPageTransition,
+                                          ui::PAGE_TRANSITION_RELOAD);
+  }
 }
diff --git a/chrome/browser/page_load_metrics/page_load_metrics_browsertest.cc b/chrome/browser/page_load_metrics/page_load_metrics_browsertest.cc
index e5c192b..d0b58bf 100644
--- a/chrome/browser/page_load_metrics/page_load_metrics_browsertest.cc
+++ b/chrome/browser/page_load_metrics/page_load_metrics_browsertest.cc
@@ -415,18 +415,20 @@
   histogram_tester_.ExpectTotalCount(
       internal::kHistogramPageTimingForegroundDuration, 1);
 
-  const ukm::UkmSource* source = test_ukm_recorder_->GetSourceForUrl(url);
-  EXPECT_NE(nullptr, source);
-  EXPECT_TRUE(
-      test_ukm_recorder_->HasMetric(*source, internal::kUkmPageLoadEventName,
-                                    internal::kUkmDomContentLoadedName));
-  EXPECT_TRUE(test_ukm_recorder_->HasMetric(
-      *source, internal::kUkmPageLoadEventName, internal::kUkmLoadEventName));
-  EXPECT_TRUE(test_ukm_recorder_->HasMetric(
-      *source, internal::kUkmPageLoadEventName, internal::kUkmFirstPaintName));
-  EXPECT_TRUE(
-      test_ukm_recorder_->HasMetric(*source, internal::kUkmPageLoadEventName,
-                                    internal::kUkmFirstContentfulPaintName));
+  const auto& entries = test_ukm_recorder_->GetMergedEntriesByName(
+      internal::kUkmPageLoadEventName);
+  EXPECT_EQ(1u, entries.size());
+  for (const auto& kv : entries) {
+    test_ukm_recorder_->ExpectEntrySourceHasUrl(kv.second.get(), url);
+    EXPECT_TRUE(test_ukm_recorder_->EntryHasMetric(
+        kv.second.get(), internal::kUkmDomContentLoadedName));
+    EXPECT_TRUE(test_ukm_recorder_->EntryHasMetric(
+        kv.second.get(), internal::kUkmLoadEventName));
+    EXPECT_TRUE(test_ukm_recorder_->EntryHasMetric(
+        kv.second.get(), internal::kUkmFirstPaintName));
+    EXPECT_TRUE(test_ukm_recorder_->EntryHasMetric(
+        kv.second.get(), internal::kUkmFirstContentfulPaintName));
+  }
 
   // Verify that NoPageLoadMetricsRecorded returns false when PageLoad metrics
   // have been recorded.
diff --git a/chrome/browser/password_manager/save_password_infobar_delegate_android_unittest.cc b/chrome/browser/password_manager/save_password_infobar_delegate_android_unittest.cc
index e9f27172..da37ef6 100644
--- a/chrome/browser/password_manager/save_password_infobar_delegate_android_unittest.cc
+++ b/chrome/browser/password_manager/save_password_infobar_delegate_android_unittest.cc
@@ -214,17 +214,22 @@
   }
 
   // Verify metrics.
-  const ukm::UkmSource* source =
-      test_ukm_recorder.GetSourceForUrl("https://www.example.com/");
-  ASSERT_TRUE(source);
-  test_ukm_recorder.ExpectMetric(*source, UkmEntry::kEntryName,
-                                 UkmEntry::kSaving_Prompt_ShownName, 1);
-  test_ukm_recorder.ExpectMetric(
-      *source, UkmEntry::kEntryName, UkmEntry::kSaving_Prompt_TriggerName,
-      static_cast<int64_t>(BubbleTrigger::kPasswordManagerSuggestionAutomatic));
-  test_ukm_recorder.ExpectMetric(*source, UkmEntry::kEntryName,
-                                 UkmEntry::kSaving_Prompt_InteractionName,
-                                 static_cast<int64_t>(dismissal_reason));
+  const auto& entries =
+      test_ukm_recorder.GetEntriesByName(UkmEntry::kEntryName);
+  EXPECT_EQ(1u, entries.size());
+  for (const auto* entry : entries) {
+    test_ukm_recorder.ExpectEntrySourceHasUrl(entry,
+                                              GURL("https://www.example.com/"));
+    test_ukm_recorder.ExpectEntryMetric(entry,
+                                        UkmEntry::kSaving_Prompt_ShownName, 1);
+    test_ukm_recorder.ExpectEntryMetric(
+        entry, UkmEntry::kSaving_Prompt_TriggerName,
+        static_cast<int64_t>(
+            BubbleTrigger::kPasswordManagerSuggestionAutomatic));
+    test_ukm_recorder.ExpectEntryMetric(
+        entry, UkmEntry::kSaving_Prompt_InteractionName,
+        static_cast<int64_t>(dismissal_reason));
+  }
 }
 
 INSTANTIATE_TEST_CASE_P(
diff --git a/chrome/browser/resources/chromeos/login/encryption_migration.css b/chrome/browser/resources/chromeos/login/encryption_migration.css
index 7b948b0d..4d2c5fe 100644
--- a/chrome/browser/resources/chromeos/login/encryption_migration.css
+++ b/chrome/browser/resources/chromeos/login/encryption_migration.css
@@ -3,7 +3,12 @@
  * found in the LICENSE file. */
 
 oobe-dialog {
-  max-width: 768px;
+  height: 640px;
+  max-height: calc(100vh - 47px);  /* Subtracting #login-header-bar's height. */
+  max-width: 100vw;
+  min-height: 0 !important;  /* Making <oobe-dialog> shrinkable. */
+  min-width: 0 !important;  /* Making <oobe-dialog> shrinkable. */
+  width: 768px;
 }
 
 oobe-dialog div {
@@ -38,6 +43,10 @@
   background: url(chrome://oobe/product-logo.png) center/100% no-repeat;
 }
 
+.footer {
+  overflow: hidden;
+}
+
 .footer div {
   color: rgb(51, 51, 51);
   font-size: 13px;
diff --git a/chrome/browser/resources/md_extensions/toolbar.js b/chrome/browser/resources/md_extensions/toolbar.js
index c75dec6..f435a52 100644
--- a/chrome/browser/resources/md_extensions/toolbar.js
+++ b/chrome/browser/resources/md_extensions/toolbar.js
@@ -65,8 +65,8 @@
     /** @private */
     onDevModeToggleChange_: function() {
       const drawer = this.$.devDrawer;
-      if (drawer.hasAttribute('hidden')) {
-        drawer.removeAttribute('hidden');
+      if (drawer.hidden) {
+        drawer.hidden = false;
         // Requesting the offsetTop will cause a reflow (to account for hidden).
         /** @suppress {suspiciousCode} */ drawer.offsetTop;
       }
@@ -77,11 +77,7 @@
     onInDevModeChanged_: function() {
       // Set the initial state.
       this.expanded_ = this.inDevMode;
-      if (this.inDevMode) {
-        this.$.devDrawer.removeAttribute('hidden');
-      } else {
-        this.$.devDrawer.setAttribute('hidden', '');
-      }
+      this.$.devDrawer.hidden = !this.inDevMode;
     },
 
     /** @private */
diff --git a/chrome/browser/ui/blocked_content/popup_opener_tab_helper_unittest.cc b/chrome/browser/ui/blocked_content/popup_opener_tab_helper_unittest.cc
index 1d4627b..c9d5cc8 100644
--- a/chrome/browser/ui/blocked_content/popup_opener_tab_helper_unittest.cc
+++ b/chrome/browser/ui/blocked_content/popup_opener_tab_helper_unittest.cc
@@ -576,21 +576,23 @@
   EXPECT_EQ(first_url.host(), sample);
   EXPECT_EQ(rappor::UMA_RAPPOR_TYPE, type);
 
-  const ukm::UkmSource* opener_source =
-      test_ukm_recorder.GetSourceForUrl(first_url);
-  ASSERT_TRUE(opener_source);
-  EXPECT_EQ(first_url, opener_source->url());
-  EXPECT_GE(test_ukm_recorder.entries_count(), 1ul);
-  test_ukm_recorder.ExpectMetric(*opener_source, UkmEntry::kEntryName,
-                                 UkmEntry::kDidTabUnderName, true);
+  auto entries = test_ukm_recorder.GetEntriesByName(UkmEntry::kEntryName);
+  EXPECT_EQ(1u, entries.size());
+  for (const auto* const entry : entries) {
+    test_ukm_recorder.ExpectEntrySourceHasUrl(entry, first_url);
+    test_ukm_recorder.ExpectEntryMetric(entry, UkmEntry::kDidTabUnderName,
+                                        true);
+  }
 
   const GURL final_url("https://final.test/");
   content::NavigationSimulator::NavigateAndCommitFromDocument(final_url,
                                                               main_rfh());
-  const ukm::UkmSource* final_source =
-      test_ukm_recorder.GetSourceForUrl(final_url);
-  ASSERT_TRUE(final_source);
-  EXPECT_FALSE(test_ukm_recorder.HasEntry(*final_source, UkmEntry::kEntryName));
+
+  auto entries2 = test_ukm_recorder.GetEntriesByName(UkmEntry::kEntryName);
+  EXPECT_EQ(1u, entries2.size());
+  for (const auto* const entry : entries2) {
+    test_ukm_recorder.ExpectEntrySourceHasUrl(entry, first_url);
+  }
 }
 
 TEST_F(BlockTabUnderTest, LogsToConsole) {
diff --git a/chrome/browser/ui/passwords/manage_passwords_bubble_model_unittest.cc b/chrome/browser/ui/passwords/manage_passwords_bubble_model_unittest.cc
index ed9f350..72cd17a 100644
--- a/chrome/browser/ui/passwords/manage_passwords_bubble_model_unittest.cc
+++ b/chrome/browser/ui/passwords/manage_passwords_bubble_model_unittest.cc
@@ -597,27 +597,31 @@
         ASSERT_TRUE(testing::Mock::VerifyAndClearExpectations(GetStore()));
 
         // Verify metrics.
-        const ukm::UkmSource* source =
-            test_ukm_recorder.GetSourceForUrl("https://www.example.com/");
-        ASSERT_TRUE(source);
-        test_ukm_recorder.ExpectMetric(
-            *source, UkmEntry::kEntryName,
-            update ? UkmEntry::kUpdating_Prompt_ShownName
-                   : UkmEntry::kSaving_Prompt_ShownName,
-            1);
-        test_ukm_recorder.ExpectMetric(
-            *source, UkmEntry::kEntryName,
-            update ? UkmEntry::kUpdating_Prompt_TriggerName
-                   : UkmEntry::kSaving_Prompt_TriggerName,
-            static_cast<int64_t>(
-                credential_management_api
-                    ? BubbleTrigger::kCredentialManagementAPIAutomatic
-                    : BubbleTrigger::kPasswordManagerSuggestionAutomatic));
-        test_ukm_recorder.ExpectMetric(
-            *source, UkmEntry::kEntryName,
-            update ? UkmEntry::kUpdating_Prompt_InteractionName
-                   : UkmEntry::kSaving_Prompt_InteractionName,
-            static_cast<int64_t>(interaction));
+        const auto& entries =
+            test_ukm_recorder.GetEntriesByName(UkmEntry::kEntryName);
+        EXPECT_EQ(1u, entries.size());
+        for (const auto* entry : entries) {
+          test_ukm_recorder.ExpectEntrySourceHasUrl(
+              entry, GURL("https://www.example.com/"));
+          test_ukm_recorder.ExpectEntryMetric(
+              entry,
+              update ? UkmEntry::kUpdating_Prompt_ShownName
+                     : UkmEntry::kSaving_Prompt_ShownName,
+              1);
+          test_ukm_recorder.ExpectEntryMetric(
+              entry,
+              update ? UkmEntry::kUpdating_Prompt_TriggerName
+                     : UkmEntry::kSaving_Prompt_TriggerName,
+              static_cast<int64_t>(
+                  credential_management_api
+                      ? BubbleTrigger::kCredentialManagementAPIAutomatic
+                      : BubbleTrigger::kPasswordManagerSuggestionAutomatic));
+          test_ukm_recorder.ExpectEntryMetric(
+              entry,
+              update ? UkmEntry::kUpdating_Prompt_InteractionName
+                     : UkmEntry::kSaving_Prompt_InteractionName,
+              static_cast<int64_t>(interaction));
+        }
       }
     }
   }
diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc b/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc
index e74681a..72a7fe5 100644
--- a/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc
+++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc
@@ -492,28 +492,30 @@
     ASSERT_TRUE(testing::Mock::VerifyAndClearExpectations(controller()));
 
     // Verify metrics.
-    const ukm::UkmSource* source =
-        test_ukm_recorder.GetSourceForUrl("http://www.example.com/");
-    ASSERT_TRUE(source);
+    const auto& entries =
+        test_ukm_recorder.GetEntriesByName(UkmEntry::kEntryName);
+    EXPECT_EQ(1u, entries.size());
+    for (const auto* entry : entries) {
+      test_ukm_recorder.ExpectEntrySourceHasUrl(
+          entry, GURL("http://www.example.com/"));
 
-    if (test.edit_username) {
-      test_ukm_recorder.ExpectMetric(
-          *source, UkmEntry::kEntryName,
-          UkmEntry::kUser_Action_EditedUsernameInBubbleName, 1u);
-    } else {
-      EXPECT_FALSE(test_ukm_recorder.HasMetric(
-          *source, UkmEntry::kEntryName,
-          UkmEntry::kUser_Action_EditedUsernameInBubbleName));
-    }
+      if (test.edit_username) {
+        test_ukm_recorder.ExpectEntryMetric(
+            entry, UkmEntry::kUser_Action_EditedUsernameInBubbleName, 1u);
+      } else {
+        EXPECT_FALSE(test_ukm_recorder.EntryHasMetric(
+            entry, UkmEntry::kUser_Action_EditedUsernameInBubbleName));
+      }
 
-    if (test.change_password) {
-      test_ukm_recorder.ExpectMetric(
-          *source, UkmEntry::kEntryName,
-          UkmEntry::kUser_Action_SelectedDifferentPasswordInBubbleName, 1u);
-    } else {
-      EXPECT_FALSE(test_ukm_recorder.HasMetric(
-          *source, UkmEntry::kEntryName,
-          UkmEntry::kUser_Action_SelectedDifferentPasswordInBubbleName));
+      if (test.change_password) {
+        test_ukm_recorder.ExpectEntryMetric(
+            entry, UkmEntry::kUser_Action_SelectedDifferentPasswordInBubbleName,
+            1u);
+      } else {
+        EXPECT_FALSE(test_ukm_recorder.EntryHasMetric(
+            entry,
+            UkmEntry::kUser_Action_SelectedDifferentPasswordInBubbleName));
+      }
     }
 
     histogram_tester.ExpectUniqueSample("PasswordManager.EditsInSaveBubble",
diff --git a/chrome/browser/ui/tabs/tab_activity_watcher_unittest.cc b/chrome/browser/ui/tabs/tab_activity_watcher_unittest.cc
index bf4445c..a85017e 100644
--- a/chrome/browser/ui/tabs/tab_activity_watcher_unittest.cc
+++ b/chrome/browser/ui/tabs/tab_activity_watcher_unittest.cc
@@ -56,6 +56,7 @@
     {TabManager_TabMetrics::kMouseEventCountName, 0},
     {TabManager_TabMetrics::kSiteEngagementScoreName, 0},
     {TabManager_TabMetrics::kTouchEventCountName, 0},
+    {TabManager_TabMetrics::kWasRecentlyAudibleName, 0},
 });
 
 // Helper class to respond to WebContents lifecycle events we can't
@@ -247,9 +248,7 @@
   tab_strip_model->SetTabPinned(0, true);
   EXPECT_FALSE(WasNewEntryRecorded());
 
-  LOG(ERROR) << "this is 247";
   // Pinning and unpinning the background tab triggers logging.
-  LOG(ERROR) << "this is 249";
   tab_strip_model->SetTabPinned(1, true);
   UkmMetricMap expected_metrics(kBasicMetricValues);
   expected_metrics[TabManager_TabMetrics::kIsPinnedName] = 1;
@@ -303,6 +302,9 @@
   SiteEngagementService::Get(profile())->ResetBaseScoreForURL(kTestUrls[1], 45);
   expected_metrics[TabManager_TabMetrics::kSiteEngagementScoreName] = 40;
 
+  WebContentsTester::For(test_contents_2)->SetWasRecentlyAudible(true);
+  expected_metrics[TabManager_TabMetrics::kWasRecentlyAudibleName] = 1;
+
   // Pin the background tab to log an event. (This moves it to index 0.)
   tab_strip_model->SetTabPinned(1, true);
   expected_metrics[TabManager_TabMetrics::kIsPinnedName] = 1;
@@ -311,11 +313,14 @@
     ExpectNewEntry(kTestUrls[1], expected_metrics);
   }
 
-  // Navigate the background tab to a new domain.
+  // Unset WasRecentlyAudible and navigate the background tab to a new domain.
   // Site engagement score for the new domain is 0.
+  WebContentsTester::For(test_contents_2)->SetWasRecentlyAudible(false);
+  expected_metrics[TabManager_TabMetrics::kWasRecentlyAudibleName] = 0;
   WebContentsTester::For(test_contents_2)->NavigateAndCommit(kTestUrls[2]);
-  WebContentsTester::For(test_contents_2)->TestSetIsLoading(false);
   expected_metrics[TabManager_TabMetrics::kSiteEngagementScoreName] = 0;
+
+  WebContentsTester::For(test_contents_2)->TestSetIsLoading(false);
   {
     SCOPED_TRACE("");
     ExpectNewEntry(kTestUrls[2], expected_metrics);
diff --git a/chrome/browser/ui/tabs/tab_metrics_logger_impl.cc b/chrome/browser/ui/tabs/tab_metrics_logger_impl.cc
index 70ff38d..d395ea7 100644
--- a/chrome/browser/ui/tabs/tab_metrics_logger_impl.cc
+++ b/chrome/browser/ui/tabs/tab_metrics_logger_impl.cc
@@ -100,6 +100,10 @@
   // TODO(michaelpg): Add PluginType field if mime type matches "application/*"
   // using PluginUMAReporter.
 
+  // This checks if the tab was audible within the past two seconds, same as the
+  // audio indicator in the tab strip.
+  entry.SetWasRecentlyAudible(web_contents->WasRecentlyAudible());
+
   entry.SetIsPinned(tab_strip_model->IsTabPinned(index))
       .SetHasFormEntry(
           web_contents->GetPageImportanceSignals().had_form_interaction)
diff --git a/chrome/browser/ui/views/payments/payment_request_journey_logger_browsertest.cc b/chrome/browser/ui/views/payments/payment_request_journey_logger_browsertest.cc
index 3fc9112..61b7f51 100644
--- a/chrome/browser/ui/views/payments/payment_request_journey_logger_browsertest.cc
+++ b/chrome/browser/ui/views/payments/payment_request_journey_logger_browsertest.cc
@@ -16,6 +16,7 @@
 #include "components/autofill/core/browser/credit_card.h"
 #include "components/payments/core/journey_logger.h"
 #include "components/ukm/test_ukm_recorder.h"
+#include "components/ukm/ukm_source.h"
 #include "content/public/common/content_features.h"
 #include "content/public/test/browser_test_utils.h"
 #include "services/metrics/public/cpp/ukm_builders.h"
@@ -1064,12 +1065,9 @@
 
   // Important: Even though the Payment Request is in the iframe, no UKM was
   // logged for the iframe URL, only for the main frame.
-  std::vector<const ukm::UkmSource*> sources =
-      test_ukm_recorder_->GetSourcesForUrl(iframe_url.spec().c_str());
-  EXPECT_TRUE(sources.empty());
-
-  sources = test_ukm_recorder_->GetSourcesForUrl(main_frame_url.spec().c_str());
-  EXPECT_FALSE(sources.empty());
+  for (const auto& kv : test_ukm_recorder_->GetSources()) {
+    EXPECT_NE(iframe_url, kv.second->url());
+  }
 
   // Make sure the UKM was logged correctly.
   auto entries = test_ukm_recorder_->GetEntriesByName(
diff --git a/chrome/browser/vr/ui_scene_creator.cc b/chrome/browser/vr/ui_scene_creator.cc
index e2df48c3..7855cb0 100644
--- a/chrome/browser/vr/ui_scene_creator.cc
+++ b/chrome/browser/vr/ui_scene_creator.cc
@@ -748,7 +748,6 @@
   speech_result->set_hit_testable(false);
   speech_result->SetSize(kVoiceSearchRecognitionResultTextWidth, 0);
   speech_result->SetTextAlignment(UiTexture::kTextAlignmentCenter);
-  speech_result->SetSize(kSuggestionTextFieldWidth, 0);
   BindColor(model_, speech_result.get(), &ColorScheme::prompt_foreground,
             &Text::SetColor);
   speech_result->AddBinding(VR_BIND_FUNC(base::string16, Model, model_,
diff --git a/chromeos/dbus/proto/media_perception.proto b/chromeos/dbus/proto/media_perception.proto
index c3f8474..84ea834 100644
--- a/chromeos/dbus/proto/media_perception.proto
+++ b/chromeos/dbus/proto/media_perception.proto
@@ -28,6 +28,20 @@
   repeated PerceptionSample perception_sample = 1;
 }
 
+message VideoStreamParam {
+  // Identifies the video stream described by these parameters.
+  optional string id = 1;
+
+  // Frame width in pixels.
+  optional int32 width = 2;
+
+  // Frame height in pixels.
+  optional int32 height = 3;
+
+  // The frame rate at which this video stream would be processed.
+  optional float frame_rate = 4;
+}
+
 message State {
   enum Status {
     STATUS_UNSPECIFIED = 0;  // Unused required default value for Proto enums.
@@ -46,6 +60,9 @@
   // Device context so that the media analytics process can better select the
   // right video device to open.
   optional string device_context = 2;
+
+  // A list of video streams processed by the analytics process.
+  repeated VideoStreamParam video_stream_param = 3;
 }
 
 // This is the output of the MediaPerceptionSinkCalculator.
diff --git a/components/autofill/core/browser/autofill_metrics_unittest.cc b/components/autofill/core/browser/autofill_metrics_unittest.cc
index 180e74f0..b9ef7914 100644
--- a/components/autofill/core/browser/autofill_metrics_unittest.cc
+++ b/components/autofill/core/browser/autofill_metrics_unittest.cc
@@ -354,35 +354,25 @@
   DISALLOW_COPY_AND_ASSIGN(TestAutofillManager);
 };
 
-MATCHER(CompareMetrics, "") {
-  const ukm::mojom::UkmMetric* lhs = ::testing::get<0>(arg).get();
-  const std::pair<const char*, int64_t>& rhs = ::testing::get<1>(arg);
-  return lhs->metric_hash == base::HashMetricName(rhs.first) &&
-         lhs->value == rhs.second;
-}
-
 void VerifyDeveloperEngagementUkm(
     const ukm::TestAutoSetUkmRecorder& ukm_recorder,
     const FormData& form,
     const std::vector<int64_t>& expected_metric_values) {
-  const ukm::mojom::UkmEntry* entry =
-      ukm_recorder.GetEntryForEntryName(UkmDeveloperEngagementType::kEntryName);
-  ASSERT_NE(nullptr, entry);
-  const ukm::UkmSource* source =
-      ukm_recorder.GetSourceForSourceId(entry->source_id);
-  ASSERT_NE(nullptr, source);
-  EXPECT_EQ(form.main_frame_origin.GetURL(), source->url());
-
   int expected_metric_value = 0;
   for (const auto it : expected_metric_values)
     expected_metric_value |= 1 << it;
 
-  const std::vector<std::pair<const char*, int64_t>> expected_metrics{
-      {UkmDeveloperEngagementType::kDeveloperEngagementName,
-       expected_metric_value}};
-
-  EXPECT_THAT(entry->metrics,
-              UnorderedPointwise(CompareMetrics(), expected_metrics));
+  auto entries =
+      ukm_recorder.GetEntriesByName(UkmDeveloperEngagementType::kEntryName);
+  EXPECT_EQ(1u, entries.size());
+  for (const auto* const entry : entries) {
+    ukm_recorder.ExpectEntrySourceHasUrl(entry,
+                                         GURL(form.main_frame_origin.GetURL()));
+    EXPECT_EQ(1u, entry->metrics.size());
+    ukm_recorder.ExpectEntryMetric(
+        entry, UkmDeveloperEngagementType::kDeveloperEngagementName,
+        expected_metric_value);
+  }
 }
 
 MATCHER(CompareMetricsIgnoringMillisecondsSinceFormParsed, "") {
@@ -399,22 +389,16 @@
                               const FormData& form,
                               const char* event_name,
                               const ExpectedUkmMetrics& expected_metrics) {
-  size_t expected_metrics_index = 0;
-  for (size_t i = 0; i < ukm_recorder.entries_count(); ++i) {
-    const ukm::mojom::UkmEntry* entry = ukm_recorder.GetEntry(i);
-    if (entry->event_hash != base::HashMetricName(event_name))
-      continue;
+  auto entries = ukm_recorder.GetEntriesByName(event_name);
 
-    const ukm::UkmSource* source =
-        ukm_recorder.GetSourceForSourceId(entry->source_id);
-    ASSERT_NE(nullptr, source);
-    EXPECT_EQ(form.main_frame_origin.GetURL(), source->url());
-
-    ASSERT_LT(expected_metrics_index, expected_metrics.size());
+  EXPECT_LE(entries.size(), expected_metrics.size());
+  for (size_t i = 0; i < expected_metrics.size() && i < entries.size(); i++) {
+    ukm_recorder.ExpectEntrySourceHasUrl(entries[i],
+                                         GURL(form.main_frame_origin.GetURL()));
     EXPECT_THAT(
-        entry->metrics,
+        entries[i]->metrics,
         UnorderedPointwise(CompareMetricsIgnoringMillisecondsSinceFormParsed(),
-                           expected_metrics[expected_metrics_index++]));
+                           expected_metrics[i]));
   }
 }
 
@@ -1927,8 +1911,8 @@
     autofill_manager_->OnFormsSeen(forms, TimeTicks::Now());
     autofill_manager_->Reset();
 
-    EXPECT_EQ(0U, test_ukm_recorder_.sources_count());
-    EXPECT_EQ(0U, test_ukm_recorder_.entries_count());
+    EXPECT_EQ(0ul, test_ukm_recorder_.sources_count());
+    EXPECT_EQ(0ul, test_ukm_recorder_.entries_count());
   }
 
   // Add another field to the form, so that it becomes fillable.
@@ -1941,8 +1925,6 @@
     autofill_manager_->OnFormsSeen(forms, TimeTicks::Now());
     autofill_manager_->Reset();
 
-    ASSERT_EQ(1U, test_ukm_recorder_.entries_count());
-    ASSERT_EQ(1U, test_ukm_recorder_.sources_count());
     VerifyDeveloperEngagementUkm(
         test_ukm_recorder_, form,
         {AutofillMetrics::FILLABLE_FORM_PARSED_WITHOUT_TYPE_HINTS});
@@ -1993,8 +1975,6 @@
     autofill_manager_->OnFormsSeen(forms, TimeTicks::Now());
     autofill_manager_->Reset();
 
-    ASSERT_EQ(1U, test_ukm_recorder_.entries_count());
-    ASSERT_EQ(1U, test_ukm_recorder_.sources_count());
     VerifyDeveloperEngagementUkm(
         test_ukm_recorder_, form,
         {AutofillMetrics::FILLABLE_FORM_PARSED_WITH_TYPE_HINTS});
@@ -2037,8 +2017,6 @@
     autofill_manager_->OnFormsSeen(forms, TimeTicks::Now());
     autofill_manager_->Reset();
 
-    ASSERT_EQ(1U, test_ukm_recorder_.entries_count());
-    ASSERT_EQ(1U, test_ukm_recorder_.sources_count());
     VerifyDeveloperEngagementUkm(test_ukm_recorder_, form,
                                  {AutofillMetrics::FORM_CONTAINS_UPI_VPA_HINT});
     test_ukm_recorder_.Purge();
@@ -4984,9 +4962,6 @@
     autofill_manager_->OnFormsSeen(forms, TimeTicks::Now());
     histogram_tester.ExpectTotalCount("Autofill.FormSubmittedState", 0);
 
-    EXPECT_EQ(1U, test_ukm_recorder_.entries_count());
-    EXPECT_EQ(1U, test_ukm_recorder_.sources_count());
-
     VerifyDeveloperEngagementUkm(
         test_ukm_recorder_, form,
         {AutofillMetrics::FILLABLE_FORM_PARSED_WITHOUT_TYPE_HINTS});
@@ -5242,8 +5217,6 @@
     base::HistogramTester histogram_tester;
     base::UserActionTester user_action_tester;
     autofill_manager_->OnFormsSeen(forms, TimeTicks::Now());
-    EXPECT_EQ(1U, test_ukm_recorder_.entries_count());
-    EXPECT_EQ(1U, test_ukm_recorder_.sources_count());
     VerifyDeveloperEngagementUkm(
         test_ukm_recorder_, form,
         {AutofillMetrics::FILLABLE_FORM_PARSED_WITHOUT_TYPE_HINTS});
@@ -6514,26 +6487,15 @@
 
   AutofillMetrics::LogCardUploadDecisionsUkm(&test_ukm_recorder_, url,
                                              upload_decision);
-
-  ASSERT_EQ(1U, test_ukm_recorder_.sources_count());
-  const ukm::UkmSource* source =
-      test_ukm_recorder_.GetSourceForUrl(url.spec().c_str());
-  EXPECT_EQ(url.spec(), source->url().spec());
-
-  ASSERT_EQ(1U, test_ukm_recorder_.entries_count());
-  const ukm::mojom::UkmEntry* entry = test_ukm_recorder_.GetEntry(0);
-
-  // Make sure that a card upload decision entry was logged.
-  EXPECT_EQ(source->id(), entry->source_id);
-  EXPECT_EQ(base::HashMetricName(UkmCardUploadDecisionType::kEntryName),
-            entry->event_hash);
-  EXPECT_EQ(1U, entry->metrics.size());
-
-  // Make sure that the correct upload decision was logged.
-  const ukm::mojom::UkmMetric* metric = ukm::TestUkmRecorder::FindMetric(
-      entry, UkmCardUploadDecisionType::kUploadDecisionName);
-  ASSERT_NE(nullptr, metric);
-  EXPECT_EQ(upload_decision, metric->value);
+  auto entries = test_ukm_recorder_.GetEntriesByName(
+      UkmCardUploadDecisionType::kEntryName);
+  EXPECT_EQ(1u, entries.size());
+  for (const auto* const entry : entries) {
+    test_ukm_recorder_.ExpectEntrySourceHasUrl(entry, url);
+    EXPECT_EQ(1u, entry->metrics.size());
+    test_ukm_recorder_.ExpectEntryMetric(
+        entry, UkmCardUploadDecisionType::kUploadDecisionName, upload_decision);
+  }
 }
 
 // Tests that logging DeveloperEngagement UKM works as expected.
@@ -6543,40 +6505,32 @@
 
   AutofillMetrics::LogDeveloperEngagementUkm(&test_ukm_recorder_, url,
                                              form_structure_metric);
-
-  ASSERT_EQ(1U, test_ukm_recorder_.sources_count());
-  const ukm::UkmSource* source =
-      test_ukm_recorder_.GetSourceForUrl(url.spec().c_str());
-  EXPECT_EQ(url.spec(), source->url().spec());
-
-  ASSERT_EQ(1U, test_ukm_recorder_.entries_count());
-  const ukm::mojom::UkmEntry* entry = test_ukm_recorder_.GetEntry(0);
-
-  // Make sure that a developer engagement entry was logged.
-  EXPECT_EQ(source->id(), entry->source_id);
-  EXPECT_EQ(base::HashMetricName(UkmDeveloperEngagementType::kEntryName),
-            entry->event_hash);
-  EXPECT_EQ(1U, entry->metrics.size());
-
-  // Make sure that the correct developer engagement metric was logged.
-  const ukm::mojom::UkmMetric* metric = ukm::TestUkmRecorder::FindMetric(
-      entry, UkmDeveloperEngagementType::kDeveloperEngagementName);
-  ASSERT_NE(nullptr, metric);
-  EXPECT_EQ(form_structure_metric, metric->value);
+  auto entries = test_ukm_recorder_.GetEntriesByName(
+      UkmDeveloperEngagementType::kEntryName);
+  EXPECT_EQ(1u, entries.size());
+  for (const auto* const entry : entries) {
+    test_ukm_recorder_.ExpectEntrySourceHasUrl(entry, url);
+    EXPECT_EQ(1u, entry->metrics.size());
+    test_ukm_recorder_.ExpectEntryMetric(
+        entry, UkmDeveloperEngagementType::kDeveloperEngagementName,
+        form_structure_metric);
+  }
 }
 
 // Tests that no UKM is logged when the URL is not valid.
 TEST_F(AutofillMetricsTest, RecordCardUploadDecisionMetric_InvalidUrl) {
   GURL url("");
   AutofillMetrics::LogCardUploadDecisionsUkm(&test_ukm_recorder_, url, 1);
-  EXPECT_EQ(0U, test_ukm_recorder_.sources_count());
+  EXPECT_EQ(0ul, test_ukm_recorder_.sources_count());
+  EXPECT_EQ(0ul, test_ukm_recorder_.entries_count());
 }
 
 // Tests that no UKM is logged when the ukm service is null.
 TEST_F(AutofillMetricsTest, RecordCardUploadDecisionMetric_NoUkmService) {
   GURL url("https://www.google.com");
   AutofillMetrics::LogCardUploadDecisionsUkm(nullptr, url, 1);
-  ASSERT_EQ(0U, test_ukm_recorder_.sources_count());
+  EXPECT_EQ(0ul, test_ukm_recorder_.sources_count());
+  EXPECT_EQ(0ul, test_ukm_recorder_.entries_count());
 }
 
 }  // namespace autofill
diff --git a/components/autofill/core/browser/credit_card_save_manager_unittest.cc b/components/autofill/core/browser/credit_card_save_manager_unittest.cc
index f3a49d6..307627944 100644
--- a/components/autofill/core/browser/credit_card_save_manager_unittest.cc
+++ b/components/autofill/core/browser/credit_card_save_manager_unittest.cc
@@ -504,16 +504,6 @@
   DISALLOW_COPY_AND_ASSIGN(TestAutofillManager);
 };
 
-// Get Ukm sources from the Ukm service.
-std::vector<const ukm::UkmSource*> GetUkmSources(
-    ukm::TestUkmRecorder* service) {
-  std::vector<const ukm::UkmSource*> sources;
-  for (const auto& kv : service->GetSources())
-    sources.push_back(kv.second.get());
-
-  return sources;
-}
-
 }  // anonymous namespace
 
 class TestCreditCardSaveManager : public CreditCardSaveManager {
@@ -722,28 +712,14 @@
   }
 
   void ExpectUniqueFillableFormParsedUkm() {
-    // Check that one source is logged.
-    ASSERT_EQ(1U, test_ukm_recorder_.sources_count());
-    const ukm::UkmSource* source = GetUkmSources(&test_ukm_recorder_)[0];
-
-    // Check that one entry is logged.
-    EXPECT_EQ(1U, test_ukm_recorder_.entries_count());
-    const ukm::mojom::UkmEntry* entry = test_ukm_recorder_.GetEntry(0);
-    EXPECT_EQ(source->id(), entry->source_id);
-
-    EXPECT_EQ(source->id(), entry->source_id);
-
-    // Check if there is an entry for developer engagement decision.
-    EXPECT_EQ(base::HashMetricName(UkmDeveloperEngagementType::kEntryName),
-              entry->event_hash);
-    EXPECT_EQ(1U, entry->metrics.size());
-
-    // Check that the expected developer engagement metric is logged.
-    const ukm::mojom::UkmMetric* metric = ukm::TestUkmRecorder::FindMetric(
-        entry, UkmDeveloperEngagementType::kDeveloperEngagementName);
-    ASSERT_NE(nullptr, metric);
-    EXPECT_EQ(1 << AutofillMetrics::FILLABLE_FORM_PARSED_WITHOUT_TYPE_HINTS,
-              metric->value);
+    auto entries = test_ukm_recorder_.GetEntriesByName(
+        UkmDeveloperEngagementType::kEntryName);
+    EXPECT_EQ(1u, entries.size());
+    for (const auto* const entry : entries) {
+      test_ukm_recorder_.ExpectEntryMetric(
+          entry, UkmDeveloperEngagementType::kDeveloperEngagementName,
+          1 << AutofillMetrics::FILLABLE_FORM_PARSED_WITHOUT_TYPE_HINTS);
+    }
   }
 
   void ExpectUniqueCardUploadDecision(
@@ -778,23 +754,13 @@
   void ExpectMetric(const char* metric_name,
                     const char* entry_name,
                     int expected_metric_value,
-                    int expected_num_matching_entries) {
-    int num_matching_entries = 0;
-    for (size_t i = 0; i < test_ukm_recorder_.entries_count(); ++i) {
-      const ukm::mojom::UkmEntry* entry = test_ukm_recorder_.GetEntry(i);
-      // Check if there is an entry for |entry_name|.
-      if (entry->event_hash == base::HashMetricName(entry_name)) {
-        EXPECT_EQ(1UL, entry->metrics.size());
-
-        // Check that the expected |metric_value| is logged.
-        const ukm::mojom::UkmMetric* metric =
-            ukm::TestUkmRecorder::FindMetric(entry, metric_name);
-        ASSERT_NE(nullptr, metric);
-        EXPECT_EQ(expected_metric_value, metric->value);
-        ++num_matching_entries;
-      }
+                    size_t expected_num_matching_entries) {
+    auto entries = test_ukm_recorder_.GetEntriesByName(entry_name);
+    EXPECT_EQ(expected_num_matching_entries, entries.size());
+    for (const auto* const entry : entries) {
+      test_ukm_recorder_.ExpectEntryMetric(entry, metric_name,
+                                           expected_metric_value);
     }
-    EXPECT_EQ(expected_num_matching_entries, num_matching_entries);
   }
 
  protected:
diff --git a/components/offline_pages/core/offline_pages_ukm_reporter_unittest.cc b/components/offline_pages/core/offline_pages_ukm_reporter_unittest.cc
index b2778d24..76834bd 100644
--- a/components/offline_pages/core/offline_pages_ukm_reporter_unittest.cc
+++ b/components/offline_pages/core/offline_pages_ukm_reporter_unittest.cc
@@ -29,16 +29,17 @@
 
   reporter.ReportUrlOfflineRequest(gurl, false);
 
-  EXPECT_EQ(1U, test_recorder()->sources_count());
-  const ukm::UkmSource* found_source =
-      test_recorder()->GetSourceForUrl(kVisitedUrl);
-  EXPECT_NE(nullptr, found_source);
-
-  test_recorder()->ExpectMetric(
-      *found_source, ukm::builders::OfflinePages_SavePageRequested::kEntryName,
-      ukm::builders::OfflinePages_SavePageRequested::
-          kRequestedFromForegroundName,
-      0);
+  const auto& entries = test_recorder()->GetEntriesByName(
+      ukm::builders::OfflinePages_SavePageRequested::kEntryName);
+  EXPECT_EQ(1u, entries.size());
+  for (const auto* entry : entries) {
+    test_recorder()->ExpectEntrySourceHasUrl(entry, gurl);
+    test_recorder()->ExpectEntryMetric(
+        entry,
+        ukm::builders::OfflinePages_SavePageRequested::
+            kRequestedFromForegroundName,
+        0);
+  }
 }
 
 }  // namespace offline_pages
diff --git a/components/omnibox/browser/fake_autocomplete_provider_client.cc b/components/omnibox/browser/fake_autocomplete_provider_client.cc
index 999a1bc..1787801 100644
--- a/components/omnibox/browser/fake_autocomplete_provider_client.cc
+++ b/components/omnibox/browser/fake_autocomplete_provider_client.cc
@@ -4,6 +4,7 @@
 
 #include "components/omnibox/browser/fake_autocomplete_provider_client.h"
 
+#include "base/files/file_path.h"
 #include "base/memory/ptr_util.h"
 #include "base/run_loop.h"
 #include "components/bookmarks/browser/bookmark_model.h"
@@ -12,19 +13,29 @@
 #include "components/history/core/test/history_service_test_util.h"
 #include "components/omnibox/browser/in_memory_url_index.h"
 #include "components/omnibox/browser/in_memory_url_index_test_util.h"
+#include "components/omnibox/browser/shortcuts_backend.h"
+#include "components/search_engines/template_url_service.h"
 
-FakeAutocompleteProviderClient::FakeAutocompleteProviderClient()
+FakeAutocompleteProviderClient::FakeAutocompleteProviderClient(
+    bool create_history_db)
     : is_tab_open_with_url_(false) {
+  set_template_url_service(std::make_unique<TemplateURLService>(nullptr, 0));
+
   bookmark_model_ = bookmarks::TestBookmarkClient::CreateModel();
 
   CHECK(history_dir_.CreateUniqueTempDir());
   history_service_ =
-      history::CreateHistoryService(history_dir_.GetPath(), true);
+      history::CreateHistoryService(history_dir_.GetPath(), create_history_db);
 
   in_memory_url_index_.reset(
       new InMemoryURLIndex(bookmark_model_.get(), history_service_.get(),
                            nullptr, history_dir_.GetPath(), SchemeSet()));
   in_memory_url_index_->Init();
+
+  shortcuts_backend_ = base::MakeRefCounted<ShortcutsBackend>(
+      GetTemplateURLService(), std::make_unique<SearchTermsData>(),
+      GetHistoryService(), base::FilePath(), true);
+  shortcuts_backend_->Init();
 }
 
 FakeAutocompleteProviderClient::~FakeAutocompleteProviderClient() {
@@ -32,10 +43,9 @@
   // its destructor.
   GetInMemoryURLIndex()->Shutdown();
   set_in_memory_url_index(nullptr);
-  // History index rebuild task is created from main thread during SetUp,
-  // performed on DB thread and must be deleted on main thread.
-  // Run main loop to process delete task, to prevent leaks.
-  base::RunLoop().RunUntilIdle();
+  // Note that RunUntilIdle() must still be called after this, from
+  // whichever task model is being used, probably ScopedTaskEnvironment,
+  // or there will be memory leaks.
 }
 
 const AutocompleteSchemeClassifier&
@@ -43,11 +53,6 @@
   return scheme_classifier_;
 }
 
-const SearchTermsData& FakeAutocompleteProviderClient::GetSearchTermsData()
-    const {
-  return search_terms_data_;
-}
-
 history::HistoryService* FakeAutocompleteProviderClient::GetHistoryService() {
   return history_service_.get();
 }
@@ -60,6 +65,21 @@
   return in_memory_url_index_.get();
 }
 
+const SearchTermsData& FakeAutocompleteProviderClient::GetSearchTermsData()
+    const {
+  return search_terms_data_;
+}
+
+scoped_refptr<ShortcutsBackend>
+FakeAutocompleteProviderClient::GetShortcutsBackend() {
+  return shortcuts_backend_;
+}
+
+scoped_refptr<ShortcutsBackend>
+FakeAutocompleteProviderClient::GetShortcutsBackendIfExists() {
+  return shortcuts_backend_;
+}
+
 bool FakeAutocompleteProviderClient::IsTabOpenWithURL(const GURL& url) {
   return is_tab_open_with_url_;
 }
diff --git a/components/omnibox/browser/fake_autocomplete_provider_client.h b/components/omnibox/browser/fake_autocomplete_provider_client.h
index a9aa057..b0f30be 100644
--- a/components/omnibox/browser/fake_autocomplete_provider_client.h
+++ b/components/omnibox/browser/fake_autocomplete_provider_client.h
@@ -12,6 +12,7 @@
 #include "components/omnibox/browser/in_memory_url_index.h"
 #include "components/omnibox/browser/mock_autocomplete_provider_client.h"
 #include "components/omnibox/browser/test_scheme_classifier.h"
+#include "components/search_engines/search_terms_data.h"
 
 namespace bookmarks {
 class BookmarkModel;
@@ -22,18 +23,27 @@
 }  // namespace history
 
 class InMemoryURLIndex;
+class ShortcutsBackend;
 
 // Fully operational AutocompleteProviderClient for usage in tests.
+// Note: The history index rebuild task is created from main thread, usually
+// during SetUp(), performed on DB thread and must be deleted on main thread.
+// Run main loop to process delete task, to prevent leaks.
+// Note that these tests have switched to using a ScopedTaskEnvironment,
+// so clearing that task queue is done through
+// scoped_task_environment_.RunUntilIdle().
 class FakeAutocompleteProviderClient : public MockAutocompleteProviderClient {
  public:
-  FakeAutocompleteProviderClient();
+  explicit FakeAutocompleteProviderClient(bool create_history_db = true);
   ~FakeAutocompleteProviderClient() override;
 
   const AutocompleteSchemeClassifier& GetSchemeClassifier() const override;
-  const SearchTermsData& GetSearchTermsData() const override;
   history::HistoryService* GetHistoryService() override;
   bookmarks::BookmarkModel* GetBookmarkModel() override;
   InMemoryURLIndex* GetInMemoryURLIndex() override;
+  const SearchTermsData& GetSearchTermsData() const override;
+  scoped_refptr<ShortcutsBackend> GetShortcutsBackend() override;
+  scoped_refptr<ShortcutsBackend> GetShortcutsBackendIfExists() override;
 
   void set_in_memory_url_index(std::unique_ptr<InMemoryURLIndex> index) {
     in_memory_url_index_ = std::move(index);
@@ -52,6 +62,7 @@
   std::unique_ptr<InMemoryURLIndex> in_memory_url_index_;
   std::unique_ptr<history::HistoryService> history_service_;
   bool is_tab_open_with_url_;
+  scoped_refptr<ShortcutsBackend> shortcuts_backend_;
 
   DISALLOW_COPY_AND_ASSIGN(FakeAutocompleteProviderClient);
 };
diff --git a/components/omnibox/browser/history_provider_unittest.cc b/components/omnibox/browser/history_provider_unittest.cc
index f542a0a..bfed8fcc 100644
--- a/components/omnibox/browser/history_provider_unittest.cc
+++ b/components/omnibox/browser/history_provider_unittest.cc
@@ -57,6 +57,7 @@
 void HistoryProviderTest::TearDown() {
   provider_ = nullptr;
   client_.reset();
+  scoped_task_environment_.RunUntilIdle();
 }
 
 }  // namespace
diff --git a/components/omnibox/browser/history_quick_provider_performance_unittest.cc b/components/omnibox/browser/history_quick_provider_performance_unittest.cc
index 7e2ff77..0bef4305 100644
--- a/components/omnibox/browser/history_quick_provider_performance_unittest.cc
+++ b/components/omnibox/browser/history_quick_provider_performance_unittest.cc
@@ -117,6 +117,7 @@
 void HQPPerfTestOnePopularURL::TearDown() {
   provider_ = nullptr;
   client_.reset();
+  scoped_task_environment_.RunUntilIdle();
 }
 
 void HQPPerfTestOnePopularURL::PrepareData() {
diff --git a/components/omnibox/browser/history_quick_provider_unittest.cc b/components/omnibox/browser/history_quick_provider_unittest.cc
index 4b605827..5811e04 100644
--- a/components/omnibox/browser/history_quick_provider_unittest.cc
+++ b/components/omnibox/browser/history_quick_provider_unittest.cc
@@ -219,6 +219,7 @@
 void HistoryQuickProviderTest::TearDown() {
   provider_ = nullptr;
   client_.reset();
+  scoped_task_environment_.RunUntilIdle();
 }
 
 std::vector<HistoryQuickProviderTest::TestURLInfo>
diff --git a/components/omnibox/browser/history_url_provider_unittest.cc b/components/omnibox/browser/history_url_provider_unittest.cc
index ae109a6..2d876490 100644
--- a/components/omnibox/browser/history_url_provider_unittest.cc
+++ b/components/omnibox/browser/history_url_provider_unittest.cc
@@ -10,7 +10,6 @@
 #include <memory>
 #include <utility>
 
-#include "base/files/scoped_temp_dir.h"
 #include "base/macros.h"
 #include "base/memory/ptr_util.h"
 #include "base/run_loop.h"
@@ -26,12 +25,10 @@
 #include "components/omnibox/browser/autocomplete_provider.h"
 #include "components/omnibox/browser/autocomplete_provider_listener.h"
 #include "components/omnibox/browser/autocomplete_result.h"
+#include "components/omnibox/browser/fake_autocomplete_provider_client.h"
 #include "components/omnibox/browser/history_quick_provider.h"
-#include "components/omnibox/browser/mock_autocomplete_provider_client.h"
-#include "components/omnibox/browser/test_scheme_classifier.h"
 #include "components/prefs/pref_service.h"
 #include "components/search_engines/default_search_manager.h"
-#include "components/search_engines/search_terms_data.h"
 #include "components/search_engines/template_url.h"
 #include "components/search_engines/template_url_service.h"
 #include "components/url_formatter/url_fixer.h"
@@ -171,38 +168,6 @@
     {"https://www.wytih/file", "What you typed in history www file", 7, 7, 80},
 };
 
-class AnonFakeAutocompleteProviderClient
-    : public MockAutocompleteProviderClient {
- public:
-  explicit AnonFakeAutocompleteProviderClient(bool create_history_db) {
-    set_template_url_service(base::MakeUnique<TemplateURLService>(nullptr, 0));
-    if (history_dir_.CreateUniqueTempDir()) {
-      history_service_ = history::CreateHistoryService(history_dir_.GetPath(),
-                                                       create_history_db);
-    }
-  }
-
-  const AutocompleteSchemeClassifier& GetSchemeClassifier() const override {
-    return scheme_classifier_;
-  }
-
-  const SearchTermsData& GetSearchTermsData() const override {
-    return search_terms_data_;
-  }
-
-  history::HistoryService* GetHistoryService() override {
-    return history_service_.get();
-  }
-
- private:
-  TestSchemeClassifier scheme_classifier_;
-  SearchTermsData search_terms_data_;
-  base::ScopedTempDir history_dir_;
-  std::unique_ptr<history::HistoryService> history_service_;
-
-  DISALLOW_COPY_AND_ASSIGN(AnonFakeAutocompleteProviderClient);
-};
-
 }  // namespace
 
 class HistoryURLProviderTest : public testing::Test,
@@ -267,7 +232,7 @@
 
   base::test::ScopedTaskEnvironment scoped_task_environment_;
   ACMatches matches_;
-  std::unique_ptr<AnonFakeAutocompleteProviderClient> client_;
+  std::unique_ptr<FakeAutocompleteProviderClient> client_;
   scoped_refptr<HistoryURLProvider> autocomplete_;
   // Should the matches be sorted and duplicates removed?
   bool sort_matches_;
@@ -300,17 +265,18 @@
 }
 
 bool HistoryURLProviderTest::SetUpImpl(bool create_history_db) {
-  client_ =
-      std::make_unique<AnonFakeAutocompleteProviderClient>(create_history_db);
+  client_ = std::make_unique<FakeAutocompleteProviderClient>(create_history_db);
   if (!client_->GetHistoryService())
     return false;
-  autocomplete_ = new HistoryURLProvider(client_.get(), this);
+  autocomplete_ = base::MakeRefCounted<HistoryURLProvider>(client_.get(), this);
   FillData();
   return true;
 }
 
 void HistoryURLProviderTest::TearDown() {
   autocomplete_ = nullptr;
+  client_.reset();
+  scoped_task_environment_.RunUntilIdle();
 }
 
 void HistoryURLProviderTest::FillData() {
@@ -366,7 +332,7 @@
     std::sort(matches_.begin(), matches_.end(),
               &AutocompleteMatch::MoreRelevant);
   }
-  SCOPED_TRACE(base::ASCIIToUTF16("input = ") + text);
+  SCOPED_TRACE(ASCIIToUTF16("input = ") + text);
   ASSERT_EQ(num_results, matches_.size()) << "Input text: " << text
                                           << "\nTLD: \"" << desired_tld << "\"";
   for (size_t i = 0; i < num_results; ++i) {
@@ -386,7 +352,7 @@
   ASSERT_FALSE(expected_match_contents_string.empty());
 
   SCOPED_TRACE("input = " + input_text);
-  SCOPED_TRACE(base::ASCIIToUTF16("expected_match_contents = ") +
+  SCOPED_TRACE(ASCIIToUTF16("expected_match_contents = ") +
                expected_match_contents_string);
 
   AutocompleteInput input(ASCIIToUTF16(input_text),
@@ -586,8 +552,8 @@
   redirects_to_a.push_back(GURL(test_cases[2].url));
   redirects_to_a.push_back(GURL(test_cases[0].url));
   client_->GetHistoryService()->AddPage(
-      GURL(test_cases[0].url), base::Time::Now(), nullptr, 0, GURL(),
-      redirects_to_a, ui::PAGE_TRANSITION_TYPED, history::SOURCE_BROWSED, true);
+      GURL(test_cases[0].url), Time::Now(), nullptr, 0, GURL(), redirects_to_a,
+      ui::PAGE_TRANSITION_TYPED, history::SOURCE_BROWSED, true);
 
   // Because all the results are part of a redirect chain with other results,
   // all but the first one (A) should be culled. We should get the default
diff --git a/components/omnibox/browser/mock_autocomplete_provider_client.h b/components/omnibox/browser/mock_autocomplete_provider_client.h
index 78c85bc6..7960e14 100644
--- a/components/omnibox/browser/mock_autocomplete_provider_client.h
+++ b/components/omnibox/browser/mock_autocomplete_provider_client.h
@@ -50,13 +50,6 @@
       bool create_if_necessary) const override {
     return contextual_suggestions_service_.get();
   }
-  std::unique_ptr<KeywordExtensionsDelegate> GetKeywordExtensionsDelegate(
-      KeywordProvider* keyword_provider) override {
-    return nullptr;
-  }
-  physical_web::PhysicalWebDataSource* GetPhysicalWebDataSource() override {
-    return nullptr;
-  }
 
   MOCK_CONST_METHOD0(GetSearchTermsData, const SearchTermsData&());
 
@@ -67,6 +60,13 @@
   scoped_refptr<ShortcutsBackend> GetShortcutsBackendIfExists() override {
     return nullptr;
   }
+  std::unique_ptr<KeywordExtensionsDelegate> GetKeywordExtensionsDelegate(
+      KeywordProvider* keyword_provider) override {
+    return nullptr;
+  }
+  physical_web::PhysicalWebDataSource* GetPhysicalWebDataSource() override {
+    return nullptr;
+  }
 
   MOCK_CONST_METHOD0(GetAcceptLanguages, std::string());
   MOCK_METHOD0(GetEmbedderRepresentationOfAboutScheme, std::string());
@@ -88,12 +88,12 @@
                void(history::KeywordID keyword_id, const base::string16& term));
   MOCK_METHOD1(PrefetchImage, void(const GURL& url));
 
+  bool IsTabOpenWithURL(const GURL& url) override { return false; }
+
   void set_template_url_service(std::unique_ptr<TemplateURLService> service) {
     template_url_service_ = std::move(service);
   }
 
-  bool IsTabOpenWithURL(const GURL& url) override { return false; }
-
  private:
   std::unique_ptr<ContextualSuggestionsService> contextual_suggestions_service_;
   std::unique_ptr<TemplateURLService> template_url_service_;
diff --git a/components/omnibox/browser/shortcuts_provider_unittest.cc b/components/omnibox/browser/shortcuts_provider_unittest.cc
index 43cfbbc..ad94806 100644
--- a/components/omnibox/browser/shortcuts_provider_unittest.cc
+++ b/components/omnibox/browser/shortcuts_provider_unittest.cc
@@ -23,18 +23,15 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/scoped_task_environment.h"
 #include "base/test/sequenced_worker_pool_owner.h"
-#include "components/history/core/browser/history_service.h"
 #include "components/history/core/browser/url_database.h"
-#include "components/history/core/test/history_service_test_util.h"
 #include "components/omnibox/browser/autocomplete_input.h"
 #include "components/omnibox/browser/autocomplete_match.h"
 #include "components/omnibox/browser/autocomplete_provider.h"
 #include "components/omnibox/browser/autocomplete_result.h"
+#include "components/omnibox/browser/fake_autocomplete_provider_client.h"
 #include "components/omnibox/browser/in_memory_url_index.h"
-#include "components/omnibox/browser/mock_autocomplete_provider_client.h"
 #include "components/omnibox/browser/shortcuts_backend.h"
 #include "components/omnibox/browser/shortcuts_provider_test_util.h"
-#include "components/omnibox/browser/test_scheme_classifier.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/metrics_proto/omnibox_event.pb.h"
 
@@ -179,43 +176,6 @@
     AutocompleteMatchType::HISTORY_URL, "", 1, 100 },
 };
 
-class AnonFakeAutocompleteProviderClient
-    : public testing::NiceMock<MockAutocompleteProviderClient> {
- public:
-  AnonFakeAutocompleteProviderClient() : pool_owner_(3, "Background Pool") {
-    set_template_url_service(base::MakeUnique<TemplateURLService>(nullptr, 0));
-    if (history_dir_.CreateUniqueTempDir()) {
-      history_service_ =
-          history::CreateHistoryService(history_dir_.GetPath(), true);
-    }
-
-    shortcuts_backend_ = new ShortcutsBackend(
-        GetTemplateURLService(), base::MakeUnique<SearchTermsData>(),
-        history_service_.get(), base::FilePath(), true);
-    shortcuts_backend_->Init();
-  }
-
-  history::HistoryService* GetHistoryService() override {
-    return history_service_.get();
-  }
-
-  scoped_refptr<ShortcutsBackend> GetShortcutsBackend() override {
-    return shortcuts_backend_;
-  }
-
-  scoped_refptr<ShortcutsBackend> GetShortcutsBackendIfExists() override {
-    return shortcuts_backend_;
-  }
-
- private:
-  base::SequencedWorkerPoolOwner pool_owner_;
-  base::ScopedTempDir history_dir_;
-  std::unique_ptr<history::HistoryService> history_service_;
-  scoped_refptr<ShortcutsBackend> shortcuts_backend_;
-
-  DISALLOW_COPY_AND_ASSIGN(AnonFakeAutocompleteProviderClient);
-};
-
 }  // namespace
 
 // ClassifyTest ---------------------------------------------------------------
@@ -266,17 +226,17 @@
                      int max_relevance);
 
   base::test::ScopedTaskEnvironment scoped_task_environment_;
-  std::unique_ptr<AnonFakeAutocompleteProviderClient> client_;
+  std::unique_ptr<FakeAutocompleteProviderClient> client_;
   scoped_refptr<ShortcutsProvider> provider_;
 };
 
 ShortcutsProviderTest::ShortcutsProviderTest() {}
 
 void ShortcutsProviderTest::SetUp() {
-  client_ = std::make_unique<AnonFakeAutocompleteProviderClient>();
+  client_ = std::make_unique<FakeAutocompleteProviderClient>();
 
   ASSERT_TRUE(client_->GetShortcutsBackend());
-  provider_ = new ShortcutsProvider(client_.get());
+  provider_ = base::MakeRefCounted<ShortcutsProvider>(client_.get());
   PopulateShortcutsBackendWithTestData(client_->GetShortcutsBackend(),
                                        shortcut_test_db,
                                        arraysize(shortcut_test_db));
@@ -284,6 +244,8 @@
 
 void ShortcutsProviderTest::TearDown() {
   provider_ = nullptr;
+  client_.reset();
+  scoped_task_environment_.RunUntilIdle();
 }
 
 int ShortcutsProviderTest::CalculateScore(
diff --git a/components/password_manager/core/browser/password_autofill_manager_unittest.cc b/components/password_manager/core/browser/password_autofill_manager_unittest.cc
index b9f32f5..1fa952a 100644
--- a/components/password_manager/core/browser/password_autofill_manager_unittest.cc
+++ b/components/password_manager/core/browser/password_autofill_manager_unittest.cc
@@ -1181,16 +1181,18 @@
     manager.reset();
     autofill_client.reset();
     client.reset();
-    const ukm::UkmSource* source =
-        test_ukm_recorder.GetSourceForUrl(kMainFrameUrl);
-    ASSERT_TRUE(source);
 
-    test_ukm_recorder.ExpectMetric(
-        *source, "PageWithPassword", password_manager::kUkmPageLevelUserAction,
-        static_cast<int64_t>(
-            password_manager::PasswordManagerMetricsRecorder::
-                PageLevelUserAction::kShowAllPasswordsWhileSomeAreSuggested));
-
+    const auto& entries =
+        test_ukm_recorder.GetEntriesByName("PageWithPassword");
+    EXPECT_EQ(1u, entries.size());
+    for (const auto* entry : entries) {
+      test_ukm_recorder.ExpectEntrySourceHasUrl(entry, GURL(kMainFrameUrl));
+      test_ukm_recorder.ExpectEntryMetric(
+          entry, password_manager::kUkmPageLevelUserAction,
+          static_cast<int64_t>(
+              password_manager::PasswordManagerMetricsRecorder::
+                  PageLevelUserAction::kShowAllPasswordsWhileSomeAreSuggested));
+    }
   } else {
     EXPECT_THAT(histograms.GetAllSamples(kShownContextHistogram),
                 testing::IsEmpty());
@@ -1268,15 +1270,18 @@
     manager.reset();
     autofill_client.reset();
     client.reset();
-    const ukm::UkmSource* source =
-        test_ukm_recorder.GetSourceForUrl(kMainFrameUrl);
-    ASSERT_TRUE(source);
 
-    test_ukm_recorder.ExpectMetric(
-        *source, "PageWithPassword", password_manager::kUkmPageLevelUserAction,
-        static_cast<int64_t>(
-            password_manager::PasswordManagerMetricsRecorder::
-                PageLevelUserAction::kShowAllPasswordsWhileNoneAreSuggested));
+    const auto& entries =
+        test_ukm_recorder.GetEntriesByName("PageWithPassword");
+    EXPECT_EQ(1u, entries.size());
+    for (const auto* entry : entries) {
+      test_ukm_recorder.ExpectEntrySourceHasUrl(entry, GURL(kMainFrameUrl));
+      test_ukm_recorder.ExpectEntryMetric(
+          entry, password_manager::kUkmPageLevelUserAction,
+          static_cast<int64_t>(
+              password_manager::PasswordManagerMetricsRecorder::
+                  PageLevelUserAction::kShowAllPasswordsWhileNoneAreSuggested));
+    }
   } else {
     EXPECT_THAT(histograms.GetAllSamples(kShownContextHistogram),
                 testing::IsEmpty());
diff --git a/components/password_manager/core/browser/password_form_manager_unittest.cc b/components/password_manager/core/browser/password_form_manager_unittest.cc
index 8a93eb9..7625fe3 100644
--- a/components/password_manager/core/browser/password_form_manager_unittest.cc
+++ b/components/password_manager/core/browser/password_form_manager_unittest.cc
@@ -759,30 +759,6 @@
         client()->mock_driver()->mock_autofill_download_manager());
   }
 
-  // Returns the sample values of |metric_value| in events named |event_name|.
-  std::vector<int64_t> GetAllUkmSamples(
-      const ukm::TestAutoSetUkmRecorder& test_ukm_recorder,
-      base::StringPiece event_name,
-      base::StringPiece metric_name) {
-    std::vector<int64_t> values;
-    const ukm::UkmSource* source =
-        test_ukm_recorder.GetSourceForSourceId(client()->GetUkmSourceId());
-    if (!source)
-      return values;
-
-    for (size_t i = 0; i < test_ukm_recorder.entries_count(); ++i) {
-      const ukm::mojom::UkmEntry* entry = test_ukm_recorder.GetEntry(i);
-      if (entry->event_hash != base::HashMetricName(event_name))
-        continue;
-
-      for (const ukm::mojom::UkmMetricPtr& metric : entry->metrics) {
-        if (metric->metric_hash == base::HashMetricName(metric_name))
-          values.push_back(metric->value);
-      }
-    }
-    return values;
-  }
-
   PasswordForm* observed_form() { return &observed_form_; }
   PasswordForm* saved_match() { return &saved_match_; }
   PasswordForm* psl_saved_match() { return &psl_saved_match_; }
@@ -3888,27 +3864,29 @@
           ::testing::ElementsAre(
               base::Bucket(test_case.expected_histogram_sample_generated, 1)));
       EXPECT_THAT(
-          GetAllUkmSamples(
-              test_ukm_recorder, "PasswordForm",
-              "SuppressedAccount.Generated." +
-                  std::string(suppression_params.expected_histogram_suffix)),
-          ::testing::ElementsAre(
-              test_case.expected_histogram_sample_generated /
-              PasswordFormMetricsRecorder::kMaxNumActionsTakenNew));
-      EXPECT_THAT(
           histogram_tester.GetAllSamples(
               "PasswordManager.SuppressedAccount.Manual." +
               std::string(suppression_params.expected_histogram_suffix)),
           ::testing::ElementsAre(
               base::Bucket(test_case.expected_histogram_sample_manual, 1)));
-      EXPECT_THAT(
-          GetAllUkmSamples(
-              test_ukm_recorder, "PasswordForm",
-              "SuppressedAccount.Manual." +
-                  std::string(suppression_params.expected_histogram_suffix)),
-          ::testing::ElementsAre(
-              test_case.expected_histogram_sample_manual /
-              PasswordFormMetricsRecorder::kMaxNumActionsTakenNew));
+
+      auto entries = test_ukm_recorder.GetEntriesByName(
+          ukm::builders::PasswordForm::kEntryName);
+      EXPECT_EQ(1u, entries.size());
+      for (const auto* const entry : entries) {
+        test_ukm_recorder.ExpectEntryMetric(
+            entry,
+            "SuppressedAccount.Generated." +
+                std::string(suppression_params.expected_histogram_suffix),
+            test_case.expected_histogram_sample_generated /
+                PasswordFormMetricsRecorder::kMaxNumActionsTakenNew);
+        test_ukm_recorder.ExpectEntryMetric(
+            entry,
+            "SuppressedAccount.Manual." +
+                std::string(suppression_params.expected_histogram_suffix),
+            test_case.expected_histogram_sample_manual /
+                PasswordFormMetricsRecorder::kMaxNumActionsTakenNew);
+      }
     }
   }
 }
@@ -4086,13 +4064,15 @@
       fetcher.SetNonFederated(fetched_forms, 0u);
     }
 
-    const auto* source =
-        test_ukm_recorder.GetSourceForUrl(form_to_fill.origin.spec().c_str());
-    ASSERT_TRUE(source);
-    test_ukm_recorder.ExpectMetric(
-        *source, ukm::builders::PasswordForm::kEntryName,
-        ukm::builders::PasswordForm::kManagerFill_ActionName,
-        test.expected_event);
+    auto entries = test_ukm_recorder.GetEntriesByName(
+        ukm::builders::PasswordForm::kEntryName);
+    EXPECT_EQ(1u, entries.size());
+    for (const auto* const entry : entries) {
+      test_ukm_recorder.ExpectEntrySourceHasUrl(entry, form_to_fill.origin);
+      test_ukm_recorder.ExpectEntryMetric(
+          entry, ukm::builders::PasswordForm::kManagerFill_ActionName,
+          test.expected_event);
+    }
   }
 }
 TEST_F(PasswordFormManagerTest,
diff --git a/components/password_manager/core/browser/password_form_metrics_recorder_unittest.cc b/components/password_manager/core/browser/password_form_metrics_recorder_unittest.cc
index fc39e30..b928e2a6 100644
--- a/components/password_manager/core/browser/password_form_metrics_recorder_unittest.cc
+++ b/components/password_manager/core/browser/password_form_metrics_recorder_unittest.cc
@@ -41,19 +41,18 @@
                          const char* metric_name,
                          int64_t value,
                          int64_t expected_count) {
-  const ukm::UkmSource* source = test_ukm_recorder->GetSourceForUrl(kTestUrl);
-  ASSERT_TRUE(source);
-
-  ASSERT_EQ(1U, test_ukm_recorder->entries_count());
-  const ukm::mojom::UkmEntry* entry = test_ukm_recorder->GetEntry(0);
-
-  int64_t occurrences = 0;
-  for (const ukm::mojom::UkmMetricPtr& metric : entry->metrics) {
-    if (metric->metric_hash == base::HashMetricName(metric_name) &&
-        metric->value == value)
-      ++occurrences;
+  auto entries = test_ukm_recorder->GetEntriesByName(UkmEntry::kEntryName);
+  EXPECT_EQ(1u, entries.size());
+  for (const auto* const entry : entries) {
+    test_ukm_recorder->ExpectEntrySourceHasUrl(entry, GURL(kTestUrl));
+    if (expected_count) {
+      test_ukm_recorder->ExpectEntryMetric(entry, metric_name, value);
+    } else {
+      const int64_t* value =
+          test_ukm_recorder->GetEntryMetric(entry, metric_name);
+      EXPECT_TRUE(value == nullptr || *value != expected_count);
+    }
   }
-  EXPECT_EQ(expected_count, occurrences) << metric_name << ": " << value;
 }
 
 }  // namespace
@@ -302,11 +301,9 @@
         break;
     }
 
-    const ukm::UkmSource* source = test_ukm_recorder.GetSourceForUrl(kTestUrl);
-    ASSERT_TRUE(source);
-    test_ukm_recorder.ExpectMetric(*source, UkmEntry::kEntryName,
-                                   UkmEntry::kUser_ActionSimplifiedName,
-                                   static_cast<int64_t>(test.user_action));
+    ExpectUkmValueCount(&test_ukm_recorder,
+                        UkmEntry::kUser_ActionSimplifiedName,
+                        static_cast<int64_t>(test.user_action), 1);
   }
 }
 
@@ -467,26 +464,29 @@
                                           test.display_disposition);
     }
     // Verify data
-    const ukm::UkmSource* source = test_ukm_recorder.GetSourceForUrl(kTestUrl);
-    ASSERT_TRUE(source);
-    if (test.credential_source_type !=
-        metrics_util::CredentialSourceType::kUnknown) {
-      test_ukm_recorder.ExpectMetric(
-          *source, UkmEntry::kEntryName, test.expected_trigger_metric,
-          static_cast<int64_t>(test.expected_trigger_value));
-    } else {
-      EXPECT_FALSE(test_ukm_recorder.HasMetric(
-          *source, UkmEntry::kEntryName, UkmEntry::kSaving_Prompt_TriggerName));
-      EXPECT_FALSE(
-          test_ukm_recorder.HasMetric(*source, UkmEntry::kEntryName,
-                                      UkmEntry::kUpdating_Prompt_TriggerName));
+    auto entries = test_ukm_recorder.GetEntriesByName(UkmEntry::kEntryName);
+    EXPECT_EQ(1u, entries.size());
+    for (const auto* const entry : entries) {
+      test_ukm_recorder.ExpectEntrySourceHasUrl(entry, GURL(kTestUrl));
+
+      if (test.credential_source_type !=
+          metrics_util::CredentialSourceType::kUnknown) {
+        test_ukm_recorder.ExpectEntryMetric(
+            entry, test.expected_trigger_metric,
+            static_cast<int64_t>(test.expected_trigger_value));
+      } else {
+        EXPECT_FALSE(test_ukm_recorder.EntryHasMetric(
+            entry, UkmEntry::kSaving_Prompt_TriggerName));
+        EXPECT_FALSE(test_ukm_recorder.EntryHasMetric(
+            entry, UkmEntry::kUpdating_Prompt_TriggerName));
+      }
+      test_ukm_recorder.ExpectEntryMetric(entry,
+                                          UkmEntry::kSaving_Prompt_ShownName,
+                                          test.expected_save_prompt_shown);
+      test_ukm_recorder.ExpectEntryMetric(entry,
+                                          UkmEntry::kUpdating_Prompt_ShownName,
+                                          test.expected_update_prompt_shown);
     }
-    test_ukm_recorder.ExpectMetric(*source, UkmEntry::kEntryName,
-                                   UkmEntry::kSaving_Prompt_ShownName,
-                                   test.expected_save_prompt_shown);
-    test_ukm_recorder.ExpectMetric(*source, UkmEntry::kEntryName,
-                                   UkmEntry::kUpdating_Prompt_ShownName,
-                                   test.expected_update_prompt_shown);
   }
 }
 
@@ -529,11 +529,14 @@
       recorder->RecordUIDismissalReason(test.dismissal_reason);
     }
     // Verify data
-    const ukm::UkmSource* source = test_ukm_recorder.GetSourceForUrl(kTestUrl);
-    ASSERT_TRUE(source);
-    test_ukm_recorder.ExpectMetric(
-        *source, UkmEntry::kEntryName, test.expected_trigger_metric,
-        static_cast<int64_t>(test.expected_metric_value));
+    auto entries = test_ukm_recorder.GetEntriesByName(UkmEntry::kEntryName);
+    EXPECT_EQ(1u, entries.size());
+    for (const auto* const entry : entries) {
+      test_ukm_recorder.ExpectEntrySourceHasUrl(entry, GURL(kTestUrl));
+      test_ukm_recorder.ExpectEntryMetric(
+          entry, test.expected_trigger_metric,
+          static_cast<int64_t>(test.expected_metric_value));
+    }
   }
 }
 
@@ -560,24 +563,28 @@
     recorder->RecordUIDismissalReason(metrics_util::CLICKED_SAVE);
   }
   // Verify recorded UKM data.
-  const ukm::UkmSource* source = test_ukm_recorder.GetSourceForUrl(kTestUrl);
-  ASSERT_TRUE(source);
-  test_ukm_recorder.ExpectMetric(
-      *source, UkmEntry::kEntryName, UkmEntry::kSaving_Prompt_InteractionName,
-      static_cast<int64_t>(BubbleDismissalReason::kAccepted));
-  test_ukm_recorder.ExpectMetric(
-      *source, UkmEntry::kEntryName, UkmEntry::kUpdating_Prompt_InteractionName,
-      static_cast<int64_t>(BubbleDismissalReason::kAccepted));
-  test_ukm_recorder.ExpectMetric(*source, UkmEntry::kEntryName,
-                                 UkmEntry::kUpdating_Prompt_ShownName, 1);
-  test_ukm_recorder.ExpectMetric(*source, UkmEntry::kEntryName,
-                                 UkmEntry::kSaving_Prompt_ShownName, 1);
-  test_ukm_recorder.ExpectMetric(
-      *source, UkmEntry::kEntryName, UkmEntry::kSaving_Prompt_TriggerName,
-      static_cast<int64_t>(BubbleTrigger::kPasswordManagerSuggestionAutomatic));
-  test_ukm_recorder.ExpectMetric(
-      *source, UkmEntry::kEntryName, UkmEntry::kUpdating_Prompt_TriggerName,
-      static_cast<int64_t>(BubbleTrigger::kPasswordManagerSuggestionManual));
+  auto entries = test_ukm_recorder.GetEntriesByName(UkmEntry::kEntryName);
+  EXPECT_EQ(1u, entries.size());
+  for (const auto* const entry : entries) {
+    test_ukm_recorder.ExpectEntrySourceHasUrl(entry, GURL(kTestUrl));
+    test_ukm_recorder.ExpectEntryMetric(
+        entry, UkmEntry::kSaving_Prompt_InteractionName,
+        static_cast<int64_t>(BubbleDismissalReason::kAccepted));
+    test_ukm_recorder.ExpectEntryMetric(
+        entry, UkmEntry::kUpdating_Prompt_InteractionName,
+        static_cast<int64_t>(BubbleDismissalReason::kAccepted));
+    test_ukm_recorder.ExpectEntryMetric(
+        entry, UkmEntry::kUpdating_Prompt_ShownName, 1);
+    test_ukm_recorder.ExpectEntryMetric(entry,
+                                        UkmEntry::kSaving_Prompt_ShownName, 1);
+    test_ukm_recorder.ExpectEntryMetric(
+        entry, UkmEntry::kSaving_Prompt_TriggerName,
+        static_cast<int64_t>(
+            BubbleTrigger::kPasswordManagerSuggestionAutomatic));
+    test_ukm_recorder.ExpectEntryMetric(
+        entry, UkmEntry::kUpdating_Prompt_TriggerName,
+        static_cast<int64_t>(BubbleTrigger::kPasswordManagerSuggestionManual));
+  }
 }
 
 // Verify that one-time actions are only recorded once per life-cycle of a
@@ -593,18 +600,17 @@
     recorder->RecordDetailedUserAction(Action::kCorrectedUsernameInForm);
     recorder->RecordDetailedUserAction(Action::kEditedUsernameInBubble);
   }
-  const ukm::UkmSource* source = test_ukm_recorder.GetSourceForUrl(kTestUrl);
-  ASSERT_TRUE(source);
-  test_ukm_recorder.ExpectMetric(
-      *source, UkmEntry::kEntryName,
-      UkmEntry::kUser_Action_CorrectedUsernameInFormName, 2u);
-  test_ukm_recorder.ExpectMetric(
-      *source, UkmEntry::kEntryName,
-      UkmEntry::kUser_Action_EditedUsernameInBubbleName, 1u);
-  EXPECT_EQ(0,
-            test_ukm_recorder.CountMetrics(
-                *source, UkmEntry::kEntryName,
-                UkmEntry::kUser_Action_SelectedDifferentPasswordInBubbleName));
+  auto entries = test_ukm_recorder.GetEntriesByName(UkmEntry::kEntryName);
+  EXPECT_EQ(1u, entries.size());
+  for (const auto* const entry : entries) {
+    test_ukm_recorder.ExpectEntrySourceHasUrl(entry, GURL(kTestUrl));
+    test_ukm_recorder.ExpectEntryMetric(
+        entry, UkmEntry::kUser_Action_CorrectedUsernameInFormName, 2u);
+    test_ukm_recorder.ExpectEntryMetric(
+        entry, UkmEntry::kUser_Action_EditedUsernameInBubbleName, 1u);
+    EXPECT_FALSE(test_ukm_recorder.EntryHasMetric(
+        entry, UkmEntry::kUser_Action_SelectedDifferentPasswordInBubbleName));
+  }
 }
 
 }  // namespace password_manager
diff --git a/components/password_manager/core/browser/password_manager_metrics_recorder_unittest.cc b/components/password_manager/core/browser/password_manager_metrics_recorder_unittest.cc
index 956d362f..c0be3964 100644
--- a/components/password_manager/core/browser/password_manager_metrics_recorder_unittest.cc
+++ b/components/password_manager/core/browser/password_manager_metrics_recorder_unittest.cc
@@ -40,10 +40,14 @@
         CreateMetricsRecorder(&test_ukm_recorder));
     recorder.RecordUserModifiedPasswordField();
   }
-  const ukm::UkmSource* source = test_ukm_recorder.GetSourceForUrl(kTestUrl);
-  ASSERT_TRUE(source);
-  test_ukm_recorder.ExpectMetric(*source, "PageWithPassword",
-                                 kUkmUserModifiedPasswordField, 1);
+
+  const auto& entries = test_ukm_recorder.GetEntriesByName("PageWithPassword");
+  EXPECT_EQ(1u, entries.size());
+  for (const auto* entry : entries) {
+    test_ukm_recorder.ExpectEntrySourceHasUrl(entry, GURL(kTestUrl));
+    test_ukm_recorder.ExpectEntryMetric(entry, kUkmUserModifiedPasswordField,
+                                        1);
+  }
 }
 
 TEST(PasswordManagerMetricsRecorder, UserModifiedPasswordFieldMultipleTimes) {
@@ -56,10 +60,13 @@
     recorder.RecordUserModifiedPasswordField();
     recorder.RecordUserModifiedPasswordField();
   }
-  const ukm::UkmSource* source = test_ukm_recorder.GetSourceForUrl(kTestUrl);
-  ASSERT_TRUE(source);
-  test_ukm_recorder.ExpectMetric(*source, "PageWithPassword",
-                                 kUkmUserModifiedPasswordField, 1);
+  const auto& entries = test_ukm_recorder.GetEntriesByName("PageWithPassword");
+  EXPECT_EQ(1u, entries.size());
+  for (const auto* entry : entries) {
+    test_ukm_recorder.ExpectEntrySourceHasUrl(entry, GURL(kTestUrl));
+    test_ukm_recorder.ExpectEntryMetric(entry, kUkmUserModifiedPasswordField,
+                                        1);
+  }
 }
 
 TEST(PasswordManagerMetricsRecorder, UserModifiedPasswordFieldNotCalled) {
@@ -69,11 +76,13 @@
     PasswordManagerMetricsRecorder recorder(
         CreateMetricsRecorder(&test_ukm_recorder));
   }
-  const ukm::UkmSource* source = test_ukm_recorder.GetSourceForUrl(kTestUrl);
-  ASSERT_TRUE(source);
-  EXPECT_THAT(test_ukm_recorder.GetMetrics(*source, "PageWithPassword",
-                                           kUkmUserModifiedPasswordField),
-              Not(Contains(1)));
+  const auto& entries = test_ukm_recorder.GetEntriesByName("PageWithPassword");
+  EXPECT_EQ(1u, entries.size());
+  for (const auto* entry : entries) {
+    test_ukm_recorder.ExpectEntrySourceHasUrl(entry, GURL(kTestUrl));
+    EXPECT_FALSE(
+        test_ukm_recorder.EntryHasMetric(entry, kUkmUserModifiedPasswordField));
+  }
 }
 
 }  // namespace password_manager
diff --git a/components/payments/core/journey_logger_unittest.cc b/components/payments/core/journey_logger_unittest.cc
index 0fadf05..b9b3f43 100644
--- a/components/payments/core/journey_logger_unittest.cc
+++ b/components/payments/core/journey_logger_unittest.cc
@@ -950,33 +950,27 @@
   logger.SetEventOccurred(JourneyLogger::EVENT_PAY_CLICKED);
   logger.SetAborted(JourneyLogger::ABORT_REASON_ABORTED_BY_USER);
 
+  int64_t expected_step_metric =
+      JourneyLogger::EVENT_SHOWN | JourneyLogger::EVENT_PAY_CLICKED |
+      JourneyLogger::EVENT_REQUEST_SHIPPING |
+      JourneyLogger::EVENT_REQUEST_PAYER_EMAIL |
+      JourneyLogger::EVENT_REQUEST_METHOD_BASIC_CARD |
+      JourneyLogger::EVENT_USER_ABORTED |
+      JourneyLogger::EVENT_HAD_INITIAL_FORM_OF_PAYMENT |
+      JourneyLogger::EVENT_HAD_NECESSARY_COMPLETE_SUGGESTIONS;
+
   // Make sure the UKM was logged correctly.
-  ASSERT_EQ(1U, ukm_recorder.sources_count());
-  const ukm::UkmSource* source = ukm_recorder.GetSourceForUrl(test_url);
-  ASSERT_NE(nullptr, source);
-
-  ASSERT_EQ(1U, ukm_recorder.entries_count());
-  const ukm::mojom::UkmEntry* entry = ukm_recorder.GetEntry(0);
-  EXPECT_EQ(source->id(), entry->source_id);
-  EXPECT_EQ(base::HashMetricName(UkmEntry::kEntryName), entry->event_hash);
-
-  const ukm::mojom::UkmMetric* status_metric =
-      ukm::TestUkmRecorder::FindMetric(entry, UkmEntry::kCompletionStatusName);
-  ASSERT_NE(nullptr, status_metric);
-  EXPECT_EQ(JourneyLogger::COMPLETION_STATUS_USER_ABORTED,
-            status_metric->value);
-
-  const ukm::mojom::UkmMetric* step_metric =
-      ukm::TestUkmRecorder::FindMetric(entry, UkmEntry::kEventsName);
-  ASSERT_NE(nullptr, step_metric);
-  EXPECT_EQ(JourneyLogger::EVENT_SHOWN | JourneyLogger::EVENT_PAY_CLICKED |
-                JourneyLogger::EVENT_REQUEST_SHIPPING |
-                JourneyLogger::EVENT_REQUEST_PAYER_EMAIL |
-                JourneyLogger::EVENT_REQUEST_METHOD_BASIC_CARD |
-                JourneyLogger::EVENT_USER_ABORTED |
-                JourneyLogger::EVENT_HAD_INITIAL_FORM_OF_PAYMENT |
-                JourneyLogger::EVENT_HAD_NECESSARY_COMPLETE_SUGGESTIONS,
-            step_metric->value);
+  auto entries = ukm_recorder.GetEntriesByName(UkmEntry::kEntryName);
+  EXPECT_EQ(1u, entries.size());
+  for (const auto* const entry : entries) {
+    ukm_recorder.ExpectEntrySourceHasUrl(entry, GURL(test_url));
+    EXPECT_EQ(2U, entry->metrics.size());
+    ukm_recorder.ExpectEntryMetric(
+        entry, UkmEntry::kCompletionStatusName,
+        JourneyLogger::COMPLETION_STATUS_USER_ABORTED);
+    ukm_recorder.ExpectEntryMetric(entry, UkmEntry::kEventsName,
+                                   expected_step_metric);
+  }
 }
 
 // Tests that the Payment Request UKMs are logged correctly when the user
@@ -1004,31 +998,25 @@
   logger.SetEventOccurred(JourneyLogger::EVENT_SHOWN);
   logger.SetCompleted();
 
+  int64_t expected_step_metric =
+      JourneyLogger::EVENT_SHOWN | JourneyLogger::EVENT_REQUEST_SHIPPING |
+      JourneyLogger::EVENT_REQUEST_PAYER_EMAIL |
+      JourneyLogger::EVENT_REQUEST_METHOD_BASIC_CARD |
+      JourneyLogger::EVENT_COMPLETED |
+      JourneyLogger::EVENT_HAD_INITIAL_FORM_OF_PAYMENT |
+      JourneyLogger::EVENT_HAD_NECESSARY_COMPLETE_SUGGESTIONS;
+
   // Make sure the UKM was logged correctly.
-  ASSERT_EQ(1U, ukm_recorder.sources_count());
-  const ukm::UkmSource* source = ukm_recorder.GetSourceForUrl(test_url);
-  ASSERT_NE(nullptr, source);
-
-  ASSERT_EQ(1U, ukm_recorder.entries_count());
-  const ukm::mojom::UkmEntry* entry = ukm_recorder.GetEntry(0);
-  EXPECT_EQ(source->id(), entry->source_id);
-  EXPECT_EQ(base::HashMetricName(UkmEntry::kEntryName), entry->event_hash);
-
-  const ukm::mojom::UkmMetric* status_metric =
-      ukm::TestUkmRecorder::FindMetric(entry, UkmEntry::kCompletionStatusName);
-  ASSERT_NE(nullptr, status_metric);
-  EXPECT_EQ(JourneyLogger::COMPLETION_STATUS_COMPLETED, status_metric->value);
-
-  const ukm::mojom::UkmMetric* step_metric =
-      ukm::TestUkmRecorder::FindMetric(entry, UkmEntry::kEventsName);
-  ASSERT_NE(nullptr, step_metric);
-  EXPECT_EQ(JourneyLogger::EVENT_SHOWN | JourneyLogger::EVENT_REQUEST_SHIPPING |
-                JourneyLogger::EVENT_REQUEST_PAYER_EMAIL |
-                JourneyLogger::EVENT_REQUEST_METHOD_BASIC_CARD |
-                JourneyLogger::EVENT_COMPLETED |
-                JourneyLogger::EVENT_HAD_INITIAL_FORM_OF_PAYMENT |
-                JourneyLogger::EVENT_HAD_NECESSARY_COMPLETE_SUGGESTIONS,
-            step_metric->value);
+  auto entries = ukm_recorder.GetEntriesByName(UkmEntry::kEntryName);
+  EXPECT_EQ(1u, entries.size());
+  for (const auto* const entry : entries) {
+    ukm_recorder.ExpectEntrySourceHasUrl(entry, GURL(test_url));
+    EXPECT_EQ(2U, entry->metrics.size());
+    ukm_recorder.ExpectEntryMetric(entry, UkmEntry::kCompletionStatusName,
+                                   JourneyLogger::COMPLETION_STATUS_COMPLETED);
+    ukm_recorder.ExpectEntryMetric(entry, UkmEntry::kEventsName,
+                                   expected_step_metric);
+  }
 }
 
 }  // namespace payments
diff --git a/components/translate/core/browser/BUILD.gn b/components/translate/core/browser/BUILD.gn
index 67dcb77..e1b185f 100644
--- a/components/translate/core/browser/BUILD.gn
+++ b/components/translate/core/browser/BUILD.gn
@@ -120,6 +120,7 @@
     "//components/ukm:test_support",
     "//components/variations",
     "//net:test_support",
+    "//services/metrics/public/cpp:ukm_builders",
     "//testing/gtest",
     "//third_party/metrics_proto",
     "//ui/base",
diff --git a/components/translate/core/browser/translate_ranker_impl_unittest.cc b/components/translate/core/browser/translate_ranker_impl_unittest.cc
index 7227435..41b87a4f 100644
--- a/components/translate/core/browser/translate_ranker_impl_unittest.cc
+++ b/components/translate/core/browser/translate_ranker_impl_unittest.cc
@@ -21,6 +21,7 @@
 #include "components/ukm/ukm_source.h"
 #include "net/url_request/test_url_fetcher_factory.h"
 #include "net/url_request/url_request_test_util.h"
+#include "services/metrics/public/cpp/ukm_builders.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/metrics_proto/translate_event.pb.h"
 #include "third_party/metrics_proto/ukm/source.pb.h"
@@ -368,13 +369,21 @@
   ranker->FlushTranslateEvents(&flushed_events);
   EXPECT_EQ(0U, flushed_events.size());
 
-  ASSERT_EQ(2U, GetTestUkmRecorder()->sources_count());
-  EXPECT_EQ(
-      url0.spec(),
-      GetTestUkmRecorder()->GetSourceForUrl(url0.spec().c_str())->url().spec());
-  EXPECT_EQ(
-      url1.spec(),
-      GetTestUkmRecorder()->GetSourceForUrl(url1.spec().c_str())->url().spec());
+  const auto& entries = GetTestUkmRecorder()->GetEntriesByName(
+      ukm::builders::Translate::kEntryName);
+  EXPECT_EQ(2u, entries.size());
+  bool has_url0 = false;
+  bool has_url1 = false;
+  for (const auto* entry : entries) {
+    const ukm::UkmSource* source =
+        GetTestUkmRecorder()->GetSourceForSourceId(entry->source_id);
+    if (source && source->url() == url0)
+      has_url0 = true;
+    else if (source && source->url() == url1)
+      has_url1 = true;
+  }
+  EXPECT_TRUE(has_url0);
+  EXPECT_TRUE(has_url1);
 }
 
 TEST_F(TranslateRankerImplTest, EnableLogging) {
diff --git a/components/ukm/content/source_url_recorder_test.cc b/components/ukm/content/source_url_recorder_test.cc
index 6fd8386..dc5d392 100644
--- a/components/ukm/content/source_url_recorder_test.cc
+++ b/components/ukm/content/source_url_recorder_test.cc
@@ -29,11 +29,13 @@
 TEST_F(SourceUrlRecorderWebContentsObserverTest, Basic) {
   GURL url("https://www.example.com/");
   NavigationSimulator::NavigateAndCommitFromBrowser(web_contents(), url);
-  EXPECT_EQ(1ul, test_ukm_recorder_.sources_count());
-  const ukm::UkmSource* ukm_source = test_ukm_recorder_.GetSourceForUrl(url);
-  ASSERT_NE(nullptr, ukm_source);
-  EXPECT_EQ(url, ukm_source->url());
-  EXPECT_TRUE(ukm_source->initial_url().is_empty());
+
+  const auto& sources = test_ukm_recorder_.GetSources();
+  EXPECT_EQ(1ul, sources.size());
+  for (const auto& kv : sources) {
+    EXPECT_EQ(url, kv.second->url());
+    EXPECT_TRUE(kv.second->initial_url().is_empty());
+  }
 }
 
 TEST_F(SourceUrlRecorderWebContentsObserverTest, InitialUrl) {
@@ -44,12 +46,12 @@
   simulator->Start();
   simulator->Redirect(final_url);
   simulator->Commit();
-  EXPECT_EQ(1ul, test_ukm_recorder_.sources_count());
-  const ukm::UkmSource* ukm_source =
-      test_ukm_recorder_.GetSourceForUrl(final_url);
-  ASSERT_NE(nullptr, ukm_source);
-  EXPECT_EQ(final_url, ukm_source->url());
-  EXPECT_EQ(initial_url, ukm_source->initial_url());
+  const auto& sources = test_ukm_recorder_.GetSources();
+  EXPECT_EQ(1ul, sources.size());
+  for (const auto& kv : sources) {
+    EXPECT_EQ(final_url, kv.second->url());
+    EXPECT_EQ(initial_url, kv.second->initial_url());
+  }
 }
 
 TEST_F(SourceUrlRecorderWebContentsObserverTest, IgnoreUnsupportedScheme) {
@@ -66,9 +68,13 @@
   NavigationSimulator::NavigateAndCommitFromDocument(
       sub_frame_url,
       content::RenderFrameHostTester::For(main_rfh())->AppendChild("subframe"));
-  EXPECT_EQ(1ul, test_ukm_recorder_.sources_count());
-  EXPECT_NE(nullptr, test_ukm_recorder_.GetSourceForUrl(main_frame_url));
-  EXPECT_EQ(nullptr, test_ukm_recorder_.GetSourceForUrl(sub_frame_url));
+
+  const auto& sources = test_ukm_recorder_.GetSources();
+  EXPECT_EQ(1ul, sources.size());
+  for (const auto& kv : sources) {
+    EXPECT_EQ(main_frame_url, kv.second->url());
+    EXPECT_TRUE(kv.second->initial_url().is_empty());
+  }
 }
 
 TEST_F(SourceUrlRecorderWebContentsObserverTest, IgnoreSameDocumentNavigation) {
@@ -77,11 +83,13 @@
   NavigationSimulator::NavigateAndCommitFromBrowser(web_contents(), url);
   NavigationSimulator::CreateRendererInitiated(same_document_url, main_rfh())
       ->CommitSameDocument();
+
   EXPECT_EQ(same_document_url, web_contents()->GetLastCommittedURL());
-  EXPECT_EQ(1ul, test_ukm_recorder_.sources_count());
-  EXPECT_EQ(nullptr, test_ukm_recorder_.GetSourceForUrl(same_document_url));
-  const ukm::UkmSource* ukm_source = test_ukm_recorder_.GetSourceForUrl(url);
-  ASSERT_NE(nullptr, ukm_source);
-  EXPECT_EQ(url, ukm_source->url());
-  EXPECT_TRUE(ukm_source->initial_url().is_empty());
+
+  const auto& sources = test_ukm_recorder_.GetSources();
+  EXPECT_EQ(1ul, sources.size());
+  for (const auto& kv : sources) {
+    EXPECT_EQ(url, kv.second->url());
+    EXPECT_TRUE(kv.second->initial_url().is_empty());
+  }
 }
diff --git a/components/viz/service/frame_sinks/direct_layer_tree_frame_sink.cc b/components/viz/service/frame_sinks/direct_layer_tree_frame_sink.cc
index 241197b1..366a41d0 100644
--- a/components/viz/service/frame_sinks/direct_layer_tree_frame_sink.cc
+++ b/components/viz/service/frame_sinks/direct_layer_tree_frame_sink.cc
@@ -143,12 +143,12 @@
     base::TimeTicks time,
     base::TimeDelta refresh,
     uint32_t flags) {
-  NOTIMPLEMENTED();
+  client_->DidPresentCompositorFrame(presentation_token, time, refresh, flags);
 }
 
 void DirectLayerTreeFrameSink::DidDiscardCompositorFrame(
     uint32_t presentation_token) {
-  NOTIMPLEMENTED();
+  client_->DidDiscardCompositorFrame(presentation_token);
 }
 
 void DirectLayerTreeFrameSink::OnBeginFrame(const BeginFrameArgs& args) {
diff --git a/content/browser/accessibility/browser_accessibility.cc b/content/browser/accessibility/browser_accessibility.cc
index 1d8b40f..eb0ea60 100644
--- a/content/browser/accessibility/browser_accessibility.cc
+++ b/content/browser/accessibility/browser_accessibility.cc
@@ -49,10 +49,7 @@
   // implementation details, but we want to expose them as leaves to platform
   // accessibility APIs because screen readers might be confused if they find
   // any children.
-  // Note that if a combo box, search box or text field are not native, they
-  // might present a menu of choices using aria-owns which should not be hidden
-  // from tree.
-  if (IsNativeTextControl() || IsTextOnlyObject())
+  if (IsPlainTextField() || IsTextOnlyObject())
     return true;
 
   // Roles whose children are only presentational according to the ARIA and
@@ -140,6 +137,7 @@
 
 bool BrowserAccessibility::PlatformIsChildOfLeaf() const {
   BrowserAccessibility* ancestor = InternalGetParent();
+
   while (ancestor) {
     if (ancestor->PlatformIsLeaf())
       return true;
@@ -348,7 +346,7 @@
   // Standard text fields such as textarea have an embedded div inside them that
   // holds all the text.
   // TODO(nektar): This is fragile! Replace with code that flattens tree.
-  if (IsSimpleTextControl() && InternalChildCount() == 1)
+  if (IsPlainTextField() && InternalChildCount() == 1)
     return InternalGetChild(0)->GetPageBoundsForRange(start, len);
 
   if (GetRole() != ui::AX_ROLE_STATIC_TEXT) {
@@ -482,13 +480,11 @@
 
 base::string16 BrowserAccessibility::GetValue() const {
   base::string16 value = GetString16Attribute(ui::AX_ATTR_VALUE);
-  // Some screen readers like Jaws and older versions of VoiceOver require a
-  // value to be set in text fields with rich content, even though the same
-  // information is available on the children.
-  if (value.empty() &&
-      (IsSimpleTextControl() || IsRichTextControl()) &&
-      !IsNativeTextControl())
-    value = GetInnerText();
+  // Some screen readers like Jaws and VoiceOver require a value to be set in
+  // text fields with rich content, even though the same information is
+  // available on the children.
+  if (value.empty() && IsRichTextField())
+    return GetInnerText();
   return value;
 }
 
@@ -723,7 +719,7 @@
 }
 
 bool BrowserAccessibility::HasCaret() const {
-  if (IsSimpleTextControl() && HasIntAttribute(ui::AX_ATTR_TEXT_SEL_START) &&
+  if (IsPlainTextField() && HasIntAttribute(ui::AX_ATTR_TEXT_SEL_START) &&
       HasIntAttribute(ui::AX_ATTR_TEXT_SEL_END)) {
     return true;
   }
@@ -754,29 +750,20 @@
   return ui::IsRoleClickable(GetRole());
 }
 
-bool BrowserAccessibility::IsNativeTextControl() const {
-  const std::string& html_tag = GetStringAttribute(ui::AX_ATTR_HTML_TAG);
-  if (html_tag == "input") {
-    std::string input_type;
-    if (!GetHtmlAttribute("type", &input_type))
-      return true;
-    return input_type.empty() || input_type == "email" ||
-           input_type == "password" || input_type == "search" ||
-           input_type == "tel" || input_type == "text" || input_type == "url" ||
-           input_type == "number";
-  }
-  return html_tag == "textarea";
+bool BrowserAccessibility::IsPlainTextField() const {
+  // We need to check both the role and editable state, because some ARIA text
+  // fields may in fact not be editable, whilst some editable fields might not
+  // have the role.
+  return !HasState(ui::AX_STATE_RICHLY_EDITABLE) &&
+         (GetRole() == ui::AX_ROLE_TEXT_FIELD ||
+          GetRole() == ui::AX_ROLE_TEXT_FIELD_WITH_COMBO_BOX ||
+          GetRole() == ui::AX_ROLE_SEARCH_BOX ||
+          GetBoolAttribute(ui::AX_ATTR_EDITABLE_ROOT));
 }
 
-bool BrowserAccessibility::IsSimpleTextControl() const {
-  return ui::IsEditField(GetRole()) && !HasState(ui::AX_STATE_RICHLY_EDITABLE);
-}
-
-// Indicates if this object is at the root of a rich edit text control.
-bool BrowserAccessibility::IsRichTextControl() const {
-  return HasState(ui::AX_STATE_RICHLY_EDITABLE) &&
-         (!PlatformGetParent() ||
-          !PlatformGetParent()->HasState(ui::AX_STATE_RICHLY_EDITABLE));
+bool BrowserAccessibility::IsRichTextField() const {
+  return GetBoolAttribute(ui::AX_ATTR_EDITABLE_ROOT) &&
+         HasState(ui::AX_STATE_RICHLY_EDITABLE);
 }
 
 bool BrowserAccessibility::HasExplicitlyEmptyName() const {
diff --git a/content/browser/accessibility/browser_accessibility.h b/content/browser/accessibility/browser_accessibility.h
index 720c7593..ac32ed4 100644
--- a/content/browser/accessibility/browser_accessibility.h
+++ b/content/browser/accessibility/browser_accessibility.h
@@ -311,10 +311,8 @@
   bool IsWebAreaForPresentationalIframe() const;
 
   virtual bool IsClickable() const;
-  bool IsNativeTextControl() const;
-  bool IsSimpleTextControl() const;
-  // Indicates if this object is at the root of a rich edit text control.
-  bool IsRichTextControl() const;
+  bool IsPlainTextField() const;
+  bool IsRichTextField() const;
 
   // Return true if the accessible name was explicitly set to "" by the author
   bool HasExplicitlyEmptyName() const;
diff --git a/content/browser/accessibility/browser_accessibility_android.cc b/content/browser/accessibility/browser_accessibility_android.cc
index f9a4679c..38bbf3a 100644
--- a/content/browser/accessibility/browser_accessibility_android.cc
+++ b/content/browser/accessibility/browser_accessibility_android.cc
@@ -217,7 +217,7 @@
 }
 
 bool BrowserAccessibilityAndroid::IsEditableText() const {
-  return ui::IsEditField(GetRole());
+  return IsPlainTextField() || IsRichTextField();
 }
 
 bool BrowserAccessibilityAndroid::IsEnabled() const {
diff --git a/content/browser/accessibility/browser_accessibility_cocoa.mm b/content/browser/accessibility/browser_accessibility_cocoa.mm
index 817f6b6..a49c9b7 100644
--- a/content/browser/accessibility/browser_accessibility_cocoa.mm
+++ b/content/browser/accessibility/browser_accessibility_cocoa.mm
@@ -301,7 +301,7 @@
     std::swap(start_offset, end_offset);
 
   int trim_length = 0;
-  if ((end_object->IsSimpleTextControl() || end_object->IsTextOnlyObject()) &&
+  if ((end_object->IsPlainTextField() || end_object->IsTextOnlyObject()) &&
       end_offset < static_cast<int>(end_object->GetText().length())) {
     trim_length = static_cast<int>(end_object->GetText().length()) - end_offset;
   }
@@ -1520,9 +1520,9 @@
     return NSAccessibilityGroupRole;
   }
 
-  if ((browserAccessibility_->IsSimpleTextControl() &&
+  if ((browserAccessibility_->IsPlainTextField() &&
        browserAccessibility_->HasState(ui::AX_STATE_MULTILINE)) ||
-      browserAccessibility_->IsRichTextControl()) {
+      browserAccessibility_->IsRichTextField()) {
     return NSAccessibilityTextAreaRole;
   }
 
@@ -1955,19 +1955,19 @@
 - (NSString*) subrole {
   if (![self instanceActive])
     return nil;
-  ui::AXRole browserAccessibilityRole = [self internalRole];
-  if (ui::IsEditField(browserAccessibilityRole) &&
+
+  if (browserAccessibility_->IsPlainTextField() &&
       GetState(browserAccessibility_, ui::AX_STATE_PROTECTED)) {
     return NSAccessibilitySecureTextFieldSubrole;
   }
 
-  if (browserAccessibilityRole == ui::AX_ROLE_DESCRIPTION_LIST)
+  if ([self internalRole] == ui::AX_ROLE_DESCRIPTION_LIST)
     return NSAccessibilityDefinitionListSubrole;
 
-  if (browserAccessibilityRole == ui::AX_ROLE_LIST)
+  if ([self internalRole] == ui::AX_ROLE_LIST)
     return NSAccessibilityContentListSubrole;
 
-  return [AXPlatformNodeCocoa nativeSubroleFromAXRole:browserAccessibilityRole];
+  return [AXPlatformNodeCocoa nativeSubroleFromAXRole:[self internalRole]];
 }
 
 // Returns all tabs in this subtree.
diff --git a/content/browser/accessibility/browser_accessibility_com_win.cc b/content/browser/accessibility/browser_accessibility_com_win.cc
index a6455fd..7e7c12977 100644
--- a/content/browser/accessibility/browser_accessibility_com_win.cc
+++ b/content/browser/accessibility/browser_accessibility_com_win.cc
@@ -1713,7 +1713,7 @@
     return;
 
   std::map<int, std::vector<base::string16>> attributes_map;
-  if (owner()->PlatformIsLeaf() || owner()->IsSimpleTextControl()) {
+  if (owner()->PlatformIsLeaf() || owner()->IsPlainTextField()) {
     attributes_map[0] = ComputeTextAttributes();
     const std::map<int, std::vector<base::string16>> spelling_attributes =
         GetSpellingAttributes();
@@ -2134,7 +2134,7 @@
       spelling_attributes[end_offset] = end_attributes;
     }
   }
-  if (owner()->IsSimpleTextControl()) {
+  if (owner()->IsPlainTextField()) {
     int start_offset = 0;
     for (BrowserAccessibility* static_text =
              BrowserAccessibilityManager::NextTextOnlyObject(
diff --git a/content/browser/accessibility/browser_accessibility_manager.cc b/content/browser/accessibility/browser_accessibility_manager.cc
index 250d94e..fe1875f 100644
--- a/content/browser/accessibility/browser_accessibility_manager.cc
+++ b/content/browser/accessibility/browser_accessibility_manager.cc
@@ -865,7 +865,7 @@
 
   const BrowserAccessibility* start_text_object = nullptr;
   const BrowserAccessibility* end_text_object = nullptr;
-  if (&start_object == &end_object && start_object.IsSimpleTextControl()) {
+  if (&start_object == &end_object && start_object.IsPlainTextField()) {
     // We need to get to the shadow DOM that is inside the text control in order
     // to find the text-only objects.
     if (!start_object.InternalChildCount())
@@ -922,7 +922,7 @@
   DCHECK_GE(start_offset, 0);
   DCHECK_GE(end_offset, 0);
 
-  if (&start_object == &end_object && start_object.IsSimpleTextControl()) {
+  if (&start_object == &end_object && start_object.IsPlainTextField()) {
     if (start_offset > end_offset)
       std::swap(start_offset, end_offset);
 
@@ -992,7 +992,7 @@
   DCHECK_GE(start_offset, 0);
   DCHECK_GE(end_offset, 0);
 
-  if (&start_object == &end_object && start_object.IsSimpleTextControl()) {
+  if (&start_object == &end_object && start_object.IsPlainTextField()) {
     if (start_offset > end_offset)
       std::swap(start_offset, end_offset);
 
diff --git a/content/browser/accessibility/browser_accessibility_manager_android.cc b/content/browser/accessibility/browser_accessibility_manager_android.cc
index 9819c82..aff0ed4 100644
--- a/content/browser/accessibility/browser_accessibility_manager_android.cc
+++ b/content/browser/accessibility/browser_accessibility_manager_android.cc
@@ -66,7 +66,7 @@
 
 BrowserAccessibility* BrowserAccessibilityManagerAndroid::GetFocus() {
   BrowserAccessibility* focus = BrowserAccessibilityManager::GetFocus();
-  if (!ui::IsEditField(focus->GetRole()))
+  if (!focus->IsPlainTextField())
     return GetActiveDescendant(focus);
   return focus;
 }
diff --git a/content/browser/accessibility/browser_accessibility_win_unittest.cc b/content/browser/accessibility/browser_accessibility_win_unittest.cc
index 375fd4b..ab7238f 100644
--- a/content/browser/accessibility/browser_accessibility_win_unittest.cc
+++ b/content/browser/accessibility/browser_accessibility_win_unittest.cc
@@ -500,6 +500,7 @@
   ui::AXNodeData combo_box;
   combo_box.id = 12;
   combo_box.role = ui::AX_ROLE_TEXT_FIELD_WITH_COMBO_BOX;
+  combo_box.AddState(ui::AX_STATE_EDITABLE);
   combo_box.SetName(base::UTF16ToUTF8(combo_box_name));
   combo_box.SetValue(base::UTF16ToUTF8(combo_box_value));
 
@@ -813,9 +814,12 @@
   combo_box_text.SetName("Combo box text");
   combo_box.role = ui::AX_ROLE_TEXT_FIELD_WITH_COMBO_BOX;
   combo_box_text.role = ui::AX_ROLE_STATIC_TEXT;
+  combo_box.AddBoolAttribute(ui::AX_ATTR_EDITABLE_ROOT, true);
   combo_box.AddState(ui::AX_STATE_EDITABLE);
+  combo_box.AddState(ui::AX_STATE_RICHLY_EDITABLE);
   combo_box.AddState(ui::AX_STATE_FOCUSABLE);
   combo_box_text.AddState(ui::AX_STATE_EDITABLE);
+  combo_box_text.AddState(ui::AX_STATE_RICHLY_EDITABLE);
   combo_box.child_ids.push_back(combo_box_text.id);
 
   ui::AXNodeData search_box, search_box_text, new_line;
@@ -828,16 +832,21 @@
   search_box.role = ui::AX_ROLE_SEARCH_BOX;
   search_box_text.role = ui::AX_ROLE_STATIC_TEXT;
   new_line.role = ui::AX_ROLE_LINE_BREAK;
+  search_box.AddBoolAttribute(ui::AX_ATTR_EDITABLE_ROOT, true);
   search_box.AddState(ui::AX_STATE_EDITABLE);
+  search_box.AddState(ui::AX_STATE_RICHLY_EDITABLE);
   search_box.AddState(ui::AX_STATE_FOCUSABLE);
   search_box_text.AddState(ui::AX_STATE_EDITABLE);
+  search_box_text.AddState(ui::AX_STATE_RICHLY_EDITABLE);
   new_line.AddState(ui::AX_STATE_EDITABLE);
+  new_line.AddState(ui::AX_STATE_RICHLY_EDITABLE);
   search_box.child_ids.push_back(search_box_text.id);
   search_box.child_ids.push_back(new_line.id);
 
   ui::AXNodeData text_field;
   text_field.id = 7;
   text_field.role = ui::AX_ROLE_TEXT_FIELD;
+  text_field.AddBoolAttribute(ui::AX_ATTR_EDITABLE_ROOT, true);
   text_field.AddState(ui::AX_STATE_EDITABLE);
   text_field.AddState(ui::AX_STATE_FOCUSABLE);
   text_field.SetValue("Text field text");
@@ -1933,7 +1942,6 @@
   BrowserAccessibilityWin* ax_combo_box =
       ToBrowserAccessibilityWin(ax_root->PlatformGetChild(0));
   ASSERT_NE(nullptr, ax_combo_box);
-  ASSERT_EQ(1U, ax_combo_box->PlatformChildCount());
 
   HRESULT hr;
   LONG start_offset, end_offset;
@@ -2037,7 +2045,6 @@
   BrowserAccessibilityWin* ax_combo_box =
       ToBrowserAccessibilityWin(ax_root->PlatformGetChild(0));
   ASSERT_NE(nullptr, ax_combo_box);
-  ASSERT_EQ(1U, ax_combo_box->PlatformChildCount());
 
   HRESULT hr;
   LONG start_offset, end_offset;
diff --git a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
index 737c5c4..51e955b 100644
--- a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
+++ b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
@@ -765,7 +765,7 @@
 }
 
 IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest,
-    AccessibilityAriaSearchboxWithSelection) {
+                       DISABLED_AccessibilityAriaSearchboxWithSelection) {
   RunAriaTest(FILE_PATH_LITERAL("aria-searchbox-with-selection.html"));
 }
 
@@ -838,7 +838,7 @@
 }
 
 IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest,
-                       AccessibilityAriaTextboxWithSelection) {
+                       DISABLED_AccessibilityAriaTextboxWithSelection) {
   RunAriaTest(FILE_PATH_LITERAL("aria-textbox-with-selection.html"));
 }
 
diff --git a/content/browser/accessibility/one_shot_accessibility_tree_search.cc b/content/browser/accessibility/one_shot_accessibility_tree_search.cc
index ed106ac..97ebec83 100644
--- a/content/browser/accessibility/one_shot_accessibility_tree_search.cc
+++ b/content/browser/accessibility/one_shot_accessibility_tree_search.cc
@@ -421,7 +421,7 @@
 
 bool AccessibilityTextfieldPredicate(
     BrowserAccessibility* start, BrowserAccessibility* node) {
-  return (node->IsSimpleTextControl() || node->IsRichTextControl());
+  return (node->IsPlainTextField() || node->IsRichTextField());
 }
 
 bool AccessibilityTextStyleBoldPredicate(
@@ -444,7 +444,7 @@
 
 bool AccessibilityTreePredicate(
     BrowserAccessibility* start, BrowserAccessibility* node) {
-  return (node->IsSimpleTextControl() || node->IsRichTextControl());
+  return (node->IsPlainTextField() || node->IsRichTextField());
 }
 
 bool AccessibilityUnvisitedLinkPredicate(
diff --git a/content/browser/plugin_service_impl_unittest.cc b/content/browser/plugin_service_impl_unittest.cc
index ee4549f..56564822 100644
--- a/content/browser/plugin_service_impl_unittest.cc
+++ b/content/browser/plugin_service_impl_unittest.cc
@@ -6,6 +6,7 @@
 
 #include "build/build_config.h"
 #include "components/ukm/test_ukm_recorder.h"
+#include "components/ukm/ukm_source.h"
 #include "content/browser/ppapi_plugin_process_host.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/render_frame_host.h"
@@ -49,10 +50,14 @@
 
   bool RecordedBrokerEvent(const GURL& url) {
     RunAllPendingInMessageLoop(BrowserThread::UI);
-    const ukm::UkmSource* source = test_ukm_recorder_->GetSourceForUrl(url);
-    if (!source)
-      return false;
-    return test_ukm_recorder_->HasEntry(*source, kPepperBrokerEvent);
+    auto entries = test_ukm_recorder_->GetEntriesByName(kPepperBrokerEvent);
+    for (const auto* const entry : entries) {
+      const ukm::UkmSource* source =
+          test_ukm_recorder_->GetSourceForSourceId(entry->source_id);
+      if (source && source->url() == url)
+        return true;
+    }
+    return false;
   }
 
   void ResetUKM() {
@@ -100,4 +105,4 @@
   EXPECT_FALSE(RecordedBrokerEvent(GURL(kURL2)));
 }
 
-}  // namespace content
\ No newline at end of file
+}  // namespace content
diff --git a/content/browser/renderer_host/delegated_frame_host.cc b/content/browser/renderer_host/delegated_frame_host.cc
index 8ad3743e..e29dac1 100644
--- a/content/browser/renderer_host/delegated_frame_host.cc
+++ b/content/browser/renderer_host/delegated_frame_host.cc
@@ -536,12 +536,14 @@
                                                    base::TimeTicks time,
                                                    base::TimeDelta refresh,
                                                    uint32_t flags) {
-  NOTIMPLEMENTED();
+  renderer_compositor_frame_sink_->DidPresentCompositorFrame(
+      presentation_token, time, refresh, flags);
 }
 
 void DelegatedFrameHost::DidDiscardCompositorFrame(
     uint32_t presentation_token) {
-  NOTIMPLEMENTED();
+  renderer_compositor_frame_sink_->DidDiscardCompositorFrame(
+      presentation_token);
 }
 
 void DelegatedFrameHost::ReclaimResources(
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 81fa388..5bf751e4 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
@@ -143,43 +143,18 @@
     }
   }
 
-  ::testing::AssertionResult AssertUkmReported(const char* event_name,
-                                               const char* metric_name) {
+  void ExpectUkmReported(const char* event_name,
+                         const char* metric_name,
+                         size_t expected_count) {
     const ukm::TestUkmRecorder* ukm_recoder =
         test_browser_client_.GetTestUkmRecorder();
 
-    size_t actual_event_count = 0;
-    for (size_t i = 0; i < ukm_recoder->entries_count(); ++i) {
-      const ukm::mojom::UkmEntry* entry = ukm_recoder->GetEntry(i);
-      if (entry->event_hash != base::HashMetricName(event_name))
-        continue;
-
-      const ukm::UkmSource* source =
-          ukm_recoder->GetSourceForSourceId(entry->source_id);
-      if (!source)
-        return ::testing::AssertionFailure() << "Source should not be null";
-
-      if (actual_event_count >= 1)
-        break;
-
-      if (GURL(kUrl) != source->url())
-        return ::testing::AssertionFailure() << "Incorrect URL is reported.";
-
-      actual_event_count++;
-      if (entry->metrics.size() != 1)
-        return ::testing::AssertionFailure()
-               << event_name << " entry expected only 1 metric but got "
-               << entry->metrics.size();
-
-      if (entry->metrics[0]->metric_hash != base::HashMetricName(metric_name))
-        return ::testing::AssertionFailure()
-               << "Expected a metric named " << metric_name;
+    auto entries = ukm_recoder->GetEntriesByName(event_name);
+    EXPECT_EQ(expected_count, entries.size());
+    for (const auto* const entry : entries) {
+      ukm_recoder->ExpectEntrySourceHasUrl(entry, GURL(kUrl));
+      EXPECT_TRUE(ukm_recoder->EntryHasMetric(entry, metric_name));
     }
-    if (actual_event_count != 1)
-      return ::testing::AssertionFailure()
-             << event_name << " expected " << 1 << " entry but got "
-             << actual_event_count;
-    return ::testing::AssertionSuccess();
   }
 
   ::testing::AssertionResult HistogramSizeEq(const char* histogram_name,
@@ -314,8 +289,8 @@
 
       // UKM metrics.
       total_ukm_entry_count++;
-      EXPECT_TRUE(AssertUkmReported("Event.ScrollBegin.Wheel",
-                                    "TimeToScrollUpdateSwapBegin"));
+      ExpectUkmReported("Event.ScrollBegin.Wheel",
+                        "TimeToScrollUpdateSwapBegin", total_ukm_entry_count);
       // Rappor metrics.
       EXPECT_TRUE(
           RapporSampleAssert("Event.Latency.ScrollUpdate.Touch."
@@ -397,11 +372,6 @@
           0));
       EXPECT_TRUE(
           HistogramSizeEq("Event.Latency.ScrollUpdate.Wheel.GpuSwap2", 0));
-
-      ukm::TestUkmRecorder* test_ukm_recorder =
-          test_browser_client_.GetTestUkmRecorder();
-      EXPECT_EQ(1U, test_ukm_recorder->sources_count());
-      EXPECT_EQ(total_ukm_entry_count, test_ukm_recorder->entries_count());
     }
   }
 }
@@ -435,8 +405,8 @@
 
       // UKM metrics.
       total_ukm_entry_count++;
-      EXPECT_TRUE(AssertUkmReported("Event.ScrollUpdate.Wheel",
-                                    "TimeToScrollUpdateSwapBegin"));
+      ExpectUkmReported("Event.ScrollUpdate.Wheel",
+                        "TimeToScrollUpdateSwapBegin", total_ukm_entry_count);
       // Rappor metrics.
       EXPECT_TRUE(
           RapporSampleAssert("Event.Latency.ScrollUpdate.Touch."
@@ -574,8 +544,8 @@
 
     // UKM metrics.
     total_ukm_entry_count++;
-    EXPECT_TRUE(AssertUkmReported("Event.ScrollBegin.Touch",
-                                  "TimeToScrollUpdateSwapBegin"));
+    ExpectUkmReported("Event.ScrollBegin.Touch", "TimeToScrollUpdateSwapBegin",
+                      total_ukm_entry_count);
     // Rappor metrics.
     EXPECT_TRUE(
         RapporSampleAssert("Event.Latency.ScrollUpdate.Touch."
@@ -641,11 +611,6 @@
         "Event.Latency.ScrollUpdate.Touch.BrowserNotifiedToBeforeGpuSwap2", 0));
     EXPECT_TRUE(
         HistogramSizeEq("Event.Latency.ScrollUpdate.Touch.GpuSwap2", 0));
-
-    ukm::TestUkmRecorder* test_ukm_recorder =
-        test_browser_client_.GetTestUkmRecorder();
-    EXPECT_EQ(1U, test_ukm_recorder->sources_count());
-    EXPECT_EQ(total_ukm_entry_count, test_ukm_recorder->entries_count());
   }
 }
 
@@ -702,8 +667,8 @@
 
     // UKM metrics.
     total_ukm_entry_count++;
-    EXPECT_TRUE(AssertUkmReported("Event.ScrollUpdate.Touch",
-                                  "TimeToScrollUpdateSwapBegin"));
+    ExpectUkmReported("Event.ScrollUpdate.Touch", "TimeToScrollUpdateSwapBegin",
+                      total_ukm_entry_count);
 
     // Rappor metrics.
     EXPECT_TRUE(
@@ -767,11 +732,6 @@
         "Event.Latency.ScrollUpdate.Touch.BrowserNotifiedToBeforeGpuSwap2", 1));
     EXPECT_TRUE(
         HistogramSizeEq("Event.Latency.ScrollUpdate.Touch.GpuSwap2", 1));
-
-    ukm::TestUkmRecorder* test_ukm_recorder =
-        test_browser_client_.GetTestUkmRecorder();
-    EXPECT_EQ(1U, test_ukm_recorder->sources_count());
-    EXPECT_EQ(total_ukm_entry_count, test_ukm_recorder->entries_count());
   }
 }
 
diff --git a/content/browser/service_worker/service_worker_browsertest.cc b/content/browser/service_worker/service_worker_browsertest.cc
index b7c15c1..7a4f1be8 100644
--- a/content/browser/service_worker/service_worker_browsertest.cc
+++ b/content/browser/service_worker/service_worker_browsertest.cc
@@ -101,7 +101,7 @@
 
 struct FetchResult {
   ServiceWorkerStatusCode status;
-  ServiceWorkerFetchEventResult result;
+  ServiceWorkerFetchDispatcher::FetchEventResult result;
   ServiceWorkerResponse response;
   std::unique_ptr<storage::BlobDataHandle> blob_data_handle;
 };
@@ -626,7 +626,7 @@
   }
 
   void FetchOnRegisteredWorker(
-      ServiceWorkerFetchEventResult* result,
+      ServiceWorkerFetchDispatcher::FetchEventResult* result,
       ServiceWorkerResponse* response,
       std::unique_ptr<storage::BlobDataHandle>* blob_data_handle) {
     blob_context_ = ChromeBlobStorageContext::GetFor(
@@ -904,7 +904,7 @@
       ChromeBlobStorageContext* blob_context,
       FetchResult* out_result,
       ServiceWorkerStatusCode actual_status,
-      ServiceWorkerFetchEventResult actual_result,
+      ServiceWorkerFetchDispatcher::FetchEventResult actual_result,
       const ServiceWorkerResponse& actual_response,
       blink::mojom::ServiceWorkerStreamHandlePtr /* stream */,
       blink::mojom::BlobPtr /* blob */,
@@ -1242,14 +1242,15 @@
 
 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, FetchEvent_Response) {
   StartServerAndNavigateToSetup();
-  ServiceWorkerFetchEventResult result;
+  ServiceWorkerFetchDispatcher::FetchEventResult result;
   ServiceWorkerResponse response;
   std::unique_ptr<storage::BlobDataHandle> blob_data_handle;
   InstallTestHelper("/service_worker/fetch_event.js", SERVICE_WORKER_OK);
   ActivateTestHelper("/service_worker/fetch_event.js", SERVICE_WORKER_OK);
 
   FetchOnRegisteredWorker(&result, &response, &blob_data_handle);
-  ASSERT_EQ(SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, result);
+  ASSERT_EQ(ServiceWorkerFetchDispatcher::FetchEventResult::kGotResponse,
+            result);
   EXPECT_EQ(301, response.status_code);
   EXPECT_EQ("Moved Permanently", response.status_text);
   ServiceWorkerHeaderMap expected_headers;
@@ -1267,7 +1268,7 @@
 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
                        FetchEvent_ResponseViaCache) {
   StartServerAndNavigateToSetup();
-  ServiceWorkerFetchEventResult result;
+  ServiceWorkerFetchDispatcher::FetchEventResult result;
   ServiceWorkerResponse response1;
   ServiceWorkerResponse response2;
   std::unique_ptr<storage::BlobDataHandle> blob_data_handle;
@@ -1278,7 +1279,8 @@
                      SERVICE_WORKER_OK);
 
   FetchOnRegisteredWorker(&result, &response1, &blob_data_handle);
-  ASSERT_EQ(SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, result);
+  ASSERT_EQ(ServiceWorkerFetchDispatcher::FetchEventResult::kGotResponse,
+            result);
   EXPECT_EQ(200, response1.status_code);
   EXPECT_EQ("OK", response1.status_text);
   EXPECT_TRUE(response1.response_time >= start_time);
@@ -1286,7 +1288,8 @@
   EXPECT_EQ(std::string(), response2.cache_storage_cache_name);
 
   FetchOnRegisteredWorker(&result, &response2, &blob_data_handle);
-  ASSERT_EQ(SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, result);
+  ASSERT_EQ(ServiceWorkerFetchDispatcher::FetchEventResult::kGotResponse,
+            result);
   EXPECT_EQ(200, response2.status_code);
   EXPECT_EQ("OK", response2.status_text);
   EXPECT_EQ(response1.response_time, response2.response_time);
@@ -1297,7 +1300,7 @@
 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
                        FetchEvent_respondWithRejection) {
   StartServerAndNavigateToSetup();
-  ServiceWorkerFetchEventResult result;
+  ServiceWorkerFetchDispatcher::FetchEventResult result;
   ServiceWorkerResponse response;
   std::unique_ptr<storage::BlobDataHandle> blob_data_handle;
   InstallTestHelper("/service_worker/fetch_event_rejected.js",
@@ -1323,7 +1326,8 @@
                            base::Unretained(version_->embedded_worker()),
                            &console_listener));
 
-  ASSERT_EQ(SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, result);
+  ASSERT_EQ(ServiceWorkerFetchDispatcher::FetchEventResult::kGotResponse,
+            result);
   EXPECT_EQ(0, response.status_code);
 
   ASSERT_FALSE(blob_data_handle);
diff --git a/content/browser/service_worker/service_worker_fetch_dispatcher.cc b/content/browser/service_worker/service_worker_fetch_dispatcher.cc
index 2d0a618..1f8f966 100644
--- a/content/browser/service_worker/service_worker_fetch_dispatcher.cc
+++ b/content/browser/service_worker/service_worker_fetch_dispatcher.cc
@@ -273,12 +273,13 @@
 
 std::unique_ptr<base::Value> NetLogFetchEventCallback(
     ServiceWorkerStatusCode status,
-    ServiceWorkerFetchEventResult result,
+    ServiceWorkerFetchDispatcher::FetchEventResult result,
     net::NetLogCaptureMode) {
   std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue);
   dict->SetString("status", ServiceWorkerStatusToString(status));
-  dict->SetBoolean("has_response",
-                   result == SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE);
+  dict->SetBoolean(
+      "has_response",
+      result == ServiceWorkerFetchDispatcher::FetchEventResult::kGotResponse);
   return std::move(dict);
 }
 
@@ -360,24 +361,21 @@
                   base::Time dispatch_event_time) override {
     HandleResponse(fetch_dispatcher_, version_, fetch_event_id_, response,
                    nullptr /* body_as_stream */, nullptr /* body_as_blob */,
-                   SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE,
-                   dispatch_event_time);
+                   FetchEventResult::kGotResponse, dispatch_event_time);
   }
   void OnResponseBlob(const ServiceWorkerResponse& response,
                       blink::mojom::BlobPtr body_as_blob,
                       base::Time dispatch_event_time) override {
     HandleResponse(fetch_dispatcher_, version_, fetch_event_id_, response,
                    nullptr /* body_as_stream */, std::move(body_as_blob),
-                   SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE,
-                   dispatch_event_time);
+                   FetchEventResult::kGotResponse, dispatch_event_time);
   }
   void OnResponseLegacyBlob(const ServiceWorkerResponse& response,
                             base::Time dispatch_event_time,
                             OnResponseLegacyBlobCallback callback) override {
     HandleResponse(fetch_dispatcher_, version_, fetch_event_id_, response,
                    nullptr /* body_as_stream */, nullptr /* body_as_blob */,
-                   SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE,
-                   dispatch_event_time);
+                   FetchEventResult::kGotResponse, dispatch_event_time);
     std::move(callback).Run();
   }
   void OnResponseStream(
@@ -386,14 +384,13 @@
       base::Time dispatch_event_time) override {
     HandleResponse(fetch_dispatcher_, version_, fetch_event_id_, response,
                    std::move(body_as_stream), nullptr /* body_as_blob */,
-                   SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE,
-                   dispatch_event_time);
+                   FetchEventResult::kGotResponse, dispatch_event_time);
   }
   void OnFallback(base::Time dispatch_event_time) override {
-    HandleResponse(
-        fetch_dispatcher_, version_, fetch_event_id_, ServiceWorkerResponse(),
-        nullptr /* body_as_stream */, nullptr /* body_as_blob */,
-        SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK, dispatch_event_time);
+    HandleResponse(fetch_dispatcher_, version_, fetch_event_id_,
+                   ServiceWorkerResponse(), nullptr /* body_as_stream */,
+                   nullptr /* body_as_blob */,
+                   FetchEventResult::kShouldFallback, dispatch_event_time);
   }
 
  private:
@@ -406,12 +403,11 @@
       const ServiceWorkerResponse& response,
       blink::mojom::ServiceWorkerStreamHandlePtr body_as_stream,
       blink::mojom::BlobPtr body_as_blob,
-      ServiceWorkerFetchEventResult fetch_result,
+      FetchEventResult fetch_result,
       base::Time dispatch_event_time) {
-    if (!version->FinishRequest(
-            fetch_event_id.value(),
-            fetch_result == SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE,
-            dispatch_event_time))
+    if (!version->FinishRequest(fetch_event_id.value(),
+                                fetch_result == FetchEventResult::kGotResponse,
+                                dispatch_event_time))
       NOTREACHED() << "Should only receive one reply per event";
     // |fetch_dispatcher| is null if the URLRequest was killed.
     if (!fetch_dispatcher)
@@ -656,14 +652,13 @@
 
 void ServiceWorkerFetchDispatcher::DidFail(ServiceWorkerStatusCode status) {
   DCHECK_NE(SERVICE_WORKER_OK, status);
-  Complete(status, SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK,
-           ServiceWorkerResponse(), nullptr /* body_as_stream */,
-           nullptr /* body_as_blob */);
+  Complete(status, FetchEventResult::kShouldFallback, ServiceWorkerResponse(),
+           nullptr /* body_as_stream */, nullptr /* body_as_blob */);
 }
 
 void ServiceWorkerFetchDispatcher::DidFinish(
     int request_id,
-    ServiceWorkerFetchEventResult fetch_result,
+    FetchEventResult fetch_result,
     const ServiceWorkerResponse& response,
     blink::mojom::ServiceWorkerStreamHandlePtr body_as_stream,
     blink::mojom::BlobPtr body_as_blob) {
@@ -674,7 +669,7 @@
 
 void ServiceWorkerFetchDispatcher::Complete(
     ServiceWorkerStatusCode status,
-    ServiceWorkerFetchEventResult fetch_result,
+    FetchEventResult fetch_result,
     const ServiceWorkerResponse& response,
     blink::mojom::ServiceWorkerStreamHandlePtr body_as_stream,
     blink::mojom::BlobPtr body_as_blob) {
diff --git a/content/browser/service_worker/service_worker_fetch_dispatcher.h b/content/browser/service_worker/service_worker_fetch_dispatcher.h
index 79a1a16..0cd984b 100644
--- a/content/browser/service_worker/service_worker_fetch_dispatcher.h
+++ b/content/browser/service_worker/service_worker_fetch_dispatcher.h
@@ -38,9 +38,17 @@
 // A helper class to dispatch fetch event to a service worker.
 class CONTENT_EXPORT ServiceWorkerFetchDispatcher {
  public:
+  // Indicates how the service worker handled a fetch event.
+  enum class FetchEventResult {
+    // Browser should fallback to native fetch.
+    kShouldFallback,
+    // Service worker provided a ServiceWorkerResponse.
+    kGotResponse
+  };
+
   using FetchCallback =
       base::OnceCallback<void(ServiceWorkerStatusCode,
-                              ServiceWorkerFetchEventResult,
+                              FetchEventResult,
                               const ServiceWorkerResponse&,
                               blink::mojom::ServiceWorkerStreamHandlePtr,
                               blink::mojom::BlobPtr,
@@ -95,12 +103,12 @@
                          ServiceWorkerStatusCode status);
   void DidFail(ServiceWorkerStatusCode status);
   void DidFinish(int request_id,
-                 ServiceWorkerFetchEventResult fetch_result,
+                 FetchEventResult fetch_result,
                  const ServiceWorkerResponse& response,
                  blink::mojom::ServiceWorkerStreamHandlePtr body_as_stream,
                  blink::mojom::BlobPtr body_as_blob);
   void Complete(ServiceWorkerStatusCode status,
-                ServiceWorkerFetchEventResult fetch_result,
+                FetchEventResult fetch_result,
                 const ServiceWorkerResponse& response,
                 blink::mojom::ServiceWorkerStreamHandlePtr body_as_stream,
                 blink::mojom::BlobPtr body_as_blob);
diff --git a/content/browser/service_worker/service_worker_url_loader_job.cc b/content/browser/service_worker/service_worker_url_loader_job.cc
index f485c5f..5c35919 100644
--- a/content/browser/service_worker/service_worker_url_loader_job.cc
+++ b/content/browser/service_worker/service_worker_url_loader_job.cc
@@ -8,7 +8,6 @@
 
 #include "base/optional.h"
 #include "content/browser/blob_storage/blob_url_loader_factory.h"
-#include "content/browser/service_worker/service_worker_fetch_dispatcher.h"
 #include "content/browser/service_worker/service_worker_version.h"
 #include "content/browser/url_loader_factory_getter.h"
 #include "content/common/service_worker/service_worker_loader_helpers.h"
@@ -214,7 +213,7 @@
 
 void ServiceWorkerURLLoaderJob::DidDispatchFetchEvent(
     ServiceWorkerStatusCode status,
-    ServiceWorkerFetchEventResult fetch_result,
+    ServiceWorkerFetchDispatcher::FetchEventResult fetch_result,
     const ServiceWorkerResponse& response,
     blink::mojom::ServiceWorkerStreamHandlePtr body_as_stream,
     blink::mojom::BlobPtr body_as_blob,
@@ -232,13 +231,15 @@
     return;
   }
 
-  if (fetch_result == SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK) {
+  if (fetch_result ==
+      ServiceWorkerFetchDispatcher::FetchEventResult::kShouldFallback) {
     // TODO(kinuko): Check if this needs to fallback to the renderer.
     FallbackToNetwork();
     return;
   }
 
-  DCHECK_EQ(fetch_result, SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE);
+  DCHECK_EQ(fetch_result,
+            ServiceWorkerFetchDispatcher::FetchEventResult::kGotResponse);
 
   // A response with status code 0 is Blink telling us to respond with
   // network error.
diff --git a/content/browser/service_worker/service_worker_url_loader_job.h b/content/browser/service_worker/service_worker_url_loader_job.h
index 2502e16..84553df 100644
--- a/content/browser/service_worker/service_worker_url_loader_job.h
+++ b/content/browser/service_worker/service_worker_url_loader_job.h
@@ -11,6 +11,7 @@
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "content/browser/loader/url_loader_request_handler.h"
+#include "content/browser/service_worker/service_worker_fetch_dispatcher.h"
 #include "content/browser/service_worker/service_worker_metrics.h"
 #include "content/browser/service_worker/service_worker_response_type.h"
 #include "content/browser/service_worker/service_worker_url_job_wrapper.h"
@@ -32,7 +33,6 @@
 
 namespace content {
 
-class ServiceWorkerFetchDispatcher;
 struct ServiceWorkerResponse;
 class ServiceWorkerVersion;
 
@@ -101,7 +101,7 @@
   void DidPrepareFetchEvent(scoped_refptr<ServiceWorkerVersion> version);
   void DidDispatchFetchEvent(
       ServiceWorkerStatusCode status,
-      ServiceWorkerFetchEventResult fetch_result,
+      ServiceWorkerFetchDispatcher::FetchEventResult fetch_result,
       const ServiceWorkerResponse& response,
       blink::mojom::ServiceWorkerStreamHandlePtr body_as_stream,
       blink::mojom::BlobPtr body_as_blob,
diff --git a/content/browser/service_worker/service_worker_url_request_job.cc b/content/browser/service_worker/service_worker_url_request_job.cc
index 79a7984c..90bb2dacd 100644
--- a/content/browser/service_worker/service_worker_url_request_job.cc
+++ b/content/browser/service_worker/service_worker_url_request_job.cc
@@ -27,7 +27,6 @@
 #include "content/browser/service_worker/embedded_worker_instance.h"
 #include "content/browser/service_worker/service_worker_blob_reader.h"
 #include "content/browser/service_worker/service_worker_data_pipe_reader.h"
-#include "content/browser/service_worker/service_worker_fetch_dispatcher.h"
 #include "content/browser/service_worker/service_worker_provider_host.h"
 #include "content/browser/service_worker/service_worker_response_info.h"
 #include "content/common/service_worker/service_worker_types.h"
@@ -681,7 +680,7 @@
 
 void ServiceWorkerURLRequestJob::DidDispatchFetchEvent(
     ServiceWorkerStatusCode status,
-    ServiceWorkerFetchEventResult fetch_result,
+    ServiceWorkerFetchDispatcher::FetchEventResult fetch_result,
     const ServiceWorkerResponse& response,
     blink::mojom::ServiceWorkerStreamHandlePtr body_as_stream,
     blink::mojom::BlobPtr body_as_blob,
@@ -715,7 +714,8 @@
     return;
   }
 
-  if (fetch_result == SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK) {
+  if (fetch_result ==
+      ServiceWorkerFetchDispatcher::FetchEventResult::kShouldFallback) {
     ServiceWorkerMetrics::RecordFallbackedRequestMode(request_mode_);
     if (IsFallbackToRendererNeeded()) {
       FinalizeFallbackToRenderer();
@@ -726,7 +726,8 @@
   }
 
   // We should have a response now.
-  DCHECK_EQ(SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, fetch_result);
+  DCHECK_EQ(ServiceWorkerFetchDispatcher::FetchEventResult::kGotResponse,
+            fetch_result);
 
   // A response with status code 0 is Blink telling us to respond with network
   // error.
diff --git a/content/browser/service_worker/service_worker_url_request_job.h b/content/browser/service_worker/service_worker_url_request_job.h
index 232d5dd..93cc1bf 100644
--- a/content/browser/service_worker/service_worker_url_request_job.h
+++ b/content/browser/service_worker/service_worker_url_request_job.h
@@ -18,6 +18,7 @@
 #include "base/optional.h"
 #include "base/time/time.h"
 #include "content/browser/service_worker/embedded_worker_status.h"
+#include "content/browser/service_worker/service_worker_fetch_dispatcher.h"
 #include "content/browser/service_worker/service_worker_metrics.h"
 #include "content/browser/service_worker/service_worker_response_type.h"
 #include "content/browser/service_worker/service_worker_url_job_wrapper.h"
@@ -53,7 +54,6 @@
 class ResourceRequestBody;
 class ServiceWorkerBlobReader;
 class ServiceWorkerDataPipeReader;
-class ServiceWorkerFetchDispatcher;
 class ServiceWorkerVersion;
 
 class CONTENT_EXPORT ServiceWorkerURLRequestJob : public net::URLRequestJob {
@@ -175,7 +175,7 @@
   void DidPrepareFetchEvent(scoped_refptr<ServiceWorkerVersion> version);
   void DidDispatchFetchEvent(
       ServiceWorkerStatusCode status,
-      ServiceWorkerFetchEventResult fetch_result,
+      ServiceWorkerFetchDispatcher::FetchEventResult fetch_result,
       const ServiceWorkerResponse& response,
       blink::mojom::ServiceWorkerStreamHandlePtr body_as_stream,
       blink::mojom::BlobPtr body_as_blob,
diff --git a/content/common/service_worker/service_worker_messages.h b/content/common/service_worker/service_worker_messages.h
index 724fea4..75f74401 100644
--- a/content/common/service_worker/service_worker_messages.h
+++ b/content/common/service_worker/service_worker_messages.h
@@ -74,9 +74,6 @@
   IPC_STRUCT_TRAITS_MEMBER(fetch_type)
 IPC_STRUCT_TRAITS_END()
 
-IPC_ENUM_TRAITS_MAX_VALUE(content::ServiceWorkerFetchEventResult,
-                          content::SERVICE_WORKER_FETCH_EVENT_LAST)
-
 IPC_STRUCT_TRAITS_BEGIN(content::ServiceWorkerResponse)
   IPC_STRUCT_TRAITS_MEMBER(url_list)
   IPC_STRUCT_TRAITS_MEMBER(status_code)
diff --git a/content/common/service_worker/service_worker_types.h b/content/common/service_worker/service_worker_types.h
index 4a17b86..5a36703 100644
--- a/content/common/service_worker/service_worker_types.h
+++ b/content/common/service_worker/service_worker_types.h
@@ -59,15 +59,6 @@
 static constexpr base::TimeDelta kServiceWorkerScriptMaxCacheAge =
     base::TimeDelta::FromHours(24);
 
-// Indicates how the service worker handled a fetch event.
-enum ServiceWorkerFetchEventResult {
-  // Browser should fallback to native fetch.
-  SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK,
-  // Service worker provided a ServiceWorkerResponse.
-  SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE,
-  SERVICE_WORKER_FETCH_EVENT_LAST = SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE
-};
-
 struct ServiceWorkerCaseInsensitiveCompare {
   bool operator()(const std::string& lhs, const std::string& rhs) const {
     return base::CompareCaseInsensitiveASCII(lhs, rhs) < 0;
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
index 8734a077..10b32b1 100644
--- a/content/renderer/render_thread_impl.cc
+++ b/content/renderer/render_thread_impl.cc
@@ -443,18 +443,22 @@
 // thread.
 class UkmRecorderFactoryImpl : public cc::UkmRecorderFactory {
  public:
-  UkmRecorderFactoryImpl(std::unique_ptr<service_manager::Connector> connector)
-      : connector_(std::move(connector)) {
-    DCHECK(connector_);
+  UkmRecorderFactoryImpl(ukm::mojom::UkmRecorderInterfacePtrInfo info)
+      : info_(std::move(info)) {
+    DCHECK(info_.is_valid());
   }
   ~UkmRecorderFactoryImpl() override = default;
 
   std::unique_ptr<ukm::UkmRecorder> CreateRecorder() override {
-    return ukm::MojoUkmRecorder::Create(connector_.get());
+    DCHECK(info_.is_valid());
+
+    ukm::mojom::UkmRecorderInterfacePtr recorder;
+    recorder.Bind(std::move(info_));
+    return std::make_unique<ukm::MojoUkmRecorder>(std::move(recorder));
   }
 
  private:
-  std::unique_ptr<service_manager::Connector> connector_;
+  ukm::mojom::UkmRecorderInterfacePtrInfo info_;
 };
 
 }  // namespace
@@ -1703,7 +1707,9 @@
 
 std::unique_ptr<cc::UkmRecorderFactory>
 RenderThreadImpl::CreateUkmRecorderFactory() {
-  return std::make_unique<UkmRecorderFactoryImpl>(GetConnector()->Clone());
+  ukm::mojom::UkmRecorderInterfacePtrInfo info;
+  mojo::MakeRequest(&info);
+  return std::make_unique<UkmRecorderFactoryImpl>(std::move(info));
 }
 
 void RenderThreadImpl::OnRAILModeChanged(v8::RAILMode rail_mode) {
diff --git a/content/test/data/accessibility/aria/aria-readonly-expected-android.txt b/content/test/data/accessibility/aria/aria-readonly-expected-android.txt
index 039e04d..495afec 100644
--- a/content/test/data/accessibility/aria/aria-readonly-expected-android.txt
+++ b/content/test/data/accessibility/aria/aria-readonly-expected-android.txt
@@ -5,8 +5,8 @@
 ++++android.widget.EditText clickable editable_text focusable has_non_empty_value name='Readonly-true input' input_type=1 text_change_added_count=19
 ++android.view.View clickable focusable name='Readonly-false plain div'
 ++android.view.View clickable focusable name='Readonly-true plain div'
-++android.view.View clickable focusable multiline name='Readonly-false contenteditable div'
-++android.view.View clickable focusable multiline name='Readonly-true contenteditable div'
+++android.view.View clickable editable_text focusable multiline name='Readonly-false contenteditable div'
+++android.view.View clickable editable_text focusable multiline name='Readonly-true contenteditable div'
 ++android.widget.EditText clickable editable_text focusable name='Readonly-false role unimplemented textbox'
 ++android.widget.EditText clickable editable_text focusable name='Readonly-true role unimplemented textbox'
 ++android.widget.EditText clickable editable_text focusable name='Readonly-false contenteditable textbox'
@@ -20,4 +20,4 @@
 ++android.view.MenuItem role_description='checkbox' checkable clickable name='Readonly menuitemcheckbox'
 ++android.view.MenuItem role_description='radio button' checkable clickable name='Readonly menuitemradio'
 ++android.widget.EditText role_description='search text field' clickable editable_text name='Readonly searchbox'
-++android.widget.CheckBox role_description='switch' checkable clickable name='Readonly switch'
\ No newline at end of file
+++android.widget.CheckBox role_description='switch' checkable clickable name='Readonly switch'
diff --git a/content/test/data/accessibility/aria/aria-searchbox-expected-mac.txt b/content/test/data/accessibility/aria/aria-searchbox-expected-mac.txt
index ad6b005..fe4bf976 100644
--- a/content/test/data/accessibility/aria/aria-searchbox-expected-mac.txt
+++ b/content/test/data/accessibility/aria/aria-searchbox-expected-mac.txt
@@ -1,3 +1,2 @@
 AXWebArea AXRoleDescription='HTML content'
 ++AXTextField AXSubrole=AXSearchField AXRoleDescription='search text field' AXValue='ARIA role searchbox.'
-++++AXStaticText AXRoleDescription='text' AXValue='ARIA role searchbox.'
diff --git a/content/test/data/accessibility/aria/aria-searchbox-expected-win.txt b/content/test/data/accessibility/aria/aria-searchbox-expected-win.txt
index 2e47801..a97b81d 100644
--- a/content/test/data/accessibility/aria/aria-searchbox-expected-win.txt
+++ b/content/test/data/accessibility/aria/aria-searchbox-expected-win.txt
@@ -1,3 +1,2 @@
 ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE ia2_hypertext='<obj0>' n_selections=0
 ++ROLE_SYSTEM_TEXT value='ARIA role searchbox.' FOCUSABLE xml-roles:searchbox ia2_hypertext='ARIA role searchbox.' n_selections=0
-++++ROLE_SYSTEM_STATICTEXT name='ARIA role searchbox.' ia2_hypertext='ARIA role searchbox.' n_selections=0
diff --git a/content/test/data/accessibility/aria/aria-searchbox-with-rich-text-expected-android.txt b/content/test/data/accessibility/aria/aria-searchbox-with-rich-text-expected-android.txt
new file mode 100644
index 0000000..928de295
--- /dev/null
+++ b/content/test/data/accessibility/aria/aria-searchbox-with-rich-text-expected-android.txt
@@ -0,0 +1,2 @@
+android.webkit.WebView focusable scrollable
+++android.widget.EditText role_description='search text field' clickable editable_text focusable focused has_non_empty_value name='ARIA role searchbox.' text_change_added_count=20
\ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-searchbox-with-rich-text-expected-blink.txt b/content/test/data/accessibility/aria/aria-searchbox-with-rich-text-expected-blink.txt
new file mode 100644
index 0000000..6df29ce
--- /dev/null
+++ b/content/test/data/accessibility/aria/aria-searchbox-with-rich-text-expected-blink.txt
@@ -0,0 +1,4 @@
+rootWebArea
+++searchBox
+++++staticText name='ARIA role searchbox.'
+++++++inlineTextBox name='ARIA role searchbox.'
\ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-searchbox-with-rich-text-expected-mac.txt b/content/test/data/accessibility/aria/aria-searchbox-with-rich-text-expected-mac.txt
new file mode 100644
index 0000000..ad6b005
--- /dev/null
+++ b/content/test/data/accessibility/aria/aria-searchbox-with-rich-text-expected-mac.txt
@@ -0,0 +1,3 @@
+AXWebArea AXRoleDescription='HTML content'
+++AXTextField AXSubrole=AXSearchField AXRoleDescription='search text field' AXValue='ARIA role searchbox.'
+++++AXStaticText AXRoleDescription='text' AXValue='ARIA role searchbox.'
diff --git a/content/test/data/accessibility/aria/aria-searchbox-with-rich-text-expected-win.txt b/content/test/data/accessibility/aria/aria-searchbox-with-rich-text-expected-win.txt
new file mode 100644
index 0000000..2e47801
--- /dev/null
+++ b/content/test/data/accessibility/aria/aria-searchbox-with-rich-text-expected-win.txt
@@ -0,0 +1,3 @@
+ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE ia2_hypertext='<obj0>' n_selections=0
+++ROLE_SYSTEM_TEXT value='ARIA role searchbox.' FOCUSABLE xml-roles:searchbox ia2_hypertext='ARIA role searchbox.' n_selections=0
+++++ROLE_SYSTEM_STATICTEXT name='ARIA role searchbox.' ia2_hypertext='ARIA role searchbox.' n_selections=0
diff --git a/content/test/data/accessibility/aria/aria-searchbox-with-rich-text.html b/content/test/data/accessibility/aria/aria-searchbox-with-rich-text.html
new file mode 100644
index 0000000..dedcd413
--- /dev/null
+++ b/content/test/data/accessibility/aria/aria-searchbox-with-rich-text.html
@@ -0,0 +1,25 @@
+<!--
+@MAC-ALLOW:AXRole*
+@MAC-ALLOW:AXSubrole*
+@WIN-DENY:description*
+@WIN-ALLOW:caret_offset*
+@WIN-ALLOW:ia2_hypertext=*
+@WIN-ALLOW:n_selections*
+@WIN-ALLOW:selection_start*
+@WIN-ALLOW:selection_end*
+@WIN-ALLOW:value*
+@WIN-DENY:value='http://*'
+@WIN-ALLOW:xml-roles*
+-->
+<!DOCTYPE html>
+<html>
+<body>
+  <div id="searchbox" contenteditable role="searchbox" tabindex="0">
+  <p>ARIA role searchbox.</p>
+</div>
+  <script>
+    var searchbox = document.getElementById('searchbox');
+    searchbox.focus();
+  </script>
+</body>
+</html>
diff --git a/content/test/data/accessibility/aria/aria-searchbox-with-selection-expected-mac.txt b/content/test/data/accessibility/aria/aria-searchbox-with-selection-expected-mac.txt
index ad6b005..fe4bf976 100644
--- a/content/test/data/accessibility/aria/aria-searchbox-with-selection-expected-mac.txt
+++ b/content/test/data/accessibility/aria/aria-searchbox-with-selection-expected-mac.txt
@@ -1,3 +1,2 @@
 AXWebArea AXRoleDescription='HTML content'
 ++AXTextField AXSubrole=AXSearchField AXRoleDescription='search text field' AXValue='ARIA role searchbox.'
-++++AXStaticText AXRoleDescription='text' AXValue='ARIA role searchbox.'
diff --git a/content/test/data/accessibility/aria/aria-searchbox-with-selection-expected-win.txt b/content/test/data/accessibility/aria/aria-searchbox-with-selection-expected-win.txt
index 6d9618b..57ea7b64 100644
--- a/content/test/data/accessibility/aria/aria-searchbox-with-selection-expected-win.txt
+++ b/content/test/data/accessibility/aria/aria-searchbox-with-selection-expected-win.txt
@@ -1,3 +1,2 @@
 ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE ia2_hypertext='<obj0>' caret_offset=1 n_selections=1 selection_start=0 selection_end=1
 ++ROLE_SYSTEM_TEXT FOCUSABLE xml-roles:searchbox ia2_hypertext='ARIA role searchbox.' caret_offset=20 n_selections=1 selection_start=0 selection_end=20
-++++ROLE_SYSTEM_STATICTEXT name='ARIA role searchbox.' ia2_hypertext='ARIA role searchbox.' caret_offset=20 n_selections=1 selection_start=0 selection_end=20
diff --git a/content/test/data/accessibility/aria/aria-textbox-expected-mac.txt b/content/test/data/accessibility/aria/aria-textbox-expected-mac.txt
index e945e879..0b404ce 100644
--- a/content/test/data/accessibility/aria/aria-textbox-expected-mac.txt
+++ b/content/test/data/accessibility/aria/aria-textbox-expected-mac.txt
@@ -1,5 +1,3 @@
 AXWebArea AXRoleDescription='HTML content'
 ++AXTextField AXRoleDescription='text field' AXValue='TextBox1'
-++++AXStaticText AXRoleDescription='text' AXValue='TextBox1'
 ++AXTextArea AXRoleDescription='text entry area' AXValue='TextBox2'
-++++AXStaticText AXRoleDescription='text' AXValue='TextBox2'
diff --git a/content/test/data/accessibility/aria/aria-textbox-expected-win.txt b/content/test/data/accessibility/aria/aria-textbox-expected-win.txt
index b3f994c..59931875 100644
--- a/content/test/data/accessibility/aria/aria-textbox-expected-win.txt
+++ b/content/test/data/accessibility/aria/aria-textbox-expected-win.txt
@@ -1,5 +1,3 @@
 ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE ia2_hypertext='<obj0><obj1>' n_selections=0
 ++ROLE_SYSTEM_TEXT value='TextBox1' IA2_STATE_SINGLE_LINE xml-roles:textbox ia2_hypertext='TextBox1' n_selections=0
-++++ROLE_SYSTEM_STATICTEXT name='TextBox1' ia2_hypertext='TextBox1' n_selections=0
 ++ROLE_SYSTEM_TEXT value='TextBox2' IA2_STATE_MULTI_LINE xml-roles:textbox ia2_hypertext='TextBox2' n_selections=0
-++++ROLE_SYSTEM_STATICTEXT name='TextBox2' ia2_hypertext='TextBox2' n_selections=0
diff --git a/content/test/data/accessibility/aria/aria-textbox-with-selection-expected-mac.txt b/content/test/data/accessibility/aria/aria-textbox-with-selection-expected-mac.txt
index 44814ad..80efb1ce 100644
--- a/content/test/data/accessibility/aria/aria-textbox-with-selection-expected-mac.txt
+++ b/content/test/data/accessibility/aria/aria-textbox-with-selection-expected-mac.txt
@@ -1,7 +1,3 @@
 AXWebArea AXRoleDescription='HTML content'
 ++AXTextField AXRoleDescription='text field' AXValue='Single line.'
-++++AXStaticText AXRoleDescription='text' AXValue='Single line.'
 ++AXTextArea AXRoleDescription='text entry area' AXValue='Multiple<newline>lines.'
-++++AXStaticText AXRoleDescription='text' AXValue='Multiple'
-++++AXGroup AXRoleDescription='group' AXTitle='<newline>'
-++++AXStaticText AXRoleDescription='text' AXValue='lines.'
\ No newline at end of file
diff --git a/content/test/data/accessibility/aria/aria-textbox-with-selection-expected-win.txt b/content/test/data/accessibility/aria/aria-textbox-with-selection-expected-win.txt
new file mode 100644
index 0000000..eccb69c
--- /dev/null
+++ b/content/test/data/accessibility/aria/aria-textbox-with-selection-expected-win.txt
@@ -0,0 +1,9 @@
+ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE ia2_hypertext='<obj0><obj1>' n_characters=2 caret_offset=0 n_selections=0
+++ROLE_SYSTEM_TEXT value='TextBox1<newline>' FOCUSABLE IA2_STATE_SINGLE_LINE xml-roles:textbox ia2_hypertext='<obj0>' n_characters=1 caret_offset=0 n_selections=0
+++++IA2_ROLE_HEADING name='TextBox1' xml-roles:heading ia2_hypertext='TextBox1' n_characters=8 caret_offset=0 n_selections=0
+++++++ROLE_SYSTEM_STATICTEXT name='TextBox1' ia2_hypertext='TextBox1' n_characters=8 caret_offset=0 n_selections=0
+++ROLE_SYSTEM_TEXT value='TextBox2<newline>Some text.' FOCUSABLE IA2_STATE_MULTI_LINE xml-roles:textbox ia2_hypertext='<obj0><obj1>' n_characters=2 n_selections=0
+++++IA2_ROLE_HEADING name='TextBox2' xml-roles:heading ia2_hypertext='TextBox2' n_characters=8 n_selections=0
+++++++ROLE_SYSTEM_STATICTEXT name='TextBox2' ia2_hypertext='TextBox2' n_characters=8 n_selections=0
+++++IA2_ROLE_PARAGRAPH ia2_hypertext='Some text.' n_characters=10 n_selections=0
+++++++ROLE_SYSTEM_STATICTEXT name='Some text.' ia2_hypertext='Some text.' n_characters=10 n_selections=0
\ No newline at end of file
diff --git a/content/test/data/accessibility/event/aria-combo-box-collapse-expected-win.txt b/content/test/data/accessibility/event/aria-combo-box-collapse-expected-win.txt
index bdc4f7e..360d4405 100644
--- a/content/test/data/accessibility/event/aria-combo-box-collapse-expected-win.txt
+++ b/content/test/data/accessibility/event/aria-combo-box-collapse-expected-win.txt
@@ -1,3 +1,3 @@
-EVENT_OBJECT_STATECHANGE on role=ROLE_SYSTEM_COMBOBOX FOCUSED,COLLAPSED,FOCUSABLE,HASPOPUP IA2_STATE_EDITABLE,IA2_STATE_SINGLE_LINE,IA2_STATE_SUPPORTS_AUTOCOMPLETION
-EVENT_OBJECT_FOCUS on role=ROLE_SYSTEM_COMBOBOX FOCUSED,COLLAPSED,FOCUSABLE,HASPOPUP IA2_STATE_EDITABLE,IA2_STATE_SINGLE_LINE,IA2_STATE_SUPPORTS_AUTOCOMPLETION
-IA2_EVENT_ACTIVE_DESCENDANT_CHANGED on role=ROLE_SYSTEM_COMBOBOX FOCUSED,COLLAPSED,FOCUSABLE,HASPOPUP IA2_STATE_EDITABLE,IA2_STATE_SINGLE_LINE,IA2_STATE_SUPPORTS_AUTOCOMPLETION
+EVENT_OBJECT_STATECHANGE on role=ROLE_SYSTEM_COMBOBOX FOCUSED,COLLAPSED,FOCUSABLE,HASPOPUP IA2_STATE_EDITABLE,IA2_STATE_SELECTABLE_TEXT,IA2_STATE_SINGLE_LINE,IA2_STATE_SUPPORTS_AUTOCOMPLETION
+EVENT_OBJECT_FOCUS on role=ROLE_SYSTEM_COMBOBOX FOCUSED,COLLAPSED,FOCUSABLE,HASPOPUP IA2_STATE_EDITABLE,IA2_STATE_SELECTABLE_TEXT,IA2_STATE_SINGLE_LINE,IA2_STATE_SUPPORTS_AUTOCOMPLETION
+IA2_EVENT_ACTIVE_DESCENDANT_CHANGED on role=ROLE_SYSTEM_COMBOBOX FOCUSED,COLLAPSED,FOCUSABLE,HASPOPUP IA2_STATE_EDITABLE,IA2_STATE_SELECTABLE_TEXT,IA2_STATE_SINGLE_LINE,IA2_STATE_SUPPORTS_AUTOCOMPLETION
diff --git a/content/test/data/accessibility/event/aria-combo-box-expand-expected-win.txt b/content/test/data/accessibility/event/aria-combo-box-expand-expected-win.txt
index 8d924ad..76a2a7a 100644
--- a/content/test/data/accessibility/event/aria-combo-box-expand-expected-win.txt
+++ b/content/test/data/accessibility/event/aria-combo-box-expand-expected-win.txt
@@ -1,3 +1,3 @@
-EVENT_OBJECT_STATECHANGE on role=ROLE_SYSTEM_COMBOBOX EXPANDED,FOCUSABLE,HASPOPUP IA2_STATE_EDITABLE,IA2_STATE_SINGLE_LINE,IA2_STATE_SUPPORTS_AUTOCOMPLETION
+EVENT_OBJECT_STATECHANGE on role=ROLE_SYSTEM_COMBOBOX EXPANDED,FOCUSABLE,HASPOPUP IA2_STATE_EDITABLE,IA2_STATE_SELECTABLE_TEXT,IA2_STATE_SINGLE_LINE,IA2_STATE_SUPPORTS_AUTOCOMPLETION
 EVENT_OBJECT_FOCUS on role=ROLE_SYSTEM_LISTITEM name="Apple" FOCUSED,FOCUSABLE,SELECTABLE
-IA2_EVENT_ACTIVE_DESCENDANT_CHANGED on role=ROLE_SYSTEM_COMBOBOX EXPANDED,FOCUSABLE,HASPOPUP IA2_STATE_EDITABLE,IA2_STATE_SINGLE_LINE,IA2_STATE_SUPPORTS_AUTOCOMPLETION
+IA2_EVENT_ACTIVE_DESCENDANT_CHANGED on role=ROLE_SYSTEM_COMBOBOX EXPANDED,FOCUSABLE,HASPOPUP IA2_STATE_EDITABLE,IA2_STATE_SELECTABLE_TEXT,IA2_STATE_SINGLE_LINE,IA2_STATE_SUPPORTS_AUTOCOMPLETION
diff --git a/content/test/data/accessibility/event/aria-combo-box-focus-expected-win.txt b/content/test/data/accessibility/event/aria-combo-box-focus-expected-win.txt
index 665349a..de6c823 100644
--- a/content/test/data/accessibility/event/aria-combo-box-focus-expected-win.txt
+++ b/content/test/data/accessibility/event/aria-combo-box-focus-expected-win.txt
@@ -1,2 +1,2 @@
 EVENT_OBJECT_FOCUS on role=ROLE_SYSTEM_LISTITEM name="Apple" FOCUSED,FOCUSABLE,SELECTABLE
-IA2_EVENT_TEXT_CARET_MOVED on role=ROLE_SYSTEM_COMBOBOX EXPANDED,FOCUSABLE,HASPOPUP IA2_STATE_EDITABLE,IA2_STATE_SINGLE_LINE,IA2_STATE_SUPPORTS_AUTOCOMPLETION
+IA2_EVENT_TEXT_CARET_MOVED on role=ROLE_SYSTEM_COMBOBOX EXPANDED,FOCUSABLE,HASPOPUP IA2_STATE_EDITABLE,IA2_STATE_SELECTABLE_TEXT,IA2_STATE_SINGLE_LINE,IA2_STATE_SUPPORTS_AUTOCOMPLETION
diff --git a/content/test/data/accessibility/event/aria-combo-box-next-expected-win.txt b/content/test/data/accessibility/event/aria-combo-box-next-expected-win.txt
index 5ea2942f..aa42715 100644
--- a/content/test/data/accessibility/event/aria-combo-box-next-expected-win.txt
+++ b/content/test/data/accessibility/event/aria-combo-box-next-expected-win.txt
@@ -1,2 +1,2 @@
 EVENT_OBJECT_FOCUS on role=ROLE_SYSTEM_LISTITEM name="Banana" FOCUSED,FOCUSABLE,SELECTABLE
-IA2_EVENT_ACTIVE_DESCENDANT_CHANGED on role=ROLE_SYSTEM_COMBOBOX EXPANDED,FOCUSABLE,HASPOPUP IA2_STATE_EDITABLE,IA2_STATE_SINGLE_LINE,IA2_STATE_SUPPORTS_AUTOCOMPLETION
+IA2_EVENT_ACTIVE_DESCENDANT_CHANGED on role=ROLE_SYSTEM_COMBOBOX EXPANDED,FOCUSABLE,HASPOPUP IA2_STATE_EDITABLE,IA2_STATE_SELECTABLE_TEXT,IA2_STATE_SINGLE_LINE,IA2_STATE_SUPPORTS_AUTOCOMPLETION
diff --git a/content/test/data/accessibility/html/contenteditable-with-embedded-contenteditables-expected-mac.txt b/content/test/data/accessibility/html/contenteditable-with-embedded-contenteditables-expected-mac.txt
index e8f0ab47..0acdb3c6 100644
--- a/content/test/data/accessibility/html/contenteditable-with-embedded-contenteditables-expected-mac.txt
+++ b/content/test/data/accessibility/html/contenteditable-with-embedded-contenteditables-expected-mac.txt
@@ -4,7 +4,7 @@
 ++++++AXStaticText AXValue='This is editable.'
 ++++AXStaticText AXValue='This is not editable.'
 ++++AXGroup AXTitle='<newline>'
-++++AXGroup AXValue='But this one is.'
+++++AXTextArea AXValue='But this one is.'
 ++++++AXStaticText AXValue='But this one is.'
 ++++AXGroup AXValue='So is this one.'
-++++++AXStaticText AXValue='So is this one.'
\ No newline at end of file
+++++++AXStaticText AXValue='So is this one.'
diff --git a/content/test/data/accessibility/html/contenteditable-with-embedded-contenteditables-expected-win.txt b/content/test/data/accessibility/html/contenteditable-with-embedded-contenteditables-expected-win.txt
index f6bf3ab..233f5d6 100644
--- a/content/test/data/accessibility/html/contenteditable-with-embedded-contenteditables-expected-win.txt
+++ b/content/test/data/accessibility/html/contenteditable-with-embedded-contenteditables-expected-win.txt
@@ -4,7 +4,7 @@
 ++++++ROLE_SYSTEM_STATICTEXT name='This is editable.' IA2_STATE_EDITABLE ia2_hypertext='This is editable.' n_selections=0
 ++++ROLE_SYSTEM_STATICTEXT name='This is not editable.' ia2_hypertext='This is not editable.' n_selections=0
 ++++ROLE_SYSTEM_WHITESPACE name='<newline>' ia2_hypertext='<newline>' n_selections=0
-++++IA2_ROLE_PARAGRAPH FOCUSABLE IA2_STATE_EDITABLE ia2_hypertext='But this one is.' n_selections=0
+++++IA2_ROLE_PARAGRAPH FOCUSABLE IA2_STATE_EDITABLE IA2_STATE_MULTI_LINE ia2_hypertext='But this one is.' n_selections=0
 ++++++ROLE_SYSTEM_STATICTEXT name='But this one is.' IA2_STATE_EDITABLE ia2_hypertext='But this one is.' n_selections=0
 ++++IA2_ROLE_PARAGRAPH IA2_STATE_EDITABLE ia2_hypertext='So is this one.' n_selections=0
-++++++ROLE_SYSTEM_STATICTEXT name='So is this one.' IA2_STATE_EDITABLE ia2_hypertext='So is this one.' n_selections=0
\ No newline at end of file
+++++++ROLE_SYSTEM_STATICTEXT name='So is this one.' IA2_STATE_EDITABLE ia2_hypertext='So is this one.' n_selections=0
diff --git a/content/test/data/accessibility/html/contenteditable-with-no-descendants-expected-android.txt b/content/test/data/accessibility/html/contenteditable-with-no-descendants-expected-android.txt
index 672d9f3..beec129 100644
--- a/content/test/data/accessibility/html/contenteditable-with-no-descendants-expected-android.txt
+++ b/content/test/data/accessibility/html/contenteditable-with-no-descendants-expected-android.txt
@@ -1,5 +1,5 @@
 android.webkit.WebView focusable focused scrollable
-++android.view.View clickable focusable multiline name='label'
-++android.view.View clickable focusable multiline hint='description'
-++android.view.View clickable focusable multiline name='title'
-++android.view.View name='description'
\ No newline at end of file
+++android.view.View clickable editable_text focusable multiline name='label'
+++android.view.View clickable editable_text focusable multiline hint='description'
+++android.view.View clickable editable_text focusable multiline name='title'
+++android.view.View name='description'
diff --git a/content/test/data/accessibility/html/input-datetime-expected-mac.txt b/content/test/data/accessibility/html/input-datetime-expected-mac.txt
index fafee5e..aaa4951 100644
--- a/content/test/data/accessibility/html/input-datetime-expected-mac.txt
+++ b/content/test/data/accessibility/html/input-datetime-expected-mac.txt
@@ -1,5 +1,3 @@
 AXWebArea AXRoleDescription='HTML content'
 ++AXGroup AXRoleDescription='group'
 ++++AXTextField AXRoleDescription='text field' AXValue='1/1/2015 1:00AM'
-++++++AXGroup AXRoleDescription='group'
-++++++++AXStaticText AXRoleDescription='text' AXValue='1/1/2015 1:00AM'
diff --git a/content/test/data/accessibility/html/input-datetime-expected-win.txt b/content/test/data/accessibility/html/input-datetime-expected-win.txt
index 167c04d..2a6c4d6e 100644
--- a/content/test/data/accessibility/html/input-datetime-expected-win.txt
+++ b/content/test/data/accessibility/html/input-datetime-expected-win.txt
@@ -1,5 +1,3 @@
 ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE ia2_hypertext='<obj0>'
 ++IA2_ROLE_SECTION ia2_hypertext='<obj0>'
 ++++ROLE_SYSTEM_TEXT FOCUSABLE ia2_hypertext='1/1/2015 1:00AM'
-++++++IA2_ROLE_SECTION ia2_hypertext='1/1/2015 1:00AM'
-++++++++ROLE_SYSTEM_STATICTEXT name='1/1/2015 1:00AM' ia2_hypertext='1/1/2015 1:00AM'
diff --git a/extensions/browser/api/media_perception_private/conversion_utils.cc b/extensions/browser/api/media_perception_private/conversion_utils.cc
index e222a4da..ad41f53 100644
--- a/extensions/browser/api/media_perception_private/conversion_utils.cc
+++ b/extensions/browser/api/media_perception_private/conversion_utils.cc
@@ -257,6 +257,24 @@
   return mri::State::STATUS_UNSPECIFIED;
 }
 
+void VideoStreamParamIdlToProto(mri::VideoStreamParam* param_result,
+                                const VideoStreamParam& param) {
+  if (param_result == nullptr)
+    return;
+
+  if (param.id)
+    param_result->set_id(*param.id);
+
+  if (param.width)
+    param_result->set_width(*param.width);
+
+  if (param.height)
+    param_result->set_height(*param.height);
+
+  if (param.frame_rate)
+    param_result->set_frame_rate(*param.frame_rate);
+}
+
 }  //  namespace
 
 State StateProtoToIdl(const mri::State& state) {
@@ -277,6 +295,15 @@
   if (state.device_context)
     state_result.set_device_context(*state.device_context);
 
+  if (state.video_stream_param && state.video_stream_param.get() != nullptr) {
+    for (size_t i = 0; i < state.video_stream_param.get()->size(); ++i) {
+      mri::VideoStreamParam* video_stream_param_result =
+          state_result.add_video_stream_param();
+      VideoStreamParamIdlToProto(video_stream_param_result,
+                                 state.video_stream_param.get()->at(i));
+    }
+  }
+
   return state_result;
 }
 
diff --git a/extensions/browser/api/media_perception_private/conversion_utils_unittest.cc b/extensions/browser/api/media_perception_private/conversion_utils_unittest.cc
index 4b7f4ec..21de6c9 100644
--- a/extensions/browser/api/media_perception_private/conversion_utils_unittest.cc
+++ b/extensions/browser/api/media_perception_private/conversion_utils_unittest.cc
@@ -18,6 +18,26 @@
 const char kFakePacketLabel1[] = "Packet1";
 const char kFakePacketLabel3[] = "Packet3";
 const char kFakeEntityLabel3[] = "Region3";
+const char kVideoStreamIdForFaceDetection[] = "FaceDetection";
+const char kVideoStreamIdForVideoCapture[] = "VideoCapture";
+
+const int kVideoStreamWidthForFaceDetection = 1280;
+const int kVideoStreamHeightForFaceDetection = 720;
+const int kVideoStreamFrameRateForFaceDetection = 30;
+const int kVideoStreamWidthForVideoCapture = 640;
+const int kVideoStreamHeightForVideoCapture = 360;
+const int kVideoStreamFrameRateForVideoCapture = 5;
+
+void InitializeVideoStreamParam(media_perception::VideoStreamParam& param,
+                                const std::string& id,
+                                int width,
+                                int height,
+                                int frame_rate) {
+  param.id = std::make_unique<std::string>(id);
+  param.width = std::make_unique<int>(width);
+  param.height = std::make_unique<int>(height);
+  param.frame_rate = std::make_unique<int>(frame_rate);
+}
 
 void InitializeFakeFramePerception(const int index,
                                    mri::FramePerception* frame_perception) {
@@ -280,4 +300,41 @@
   EXPECT_EQ(mri::State::STOPPED, state_proto.status());
 }
 
+TEST(MediaPerceptionConversionUtilsTest, StateIdlToProtoWithVideoStreamParam) {
+  media_perception::State state;
+  state.status = media_perception::STATUS_RUNNING;
+  state.video_stream_param.reset(
+      new std::vector<media_perception::VideoStreamParam>(2));
+  InitializeVideoStreamParam(
+      state.video_stream_param.get()->at(0), kVideoStreamIdForFaceDetection,
+      kVideoStreamWidthForFaceDetection, kVideoStreamHeightForFaceDetection,
+      kVideoStreamFrameRateForFaceDetection);
+
+  InitializeVideoStreamParam(
+      state.video_stream_param.get()->at(1), kVideoStreamIdForVideoCapture,
+      kVideoStreamWidthForVideoCapture, kVideoStreamHeightForVideoCapture,
+      kVideoStreamFrameRateForVideoCapture);
+
+  mri::State state_proto = StateIdlToProto(state);
+  EXPECT_EQ(state_proto.status(), mri::State::RUNNING);
+
+  EXPECT_EQ(kVideoStreamIdForFaceDetection,
+            state_proto.video_stream_param(0).id());
+  EXPECT_EQ(kVideoStreamWidthForFaceDetection,
+            state_proto.video_stream_param(0).width());
+  EXPECT_EQ(kVideoStreamHeightForFaceDetection,
+            state_proto.video_stream_param(0).height());
+  EXPECT_EQ(kVideoStreamFrameRateForFaceDetection,
+            state_proto.video_stream_param(0).frame_rate());
+
+  EXPECT_EQ(kVideoStreamIdForVideoCapture,
+            state_proto.video_stream_param(1).id());
+  EXPECT_EQ(kVideoStreamWidthForVideoCapture,
+            state_proto.video_stream_param(1).width());
+  EXPECT_EQ(kVideoStreamHeightForVideoCapture,
+            state_proto.video_stream_param(1).height());
+  EXPECT_EQ(kVideoStreamFrameRateForVideoCapture,
+            state_proto.video_stream_param(1).frame_rate());
+}
+
 }  // namespace extensions
diff --git a/extensions/browser/api/media_perception_private/media_perception_private_api.cc b/extensions/browser/api/media_perception_private/media_perception_private_api.cc
index 160e911..f0b6fc2 100644
--- a/extensions/browser/api/media_perception_private/media_perception_private_api.cc
+++ b/extensions/browser/api/media_perception_private/media_perception_private_api.cc
@@ -54,6 +54,14 @@
     return RespondNow(
         Error("Only provide deviceContext with SetState RUNNING."));
   }
+
+  // Check that video stream parameters are only provided with SetState RUNNING.
+  if (params->state.status != media_perception::STATUS_RUNNING &&
+      params->state.video_stream_param.get() != nullptr) {
+    return RespondNow(
+        Error("SetState: status must be RUNNING to set videoStreamParam."));
+  }
+
   MediaPerceptionAPIManager* manager =
       MediaPerceptionAPIManager::Get(browser_context());
   manager->SetState(
diff --git a/extensions/common/api/media_perception_private.idl b/extensions/common/api/media_perception_private.idl
index bce5da9..599485b3 100644
--- a/extensions/common/api/media_perception_private.idl
+++ b/extensions/common/api/media_perception_private.idl
@@ -84,6 +84,21 @@
     ComponentStatus status;
   };
 
+  // The parameters for processing a particular video stream.
+  dictionary VideoStreamParam {
+    // Identifies the video stream described by these parameters.
+    DOMString? id;
+
+    // Frame width in pixels.
+    long? width;
+
+    // Frame height in pixels.
+    long? height;
+
+    // The frame rate at which this video stream would be processed.
+    long? frameRate;
+  };
+
   // The system and configuration state of the analytics process.
   dictionary State {
     Status status;
@@ -96,6 +111,10 @@
     // Return parameter for $(ref:setState) or $(ref:getState) that
     // specifies the error type for failure cases.
     ServiceError? serviceError;
+
+    // A list of video streams processed by the analytics process. To set this
+    // parameter, status has to be <code>RUNNING</code>.
+    VideoStreamParam[]? videoStreamParam;
   };
 
   dictionary Point {
diff --git a/extensions/test/data/media_perception_private/state/runtest.js b/extensions/test/data/media_perception_private/state/runtest.js
index 3a228155..a61590c9 100644
--- a/extensions/test/data/media_perception_private/state/runtest.js
+++ b/extensions/test/data/media_perception_private/state/runtest.js
@@ -12,7 +12,15 @@
 function setStateRunning() {
   chrome.mediaPerceptionPrivate.setState({
     status: 'RUNNING',
-    deviceContext: 'device_context'
+    deviceContext: 'device_context',
+    videoStreamParam: [
+      {
+        id: 'FaceDetection',
+        width: 1280,
+        height: 1920,
+        frameRate: 30,
+      },
+    ],
   }, chrome.test.callbackPass(function(state) {
     chrome.test.assertEq('RUNNING', state.status);
   }));
@@ -44,6 +52,21 @@
   }, chrome.test.callbackFail(error));
 }
 
+function setStateSuspendedButWithVideoStreamParamFail() {
+  const error = 'SetState: status must be RUNNING to set videoStreamParam.';
+  chrome.mediaPerceptionPrivate.setState({
+    status: 'SUSPENDED',
+    videoStreamParam: [
+      {
+        id: 'FaceDetection',
+        width: 1280,
+        height: 1920,
+        frameRate: 30,
+      },
+    ],
+  }, chrome.test.callbackFail(error));
+}
+
 function setStateRestarted() {
   chrome.mediaPerceptionPrivate.setState({
     status: 'RESTARTING',
@@ -68,6 +91,7 @@
     getStateRunning,
     setStateUnsettable,
     setStateSuspendedButWithDeviceContextFail,
+    setStateSuspendedButWithVideoStreamParamFail,
     setStateRestarted,
     setStateStopped]);
 
diff --git a/gin/arguments.cc b/gin/arguments.cc
index 4d01c0e4..b492fae6 100644
--- a/gin/arguments.cc
+++ b/gin/arguments.cc
@@ -23,8 +23,7 @@
       insufficient_arguments_(false) {
 }
 
-Arguments::~Arguments() {
-}
+Arguments::~Arguments() = default;
 
 v8::Local<v8::Value> Arguments::PeekNext() const {
   if (next_ >= info_->Length())
diff --git a/gin/array_buffer.cc b/gin/array_buffer.cc
index 4524052..34e83db 100644
--- a/gin/array_buffer.cc
+++ b/gin/array_buffer.cc
@@ -231,15 +231,9 @@
   num_bytes_ = private_->length();
 }
 
-ArrayBuffer::~ArrayBuffer() {
-}
+ArrayBuffer::~ArrayBuffer() = default;
 
-ArrayBuffer& ArrayBuffer::operator=(const ArrayBuffer& other) {
-  private_ = other.private_;
-  bytes_ = other.bytes_;
-  num_bytes_ = other.num_bytes_;
-  return *this;
-}
+ArrayBuffer& ArrayBuffer::operator=(const ArrayBuffer& other) = default;
 
 // Converter<ArrayBuffer> -----------------------------------------------------
 
@@ -266,16 +260,10 @@
       num_bytes_(view->ByteLength()) {
 }
 
-ArrayBufferView::~ArrayBufferView() {
-}
+ArrayBufferView::~ArrayBufferView() = default;
 
-ArrayBufferView& ArrayBufferView::operator=(const ArrayBufferView& other) {
-  array_buffer_ = other.array_buffer_;
-  offset_ = other.offset_;
-  num_bytes_ = other.num_bytes_;
-  return *this;
-}
-
+ArrayBufferView& ArrayBufferView::operator=(const ArrayBufferView& other) =
+    default;
 
 // Converter<ArrayBufferView> -------------------------------------------------
 
diff --git a/gin/dictionary.cc b/gin/dictionary.cc
index 54f1a4a5..95e0007 100644
--- a/gin/dictionary.cc
+++ b/gin/dictionary.cc
@@ -18,8 +18,7 @@
 
 Dictionary::Dictionary(const Dictionary& other) = default;
 
-Dictionary::~Dictionary() {
-}
+Dictionary::~Dictionary() = default;
 
 Dictionary Dictionary::CreateEmpty(v8::Isolate* isolate) {
   Dictionary dictionary(isolate);
diff --git a/gin/interceptor_unittest.cc b/gin/interceptor_unittest.cc
index 5c11bc2..0899200 100644
--- a/gin/interceptor_unittest.cc
+++ b/gin/interceptor_unittest.cc
@@ -91,7 +91,7 @@
         IndexedPropertyInterceptor(isolate, this),
         value_(0),
         template_cache_(isolate) {}
-  ~MyInterceptor() override {}
+  ~MyInterceptor() override = default;
 
   // gin::Wrappable
   ObjectTemplateBuilder GetObjectTemplateBuilder(
diff --git a/gin/modules/file_module_provider.cc b/gin/modules/file_module_provider.cc
index 46939b12..2edb6088 100644
--- a/gin/modules/file_module_provider.cc
+++ b/gin/modules/file_module_provider.cc
@@ -54,8 +54,7 @@
     : search_paths_(search_paths) {
 }
 
-FileModuleProvider::~FileModuleProvider() {
-}
+FileModuleProvider::~FileModuleProvider() = default;
 
 void FileModuleProvider::AttempToLoadModules(
     Runner* runner, const std::set<std::string>& ids) {
diff --git a/gin/modules/module_registry.cc b/gin/modules/module_registry.cc
index 9681a0e..cf61f7d 100644
--- a/gin/modules/module_registry.cc
+++ b/gin/modules/module_registry.cc
@@ -44,8 +44,7 @@
   Persistent<Value> factory;
 };
 
-PendingModule::PendingModule() {
-}
+PendingModule::PendingModule() = default;
 
 PendingModule::~PendingModule() {
   factory.Reset();
diff --git a/gin/modules/module_runner_delegate.cc b/gin/modules/module_runner_delegate.cc
index ce969a09..0634fff3 100644
--- a/gin/modules/module_runner_delegate.cc
+++ b/gin/modules/module_runner_delegate.cc
@@ -17,8 +17,7 @@
     : module_provider_(search_paths) {
 }
 
-ModuleRunnerDelegate::~ModuleRunnerDelegate() {
-}
+ModuleRunnerDelegate::~ModuleRunnerDelegate() = default;
 
 void ModuleRunnerDelegate::AddBuiltinModule(const std::string& id,
                                             ModuleGetter getter) {
diff --git a/gin/modules/timer.cc b/gin/modules/timer.cc
index e1deeaad..1f60900 100644
--- a/gin/modules/timer.cc
+++ b/gin/modules/timer.cc
@@ -54,8 +54,7 @@
                base::Bind(&Timer::OnTimerFired, weak_factory_.GetWeakPtr()));
 }
 
-Timer::~Timer() {
-}
+Timer::~Timer() = default;
 
 void Timer::OnTimerFired() {
   // This can happen in spite of the weak callback because it is possible for
@@ -97,11 +96,9 @@
   return Create(isolate)->GetWrapper(isolate).ToLocalChecked();
 }
 
-TimerModule::TimerModule() {
-}
+TimerModule::TimerModule() = default;
 
-TimerModule::~TimerModule() {
-}
+TimerModule::~TimerModule() = default;
 
 ObjectTemplateBuilder TimerModule::GetObjectTemplateBuilder(
     v8::Isolate* isolate) {
diff --git a/gin/modules/timer_unittest.cc b/gin/modules/timer_unittest.cc
index 0a1a2b9..2490d23 100644
--- a/gin/modules/timer_unittest.cc
+++ b/gin/modules/timer_unittest.cc
@@ -37,7 +37,7 @@
   Result() : count_(0) {
   }
 
-  ~Result() override {}
+  ~Result() override = default;
 
   ObjectTemplateBuilder GetObjectTemplateBuilder(
       v8::Isolate* isolate) override {
diff --git a/gin/object_template_builder.cc b/gin/object_template_builder.cc
index a40df60..c905efee 100644
--- a/gin/object_template_builder.cc
+++ b/gin/object_template_builder.cc
@@ -148,8 +148,7 @@
 ObjectTemplateBuilder::ObjectTemplateBuilder(
     const ObjectTemplateBuilder& other) = default;
 
-ObjectTemplateBuilder::~ObjectTemplateBuilder() {
-}
+ObjectTemplateBuilder::~ObjectTemplateBuilder() = default;
 
 ObjectTemplateBuilder& ObjectTemplateBuilder::AddNamedPropertyInterceptor() {
   template_->SetNamedPropertyHandler(&NamedPropertyGetter,
diff --git a/gin/runner.cc b/gin/runner.cc
index 6f018b1..dd04c15 100644
--- a/gin/runner.cc
+++ b/gin/runner.cc
@@ -9,8 +9,7 @@
 Runner::Runner() : weak_factory_(this) {
 }
 
-Runner::~Runner() {
-}
+Runner::~Runner() = default;
 
 Runner::Scope::Scope(Runner* runner)
     : isolate_scope_(runner->GetContextHolder()->isolate()),
@@ -18,7 +17,6 @@
       scope_(runner->GetContextHolder()->context()) {
 }
 
-Runner::Scope::~Scope() {
-}
+Runner::Scope::~Scope() = default;
 
 }  // namespace gin
diff --git a/gin/shell_runner.cc b/gin/shell_runner.cc
index 0e534e4..b98240a1 100644
--- a/gin/shell_runner.cc
+++ b/gin/shell_runner.cc
@@ -19,11 +19,9 @@
 
 namespace gin {
 
-ShellRunnerDelegate::ShellRunnerDelegate() {
-}
+ShellRunnerDelegate::ShellRunnerDelegate() = default;
 
-ShellRunnerDelegate::~ShellRunnerDelegate() {
-}
+ShellRunnerDelegate::~ShellRunnerDelegate() = default;
 
 v8::Local<ObjectTemplate> ShellRunnerDelegate::GetGlobalTemplate(
     ShellRunner* runner,
@@ -60,8 +58,7 @@
   delegate_->DidCreateContext(this);
 }
 
-ShellRunner::~ShellRunner() {
-}
+ShellRunner::~ShellRunner() = default;
 
 void ShellRunner::Run(const std::string& source,
                       const std::string& resource_name) {
diff --git a/gin/test/file_runner.cc b/gin/test/file_runner.cc
index a9c77fb..853a695 100644
--- a/gin/test/file_runner.cc
+++ b/gin/test/file_runner.cc
@@ -44,8 +44,7 @@
   AddBuiltinModule(File::kModuleName, File::GetModule);
 }
 
-FileRunnerDelegate::~FileRunnerDelegate() {
-}
+FileRunnerDelegate::~FileRunnerDelegate() = default;
 
 void FileRunnerDelegate::UnhandledException(ShellRunner* runner,
                                             TryCatch& try_catch) {
diff --git a/gin/test/v8_test.cc b/gin/test/v8_test.cc
index 590266f..88009dd 100644
--- a/gin/test/v8_test.cc
+++ b/gin/test/v8_test.cc
@@ -15,11 +15,9 @@
 
 namespace gin {
 
-V8Test::V8Test() {
-}
+V8Test::V8Test() = default;
 
-V8Test::~V8Test() {
-}
+V8Test::~V8Test() = default;
 
 void V8Test::SetUp() {
 #ifdef V8_USE_EXTERNAL_STARTUP_DATA
diff --git a/gin/try_catch.cc b/gin/try_catch.cc
index df27b9c..24512bc 100644
--- a/gin/try_catch.cc
+++ b/gin/try_catch.cc
@@ -25,8 +25,7 @@
     : isolate_(isolate), try_catch_(isolate) {
 }
 
-TryCatch::~TryCatch() {
-}
+TryCatch::~TryCatch() = default;
 
 bool TryCatch::HasCaught() {
   return try_catch_.HasCaught();
diff --git a/gin/v8_foreground_task_runner.cc b/gin/v8_foreground_task_runner.cc
index afc2824..9adb503 100644
--- a/gin/v8_foreground_task_runner.cc
+++ b/gin/v8_foreground_task_runner.cc
@@ -17,7 +17,7 @@
   DCHECK(task_runner_);
 }
 
-V8ForegroundTaskRunner::~V8ForegroundTaskRunner() {}
+V8ForegroundTaskRunner::~V8ForegroundTaskRunner() = default;
 
 void V8ForegroundTaskRunner::PostTask(std::unique_ptr<v8::Task> task) {
   task_runner_->PostTask(FROM_HERE,
diff --git a/gin/v8_foreground_task_runner_base.cc b/gin/v8_foreground_task_runner_base.cc
index 53f6104..7c21af8 100644
--- a/gin/v8_foreground_task_runner_base.cc
+++ b/gin/v8_foreground_task_runner_base.cc
@@ -6,9 +6,9 @@
 
 namespace gin {
 
-V8ForegroundTaskRunnerBase::V8ForegroundTaskRunnerBase() {}
+V8ForegroundTaskRunnerBase::V8ForegroundTaskRunnerBase() = default;
 
-V8ForegroundTaskRunnerBase::~V8ForegroundTaskRunnerBase() {}
+V8ForegroundTaskRunnerBase::~V8ForegroundTaskRunnerBase() = default;
 
 void V8ForegroundTaskRunnerBase::EnableIdleTasks(
     std::unique_ptr<V8IdleTaskRunner> idle_task_runner) {
diff --git a/gin/v8_foreground_task_runner_with_locker.cc b/gin/v8_foreground_task_runner_with_locker.cc
index 4a60141..13aead5 100644
--- a/gin/v8_foreground_task_runner_with_locker.cc
+++ b/gin/v8_foreground_task_runner_with_locker.cc
@@ -19,7 +19,7 @@
   DCHECK(task_runner_);
 }
 
-V8ForegroundTaskRunnerWithLocker::~V8ForegroundTaskRunnerWithLocker() {}
+V8ForegroundTaskRunnerWithLocker::~V8ForegroundTaskRunnerWithLocker() = default;
 
 namespace {
 
diff --git a/gin/v8_platform.cc b/gin/v8_platform.cc
index 8b071b8..784a49a 100644
--- a/gin/v8_platform.cc
+++ b/gin/v8_platform.cc
@@ -168,7 +168,7 @@
 
 V8Platform::V8Platform() : tracing_controller_(new TracingControllerImpl) {}
 
-V8Platform::~V8Platform() {}
+V8Platform::~V8Platform() = default;
 
 void V8Platform::OnCriticalMemoryPressure() {
 #if defined(OS_WIN)
diff --git a/gin/wrappable.cc b/gin/wrappable.cc
index 5717c97..22033bea 100644
--- a/gin/wrappable.cc
+++ b/gin/wrappable.cc
@@ -10,8 +10,7 @@
 
 namespace gin {
 
-WrappableBase::WrappableBase() {
-}
+WrappableBase::WrappableBase() = default;
 
 WrappableBase::~WrappableBase() {
   wrapper_.Reset();
diff --git a/gin/wrappable_unittest.cc b/gin/wrappable_unittest.cc
index f4f35c0..e20850f 100644
--- a/gin/wrappable_unittest.cc
+++ b/gin/wrappable_unittest.cc
@@ -22,7 +22,7 @@
 class BaseClass {
  public:
   BaseClass() : value_(23) {}
-  virtual ~BaseClass() {}
+  virtual ~BaseClass() = default;
 
   // So the compiler doesn't complain that |value_| is unused.
   int value() const { return value_; }
@@ -51,7 +51,7 @@
     return Wrappable<MyObject>::GetObjectTemplateBuilder(isolate)
         .SetProperty("value", &MyObject::value, &MyObject::set_value);
   }
-  ~MyObject() override {}
+  ~MyObject() override = default;
 
  private:
   int value_;
@@ -76,7 +76,7 @@
   MyCallableObject() : result_(0) {
   }
 
-  ~MyCallableObject() override {}
+  ~MyCallableObject() override = default;
 
   void Call(int val1, int val2, int val3, const gin::Arguments& arguments) {
     if (arguments.IsConstructCall())
diff --git a/ios/third_party/motion_interchange_objc/BUILD.gn b/ios/third_party/motion_interchange_objc/BUILD.gn
new file mode 100644
index 0000000..1520955d6
--- /dev/null
+++ b/ios/third_party/motion_interchange_objc/BUILD.gn
@@ -0,0 +1,37 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+config("config") {
+  include_dirs = [ "src/src" ]
+  visibility = [ ":motion_interchange_objc" ]
+}
+
+source_set("motion_interchange_objc") {
+  sources = [
+    "src/src/MDMMotionCurve.h",
+    "src/src/MDMMotionCurve.m",
+    "src/src/MDMMotionRepetition.h",
+    "src/src/MDMMotionTiming.h",
+    "src/src/MotionInterchange.h",
+  ]
+  public = [
+    "src/src/MDMMotionCurve.h",
+    "src/src/MDMMotionRepetition.h",
+    "src/src/MDMMotionTiming.h",
+    "src/src/MotionInterchange.h",
+  ]
+
+  libs = [
+    "CoreGraphics.framework",
+    "Foundation.framework",
+    "QuartzCore.framework",
+  ]
+  configs -= [ "//build/config/compiler:chromium_code" ]
+  configs += [
+    ":config",
+    "//build/config/compiler:enable_arc",
+    "//build/config/compiler:no_chromium_code",
+  ]
+  public_configs = [ ":config" ]
+}
diff --git a/ios/third_party/motion_interchange_objc/LICENSE b/ios/third_party/motion_interchange_objc/LICENSE
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/ios/third_party/motion_interchange_objc/LICENSE
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/ios/third_party/motion_interchange_objc/OWNERS b/ios/third_party/motion_interchange_objc/OWNERS
new file mode 100644
index 0000000..e9a3f8b3
--- /dev/null
+++ b/ios/third_party/motion_interchange_objc/OWNERS
@@ -0,0 +1,9 @@
+sdefresne@chromium.org
+rohitrao@chromium.org
+
+# These are for the common case of adding or renaming files. If you're doing
+# structural changes, please get a review from an OWNER.
+per-file BUILD.gn=*
+
+# TEAM: ios-directory-owners@chromium.org
+# OS: iOS
diff --git a/ios/third_party/motion_interchange_objc/README.chromium b/ios/third_party/motion_interchange_objc/README.chromium
new file mode 100644
index 0000000..05fff511
--- /dev/null
+++ b/ios/third_party/motion_interchange_objc/README.chromium
@@ -0,0 +1,15 @@
+Name: Motion Interchange for Objective-C
+URL: https://github.com/material-motion/motion-interchange-objc
+Version: 0
+Revision: 02e2308e1c68cd966a91807b17bcdf57f92af401
+License: Apache 2.0
+License File: LICENSE
+Security Critical: yes
+
+Description:
+This library defines a format for representing motion in Objective-C and
+Swift applications. The primary data type, MotionTiming, allows you to
+describe the duration, delay, timing curve, and repetition for an animation.
+
+Local Modifications:
+None
diff --git a/media/audio/alsa/alsa_input.cc b/media/audio/alsa/alsa_input.cc
index 3b910ed..41324d8 100644
--- a/media/audio/alsa/alsa_input.cc
+++ b/media/audio/alsa/alsa_input.cc
@@ -50,7 +50,7 @@
       weak_factory_(this) {
 }
 
-AlsaPcmInputStream::~AlsaPcmInputStream() {}
+AlsaPcmInputStream::~AlsaPcmInputStream() = default;
 
 bool AlsaPcmInputStream::Open() {
   if (device_handle_)
diff --git a/media/audio/alsa/alsa_wrapper.cc b/media/audio/alsa/alsa_wrapper.cc
index 5719ebe..a11a4a4 100644
--- a/media/audio/alsa/alsa_wrapper.cc
+++ b/media/audio/alsa/alsa_wrapper.cc
@@ -6,11 +6,9 @@
 
 namespace media {
 
-AlsaWrapper::AlsaWrapper() {
-}
+AlsaWrapper::AlsaWrapper() = default;
 
-AlsaWrapper::~AlsaWrapper() {
-}
+AlsaWrapper::~AlsaWrapper() = default;
 
 int AlsaWrapper::PcmOpen(snd_pcm_t** handle, const char* name,
                          snd_pcm_stream_t stream, int mode) {
diff --git a/media/audio/audio_debug_file_writer_unittest.cc b/media/audio/audio_debug_file_writer_unittest.cc
index cba61b9..aa47ae2 100644
--- a/media/audio/audio_debug_file_writer_unittest.cc
+++ b/media/audio/audio_debug_file_writer_unittest.cc
@@ -62,7 +62,7 @@
   }
 
  protected:
-  virtual ~AudioDebugFileWriterTest() {}
+  virtual ~AudioDebugFileWriterTest() = default;
 
   static void InitSourceInterleaved(int16_t* source_interleaved,
                                     int source_samples) {
diff --git a/media/audio/audio_debug_recording_helper_unittest.cc b/media/audio/audio_debug_recording_helper_unittest.cc
index 3e3eaf900..2976f6e 100644
--- a/media/audio/audio_debug_recording_helper_unittest.cc
+++ b/media/audio/audio_debug_recording_helper_unittest.cc
@@ -44,7 +44,7 @@
  public:
   MockAudioDebugFileWriter(const AudioParameters& params)
       : AudioDebugFileWriter(params), reference_data_(nullptr) {}
-  ~MockAudioDebugFileWriter() override {}
+  ~MockAudioDebugFileWriter() override = default;
 
   MOCK_METHOD1(Start, void(const base::FilePath&));
   MOCK_METHOD0(Stop, void());
@@ -93,7 +93,7 @@
       : AudioDebugRecordingHelper(params,
                                   std::move(task_runner),
                                   std::move(on_destruction_closure)) {}
-  ~AudioDebugRecordingHelperUnderTest() override {}
+  ~AudioDebugRecordingHelperUnderTest() override = default;
 
  private:
   // Creates the mock writer. After the mock writer is returned, we always
@@ -117,7 +117,7 @@
  public:
   AudioDebugRecordingHelperTest() : file_path_(kBaseFilePath) {}
 
-  ~AudioDebugRecordingHelperTest() override {}
+  ~AudioDebugRecordingHelperTest() override = default;
 
   // Helper function that creates a recording helper.
   std::unique_ptr<AudioDebugRecordingHelper> CreateRecordingHelper(
diff --git a/media/audio/audio_debug_recording_manager.cc b/media/audio/audio_debug_recording_manager.cc
index aaecb078..0bca5cdc 100644
--- a/media/audio/audio_debug_recording_manager.cc
+++ b/media/audio/audio_debug_recording_manager.cc
@@ -39,7 +39,7 @@
     scoped_refptr<base::SingleThreadTaskRunner> task_runner)
     : task_runner_(std::move(task_runner)), weak_factory_(this) {}
 
-AudioDebugRecordingManager::~AudioDebugRecordingManager() {}
+AudioDebugRecordingManager::~AudioDebugRecordingManager() = default;
 
 void AudioDebugRecordingManager::EnableDebugRecording(
     const base::FilePath& base_file_name) {
diff --git a/media/audio/audio_debug_recording_manager_unittest.cc b/media/audio/audio_debug_recording_manager_unittest.cc
index 9e3d088..9fea85d 100644
--- a/media/audio/audio_debug_recording_manager_unittest.cc
+++ b/media/audio/audio_debug_recording_manager_unittest.cc
@@ -90,7 +90,7 @@
   AudioDebugRecordingManagerUnderTest(
       scoped_refptr<base::SingleThreadTaskRunner> task_runner)
       : AudioDebugRecordingManager(std::move(task_runner)) {}
-  ~AudioDebugRecordingManagerUnderTest() override {}
+  ~AudioDebugRecordingManagerUnderTest() override = default;
 
  private:
   std::unique_ptr<AudioDebugRecordingHelper> CreateAudioDebugRecordingHelper(
@@ -111,7 +111,7 @@
       : manager_(message_loop_.task_runner()),
         base_file_path_(base::FilePath::FromUTF8Unsafe("base_path")) {}
 
-  ~AudioDebugRecordingManagerTest() override {}
+  ~AudioDebugRecordingManagerTest() override = default;
 
   // Registers a source and increases counter for the expected next source id.
   std::unique_ptr<AudioDebugRecorder> RegisterDebugRecordingSource(
diff --git a/media/audio/audio_device_name.cc b/media/audio/audio_device_name.cc
index cb14a08..a0d8e73 100644
--- a/media/audio/audio_device_name.cc
+++ b/media/audio/audio_device_name.cc
@@ -7,7 +7,7 @@
 
 namespace media {
 
-AudioDeviceName::AudioDeviceName() {}
+AudioDeviceName::AudioDeviceName() = default;
 
 AudioDeviceName::AudioDeviceName(const std::string& device_name,
                                  const std::string& unique_id)
diff --git a/media/audio/audio_device_thread.cc b/media/audio/audio_device_thread.cc
index cbbdffb..7232151 100644
--- a/media/audio/audio_device_thread.cc
+++ b/media/audio/audio_device_thread.cc
@@ -46,7 +46,7 @@
   thread_checker_.DetachFromThread();
 }
 
-AudioDeviceThread::Callback::~Callback() {}
+AudioDeviceThread::Callback::~Callback() = default;
 
 void AudioDeviceThread::Callback::InitializeOnAudioThread() {
   // Normally this function is called before the thread checker is used
diff --git a/media/audio/audio_input_controller.cc b/media/audio/audio_input_controller.cc
index 5173c79..21aba31 100644
--- a/media/audio/audio_input_controller.cc
+++ b/media/audio/audio_input_controller.cc
@@ -112,7 +112,7 @@
   explicit AudioCallback(AudioInputController* controller)
       : controller_(controller),
         weak_controller_(controller->weak_ptr_factory_.GetWeakPtr()) {}
-  ~AudioCallback() override {}
+  ~AudioCallback() override = default;
 
   bool received_callback() const { return received_callback_; }
   bool error_during_callback() const { return error_during_callback_; }
diff --git a/media/audio/audio_input_controller_unittest.cc b/media/audio/audio_input_controller_unittest.cc
index 392bf78..9e68797 100644
--- a/media/audio/audio_input_controller_unittest.cc
+++ b/media/audio/audio_input_controller_unittest.cc
@@ -61,7 +61,7 @@
 class MockAudioInputControllerEventHandler
     : public AudioInputController::EventHandler {
  public:
-  MockAudioInputControllerEventHandler() {}
+  MockAudioInputControllerEventHandler() = default;
 
   MOCK_METHOD1(OnCreated, void(bool initially_muted));
   MOCK_METHOD1(OnError, void(AudioInputController::ErrorCode error_code));
@@ -74,7 +74,7 @@
 
 class MockSyncWriter : public AudioInputController::SyncWriter {
  public:
-  MockSyncWriter() {}
+  MockSyncWriter() = default;
 
   MOCK_METHOD4(Write,
                void(const AudioBus* data,
@@ -86,7 +86,7 @@
 
 class MockUserInputMonitor : public UserInputMonitor {
  public:
-  MockUserInputMonitor() {}
+  MockUserInputMonitor() = default;
 
   size_t GetKeyPressCount() const { return 0; }
 
diff --git a/media/audio/audio_input_delegate.cc b/media/audio/audio_input_delegate.cc
index dc611a20..1310c00 100644
--- a/media/audio/audio_input_delegate.cc
+++ b/media/audio/audio_input_delegate.cc
@@ -4,6 +4,6 @@
 
 #include "media/audio/audio_input_delegate.h"
 
-media::AudioInputDelegate::EventHandler::~EventHandler() {}
+media::AudioInputDelegate::EventHandler::~EventHandler() = default;
 
-media::AudioInputDelegate::~AudioInputDelegate() {}
+media::AudioInputDelegate::~AudioInputDelegate() = default;
diff --git a/media/audio/audio_input_device.cc b/media/audio/audio_input_device.cc
index 9b8ccfa6..afe0bf9 100644
--- a/media/audio/audio_input_device.cc
+++ b/media/audio/audio_input_device.cc
@@ -381,8 +381,7 @@
       frames_since_last_got_data_callback_(0),
       got_data_callback_(std::move(got_data_callback_)) {}
 
-AudioInputDevice::AudioThreadCallback::~AudioThreadCallback() {
-}
+AudioInputDevice::AudioThreadCallback::~AudioThreadCallback() = default;
 
 void AudioInputDevice::AudioThreadCallback::MapSharedMemory() {
   shared_memory_.Map(memory_length_);
diff --git a/media/audio/audio_input_device_unittest.cc b/media/audio/audio_input_device_unittest.cc
index 16ff0fc6..7861aa3 100644
--- a/media/audio/audio_input_device_unittest.cc
+++ b/media/audio/audio_input_device_unittest.cc
@@ -29,8 +29,8 @@
 
 class MockAudioInputIPC : public AudioInputIPC {
  public:
-  MockAudioInputIPC() {}
-  ~MockAudioInputIPC() override {}
+  MockAudioInputIPC() = default;
+  ~MockAudioInputIPC() override = default;
 
   MOCK_METHOD5(CreateStream,
                void(AudioInputIPCDelegate* delegate,
@@ -45,8 +45,8 @@
 
 class MockCaptureCallback : public AudioCapturerSource::CaptureCallback {
  public:
-  MockCaptureCallback() {}
-  ~MockCaptureCallback() override {}
+  MockCaptureCallback() = default;
+  ~MockCaptureCallback() override = default;
 
   MOCK_METHOD0(OnCaptureStarted, void());
   MOCK_METHOD4(Capture,
diff --git a/media/audio/audio_input_ipc.cc b/media/audio/audio_input_ipc.cc
index 69253b05..cb7557d 100644
--- a/media/audio/audio_input_ipc.cc
+++ b/media/audio/audio_input_ipc.cc
@@ -6,8 +6,8 @@
 
 namespace media {
 
-AudioInputIPCDelegate::~AudioInputIPCDelegate() {}
+AudioInputIPCDelegate::~AudioInputIPCDelegate() = default;
 
-AudioInputIPC::~AudioInputIPC() {}
+AudioInputIPC::~AudioInputIPC() = default;
 
 }  // namespace media
diff --git a/media/audio/audio_input_stream_data_interceptor_unittest.cc b/media/audio/audio_input_stream_data_interceptor_unittest.cc
index 6a35658..05b8357 100644
--- a/media/audio/audio_input_stream_data_interceptor_unittest.cc
+++ b/media/audio/audio_input_stream_data_interceptor_unittest.cc
@@ -27,8 +27,8 @@
 
 class MockStream : public AudioInputStream {
  public:
-  MockStream() {}
-  ~MockStream() {}
+  MockStream() = default;
+  ~MockStream() = default;
   MOCK_METHOD0(Open, bool());
   MOCK_METHOD1(Start, void(AudioInputStream::AudioInputCallback*));
   MOCK_METHOD0(Stop, void());
@@ -43,15 +43,15 @@
 
 class MockDebugRecorder : public AudioDebugRecorder {
  public:
-  MockDebugRecorder() {}
-  ~MockDebugRecorder() {}
+  MockDebugRecorder() = default;
+  ~MockDebugRecorder() = default;
   MOCK_METHOD1(OnData, void(const AudioBus* source));
 };
 
 class MockCallback : public AudioInputStream::AudioInputCallback {
  public:
-  MockCallback() {}
-  ~MockCallback() {}
+  MockCallback() = default;
+  ~MockCallback() = default;
 
   MOCK_METHOD3(OnData, void(const AudioBus*, base::TimeTicks, double));
   MOCK_METHOD0(OnError, void());
@@ -59,7 +59,7 @@
 
 class MockDebugRecorderFactory {
  public:
-  MockDebugRecorderFactory() {}
+  MockDebugRecorderFactory() = default;
   ~MockDebugRecorderFactory() { DCHECK(!prepared_recorder_); }
 
   std::unique_ptr<AudioDebugRecorder> CreateDebugRecorder() {
diff --git a/media/audio/audio_low_latency_input_output_unittest.cc b/media/audio/audio_low_latency_input_output_unittest.cc
index e8754da9..f888015 100644
--- a/media/audio/audio_low_latency_input_output_unittest.cc
+++ b/media/audio/audio_low_latency_input_output_unittest.cc
@@ -298,7 +298,7 @@
     samples_per_packet_ = params.frames_per_buffer();
   }
 
-  virtual ~StreamWrapper() {}
+  virtual ~StreamWrapper() = default;
 
   // Creates an Audio[Input|Output]Stream stream object using default
   // parameters.
diff --git a/media/audio/audio_manager.cc b/media/audio/audio_manager.cc
index 77e509a6..edeff13 100644
--- a/media/audio/audio_manager.cc
+++ b/media/audio/audio_manager.cc
@@ -55,8 +55,8 @@
     THREAD_MAX = THREAD_RECOVERED
   };
 
-  AudioManagerHelper() {}
-  ~AudioManagerHelper() override {}
+  AudioManagerHelper() = default;
+  ~AudioManagerHelper() override = default;
 
   void StartHangTimer(
       scoped_refptr<base::SingleThreadTaskRunner> monitor_task_runner) {
diff --git a/media/audio/audio_manager_base.cc b/media/audio/audio_manager_base.cc
index 0d3bc4d..c00f901 100644
--- a/media/audio/audio_manager_base.cc
+++ b/media/audio/audio_manager_base.cc
@@ -72,7 +72,7 @@
       : input_params(input),
         output_params(output),
         output_device_id(output_device_id) {}
-  ~DispatcherParams() {}
+  ~DispatcherParams() = default;
 
   const AudioParameters input_params;
   const AudioParameters output_params;
diff --git a/media/audio/audio_manager_unittest.cc b/media/audio/audio_manager_unittest.cc
index 94aa3fb..4cbd427 100644
--- a/media/audio/audio_manager_unittest.cc
+++ b/media/audio/audio_manager_unittest.cc
@@ -581,7 +581,7 @@
       scoped_refptr<base::SingleThreadTaskRunner> task_runner)
       : AudioDebugRecordingManager(std::move(task_runner)) {}
 
-  ~MockAudioDebugRecordingManager() override {}
+  ~MockAudioDebugRecordingManager() override = default;
 
   MOCK_METHOD1(EnableDebugRecording, void(const base::FilePath&));
   MOCK_METHOD0(DisableDebugRecording, void());
diff --git a/media/audio/audio_output_controller_unittest.cc b/media/audio/audio_output_controller_unittest.cc
index 0c7c15eb..f1e1c106 100644
--- a/media/audio/audio_output_controller_unittest.cc
+++ b/media/audio/audio_output_controller_unittest.cc
@@ -48,7 +48,7 @@
 class MockAudioOutputControllerEventHandler
     : public AudioOutputController::EventHandler {
  public:
-  MockAudioOutputControllerEventHandler() {}
+  MockAudioOutputControllerEventHandler() = default;
 
   MOCK_METHOD0(OnControllerCreated, void());
   MOCK_METHOD0(OnControllerPlaying, void());
@@ -63,7 +63,7 @@
 class MockAudioOutputControllerSyncReader
     : public AudioOutputController::SyncReader {
  public:
-  MockAudioOutputControllerSyncReader() {}
+  MockAudioOutputControllerSyncReader() = default;
 
   MOCK_METHOD3(RequestMoreData,
                void(base::TimeDelta delay,
diff --git a/media/audio/audio_output_delegate.cc b/media/audio/audio_output_delegate.cc
index 4d211fd..98e11e96 100644
--- a/media/audio/audio_output_delegate.cc
+++ b/media/audio/audio_output_delegate.cc
@@ -4,6 +4,6 @@
 
 #include "media/audio/audio_output_delegate.h"
 
-media::AudioOutputDelegate::EventHandler::~EventHandler() {}
+media::AudioOutputDelegate::EventHandler::~EventHandler() = default;
 
-media::AudioOutputDelegate::~AudioOutputDelegate() {}
+media::AudioOutputDelegate::~AudioOutputDelegate() = default;
diff --git a/media/audio/audio_output_device.cc b/media/audio/audio_output_device.cc
index 16b60da..02d5431 100644
--- a/media/audio/audio_output_device.cc
+++ b/media/audio/audio_output_device.cc
@@ -466,8 +466,7 @@
       render_callback_(render_callback),
       callback_num_(0) {}
 
-AudioOutputDevice::AudioThreadCallback::~AudioThreadCallback() {
-}
+AudioOutputDevice::AudioThreadCallback::~AudioThreadCallback() = default;
 
 void AudioOutputDevice::AudioThreadCallback::MapSharedMemory() {
   CHECK_EQ(total_segments_, 1u);
diff --git a/media/audio/audio_output_device_unittest.cc b/media/audio/audio_output_device_unittest.cc
index b6a866c5..b85ce9b 100644
--- a/media/audio/audio_output_device_unittest.cc
+++ b/media/audio/audio_output_device_unittest.cc
@@ -53,8 +53,8 @@
 
 class MockRenderCallback : public AudioRendererSink::RenderCallback {
  public:
-  MockRenderCallback() {}
-  virtual ~MockRenderCallback() {}
+  MockRenderCallback() = default;
+  virtual ~MockRenderCallback() = default;
 
   MOCK_METHOD4(Render,
                int(base::TimeDelta delay,
@@ -76,8 +76,8 @@
 
 class MockAudioOutputIPC : public AudioOutputIPC {
  public:
-  MockAudioOutputIPC() {}
-  virtual ~MockAudioOutputIPC() {}
+  MockAudioOutputIPC() = default;
+  virtual ~MockAudioOutputIPC() = default;
 
   MOCK_METHOD4(RequestDeviceAuthorization,
                void(AudioOutputIPCDelegate* delegate,
diff --git a/media/audio/audio_output_ipc.cc b/media/audio/audio_output_ipc.cc
index 233a3b8..eb07d30 100644
--- a/media/audio/audio_output_ipc.cc
+++ b/media/audio/audio_output_ipc.cc
@@ -6,8 +6,8 @@
 
 namespace media {
 
-AudioOutputIPCDelegate::~AudioOutputIPCDelegate() {}
+AudioOutputIPCDelegate::~AudioOutputIPCDelegate() = default;
 
-AudioOutputIPC::~AudioOutputIPC() {}
+AudioOutputIPC::~AudioOutputIPC() = default;
 
 }  // namespace media
diff --git a/media/audio/audio_output_proxy_unittest.cc b/media/audio/audio_output_proxy_unittest.cc
index 3341f20..295a98c6 100644
--- a/media/audio/audio_output_proxy_unittest.cc
+++ b/media/audio/audio_output_proxy_unittest.cc
@@ -81,7 +81,7 @@
     fake_output_stream_->Stop();
   }
 
-  ~MockAudioOutputStream() {}
+  ~MockAudioOutputStream() = default;
 
   bool start_called() { return start_called_; }
   bool stop_called() { return stop_called_; }
diff --git a/media/audio/audio_output_stream_sink.cc b/media/audio/audio_output_stream_sink.cc
index 3ed3967..b6d8edd 100644
--- a/media/audio/audio_output_stream_sink.cc
+++ b/media/audio/audio_output_stream_sink.cc
@@ -23,8 +23,7 @@
       audio_task_runner_(AudioManager::Get()->GetTaskRunner()),
       stream_(NULL) {}
 
-AudioOutputStreamSink::~AudioOutputStreamSink() {
-}
+AudioOutputStreamSink::~AudioOutputStreamSink() = default;
 
 void AudioOutputStreamSink::Initialize(const AudioParameters& params,
                                        RenderCallback* callback) {
diff --git a/media/audio/audio_power_monitor.cc b/media/audio/audio_power_monitor.cc
index efbad6c..f5d753d 100644
--- a/media/audio/audio_power_monitor.cc
+++ b/media/audio/audio_power_monitor.cc
@@ -21,8 +21,7 @@
   Reset();
 }
 
-AudioPowerMonitor::~AudioPowerMonitor() {
-}
+AudioPowerMonitor::~AudioPowerMonitor() = default;
 
 void AudioPowerMonitor::Reset() {
   // These are only read/written by Scan(), but Scan() should not be running
diff --git a/media/audio/audio_system.cc b/media/audio/audio_system.cc
index dfcd7bdc..c45c38a 100644
--- a/media/audio/audio_system.cc
+++ b/media/audio/audio_system.cc
@@ -10,7 +10,7 @@
 
 namespace media {
 
-AudioSystem::~AudioSystem() {}
+AudioSystem::~AudioSystem() = default;
 
 // static
 std::unique_ptr<AudioSystem> AudioSystem::CreateInstance() {
diff --git a/media/audio/audio_system_helper.cc b/media/audio/audio_system_helper.cc
index 511a7ce..771fc36 100644
--- a/media/audio/audio_system_helper.cc
+++ b/media/audio/audio_system_helper.cc
@@ -36,7 +36,7 @@
   DCHECK(audio_manager_);
 }
 
-AudioSystemHelper::~AudioSystemHelper() {}
+AudioSystemHelper::~AudioSystemHelper() = default;
 
 void AudioSystemHelper::GetInputStreamParameters(
     const std::string& device_id,
diff --git a/media/audio/audio_system_impl_unittest.cc b/media/audio/audio_system_impl_unittest.cc
index b712b24..f1ab06b 100644
--- a/media/audio/audio_system_impl_unittest.cc
+++ b/media/audio/audio_system_impl_unittest.cc
@@ -20,9 +20,9 @@
 template <bool use_audio_thread>
 class AudioSystemImplTestBase : public testing::Test {
  public:
-  AudioSystemImplTestBase() {}
+  AudioSystemImplTestBase() = default;
 
-  ~AudioSystemImplTestBase() override {}
+  ~AudioSystemImplTestBase() override = default;
 
   void SetUp() override {
     audio_manager_ = std::make_unique<MockAudioManager>(
diff --git a/media/audio/clockless_audio_sink.cc b/media/audio/clockless_audio_sink.cc
index d95f40e..4f15d24 100644
--- a/media/audio/clockless_audio_sink.cc
+++ b/media/audio/clockless_audio_sink.cc
@@ -87,7 +87,7 @@
       hashing_(false),
       is_optimized_for_hw_params_(true) {}
 
-ClocklessAudioSink::~ClocklessAudioSink() {}
+ClocklessAudioSink::~ClocklessAudioSink() = default;
 
 void ClocklessAudioSink::Initialize(const AudioParameters& params,
                                     RenderCallback* callback) {
diff --git a/media/audio/fake_audio_log_factory.cc b/media/audio/fake_audio_log_factory.cc
index a7c08329..562540b 100644
--- a/media/audio/fake_audio_log_factory.cc
+++ b/media/audio/fake_audio_log_factory.cc
@@ -12,8 +12,8 @@
 
 class FakeAudioLogImpl : public AudioLog {
  public:
-  FakeAudioLogImpl() {}
-  ~FakeAudioLogImpl() override {}
+  FakeAudioLogImpl() = default;
+  ~FakeAudioLogImpl() override = default;
   void OnCreated(int component_id,
                  const media::AudioParameters& params,
                  const std::string& device_id) override {}
@@ -27,8 +27,8 @@
   void OnLogMessage(int component_id, const std::string& message) override {}
 };
 
-FakeAudioLogFactory::FakeAudioLogFactory() {}
-FakeAudioLogFactory::~FakeAudioLogFactory() {}
+FakeAudioLogFactory::FakeAudioLogFactory() = default;
+FakeAudioLogFactory::~FakeAudioLogFactory() = default;
 
 std::unique_ptr<AudioLog> FakeAudioLogFactory::CreateAudioLog(
     AudioComponent component) {
diff --git a/media/audio/mock_audio_manager.cc b/media/audio/mock_audio_manager.cc
index 96f1667..562d9ae 100644
--- a/media/audio/mock_audio_manager.cc
+++ b/media/audio/mock_audio_manager.cc
@@ -15,8 +15,7 @@
 MockAudioManager::MockAudioManager(std::unique_ptr<AudioThread> audio_thread)
     : AudioManager(std::move(audio_thread)) {}
 
-MockAudioManager::~MockAudioManager() {
-}
+MockAudioManager::~MockAudioManager() = default;
 
 void MockAudioManager::ShutdownOnAudioThread() {}
 
diff --git a/media/audio/mock_audio_source_callback.cc b/media/audio/mock_audio_source_callback.cc
index da2be1c..106b755 100644
--- a/media/audio/mock_audio_source_callback.cc
+++ b/media/audio/mock_audio_source_callback.cc
@@ -6,7 +6,7 @@
 
 namespace media {
 
-MockAudioSourceCallback::MockAudioSourceCallback() {}
-MockAudioSourceCallback::~MockAudioSourceCallback() {}
+MockAudioSourceCallback::MockAudioSourceCallback() = default;
+MockAudioSourceCallback::~MockAudioSourceCallback() = default;
 
 }  // namespace media
diff --git a/media/audio/null_audio_sink.cc b/media/audio/null_audio_sink.cc
index 36bc8d18..58f120e 100644
--- a/media/audio/null_audio_sink.cc
+++ b/media/audio/null_audio_sink.cc
@@ -20,7 +20,7 @@
       callback_(NULL),
       task_runner_(task_runner) {}
 
-NullAudioSink::~NullAudioSink() {}
+NullAudioSink::~NullAudioSink() = default;
 
 void NullAudioSink::Initialize(const AudioParameters& params,
                                RenderCallback* callback) {
diff --git a/media/audio/simple_sources.cc b/media/audio/simple_sources.cc
index a2f181ca..ca9bf98b 100644
--- a/media/audio/simple_sources.cc
+++ b/media/audio/simple_sources.cc
@@ -111,8 +111,7 @@
       errors_(0) {
 }
 
-SineWaveAudioSource::~SineWaveAudioSource() {
-}
+SineWaveAudioSource::~SineWaveAudioSource() = default;
 
 // The implementation could be more efficient if a lookup table is constructed
 // but it is efficient enough for our simple needs.
@@ -162,8 +161,7 @@
       load_failed_(false),
       looping_(loop) {}
 
-FileSource::~FileSource() {
-}
+FileSource::~FileSource() = default;
 
 void FileSource::LoadWavFile(const base::FilePath& path_to_wav_file) {
   // Don't try again if we already failed.
@@ -257,8 +255,7 @@
       beep_generated_in_buffers_(0),
       beep_period_in_frames_(params.sample_rate() / kBeepFrequency) {}
 
-BeepingSource::~BeepingSource() {
-}
+BeepingSource::~BeepingSource() = default;
 
 int BeepingSource::OnMoreData(base::TimeDelta /* delay */,
                               base::TimeTicks /* delay_timestamp */,
diff --git a/media/audio/sounds/audio_stream_handler_unittest.cc b/media/audio/sounds/audio_stream_handler_unittest.cc
index 47e40fef..52bfde3 100644
--- a/media/audio/sounds/audio_stream_handler_unittest.cc
+++ b/media/audio/sounds/audio_stream_handler_unittest.cc
@@ -27,8 +27,8 @@
 
 class AudioStreamHandlerTest : public testing::Test {
  public:
-  AudioStreamHandlerTest() {}
-  ~AudioStreamHandlerTest() override {}
+  AudioStreamHandlerTest() = default;
+  ~AudioStreamHandlerTest() override = default;
 
   void SetUp() override {
     audio_manager_ =
diff --git a/media/audio/sounds/sounds_manager.cc b/media/audio/sounds/sounds_manager.cc
index 46ba140..cb610b2 100644
--- a/media/audio/sounds/sounds_manager.cc
+++ b/media/audio/sounds/sounds_manager.cc
@@ -22,7 +22,7 @@
 
 class SoundsManagerImpl : public SoundsManager {
  public:
-  SoundsManagerImpl() {}
+  SoundsManagerImpl() = default;
   ~SoundsManagerImpl() override {
     DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   }
@@ -94,7 +94,7 @@
 
 }  // namespace
 
-SoundsManager::SoundsManager() {}
+SoundsManager::SoundsManager() = default;
 
 SoundsManager::~SoundsManager() {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
diff --git a/media/audio/sounds/sounds_manager_unittest.cc b/media/audio/sounds/sounds_manager_unittest.cc
index f4b4a369..0fad2d0 100644
--- a/media/audio/sounds/sounds_manager_unittest.cc
+++ b/media/audio/sounds/sounds_manager_unittest.cc
@@ -23,8 +23,8 @@
 
 class SoundsManagerTest : public testing::Test {
  public:
-  SoundsManagerTest() {}
-  ~SoundsManagerTest() override {}
+  SoundsManagerTest() = default;
+  ~SoundsManagerTest() override = default;
 
   void SetUp() override {
     audio_manager_ =
diff --git a/media/audio/sounds/test_data.cc b/media/audio/sounds/test_data.cc
index a0a0dfa..120a735 100644
--- a/media/audio/sounds/test_data.cc
+++ b/media/audio/sounds/test_data.cc
@@ -16,8 +16,7 @@
       num_stop_requests_(0),
       cursor_(0) {}
 
-TestObserver::~TestObserver() {
-}
+TestObserver::~TestObserver() = default;
 
 void TestObserver::OnPlay() {
   ++num_play_requests_;
diff --git a/media/audio/sounds/wav_audio_handler.cc b/media/audio/sounds/wav_audio_handler.cc
index 8f934cc..df3674b 100644
--- a/media/audio/sounds/wav_audio_handler.cc
+++ b/media/audio/sounds/wav_audio_handler.cc
@@ -172,7 +172,7 @@
   total_frames_ = data_.size() * 8 / num_channels_ / bits_per_sample_;
 }
 
-WavAudioHandler::~WavAudioHandler() {}
+WavAudioHandler::~WavAudioHandler() = default;
 
 // static
 std::unique_ptr<WavAudioHandler> WavAudioHandler::Create(
diff --git a/media/audio/virtual_audio_input_stream_unittest.cc b/media/audio/virtual_audio_input_stream_unittest.cc
index 0ee9168..e5bae4a 100644
--- a/media/audio/virtual_audio_input_stream_unittest.cc
+++ b/media/audio/virtual_audio_input_stream_unittest.cc
@@ -42,7 +42,7 @@
             InvokeWithoutArgs(&data_pushed_, &base::WaitableEvent::Signal));
   }
 
-  virtual ~MockInputCallback() {}
+  virtual ~MockInputCallback() = default;
 
   MOCK_METHOD3(OnData,
                void(const AudioBus* source,
@@ -71,7 +71,7 @@
         data_pulled_(base::WaitableEvent::ResetPolicy::AUTOMATIC,
                      base::WaitableEvent::InitialState::NOT_SIGNALED) {}
 
-  ~TestAudioSource() override {}
+  ~TestAudioSource() override = default;
 
   int OnMoreData(base::TimeDelta delay,
                  base::TimeTicks delay_timestamp,
diff --git a/media/audio/virtual_audio_output_stream_unittest.cc b/media/audio/virtual_audio_output_stream_unittest.cc
index 64fc8c6..8998d01 100644
--- a/media/audio/virtual_audio_output_stream_unittest.cc
+++ b/media/audio/virtual_audio_output_stream_unittest.cc
@@ -33,7 +33,7 @@
             kParams,
             worker_task_runner,
             base::Bind(&base::DeletePointer<VirtualAudioInputStream>)) {}
-  ~MockVirtualAudioInputStream() {}
+  ~MockVirtualAudioInputStream() = default;
 
   MOCK_METHOD2(AddInputProvider,
                void(AudioConverter::InputCallback* input,
diff --git a/media/audio/virtual_audio_sink.cc b/media/audio/virtual_audio_sink.cc
index f5e29e13..41b3066 100644
--- a/media/audio/virtual_audio_sink.cc
+++ b/media/audio/virtual_audio_sink.cc
@@ -40,7 +40,7 @@
   target_->AddInputProvider(this, params_);
 }
 
-VirtualAudioSink::~VirtualAudioSink() {}
+VirtualAudioSink::~VirtualAudioSink() = default;
 
 void VirtualAudioSink::Close() {
   target_->RemoveInputProvider(this, params_);
diff --git a/media/base/audio_block_fifo.cc b/media/base/audio_block_fifo.cc
index 16fb03e..fe33ce5 100644
--- a/media/base/audio_block_fifo.cc
+++ b/media/base/audio_block_fifo.cc
@@ -23,7 +23,7 @@
   IncreaseCapacity(blocks);
 }
 
-AudioBlockFifo::~AudioBlockFifo() {}
+AudioBlockFifo::~AudioBlockFifo() = default;
 
 void AudioBlockFifo::Push(const void* source,
                           int frames,
diff --git a/media/base/audio_block_fifo_unittest.cc b/media/base/audio_block_fifo_unittest.cc
index 3f3ca443..cf0bb66 100644
--- a/media/base/audio_block_fifo_unittest.cc
+++ b/media/base/audio_block_fifo_unittest.cc
@@ -14,8 +14,8 @@
 
 class AudioBlockFifoTest : public testing::Test {
  public:
-  AudioBlockFifoTest() {}
-  ~AudioBlockFifoTest() override {}
+  AudioBlockFifoTest() = default;
+  ~AudioBlockFifoTest() override = default;
 
   void PushAndVerify(AudioBlockFifo* fifo,
                      int frames_to_push,
diff --git a/media/base/audio_buffer.cc b/media/base/audio_buffer.cc
index e07aaf2..4c8a4380 100644
--- a/media/base/audio_buffer.cc
+++ b/media/base/audio_buffer.cc
@@ -19,8 +19,8 @@
       frames * base::Time::kMicrosecondsPerSecond / sample_rate);
 }
 
-AudioBufferMemoryPool::AudioBufferMemoryPool() {}
-AudioBufferMemoryPool::~AudioBufferMemoryPool() {}
+AudioBufferMemoryPool::AudioBufferMemoryPool() = default;
+AudioBufferMemoryPool::~AudioBufferMemoryPool() = default;
 
 AudioBufferMemoryPool::AudioMemory AudioBufferMemoryPool::CreateBuffer(
     size_t size) {
diff --git a/media/base/audio_buffer_converter.cc b/media/base/audio_buffer_converter.cc
index e13df1d7..d5cee38 100644
--- a/media/base/audio_buffer_converter.cc
+++ b/media/base/audio_buffer_converter.cc
@@ -36,7 +36,7 @@
       is_flushing_(false),
       pool_(new AudioBufferMemoryPool()) {}
 
-AudioBufferConverter::~AudioBufferConverter() {}
+AudioBufferConverter::~AudioBufferConverter() = default;
 
 void AudioBufferConverter::AddInput(const scoped_refptr<AudioBuffer>& buffer) {
   // On EOS flush any remaining buffered data.
diff --git a/media/base/audio_buffer_queue.cc b/media/base/audio_buffer_queue.cc
index e7e48713..a436b1e4 100644
--- a/media/base/audio_buffer_queue.cc
+++ b/media/base/audio_buffer_queue.cc
@@ -12,7 +12,7 @@
 namespace media {
 
 AudioBufferQueue::AudioBufferQueue() { Clear(); }
-AudioBufferQueue::~AudioBufferQueue() {}
+AudioBufferQueue::~AudioBufferQueue() = default;
 
 void AudioBufferQueue::Clear() {
   buffers_.clear();
diff --git a/media/base/audio_bus.cc b/media/base/audio_bus.cc
index 4dd71027..a3e1cb7 100644
--- a/media/base/audio_bus.cc
+++ b/media/base/audio_bus.cc
@@ -109,7 +109,7 @@
     channel_data_[i] = NULL;
 }
 
-AudioBus::~AudioBus() {}
+AudioBus::~AudioBus() = default;
 
 std::unique_ptr<AudioBus> AudioBus::Create(int channels, int frames) {
   return base::WrapUnique(new AudioBus(channels, frames));
diff --git a/media/base/audio_bus_unittest.cc b/media/base/audio_bus_unittest.cc
index 16b45f8..a7e12f3 100644
--- a/media/base/audio_bus_unittest.cc
+++ b/media/base/audio_bus_unittest.cc
@@ -30,7 +30,7 @@
 
 class AudioBusTest : public testing::Test {
  public:
-  AudioBusTest() {}
+  AudioBusTest() = default;
   ~AudioBusTest() override {
     for (size_t i = 0; i < data_.size(); ++i)
       base::AlignedFree(data_[i]);
diff --git a/media/base/audio_converter.cc b/media/base/audio_converter.cc
index 2677494..041043e 100644
--- a/media/base/audio_converter.cc
+++ b/media/base/audio_converter.cc
@@ -80,7 +80,7 @@
   }
 }
 
-AudioConverter::~AudioConverter() {}
+AudioConverter::~AudioConverter() = default;
 
 void AudioConverter::AddInput(InputCallback* input) {
   DCHECK(std::find(transform_inputs_.begin(), transform_inputs_.end(), input) ==
diff --git a/media/base/audio_converter_perftest.cc b/media/base/audio_converter_perftest.cc
index 1862beee..34ec050 100644
--- a/media/base/audio_converter_perftest.cc
+++ b/media/base/audio_converter_perftest.cc
@@ -17,8 +17,8 @@
 // InputCallback that zero's out the provided AudioBus.
 class NullInputProvider : public AudioConverter::InputCallback {
  public:
-  NullInputProvider() {}
-  ~NullInputProvider() override {}
+  NullInputProvider() = default;
+  ~NullInputProvider() override = default;
 
   double ProvideInput(AudioBus* audio_bus, uint32_t frames_delayed) override {
     audio_bus->Zero();
diff --git a/media/base/audio_converter_unittest.cc b/media/base/audio_converter_unittest.cc
index b25bb65..d1cd44f 100644
--- a/media/base/audio_converter_unittest.cc
+++ b/media/base/audio_converter_unittest.cc
@@ -168,7 +168,7 @@
   }
 
  protected:
-  virtual ~AudioConverterTest() {}
+  virtual ~AudioConverterTest() = default;
 
   // Converter under test.
   std::unique_ptr<AudioConverter> converter_;
diff --git a/media/base/audio_decoder.cc b/media/base/audio_decoder.cc
index 6e92458..4ff425e9 100644
--- a/media/base/audio_decoder.cc
+++ b/media/base/audio_decoder.cc
@@ -8,9 +8,9 @@
 
 namespace media {
 
-AudioDecoder::AudioDecoder() {}
+AudioDecoder::AudioDecoder() = default;
 
-AudioDecoder::~AudioDecoder() {}
+AudioDecoder::~AudioDecoder() = default;
 
 bool AudioDecoder::NeedsBitstreamConversion() const {
   return false;
diff --git a/media/base/audio_decoder_config.cc b/media/base/audio_decoder_config.cc
index 27bf7ad..c81697b 100644
--- a/media/base/audio_decoder_config.cc
+++ b/media/base/audio_decoder_config.cc
@@ -60,7 +60,7 @@
   should_discard_decoder_delay_ = true;
 }
 
-AudioDecoderConfig::~AudioDecoderConfig() {}
+AudioDecoderConfig::~AudioDecoderConfig() = default;
 
 bool AudioDecoderConfig::IsValidConfig() const {
   return codec_ != kUnknownAudioCodec &&
diff --git a/media/base/audio_discard_helper.cc b/media/base/audio_discard_helper.cc
index b0342899..c02801b 100644
--- a/media/base/audio_discard_helper.cc
+++ b/media/base/audio_discard_helper.cc
@@ -35,8 +35,7 @@
   DCHECK_GT(sample_rate_, 0);
 }
 
-AudioDiscardHelper::~AudioDiscardHelper() {
-}
+AudioDiscardHelper::~AudioDiscardHelper() = default;
 
 size_t AudioDiscardHelper::TimeDeltaToFrames(base::TimeDelta duration) const {
   DCHECK(duration >= base::TimeDelta());
diff --git a/media/base/audio_fifo.cc b/media/base/audio_fifo.cc
index bdc7ddf7..507edd1 100644
--- a/media/base/audio_fifo.cc
+++ b/media/base/audio_fifo.cc
@@ -45,7 +45,7 @@
       read_pos_(0),
       write_pos_(0) {}
 
-AudioFifo::~AudioFifo() {}
+AudioFifo::~AudioFifo() = default;
 
 int AudioFifo::frames() const {
   int delta = frames_pushed_ - frames_consumed_;
diff --git a/media/base/audio_fifo_unittest.cc b/media/base/audio_fifo_unittest.cc
index 7dd354d..2f69e36 100644
--- a/media/base/audio_fifo_unittest.cc
+++ b/media/base/audio_fifo_unittest.cc
@@ -14,8 +14,8 @@
 
 class AudioFifoTest : public testing::Test {
  public:
-  AudioFifoTest() {}
-  ~AudioFifoTest() override {}
+  AudioFifoTest() = default;
+  ~AudioFifoTest() override = default;
 
   void VerifyValue(const float data[], int size, float value) {
     for (int i = 0; i < size; ++i)
diff --git a/media/base/audio_hash.cc b/media/base/audio_hash.cc
index 6d8eee8..404e6f4 100644
--- a/media/base/audio_hash.cc
+++ b/media/base/audio_hash.cc
@@ -19,7 +19,7 @@
       sample_count_(0) {
 }
 
-AudioHash::~AudioHash() {}
+AudioHash::~AudioHash() = default;
 
 void AudioHash::Update(const AudioBus* audio_bus, int frames) {
   // Use uint32_t to ensure overflow is a defined operation.
diff --git a/media/base/audio_hash_unittest.cc b/media/base/audio_hash_unittest.cc
index 9f7ab22..8e04bf0 100644
--- a/media/base/audio_hash_unittest.cc
+++ b/media/base/audio_hash_unittest.cc
@@ -42,7 +42,7 @@
     }
   }
 
-  ~AudioHashTest() override {}
+  ~AudioHashTest() override = default;
 
  protected:
   std::unique_ptr<AudioBus> bus_one_;
diff --git a/media/base/audio_parameters.cc b/media/base/audio_parameters.cc
index a1ae7696..b8dcb49 100644
--- a/media/base/audio_parameters.cc
+++ b/media/base/audio_parameters.cc
@@ -68,7 +68,7 @@
         frames_per_buffer);
 }
 
-AudioParameters::~AudioParameters() {}
+AudioParameters::~AudioParameters() = default;
 
 AudioParameters::AudioParameters(const AudioParameters&) = default;
 AudioParameters& AudioParameters::operator=(const AudioParameters&) = default;
diff --git a/media/base/audio_pull_fifo.cc b/media/base/audio_pull_fifo.cc
index 03aa001a..549addd 100644
--- a/media/base/audio_pull_fifo.cc
+++ b/media/base/audio_pull_fifo.cc
@@ -16,7 +16,7 @@
       fifo_(AudioBus::Create(channels, frames)),
       fifo_index_(frames) {}
 
-AudioPullFifo::~AudioPullFifo() {}
+AudioPullFifo::~AudioPullFifo() = default;
 
 void AudioPullFifo::Consume(AudioBus* destination, int frames_to_consume) {
   DCHECK_LE(frames_to_consume, destination->frames());
diff --git a/media/base/audio_pull_fifo_unittest.cc b/media/base/audio_pull_fifo_unittest.cc
index b664802..77d44d1 100644
--- a/media/base/audio_pull_fifo_unittest.cc
+++ b/media/base/audio_pull_fifo_unittest.cc
@@ -39,7 +39,7 @@
         last_frame_delay_(-1) {
     EXPECT_EQ(kMaxFramesInFifo, pull_fifo_.SizeInFrames());
   }
-  virtual ~AudioPullFifoTest() {}
+  virtual ~AudioPullFifoTest() = default;
 
   void VerifyValue(const float data[], int size, float start_value) {
     float value = start_value;
diff --git a/media/base/audio_push_fifo.cc b/media/base/audio_push_fifo.cc
index 5e75967..5922b8a5 100644
--- a/media/base/audio_push_fifo.cc
+++ b/media/base/audio_push_fifo.cc
@@ -15,7 +15,7 @@
   DCHECK(!callback_.is_null());
 }
 
-AudioPushFifo::~AudioPushFifo() {}
+AudioPushFifo::~AudioPushFifo() = default;
 
 void AudioPushFifo::Reset(int frames_per_buffer) {
   DCHECK_GT(frames_per_buffer, 0);
diff --git a/media/base/audio_push_fifo_unittest.cc b/media/base/audio_push_fifo_unittest.cc
index d3d5f89..bcf85c5 100644
--- a/media/base/audio_push_fifo_unittest.cc
+++ b/media/base/audio_push_fifo_unittest.cc
@@ -19,8 +19,8 @@
 
 class AudioPushFifoTest : public testing::TestWithParam<int> {
  public:
-  AudioPushFifoTest() {}
-  ~AudioPushFifoTest() override {}
+  AudioPushFifoTest() = default;
+  ~AudioPushFifoTest() override = default;
 
   int output_chunk_size() const { return GetParam(); }
 
diff --git a/media/base/audio_renderer.cc b/media/base/audio_renderer.cc
index e7b737e..e3f63ac28 100644
--- a/media/base/audio_renderer.cc
+++ b/media/base/audio_renderer.cc
@@ -6,7 +6,7 @@
 
 namespace media {
 
-AudioRenderer::AudioRenderer() {}
-AudioRenderer::~AudioRenderer() {}
+AudioRenderer::AudioRenderer() = default;
+AudioRenderer::~AudioRenderer() = default;
 
 }  // namespace media
diff --git a/media/base/audio_renderer_mixer.cc b/media/base/audio_renderer_mixer.cc
index 80d32b02..2c22946f 100644
--- a/media/base/audio_renderer_mixer.cc
+++ b/media/base/audio_renderer_mixer.cc
@@ -26,7 +26,7 @@
   UMAMaxValueTracker(const UmaLogCallback& log_callback)
       : log_callback_(log_callback), count_(0), max_count_(0) {}
 
-  ~UMAMaxValueTracker() {}
+  ~UMAMaxValueTracker() = default;
 
   // Increments the counter, updates the maximum.
   void Increment() {
diff --git a/media/base/audio_renderer_mixer_input_unittest.cc b/media/base/audio_renderer_mixer_input_unittest.cc
index 8f6a239..309956c9 100644
--- a/media/base/audio_renderer_mixer_input_unittest.cc
+++ b/media/base/audio_renderer_mixer_input_unittest.cc
@@ -123,7 +123,7 @@
   AudioRendererMixer* GetInputMixer() { return mixer_input_->mixer_; }
 
  protected:
-  virtual ~AudioRendererMixerInputTest() {}
+  virtual ~AudioRendererMixerInputTest() = default;
 
   base::test::ScopedTaskEnvironment scoped_task_environment_;
   AudioParameters audio_parameters_;
diff --git a/media/base/audio_renderer_mixer_unittest.cc b/media/base/audio_renderer_mixer_unittest.cc
index a6d54e8..9dbfb77 100644
--- a/media/base/audio_renderer_mixer_unittest.cc
+++ b/media/base/audio_renderer_mixer_unittest.cc
@@ -341,7 +341,7 @@
   }
 
  protected:
-  virtual ~AudioRendererMixerTest() {}
+  virtual ~AudioRendererMixerTest() = default;
 
   scoped_refptr<MockAudioRendererSink> sink_;
   std::unique_ptr<AudioRendererMixer> mixer_;
diff --git a/media/base/audio_shifter.cc b/media/base/audio_shifter.cc
index 455b5e6..10d6928f 100644
--- a/media/base/audio_shifter.cc
+++ b/media/base/audio_shifter.cc
@@ -85,7 +85,7 @@
 AudioShifter::AudioQueueEntry::AudioQueueEntry(const AudioQueueEntry& other) =
     default;
 
-AudioShifter::AudioQueueEntry::~AudioQueueEntry() {}
+AudioShifter::AudioQueueEntry::~AudioQueueEntry() = default;
 
 AudioShifter::AudioShifter(base::TimeDelta max_buffer_size,
                            base::TimeDelta clock_accuracy,
@@ -109,7 +109,7 @@
           base::Bind(&AudioShifter::ResamplerCallback, base::Unretained(this))),
       current_ratio_(1.0) {}
 
-AudioShifter::~AudioShifter() {}
+AudioShifter::~AudioShifter() = default;
 
 void AudioShifter::Push(std::unique_ptr<AudioBus> input,
                         base::TimeTicks playout_time) {
diff --git a/media/base/bit_reader.cc b/media/base/bit_reader.cc
index 7f19855..a956e976 100644
--- a/media/base/bit_reader.cc
+++ b/media/base/bit_reader.cc
@@ -15,7 +15,7 @@
   DCHECK_GE(size, 0);
 }
 
-BitReader::~BitReader() {}
+BitReader::~BitReader() = default;
 
 bool BitReader::ReadString(int num_bits, std::string* str) {
   DCHECK_EQ(num_bits % 8, 0);
diff --git a/media/base/bit_reader_core.cc b/media/base/bit_reader_core.cc
index 237470c..32c872b 100644
--- a/media/base/bit_reader_core.cc
+++ b/media/base/bit_reader_core.cc
@@ -14,11 +14,9 @@
 
 namespace media {
 
-BitReaderCore::ByteStreamProvider::ByteStreamProvider() {
-}
+BitReaderCore::ByteStreamProvider::ByteStreamProvider() = default;
 
-BitReaderCore::ByteStreamProvider::~ByteStreamProvider() {
-}
+BitReaderCore::ByteStreamProvider::~ByteStreamProvider() = default;
 
 BitReaderCore::BitReaderCore(ByteStreamProvider* byte_stream_provider)
     : byte_stream_provider_(byte_stream_provider),
@@ -29,8 +27,7 @@
       reg_next_(0) {
 }
 
-BitReaderCore::~BitReaderCore() {
-}
+BitReaderCore::~BitReaderCore() = default;
 
 bool BitReaderCore::ReadFlag(bool* flag) {
   if (nbits_ == 0 && !Refill(1))
diff --git a/media/base/bitstream_buffer.cc b/media/base/bitstream_buffer.cc
index 5a1907db..944200a 100644
--- a/media/base/bitstream_buffer.cc
+++ b/media/base/bitstream_buffer.cc
@@ -22,7 +22,7 @@
 
 BitstreamBuffer::BitstreamBuffer(const BitstreamBuffer& other) = default;
 
-BitstreamBuffer::~BitstreamBuffer() {}
+BitstreamBuffer::~BitstreamBuffer() = default;
 
 void BitstreamBuffer::SetDecryptConfig(const DecryptConfig& decrypt_config) {
   key_id_ = decrypt_config.key_id();
diff --git a/media/base/byte_queue.cc b/media/base/byte_queue.cc
index 94000fac..08ac9a2 100644
--- a/media/base/byte_queue.cc
+++ b/media/base/byte_queue.cc
@@ -17,7 +17,7 @@
       offset_(0),
       used_(0) {}
 
-ByteQueue::~ByteQueue() {}
+ByteQueue::~ByteQueue() = default;
 
 void ByteQueue::Reset() {
   offset_ = 0;
diff --git a/media/base/cdm_context.cc b/media/base/cdm_context.cc
index 248fc22..1eff10e4 100644
--- a/media/base/cdm_context.cc
+++ b/media/base/cdm_context.cc
@@ -6,9 +6,9 @@
 
 namespace media {
 
-CdmContext::CdmContext() {}
+CdmContext::CdmContext() = default;
 
-CdmContext::~CdmContext() {}
+CdmContext::~CdmContext() = default;
 
 void IgnoreCdmAttached(bool /* success */) {}
 
diff --git a/media/base/cdm_factory.cc b/media/base/cdm_factory.cc
index 2714da7..7de8570 100644
--- a/media/base/cdm_factory.cc
+++ b/media/base/cdm_factory.cc
@@ -6,10 +6,8 @@
 
 namespace media {
 
-CdmFactory::CdmFactory() {
-}
+CdmFactory::CdmFactory() = default;
 
-CdmFactory::~CdmFactory() {
-}
+CdmFactory::~CdmFactory() = default;
 
 }  // namespace media
diff --git a/media/base/cdm_initialized_promise.cc b/media/base/cdm_initialized_promise.cc
index afd0ed72..8c36e0b 100644
--- a/media/base/cdm_initialized_promise.cc
+++ b/media/base/cdm_initialized_promise.cc
@@ -11,8 +11,7 @@
     scoped_refptr<ContentDecryptionModule> cdm)
     : cdm_created_cb_(std::move(cdm_created_cb)), cdm_(std::move(cdm)) {}
 
-CdmInitializedPromise::~CdmInitializedPromise() {
-}
+CdmInitializedPromise::~CdmInitializedPromise() = default;
 
 void CdmInitializedPromise::resolve() {
   MarkPromiseSettled();
diff --git a/media/base/cdm_key_information.cc b/media/base/cdm_key_information.cc
index e29df54..4bded48 100644
--- a/media/base/cdm_key_information.cc
+++ b/media/base/cdm_key_information.cc
@@ -35,8 +35,7 @@
 
 CdmKeyInformation::CdmKeyInformation(const CdmKeyInformation& other) = default;
 
-CdmKeyInformation::~CdmKeyInformation() {
-}
+CdmKeyInformation::~CdmKeyInformation() = default;
 
 // static
 std::string CdmKeyInformation::KeyStatusToString(KeyStatus key_status) {
diff --git a/media/base/cdm_session_tracker.cc b/media/base/cdm_session_tracker.cc
index b5b89908f2..da6f7b3 100644
--- a/media/base/cdm_session_tracker.cc
+++ b/media/base/cdm_session_tracker.cc
@@ -6,7 +6,7 @@
 
 namespace media {
 
-CdmSessionTracker::CdmSessionTracker() {}
+CdmSessionTracker::CdmSessionTracker() = default;
 
 CdmSessionTracker::~CdmSessionTracker() {
   DCHECK(!HasRemainingSessions());
diff --git a/media/base/channel_mixer.cc b/media/base/channel_mixer.cc
index 4f271d38..a73a0b1 100644
--- a/media/base/channel_mixer.cc
+++ b/media/base/channel_mixer.cc
@@ -39,7 +39,7 @@
   remapping_ = matrix_builder.CreateTransformationMatrix(&matrix_);
 }
 
-ChannelMixer::~ChannelMixer() {}
+ChannelMixer::~ChannelMixer() = default;
 
 void ChannelMixer::Transform(const AudioBus* input, AudioBus* output) {
   CHECK_EQ(matrix_.size(), static_cast<size_t>(output->channels()));
diff --git a/media/base/channel_mixing_matrix.cc b/media/base/channel_mixing_matrix.cc
index db0c029e..51a556a 100644
--- a/media/base/channel_mixing_matrix.cc
+++ b/media/base/channel_mixing_matrix.cc
@@ -72,8 +72,7 @@
   }
 }
 
-ChannelMixingMatrix::~ChannelMixingMatrix() {
-}
+ChannelMixingMatrix::~ChannelMixingMatrix() = default;
 
 bool ChannelMixingMatrix::CreateTransformationMatrix(
     std::vector<std::vector<float>>* matrix) {
diff --git a/media/base/content_decryption_module.cc b/media/base/content_decryption_module.cc
index 0b13a30..aaa6e62 100644
--- a/media/base/content_decryption_module.cc
+++ b/media/base/content_decryption_module.cc
@@ -8,9 +8,9 @@
 
 namespace media {
 
-ContentDecryptionModule::ContentDecryptionModule() {}
+ContentDecryptionModule::ContentDecryptionModule() = default;
 
-ContentDecryptionModule::~ContentDecryptionModule() {}
+ContentDecryptionModule::~ContentDecryptionModule() = default;
 
 // By default a CDM does not support this method.
 void ContentDecryptionModule::GetStatusForPolicy(
diff --git a/media/base/data_buffer.cc b/media/base/data_buffer.cc
index 7417197..5cd1bfb 100644
--- a/media/base/data_buffer.cc
+++ b/media/base/data_buffer.cc
@@ -35,7 +35,7 @@
   memcpy(data_.get(), data, data_size_);
 }
 
-DataBuffer::~DataBuffer() {}
+DataBuffer::~DataBuffer() = default;
 
 // static
 scoped_refptr<DataBuffer> DataBuffer::CopyFrom(const uint8_t* data, int size) {
diff --git a/media/base/data_source.cc b/media/base/data_source.cc
index b6999c2..474d65e8 100644
--- a/media/base/data_source.cc
+++ b/media/base/data_source.cc
@@ -8,8 +8,8 @@
 
 namespace media {
 
-DataSource::DataSource() {}
+DataSource::DataSource() = default;
 
-DataSource::~DataSource() {}
+DataSource::~DataSource() = default;
 
 }  // namespace media
diff --git a/media/base/decoder_buffer.cc b/media/base/decoder_buffer.cc
index 05e721c..63dad33 100644
--- a/media/base/decoder_buffer.cc
+++ b/media/base/decoder_buffer.cc
@@ -44,7 +44,7 @@
   memcpy(side_data_.get(), side_data, side_data_size_);
 }
 
-DecoderBuffer::~DecoderBuffer() {}
+DecoderBuffer::~DecoderBuffer() = default;
 
 void DecoderBuffer::Initialize() {
   data_.reset(AllocateFFmpegSafeBlock(size_));
diff --git a/media/base/decoder_buffer_queue.cc b/media/base/decoder_buffer_queue.cc
index cd4a684..214ff94 100644
--- a/media/base/decoder_buffer_queue.cc
+++ b/media/base/decoder_buffer_queue.cc
@@ -13,7 +13,7 @@
 DecoderBufferQueue::DecoderBufferQueue()
     : earliest_valid_timestamp_(kNoTimestamp), data_size_(0) {}
 
-DecoderBufferQueue::~DecoderBufferQueue() {}
+DecoderBufferQueue::~DecoderBufferQueue() = default;
 
 void DecoderBufferQueue::Push(const scoped_refptr<DecoderBuffer>& buffer) {
   CHECK(!buffer->end_of_stream());
diff --git a/media/base/decoder_factory.cc b/media/base/decoder_factory.cc
index 4dc8f03..b8ff285 100644
--- a/media/base/decoder_factory.cc
+++ b/media/base/decoder_factory.cc
@@ -8,9 +8,9 @@
 
 namespace media {
 
-DecoderFactory::DecoderFactory() {}
+DecoderFactory::DecoderFactory() = default;
 
-DecoderFactory::~DecoderFactory() {}
+DecoderFactory::~DecoderFactory() = default;
 
 void DecoderFactory::CreateAudioDecoders(
     scoped_refptr<base::SingleThreadTaskRunner> task_runner,
diff --git a/media/base/decrypt_config.cc b/media/base/decrypt_config.cc
index 2c5935a..c48ddad 100644
--- a/media/base/decrypt_config.cc
+++ b/media/base/decrypt_config.cc
@@ -22,7 +22,7 @@
         iv.empty());
 }
 
-DecryptConfig::~DecryptConfig() {}
+DecryptConfig::~DecryptConfig() = default;
 
 bool DecryptConfig::Matches(const DecryptConfig& config) const {
   if (key_id() != config.key_id() || iv() != config.iv() ||
diff --git a/media/base/decryptor.cc b/media/base/decryptor.cc
index e9b232d..2b078cc 100644
--- a/media/base/decryptor.cc
+++ b/media/base/decryptor.cc
@@ -6,8 +6,8 @@
 
 namespace media {
 
-Decryptor::Decryptor() {}
+Decryptor::Decryptor() = default;
 
-Decryptor::~Decryptor() {}
+Decryptor::~Decryptor() = default;
 
 }  // namespace media
diff --git a/media/base/demuxer.cc b/media/base/demuxer.cc
index 36e64eba..46d2e70 100644
--- a/media/base/demuxer.cc
+++ b/media/base/demuxer.cc
@@ -6,10 +6,10 @@
 
 namespace media {
 
-DemuxerHost::~DemuxerHost() {}
+DemuxerHost::~DemuxerHost() = default;
 
-Demuxer::Demuxer() {}
+Demuxer::Demuxer() = default;
 
-Demuxer::~Demuxer() {}
+Demuxer::~Demuxer() = default;
 
 }  // namespace media
diff --git a/media/base/demuxer_stream.cc b/media/base/demuxer_stream.cc
index fff5ddf2..020d3db 100644
--- a/media/base/demuxer_stream.cc
+++ b/media/base/demuxer_stream.cc
@@ -6,7 +6,7 @@
 
 namespace media {
 
-DemuxerStream::~DemuxerStream() {}
+DemuxerStream::~DemuxerStream() = default;
 
 // Most DemuxerStream implementations don't specify liveness. Returns unknown
 // liveness by default.
diff --git a/media/base/encryption_scheme.cc b/media/base/encryption_scheme.cc
index dea08ed..69bcdc3 100644
--- a/media/base/encryption_scheme.cc
+++ b/media/base/encryption_scheme.cc
@@ -6,13 +6,13 @@
 
 namespace media {
 
-EncryptionScheme::Pattern::Pattern() {}
+EncryptionScheme::Pattern::Pattern() = default;
 
 EncryptionScheme::Pattern::Pattern(uint32_t encrypt_blocks,
                                    uint32_t skip_blocks)
     : encrypt_blocks_(encrypt_blocks), skip_blocks_(skip_blocks) {}
 
-EncryptionScheme::Pattern::~Pattern() {}
+EncryptionScheme::Pattern::~Pattern() = default;
 
 uint32_t EncryptionScheme::Pattern::encrypt_blocks() const {
   return encrypt_blocks_;
@@ -31,12 +31,12 @@
   return encrypt_blocks_ != 0 && skip_blocks_ != 0;
 }
 
-EncryptionScheme::EncryptionScheme() {}
+EncryptionScheme::EncryptionScheme() = default;
 
 EncryptionScheme::EncryptionScheme(CipherMode mode, const Pattern& pattern)
     : mode_(mode), pattern_(pattern) {}
 
-EncryptionScheme::~EncryptionScheme() {}
+EncryptionScheme::~EncryptionScheme() = default;
 
 bool EncryptionScheme::is_encrypted() const {
   return mode_ != CIPHER_MODE_UNENCRYPTED;
diff --git a/media/base/fake_audio_render_callback.cc b/media/base/fake_audio_render_callback.cc
index 6163bd8..d31303a3 100644
--- a/media/base/fake_audio_render_callback.cc
+++ b/media/base/fake_audio_render_callback.cc
@@ -19,7 +19,7 @@
   reset();
 }
 
-FakeAudioRenderCallback::~FakeAudioRenderCallback() {}
+FakeAudioRenderCallback::~FakeAudioRenderCallback() = default;
 
 int FakeAudioRenderCallback::Render(base::TimeDelta delay,
                                     base::TimeTicks delay_timestamp,
diff --git a/media/base/fake_audio_worker_unittest.cc b/media/base/fake_audio_worker_unittest.cc
index 6b112a8d9..dee4453e 100644
--- a/media/base/fake_audio_worker_unittest.cc
+++ b/media/base/fake_audio_worker_unittest.cc
@@ -31,7 +31,7 @@
         static_cast<float>(params_.sample_rate()));
   }
 
-  ~FakeAudioWorkerTest() override {}
+  ~FakeAudioWorkerTest() override = default;
 
   void CalledByFakeWorker() { seen_callbacks_++; }
 
diff --git a/media/base/fake_demuxer_stream.cc b/media/base/fake_demuxer_stream.cc
index 6fd6f5b7..9008e96 100644
--- a/media/base/fake_demuxer_stream.cc
+++ b/media/base/fake_demuxer_stream.cc
@@ -52,7 +52,7 @@
   UpdateVideoDecoderConfig();
 }
 
-FakeDemuxerStream::~FakeDemuxerStream() {}
+FakeDemuxerStream::~FakeDemuxerStream() = default;
 
 void FakeDemuxerStream::Initialize() {
   DCHECK_EQ(-1, read_to_hold_);
@@ -212,7 +212,7 @@
                          num_video_buffers_in_one_config,
                          is_video_encrypted) {}
 
-FakeMediaResource::~FakeMediaResource() {}
+FakeMediaResource::~FakeMediaResource() = default;
 
 std::vector<DemuxerStream*> FakeMediaResource::GetAllStreams() {
   std::vector<DemuxerStream*> result;
diff --git a/media/base/fake_demuxer_stream_unittest.cc b/media/base/fake_demuxer_stream_unittest.cc
index 85d09f9..a31c0acd 100644
--- a/media/base/fake_demuxer_stream_unittest.cc
+++ b/media/base/fake_demuxer_stream_unittest.cc
@@ -30,7 +30,7 @@
       : status_(DemuxerStream::kAborted),
         read_pending_(false),
         num_buffers_received_(0) {}
-  ~FakeDemuxerStreamTest() override {}
+  ~FakeDemuxerStreamTest() override = default;
 
   void BufferReady(DemuxerStream::Status status,
                    const scoped_refptr<DecoderBuffer>& buffer) {
diff --git a/media/base/fake_single_thread_task_runner.cc b/media/base/fake_single_thread_task_runner.cc
index 91171491..f2dcd5f 100644
--- a/media/base/fake_single_thread_task_runner.cc
+++ b/media/base/fake_single_thread_task_runner.cc
@@ -16,7 +16,7 @@
     base::SimpleTestTickClock* clock)
     : clock_(clock), fail_on_next_task_(false) {}
 
-FakeSingleThreadTaskRunner::~FakeSingleThreadTaskRunner() {}
+FakeSingleThreadTaskRunner::~FakeSingleThreadTaskRunner() = default;
 
 bool FakeSingleThreadTaskRunner::PostDelayedTask(
     const base::Location& from_here,
diff --git a/media/base/hdr_metadata.cc b/media/base/hdr_metadata.cc
index e4e8d87c..4bc5400c 100644
--- a/media/base/hdr_metadata.cc
+++ b/media/base/hdr_metadata.cc
@@ -6,10 +6,10 @@
 
 namespace media {
 
-MasteringMetadata::MasteringMetadata() {}
+MasteringMetadata::MasteringMetadata() = default;
 MasteringMetadata::MasteringMetadata(const MasteringMetadata& rhs) = default;
 
-HDRMetadata::HDRMetadata() {}
+HDRMetadata::HDRMetadata() = default;
 HDRMetadata::HDRMetadata(const HDRMetadata& rhs) = default;
 
 }  // namespace media
diff --git a/media/base/key_systems.cc b/media/base/key_systems.cc
index 7eaa77cd..27b632c 100644
--- a/media/base/key_systems.cc
+++ b/media/base/key_systems.cc
@@ -297,8 +297,7 @@
   UpdateSupportedKeySystems();
 }
 
-KeySystemsImpl::~KeySystemsImpl() {
-}
+KeySystemsImpl::~KeySystemsImpl() = default;
 
 SupportedCodecs KeySystemsImpl::GetCodecMaskForMimeType(
     const std::string& container_mime_type) const {
diff --git a/media/base/key_systems_unittest.cc b/media/base/key_systems_unittest.cc
index e563df0f..c02b1c9c 100644
--- a/media/base/key_systems_unittest.cc
+++ b/media/base/key_systems_unittest.cc
@@ -247,8 +247,7 @@
     : is_update_needed_(true), supports_external_key_system_(true) {
 }
 
-TestMediaClient::~TestMediaClient() {
-}
+TestMediaClient::~TestMediaClient() = default;
 
 bool TestMediaClient::IsKeySystemsUpdateNeeded() {
   return is_update_needed_;
diff --git a/media/base/keyboard_event_counter.cc b/media/base/keyboard_event_counter.cc
index c9947c7..bddddbd 100644
--- a/media/base/keyboard_event_counter.cc
+++ b/media/base/keyboard_event_counter.cc
@@ -11,7 +11,7 @@
 
 KeyboardEventCounter::KeyboardEventCounter() : total_key_presses_(0) {}
 
-KeyboardEventCounter::~KeyboardEventCounter() {}
+KeyboardEventCounter::~KeyboardEventCounter() = default;
 
 void KeyboardEventCounter::OnKeyboardEvent(ui::EventType event,
                                            ui::KeyboardCode key_code) {
diff --git a/media/base/loopback_audio_converter.cc b/media/base/loopback_audio_converter.cc
index 3b16b96..715675d 100644
--- a/media/base/loopback_audio_converter.cc
+++ b/media/base/loopback_audio_converter.cc
@@ -12,7 +12,7 @@
     bool disable_fifo)
     : audio_converter_(input_params, output_params, disable_fifo) {}
 
-LoopbackAudioConverter::~LoopbackAudioConverter() {}
+LoopbackAudioConverter::~LoopbackAudioConverter() = default;
 
 double LoopbackAudioConverter::ProvideInput(AudioBus* audio_bus,
                                             uint32_t frames_delayed) {
diff --git a/media/base/media_client.cc b/media/base/media_client.cc
index 752dd5e0..584ccc18 100644
--- a/media/base/media_client.cc
+++ b/media/base/media_client.cc
@@ -18,10 +18,8 @@
   return g_media_client;
 }
 
-MediaClient::MediaClient() {
-}
+MediaClient::MediaClient() = default;
 
-MediaClient::~MediaClient() {
-}
+MediaClient::~MediaClient() = default;
 
 }  // namespace media
diff --git a/media/base/media_log.cc b/media/base/media_log.cc
index e5b3bfc..9370072 100644
--- a/media/base/media_log.cc
+++ b/media/base/media_log.cc
@@ -164,7 +164,7 @@
 
 MediaLog::MediaLog() : id_(g_media_log_count.GetNext()) {}
 
-MediaLog::~MediaLog() {}
+MediaLog::~MediaLog() = default;
 
 void MediaLog::AddEvent(std::unique_ptr<MediaLogEvent> event) {}
 
diff --git a/media/base/media_observer.cc b/media/base/media_observer.cc
index 7bedcbf3..de70f9f 100644
--- a/media/base/media_observer.cc
+++ b/media/base/media_observer.cc
@@ -6,8 +6,8 @@
 
 namespace media {
 
-MediaObserver::MediaObserver() {}
+MediaObserver::MediaObserver() = default;
 
-MediaObserver::~MediaObserver() {}
+MediaObserver::~MediaObserver() = default;
 
 }  // namespace media
diff --git a/media/base/media_permission.cc b/media/base/media_permission.cc
index 739e445..307ccb9 100644
--- a/media/base/media_permission.cc
+++ b/media/base/media_permission.cc
@@ -6,10 +6,8 @@
 
 namespace media {
 
-MediaPermission::MediaPermission() {
-}
+MediaPermission::MediaPermission() = default;
 
-MediaPermission::~MediaPermission() {
-}
+MediaPermission::~MediaPermission() = default;
 
 }  // namespace media
diff --git a/media/base/media_resource.cc b/media/base/media_resource.cc
index 8068a190..f27e159 100644
--- a/media/base/media_resource.cc
+++ b/media/base/media_resource.cc
@@ -6,9 +6,9 @@
 
 namespace media {
 
-MediaResource::MediaResource() {}
+MediaResource::MediaResource() = default;
 
-MediaResource::~MediaResource() {}
+MediaResource::~MediaResource() = default;
 
 MediaUrlParams MediaResource::GetMediaUrlParams() const {
   NOTREACHED();
diff --git a/media/base/media_track.cc b/media/base/media_track.cc
index 2b60034..bbffffa5 100644
--- a/media/base/media_track.cc
+++ b/media/base/media_track.cc
@@ -17,7 +17,7 @@
       label_(label),
       language_(lang) {}
 
-MediaTrack::~MediaTrack() {}
+MediaTrack::~MediaTrack() = default;
 
 const char* TrackTypeToStr(MediaTrack::Type type) {
   switch (type) {
diff --git a/media/base/media_tracks.cc b/media/base/media_tracks.cc
index ebc93df..859ca42 100644
--- a/media/base/media_tracks.cc
+++ b/media/base/media_tracks.cc
@@ -11,9 +11,9 @@
 
 namespace media {
 
-MediaTracks::MediaTracks() {}
+MediaTracks::MediaTracks() = default;
 
-MediaTracks::~MediaTracks() {}
+MediaTracks::~MediaTracks() = default;
 
 MediaTrack* MediaTracks::AddAudioTrack(
     const AudioDecoderConfig& config,
diff --git a/media/base/media_url_demuxer.cc b/media/base/media_url_demuxer.cc
index c6a1b4a..afdd25c 100644
--- a/media/base/media_url_demuxer.cc
+++ b/media/base/media_url_demuxer.cc
@@ -15,7 +15,7 @@
     const GURL& site_for_cookies)
     : params_{media_url, site_for_cookies}, task_runner_(task_runner) {}
 
-MediaUrlDemuxer::~MediaUrlDemuxer() {}
+MediaUrlDemuxer::~MediaUrlDemuxer() = default;
 
 // Should never be called since MediaResource::Type is URL.
 std::vector<DemuxerStream*> MediaUrlDemuxer::GetAllStreams() {
diff --git a/media/base/mime_util_internal.cc b/media/base/mime_util_internal.cc
index 5b9cefb..850b909d5 100644
--- a/media/base/mime_util_internal.cc
+++ b/media/base/mime_util_internal.cc
@@ -132,7 +132,7 @@
   InitializeMimeTypeMaps();
 }
 
-MimeUtil::~MimeUtil() {}
+MimeUtil::~MimeUtil() = default;
 
 AudioCodec MimeUtilToAudioCodec(MimeUtil::Codec codec) {
   switch (codec) {
diff --git a/media/base/mock_audio_renderer_sink.cc b/media/base/mock_audio_renderer_sink.cc
index 3bc7fe2..b0d239a 100644
--- a/media/base/mock_audio_renderer_sink.cc
+++ b/media/base/mock_audio_renderer_sink.cc
@@ -28,7 +28,7 @@
     const AudioParameters& device_output_params)
     : output_device_info_(device_id, device_status, device_output_params) {}
 
-MockAudioRendererSink::~MockAudioRendererSink() {}
+MockAudioRendererSink::~MockAudioRendererSink() = default;
 
 void MockAudioRendererSink::SwitchOutputDevice(
     const std::string& device_id,
diff --git a/media/base/mock_demuxer_host.cc b/media/base/mock_demuxer_host.cc
index 100787f..5a33a0d 100644
--- a/media/base/mock_demuxer_host.cc
+++ b/media/base/mock_demuxer_host.cc
@@ -6,8 +6,8 @@
 
 namespace media {
 
-MockDemuxerHost::MockDemuxerHost() {}
+MockDemuxerHost::MockDemuxerHost() = default;
 
-MockDemuxerHost::~MockDemuxerHost() {}
+MockDemuxerHost::~MockDemuxerHost() = default;
 
 }  // namespace media
diff --git a/media/base/mock_filters.cc b/media/base/mock_filters.cc
index 93b528e..324ecb3 100644
--- a/media/base/mock_filters.cc
+++ b/media/base/mock_filters.cc
@@ -17,11 +17,11 @@
 
 namespace media {
 
-MockPipelineClient::MockPipelineClient() {}
-MockPipelineClient::~MockPipelineClient() {}
+MockPipelineClient::MockPipelineClient() = default;
+MockPipelineClient::~MockPipelineClient() = default;
 
-MockPipeline::MockPipeline() {}
-MockPipeline::~MockPipeline() {}
+MockPipeline::MockPipeline() = default;
+MockPipeline::~MockPipeline() = default;
 
 void MockPipeline::Start(Demuxer* demuxer,
                          std::unique_ptr<Renderer> renderer,
@@ -36,9 +36,9 @@
   Resume(&renderer, timestamp, seek_cb);
 }
 
-MockDemuxer::MockDemuxer() {}
+MockDemuxer::MockDemuxer() = default;
 
-MockDemuxer::~MockDemuxer() {}
+MockDemuxer::~MockDemuxer() = default;
 
 std::string MockDemuxer::GetDisplayName() const {
   return "MockDemuxer";
@@ -48,7 +48,7 @@
     : type_(type), liveness_(LIVENESS_UNKNOWN) {
 }
 
-MockDemuxerStream::~MockDemuxerStream() {}
+MockDemuxerStream::~MockDemuxerStream() = default;
 
 DemuxerStream::Type MockDemuxerStream::type() const {
   return type_;
@@ -89,7 +89,7 @@
   ON_CALL(*this, CanReadWithoutStalling()).WillByDefault(Return(true));
 }
 
-MockVideoDecoder::~MockVideoDecoder() {}
+MockVideoDecoder::~MockVideoDecoder() = default;
 
 std::string MockVideoDecoder::GetDisplayName() const {
   return decoder_name_;
@@ -98,47 +98,47 @@
 MockAudioDecoder::MockAudioDecoder(const std::string& decoder_name)
     : decoder_name_(decoder_name) {}
 
-MockAudioDecoder::~MockAudioDecoder() {}
+MockAudioDecoder::~MockAudioDecoder() = default;
 
 std::string MockAudioDecoder::GetDisplayName() const {
   return decoder_name_;
 }
 
-MockRendererClient::MockRendererClient() {}
+MockRendererClient::MockRendererClient() = default;
 
-MockRendererClient::~MockRendererClient() {}
+MockRendererClient::~MockRendererClient() = default;
 
-MockVideoRenderer::MockVideoRenderer() {}
+MockVideoRenderer::MockVideoRenderer() = default;
 
-MockVideoRenderer::~MockVideoRenderer() {}
+MockVideoRenderer::~MockVideoRenderer() = default;
 
-MockAudioRenderer::MockAudioRenderer() {}
+MockAudioRenderer::MockAudioRenderer() = default;
 
-MockAudioRenderer::~MockAudioRenderer() {}
+MockAudioRenderer::~MockAudioRenderer() = default;
 
-MockRenderer::MockRenderer() {}
+MockRenderer::MockRenderer() = default;
 
-MockRenderer::~MockRenderer() {}
+MockRenderer::~MockRenderer() = default;
 
-MockTimeSource::MockTimeSource() {}
+MockTimeSource::MockTimeSource() = default;
 
-MockTimeSource::~MockTimeSource() {}
+MockTimeSource::~MockTimeSource() = default;
 
-MockTextTrack::MockTextTrack() {}
+MockTextTrack::MockTextTrack() = default;
 
-MockTextTrack::~MockTextTrack() {}
+MockTextTrack::~MockTextTrack() = default;
 
-MockCdmClient::MockCdmClient() {}
+MockCdmClient::MockCdmClient() = default;
 
-MockCdmClient::~MockCdmClient() {}
+MockCdmClient::~MockCdmClient() = default;
 
-MockDecryptor::MockDecryptor() {}
+MockDecryptor::MockDecryptor() = default;
 
-MockDecryptor::~MockDecryptor() {}
+MockDecryptor::~MockDecryptor() = default;
 
-MockCdmContext::MockCdmContext() {}
+MockCdmContext::MockCdmContext() = default;
 
-MockCdmContext::~MockCdmContext() {}
+MockCdmContext::~MockCdmContext() = default;
 
 int MockCdmContext::GetCdmId() const {
   return cdm_id_;
@@ -192,7 +192,7 @@
       session_keys_change_cb_(session_keys_change_cb),
       session_expiration_update_cb_(session_expiration_update_cb) {}
 
-MockCdm::~MockCdm() {}
+MockCdm::~MockCdm() = default;
 
 void MockCdm::SetServerCertificate(const std::vector<uint8_t>& certificate,
                                    std::unique_ptr<SimpleCdmPromise> promise) {
@@ -252,9 +252,9 @@
   session_expiration_update_cb_.Run(session_id, new_expiry_time);
 }
 
-MockCdmFactory::MockCdmFactory() {}
+MockCdmFactory::MockCdmFactory() = default;
 
-MockCdmFactory::~MockCdmFactory() {}
+MockCdmFactory::~MockCdmFactory() = default;
 
 void MockCdmFactory::Create(
     const std::string& key_system,
@@ -294,8 +294,8 @@
   before_creation_cb_ = before_creation_cb;
 }
 
-MockStreamParser::MockStreamParser() {}
+MockStreamParser::MockStreamParser() = default;
 
-MockStreamParser::~MockStreamParser() {}
+MockStreamParser::~MockStreamParser() = default;
 
 }  // namespace media
diff --git a/media/base/mock_media_log.cc b/media/base/mock_media_log.cc
index 66bc8e20..fa9c974 100644
--- a/media/base/mock_media_log.cc
+++ b/media/base/mock_media_log.cc
@@ -6,8 +6,8 @@
 
 namespace media {
 
-MockMediaLog::MockMediaLog() {}
+MockMediaLog::MockMediaLog() = default;
 
-MockMediaLog::~MockMediaLog() {}
+MockMediaLog::~MockMediaLog() = default;
 
 }  // namespace media
diff --git a/media/base/moving_average.cc b/media/base/moving_average.cc
index e06f744c..0f188e2 100644
--- a/media/base/moving_average.cc
+++ b/media/base/moving_average.cc
@@ -10,7 +10,7 @@
 
 MovingAverage::MovingAverage(size_t depth) : depth_(depth), samples_(depth_) {}
 
-MovingAverage::~MovingAverage() {}
+MovingAverage::~MovingAverage() = default;
 
 void MovingAverage::AddSample(base::TimeDelta sample) {
   // |samples_| is zero-initialized, so |oldest| is also zero before |count_|
diff --git a/media/base/multi_channel_resampler.cc b/media/base/multi_channel_resampler.cc
index 77ca8c5d..f816aaf1 100644
--- a/media/base/multi_channel_resampler.cc
+++ b/media/base/multi_channel_resampler.cc
@@ -44,7 +44,7 @@
   }
 }
 
-MultiChannelResampler::~MultiChannelResampler() {}
+MultiChannelResampler::~MultiChannelResampler() = default;
 
 void MultiChannelResampler::Resample(int frames, AudioBus* audio_bus) {
   DCHECK_EQ(static_cast<size_t>(audio_bus->channels()), resamplers_.size());
diff --git a/media/base/multi_channel_resampler_unittest.cc b/media/base/multi_channel_resampler_unittest.cc
index 9b35515..0972b5a 100644
--- a/media/base/multi_channel_resampler_unittest.cc
+++ b/media/base/multi_channel_resampler_unittest.cc
@@ -42,7 +42,7 @@
   MultiChannelResamplerTest()
       : last_frame_delay_(-1) {
   }
-  virtual ~MultiChannelResamplerTest() {}
+  virtual ~MultiChannelResamplerTest() = default;
 
   void InitializeAudioData(int channels, int frames) {
     frames_ = frames;
diff --git a/media/base/null_video_sink_unittest.cc b/media/base/null_video_sink_unittest.cc
index a402ec9..c21e930 100644
--- a/media/base/null_video_sink_unittest.cc
+++ b/media/base/null_video_sink_unittest.cc
@@ -28,7 +28,7 @@
     // Never use null TimeTicks since they have special connotations.
     tick_clock_.Advance(base::TimeDelta::FromMicroseconds(12345));
   }
-  ~NullVideoSinkTest() override {}
+  ~NullVideoSinkTest() override = default;
 
   std::unique_ptr<NullVideoSink> ConstructSink(bool clockless,
                                                base::TimeDelta interval) {
diff --git a/media/base/output_device_info.cc b/media/base/output_device_info.cc
index d1ffa43..3bc4eaa1 100644
--- a/media/base/output_device_info.cc
+++ b/media/base/output_device_info.cc
@@ -28,7 +28,7 @@
 OutputDeviceInfo& OutputDeviceInfo::operator=(const OutputDeviceInfo&) =
     default;
 
-OutputDeviceInfo::~OutputDeviceInfo() {}
+OutputDeviceInfo::~OutputDeviceInfo() = default;
 
 std::string OutputDeviceInfo::AsHumanReadableString() const {
   std::ostringstream s;
diff --git a/media/base/pipeline_impl_unittest.cc b/media/base/pipeline_impl_unittest.cc
index 89bbd4b..6fd6bd9 100644
--- a/media/base/pipeline_impl_unittest.cc
+++ b/media/base/pipeline_impl_unittest.cc
@@ -88,8 +88,8 @@
   // also lets us test for missing callbacks.
   class CallbackHelper : public MockPipelineClient {
    public:
-    CallbackHelper() {}
-    virtual ~CallbackHelper() {}
+    CallbackHelper() = default;
+    virtual ~CallbackHelper() = default;
 
     MOCK_METHOD1(OnStart, void(PipelineStatus));
     MOCK_METHOD1(OnSeek, void(PipelineStatus));
@@ -888,8 +888,8 @@
     kErrorAndStop,
   };
 
-  PipelineTeardownTest() {}
-  ~PipelineTeardownTest() override {}
+  PipelineTeardownTest() = default;
+  ~PipelineTeardownTest() override = default;
 
   void RunTest(TeardownState state, StopOrError stop_or_error) {
     switch (state) {
diff --git a/media/base/pipeline_metadata.cc b/media/base/pipeline_metadata.cc
index 976bdcd..f8cc6ca9 100644
--- a/media/base/pipeline_metadata.cc
+++ b/media/base/pipeline_metadata.cc
@@ -8,7 +8,7 @@
 
 PipelineMetadata::PipelineMetadata() : has_audio(false), has_video(false) {}
 
-PipelineMetadata::~PipelineMetadata() {}
+PipelineMetadata::~PipelineMetadata() = default;
 
 PipelineMetadata::PipelineMetadata(const PipelineMetadata&) = default;
 
diff --git a/media/base/player_tracker.cc b/media/base/player_tracker.cc
index 909aaec..cc4cc26 100644
--- a/media/base/player_tracker.cc
+++ b/media/base/player_tracker.cc
@@ -6,10 +6,8 @@
 
 namespace media {
 
-PlayerTracker::PlayerTracker() {
-}
+PlayerTracker::PlayerTracker() = default;
 
-PlayerTracker::~PlayerTracker() {
-}
+PlayerTracker::~PlayerTracker() = default;
 
 }  // namespace media
diff --git a/media/base/renderer.cc b/media/base/renderer.cc
index a4cf82c..f348d75 100644
--- a/media/base/renderer.cc
+++ b/media/base/renderer.cc
@@ -6,8 +6,8 @@
 
 namespace media {
 
-Renderer::Renderer() {}
+Renderer::Renderer() = default;
 
-Renderer::~Renderer() {}
+Renderer::~Renderer() = default;
 
 }  // namespace media
diff --git a/media/base/renderer_factory.cc b/media/base/renderer_factory.cc
index 693520b..00998b88 100644
--- a/media/base/renderer_factory.cc
+++ b/media/base/renderer_factory.cc
@@ -6,9 +6,9 @@
 
 namespace media {
 
-RendererFactory::RendererFactory() {}
+RendererFactory::RendererFactory() = default;
 
-RendererFactory::~RendererFactory() {}
+RendererFactory::~RendererFactory() = default;
 
 MediaResource::Type RendererFactory::GetRequiredMediaResourceType() {
   return MediaResource::Type::STREAM;
diff --git a/media/base/renderer_factory_selector.cc b/media/base/renderer_factory_selector.cc
index 3650832..4e50612 100644
--- a/media/base/renderer_factory_selector.cc
+++ b/media/base/renderer_factory_selector.cc
@@ -8,9 +8,9 @@
 
 namespace media {
 
-RendererFactorySelector::RendererFactorySelector() {}
+RendererFactorySelector::RendererFactorySelector() = default;
 
-RendererFactorySelector::~RendererFactorySelector() {}
+RendererFactorySelector::~RendererFactorySelector() = default;
 
 void RendererFactorySelector::AddFactory(
     FactoryType type,
diff --git a/media/base/renderer_factory_selector_unittest.cc b/media/base/renderer_factory_selector_unittest.cc
index 845b98a..105121a 100644
--- a/media/base/renderer_factory_selector_unittest.cc
+++ b/media/base/renderer_factory_selector_unittest.cc
@@ -37,7 +37,8 @@
     FactoryType type_;
   };
 
-  RendererFactorySelectorTest(){};
+  RendererFactorySelectorTest() = default;
+  ;
 
   void AddFactory(FactoryType type) {
     selector_.AddFactory(type, base::MakeUnique<FakeFactory>(type));
diff --git a/media/base/run_all_perftests.cc b/media/base/run_all_perftests.cc
index 54ce21b4..af5f1e7 100644
--- a/media/base/run_all_perftests.cc
+++ b/media/base/run_all_perftests.cc
@@ -11,7 +11,7 @@
 class TestSuiteNoAtExit : public base::TestSuite {
  public:
   TestSuiteNoAtExit(int argc, char** argv) : TestSuite(argc, argv) {}
-  ~TestSuiteNoAtExit() override {}
+  ~TestSuiteNoAtExit() override = default;
 
  protected:
   void Initialize() override;
diff --git a/media/base/seekable_buffer.cc b/media/base/seekable_buffer.cc
index bb2776dd..fb3f4d2 100644
--- a/media/base/seekable_buffer.cc
+++ b/media/base/seekable_buffer.cc
@@ -22,8 +22,7 @@
   current_buffer_ = buffers_.begin();
 }
 
-SeekableBuffer::~SeekableBuffer() {
-}
+SeekableBuffer::~SeekableBuffer() = default;
 
 void SeekableBuffer::Clear() {
   buffers_.clear();
diff --git a/media/base/serial_runner.cc b/media/base/serial_runner.cc
index 2564188..1c7e84f 100644
--- a/media/base/serial_runner.cc
+++ b/media/base/serial_runner.cc
@@ -39,9 +39,9 @@
   task_runner->PostTask(FROM_HERE, base::Bind(status_cb, last_status));
 }
 
-SerialRunner::Queue::Queue() {}
+SerialRunner::Queue::Queue() = default;
 SerialRunner::Queue::Queue(const Queue& other) = default;
-SerialRunner::Queue::~Queue() {}
+SerialRunner::Queue::~Queue() = default;
 
 void SerialRunner::Queue::Push(const base::Closure& closure) {
   bound_fns_.push(base::Bind(&RunClosure, closure));
@@ -86,7 +86,7 @@
   RunNextInSeries(PIPELINE_OK);
 }
 
-SerialRunner::~SerialRunner() {}
+SerialRunner::~SerialRunner() = default;
 
 std::unique_ptr<SerialRunner> SerialRunner::Run(
     const Queue& bound_fns,
diff --git a/media/base/serial_runner_unittest.cc b/media/base/serial_runner_unittest.cc
index 5d71e89f..96e9497b 100644
--- a/media/base/serial_runner_unittest.cc
+++ b/media/base/serial_runner_unittest.cc
@@ -21,7 +21,7 @@
  public:
   SerialRunnerTest()
       : inside_start_(false), done_called_(false), done_status_(PIPELINE_OK) {}
-  ~SerialRunnerTest() override {}
+  ~SerialRunnerTest() override = default;
 
   void RunSerialRunner() {
     message_loop_.task_runner()->PostTask(
diff --git a/media/base/silent_sink_suspender_unittest.cc b/media/base/silent_sink_suspender_unittest.cc
index 81770d23..50a7c13 100644
--- a/media/base/silent_sink_suspender_unittest.cc
+++ b/media/base/silent_sink_suspender_unittest.cc
@@ -33,7 +33,7 @@
                    params_,
                    mock_sink_,
                    test_loop_.task_runner()) {}
-  ~SilentSinkSuspenderTest() override {}
+  ~SilentSinkSuspenderTest() override = default;
 
  protected:
   base::TestMessageLoop test_loop_;
diff --git a/media/base/sinc_resampler.cc b/media/base/sinc_resampler.cc
index 4c8de80..4f47fc60 100644
--- a/media/base/sinc_resampler.cc
+++ b/media/base/sinc_resampler.cc
@@ -146,7 +146,7 @@
   InitializeKernel();
 }
 
-SincResampler::~SincResampler() {}
+SincResampler::~SincResampler() = default;
 
 void SincResampler::UpdateRegions(bool second_load) {
   // Setup various region pointers in the buffer (see diagram above).  If we're
diff --git a/media/base/sinc_resampler_unittest.cc b/media/base/sinc_resampler_unittest.cc
index 5ff5415..93bdce6 100644
--- a/media/base/sinc_resampler_unittest.cc
+++ b/media/base/sinc_resampler_unittest.cc
@@ -211,7 +211,7 @@
     k_ = (max_frequency_ - kMinFrequency) / duration;
   }
 
-  virtual ~SinusoidalLinearChirpSource() {}
+  virtual ~SinusoidalLinearChirpSource() = default;
 
   void ProvideInput(int frames, float* destination) {
     for (int i = 0; i < frames; ++i, ++current_index_) {
@@ -259,7 +259,7 @@
         low_freq_error_(std::tr1::get<3>(GetParam())) {
   }
 
-  virtual ~SincResamplerTest() {}
+  virtual ~SincResamplerTest() = default;
 
  protected:
   int input_rate_;
diff --git a/media/base/stream_parser.cc b/media/base/stream_parser.cc
index 78fff1a..8df7592 100644
--- a/media/base/stream_parser.cc
+++ b/media/base/stream_parser.cc
@@ -16,9 +16,9 @@
       detected_video_track_count(0),
       detected_text_track_count(0) {}
 
-StreamParser::StreamParser() {}
+StreamParser::StreamParser() = default;
 
-StreamParser::~StreamParser() {}
+StreamParser::~StreamParser() = default;
 
 static bool MergeBufferQueuesInternal(
     const std::vector<const StreamParser::BufferQueue*>& buffer_queues,
diff --git a/media/base/stream_parser_buffer.cc b/media/base/stream_parser_buffer.cc
index 7193fe8..6ccdd480 100644
--- a/media/base/stream_parser_buffer.cc
+++ b/media/base/stream_parser_buffer.cc
@@ -76,7 +76,7 @@
     set_is_key_frame(true);
 }
 
-StreamParserBuffer::~StreamParserBuffer() {}
+StreamParserBuffer::~StreamParserBuffer() = default;
 
 int StreamParserBuffer::GetConfigId() const {
   return config_id_;
diff --git a/media/base/stream_parser_unittest.cc b/media/base/stream_parser_unittest.cc
index 407f872..6329f5c 100644
--- a/media/base/stream_parser_unittest.cc
+++ b/media/base/stream_parser_unittest.cc
@@ -63,7 +63,7 @@
 
 class StreamParserTest : public testing::Test {
  protected:
-  StreamParserTest() {}
+  StreamParserTest() = default;
 
   // Returns the number of buffers in |merged_buffers_| for which |predicate|
   // returns true.
diff --git a/media/base/test_helpers.cc b/media/base/test_helpers.cc
index 2d321ac9..351bcc6 100644
--- a/media/base/test_helpers.cc
+++ b/media/base/test_helpers.cc
@@ -41,8 +41,8 @@
   DISALLOW_COPY_AND_ASSIGN(MockCallback);
 };
 
-MockCallback::MockCallback() {}
-MockCallback::~MockCallback() {}
+MockCallback::MockCallback() = default;
+MockCallback::~MockCallback() = default;
 
 base::Closure NewExpectedClosure() {
   StrictMock<MockCallback>* callback = new StrictMock<MockCallback>();
diff --git a/media/base/text_cue.cc b/media/base/text_cue.cc
index 3d8a892..98d77574 100644
--- a/media/base/text_cue.cc
+++ b/media/base/text_cue.cc
@@ -18,6 +18,6 @@
       text_(text) {
 }
 
-TextCue::~TextCue() {}
+TextCue::~TextCue() = default;
 
 }  // namespace media
diff --git a/media/base/text_ranges.cc b/media/base/text_ranges.cc
index 41bc7d0..a88cc90 100644
--- a/media/base/text_ranges.cc
+++ b/media/base/text_ranges.cc
@@ -12,8 +12,7 @@
   Reset();
 }
 
-TextRanges::~TextRanges() {
-}
+TextRanges::~TextRanges() = default;
 
 void TextRanges::Reset() {
   curr_range_itr_ = range_map_.end();
diff --git a/media/base/text_renderer.cc b/media/base/text_renderer.cc
index 46c5a42..01660ae 100644
--- a/media/base/text_renderer.cc
+++ b/media/base/text_renderer.cc
@@ -320,7 +320,6 @@
 TextRenderer::TextTrackState::TextTrackState(std::unique_ptr<TextTrack> tt)
     : read_state(kReadIdle), text_track(std::move(tt)) {}
 
-TextRenderer::TextTrackState::~TextTrackState() {
-}
+TextRenderer::TextTrackState::~TextTrackState() = default;
 
 }  // namespace media
diff --git a/media/base/text_renderer_unittest.cc b/media/base/text_renderer_unittest.cc
index 07b1758..edfbd76 100644
--- a/media/base/text_renderer_unittest.cc
+++ b/media/base/text_renderer_unittest.cc
@@ -54,7 +54,7 @@
 
 class TextRendererTest : public testing::Test {
  public:
-  TextRendererTest() {}
+  TextRendererTest() = default;
 
   void CreateTextRenderer() {
     DCHECK(!text_renderer_);
diff --git a/media/base/time_delta_interpolator.cc b/media/base/time_delta_interpolator.cc
index 33e7467..2385e50 100644
--- a/media/base/time_delta_interpolator.cc
+++ b/media/base/time_delta_interpolator.cc
@@ -22,8 +22,7 @@
   DCHECK(tick_clock_);
 }
 
-TimeDeltaInterpolator::~TimeDeltaInterpolator() {
-}
+TimeDeltaInterpolator::~TimeDeltaInterpolator() = default;
 
 base::TimeDelta TimeDeltaInterpolator::StartInterpolating() {
   DCHECK(!interpolating_);
diff --git a/media/base/video_color_space.cc b/media/base/video_color_space.cc
index 30b62c5c..5489d91 100644
--- a/media/base/video_color_space.cc
+++ b/media/base/video_color_space.cc
@@ -26,7 +26,7 @@
   return static_cast<MatrixID>(matrix);
 }
 
-VideoColorSpace::VideoColorSpace() {}
+VideoColorSpace::VideoColorSpace() = default;
 
 VideoColorSpace::VideoColorSpace(PrimaryID primaries,
                                  TransferID transfer,
diff --git a/media/base/video_decoder.cc b/media/base/video_decoder.cc
index 34490bd1..59929f5 100644
--- a/media/base/video_decoder.cc
+++ b/media/base/video_decoder.cc
@@ -8,13 +8,13 @@
 
 namespace media {
 
-VideoDecoder::VideoDecoder() {}
+VideoDecoder::VideoDecoder() = default;
 
 void VideoDecoder::Destroy() {
   delete this;
 }
 
-VideoDecoder::~VideoDecoder() {}
+VideoDecoder::~VideoDecoder() = default;
 
 bool VideoDecoder::NeedsBitstreamConversion() const {
   return false;
diff --git a/media/base/video_decoder_config.cc b/media/base/video_decoder_config.cc
index 80990b3..e763506 100644
--- a/media/base/video_decoder_config.cc
+++ b/media/base/video_decoder_config.cc
@@ -79,7 +79,7 @@
 VideoDecoderConfig::VideoDecoderConfig(const VideoDecoderConfig& other) =
     default;
 
-VideoDecoderConfig::~VideoDecoderConfig() {}
+VideoDecoderConfig::~VideoDecoderConfig() = default;
 
 void VideoDecoderConfig::set_color_space_info(
     const VideoColorSpace& color_space_info) {
diff --git a/media/base/video_frame_metadata.cc b/media/base/video_frame_metadata.cc
index f063623..d4b35c0f 100644
--- a/media/base/video_frame_metadata.cc
+++ b/media/base/video_frame_metadata.cc
@@ -22,9 +22,9 @@
 
 }  // namespace
 
-VideoFrameMetadata::VideoFrameMetadata() {}
+VideoFrameMetadata::VideoFrameMetadata() = default;
 
-VideoFrameMetadata::~VideoFrameMetadata() {}
+VideoFrameMetadata::~VideoFrameMetadata() = default;
 
 bool VideoFrameMetadata::HasKey(Key key) const {
   return dictionary_.HasKey(ToInternalKey(key));
diff --git a/media/base/video_frame_unittest.cc b/media/base/video_frame_unittest.cc
index 9946397..0ce3a44 100644
--- a/media/base/video_frame_unittest.cc
+++ b/media/base/video_frame_unittest.cc
@@ -328,7 +328,7 @@
  public:
   explicit SyncTokenClientImpl(const gpu::SyncToken& sync_token)
       : sync_token_(sync_token) {}
-  ~SyncTokenClientImpl() override {}
+  ~SyncTokenClientImpl() override = default;
   void GenerateSyncToken(gpu::SyncToken* sync_token) override {
     *sync_token = sync_token_;
   }
diff --git a/media/base/video_renderer.cc b/media/base/video_renderer.cc
index 00a8f21..006f04b 100644
--- a/media/base/video_renderer.cc
+++ b/media/base/video_renderer.cc
@@ -6,7 +6,7 @@
 
 namespace media {
 
-VideoRenderer::VideoRenderer() {}
-VideoRenderer::~VideoRenderer() {}
+VideoRenderer::VideoRenderer() = default;
+VideoRenderer::~VideoRenderer() = default;
 
 }  // namespace media
diff --git a/media/base/video_util_unittest.cc b/media/base/video_util_unittest.cc
index 5cedbeb..ba45c77d 100644
--- a/media/base/video_util_unittest.cc
+++ b/media/base/video_util_unittest.cc
@@ -151,7 +151,7 @@
         v_stride_(0) {
   }
 
-  ~VideoUtilTest() override {}
+  ~VideoUtilTest() override = default;
 
   void CreateSourceFrame(int width, int height,
                          int y_stride, int u_stride, int v_stride) {
@@ -359,7 +359,7 @@
     dest_.reset(new uint8_t[GetParam().width * GetParam().height]);
   }
 
-  virtual ~VideoUtilRotationTest() {}
+  virtual ~VideoUtilRotationTest() = default;
 
   uint8_t* dest_plane() { return dest_.get(); }
 
diff --git a/media/base/wall_clock_time_source.cc b/media/base/wall_clock_time_source.cc
index 911bf7c..40d1fb8 100644
--- a/media/base/wall_clock_time_source.cc
+++ b/media/base/wall_clock_time_source.cc
@@ -12,8 +12,7 @@
     : tick_clock_(&default_tick_clock_), ticking_(false), playback_rate_(1.0) {
 }
 
-WallClockTimeSource::~WallClockTimeSource() {
-}
+WallClockTimeSource::~WallClockTimeSource() = default;
 
 void WallClockTimeSource::StartTicking() {
   DVLOG(1) << __func__;
diff --git a/media/base/wall_clock_time_source_unittest.cc b/media/base/wall_clock_time_source_unittest.cc
index cf67ac59..9468eb4d 100644
--- a/media/base/wall_clock_time_source_unittest.cc
+++ b/media/base/wall_clock_time_source_unittest.cc
@@ -17,7 +17,7 @@
     time_source_.set_tick_clock_for_testing(tick_clock_.get());
     AdvanceTimeInSeconds(1);
   }
-  ~WallClockTimeSourceTest() override {}
+  ~WallClockTimeSourceTest() override = default;
 
   void AdvanceTimeInSeconds(int seconds) {
     tick_clock_->Advance(base::TimeDelta::FromSeconds(seconds));
diff --git a/media/blink/buffered_data_source_host_impl.cc b/media/blink/buffered_data_source_host_impl.cc
index 8569558..15fa194e 100644
--- a/media/blink/buffered_data_source_host_impl.cc
+++ b/media/blink/buffered_data_source_host_impl.cc
@@ -31,7 +31,7 @@
       progress_cb_(std::move(progress_cb)),
       tick_clock_(tick_clock) {}
 
-BufferedDataSourceHostImpl::~BufferedDataSourceHostImpl() { }
+BufferedDataSourceHostImpl::~BufferedDataSourceHostImpl() = default;
 
 void BufferedDataSourceHostImpl::SetTotalBytes(int64_t total_bytes) {
   total_bytes_ = total_bytes;
diff --git a/media/blink/cdm_session_adapter.cc b/media/blink/cdm_session_adapter.cc
index 74dadb9..0d8b779e 100644
--- a/media/blink/cdm_session_adapter.cc
+++ b/media/blink/cdm_session_adapter.cc
@@ -34,7 +34,7 @@
 CdmSessionAdapter::CdmSessionAdapter()
     : trace_id_(0), weak_ptr_factory_(this) {}
 
-CdmSessionAdapter::~CdmSessionAdapter() {}
+CdmSessionAdapter::~CdmSessionAdapter() = default;
 
 void CdmSessionAdapter::CreateCdm(
     CdmFactory* cdm_factory,
diff --git a/media/blink/key_system_config_selector.cc b/media/blink/key_system_config_selector.cc
index 4a70d4db..49beb05e 100644
--- a/media/blink/key_system_config_selector.cc
+++ b/media/blink/key_system_config_selector.cc
@@ -293,8 +293,7 @@
   DCHECK(media_permission_);
 }
 
-KeySystemConfigSelector::~KeySystemConfigSelector() {
-}
+KeySystemConfigSelector::~KeySystemConfigSelector() = default;
 
 bool IsSupportedMediaFormat(const std::string& container_mime_type,
                             const std::string& codecs,
diff --git a/media/blink/key_system_config_selector_unittest.cc b/media/blink/key_system_config_selector_unittest.cc
index e572cd3..3548ebc 100644
--- a/media/blink/key_system_config_selector_unittest.cc
+++ b/media/blink/key_system_config_selector_unittest.cc
@@ -81,8 +81,7 @@
 
 class FakeKeySystems : public KeySystems {
  public:
-  ~FakeKeySystems() override {
-  }
+  ~FakeKeySystems() override = default;
 
   bool IsSupportedKeySystem(const std::string& key_system) const override {
     // Based on EME spec, Clear Key key system is always supported.
diff --git a/media/blink/mock_resource_fetch_context.cc b/media/blink/mock_resource_fetch_context.cc
index f31500b27..2a96d42c 100644
--- a/media/blink/mock_resource_fetch_context.cc
+++ b/media/blink/mock_resource_fetch_context.cc
@@ -6,8 +6,8 @@
 
 namespace media {
 
-MockResourceFetchContext::MockResourceFetchContext() {}
+MockResourceFetchContext::MockResourceFetchContext() = default;
 
-MockResourceFetchContext::~MockResourceFetchContext() {}
+MockResourceFetchContext::~MockResourceFetchContext() = default;
 
 }  // namespace media
diff --git a/media/blink/mock_webassociatedurlloader.cc b/media/blink/mock_webassociatedurlloader.cc
index 09019ca..78f47c5 100644
--- a/media/blink/mock_webassociatedurlloader.cc
+++ b/media/blink/mock_webassociatedurlloader.cc
@@ -11,8 +11,8 @@
 
 namespace media {
 
-MockWebAssociatedURLLoader::MockWebAssociatedURLLoader() {}
+MockWebAssociatedURLLoader::MockWebAssociatedURLLoader() = default;
 
-MockWebAssociatedURLLoader::~MockWebAssociatedURLLoader() {}
+MockWebAssociatedURLLoader::~MockWebAssociatedURLLoader() = default;
 
 }  // namespace media
diff --git a/media/blink/multibuffer_data_source_unittest.cc b/media/blink/multibuffer_data_source_unittest.cc
index 4fb3ff5..62bb9b12 100644
--- a/media/blink/multibuffer_data_source_unittest.cc
+++ b/media/blink/multibuffer_data_source_unittest.cc
@@ -130,7 +130,7 @@
   }
 
  protected:
-  ~TestUrlData() override {}
+  ~TestUrlData() override = default;
   const int block_shift_;
 
   std::unique_ptr<TestResourceMultiBuffer> test_multibuffer_;
@@ -158,8 +158,8 @@
 
 class MockBufferedDataSourceHost : public BufferedDataSourceHost {
  public:
-  MockBufferedDataSourceHost() {}
-  virtual ~MockBufferedDataSourceHost() {}
+  MockBufferedDataSourceHost() = default;
+  virtual ~MockBufferedDataSourceHost() = default;
 
   MOCK_METHOD1(SetTotalBytes, void(int64_t total_bytes));
   MOCK_METHOD2(AddBufferedByteRange, void(int64_t start, int64_t end));
diff --git a/media/blink/resource_multibuffer_data_provider.cc b/media/blink/resource_multibuffer_data_provider.cc
index 0c4d6660..8c1c591 100644
--- a/media/blink/resource_multibuffer_data_provider.cc
+++ b/media/blink/resource_multibuffer_data_provider.cc
@@ -65,7 +65,7 @@
   DCHECK_GE(pos, 0);
 }
 
-ResourceMultiBufferDataProvider::~ResourceMultiBufferDataProvider() {}
+ResourceMultiBufferDataProvider::~ResourceMultiBufferDataProvider() = default;
 
 void ResourceMultiBufferDataProvider::Start() {
   DVLOG(1) << __func__ << " @ " << byte_pos();
diff --git a/media/blink/run_all_unittests.cc b/media/blink/run_all_unittests.cc
index 8abfcf5..3a7aeb95 100644
--- a/media/blink/run_all_unittests.cc
+++ b/media/blink/run_all_unittests.cc
@@ -68,7 +68,7 @@
       blink_platform_support_(new TestBlinkPlatformSupport()) {
 }
 
-BlinkMediaTestSuite::~BlinkMediaTestSuite() {}
+BlinkMediaTestSuite::~BlinkMediaTestSuite() = default;
 
 void BlinkMediaTestSuite::Initialize() {
   // Run TestSuite::Initialize first so that logging is initialized.
diff --git a/media/blink/url_index.cc b/media/blink/url_index.cc
index 4264b95..b2c7f44c 100644
--- a/media/blink/url_index.cc
+++ b/media/blink/url_index.cc
@@ -24,7 +24,7 @@
     : MultiBuffer(block_shift, url_data->url_index_->lru_),
       url_data_(url_data) {}
 
-ResourceMultiBuffer::~ResourceMultiBuffer() {}
+ResourceMultiBuffer::~ResourceMultiBuffer() = default;
 
 std::unique_ptr<MultiBuffer::DataProvider> ResourceMultiBuffer::CreateWriter(
     const MultiBufferBlockId& pos) {
diff --git a/media/blink/video_decode_stats_reporter.cc b/media/blink/video_decode_stats_reporter.cc
index 51ede1b5..d99409b5 100644
--- a/media/blink/video_decode_stats_reporter.cc
+++ b/media/blink/video_decode_stats_reporter.cc
@@ -36,7 +36,7 @@
       &VideoDecodeStatsReporter::OnIpcConnectionError, base::Unretained(this)));
 }
 
-VideoDecodeStatsReporter::~VideoDecodeStatsReporter() {}
+VideoDecodeStatsReporter::~VideoDecodeStatsReporter() = default;
 
 void VideoDecodeStatsReporter::OnPlaying() {
   DVLOG(2) << __func__;
diff --git a/media/blink/video_decode_stats_reporter_unittest.cc b/media/blink/video_decode_stats_reporter_unittest.cc
index d86729d..1527b79 100644
--- a/media/blink/video_decode_stats_reporter_unittest.cc
+++ b/media/blink/video_decode_stats_reporter_unittest.cc
@@ -64,8 +64,8 @@
 // Mock VideoDecodeStatsRecorder to verify reporter/recorder interactions.
 class RecordInterceptor : public mojom::VideoDecodeStatsRecorder {
  public:
-  RecordInterceptor() {}
-  ~RecordInterceptor() override {}
+  RecordInterceptor() = default;
+  ~RecordInterceptor() override = default;
 
   MOCK_METHOD2(SetPageInfo,
                void(const url::Origin& top_frame_origin, bool is_top_frame));
@@ -86,7 +86,7 @@
  public:
   VideoDecodeStatsReporterTest()
       : kDefaultSize_(kDefaultWidth, kDefaultHeight) {}
-  ~VideoDecodeStatsReporterTest() override {}
+  ~VideoDecodeStatsReporterTest() override = default;
 
   void SetUp() override {
     // Do this first. Lots of pieces depend on the task runner.
diff --git a/media/blink/watch_time_reporter_unittest.cc b/media/blink/watch_time_reporter_unittest.cc
index 62e749d..558bd74 100644
--- a/media/blink/watch_time_reporter_unittest.cc
+++ b/media/blink/watch_time_reporter_unittest.cc
@@ -73,14 +73,14 @@
                               public mojom::WatchTimeRecorderProvider {
  public:
   WatchTimeReporterTest() : has_video_(GetParam()) {}
-  ~WatchTimeReporterTest() override {}
+  ~WatchTimeReporterTest() override = default;
 
  protected:
   class WatchTimeInterceptor : public mojom::WatchTimeRecorder {
    public:
     WatchTimeInterceptor(WatchTimeReporterTest* parent) : parent_(parent) {}
 
-    ~WatchTimeInterceptor() override {}
+    ~WatchTimeInterceptor() override = default;
 
     // mojom::WatchTimeRecorder implementation:
     void RecordWatchTime(WatchTimeKey key, base::TimeDelta value) override {
diff --git a/media/blink/webaudiosourceprovider_impl.cc b/media/blink/webaudiosourceprovider_impl.cc
index d96e78f..348808d 100644
--- a/media/blink/webaudiosourceprovider_impl.cc
+++ b/media/blink/webaudiosourceprovider_impl.cc
@@ -61,7 +61,7 @@
     : public AudioRendererSink::RenderCallback {
  public:
   TeeFilter() : renderer_(nullptr), channels_(0), sample_rate_(0) {}
-  ~TeeFilter() override {}
+  ~TeeFilter() override = default;
 
   void Initialize(AudioRendererSink::RenderCallback* renderer,
                   int channels,
@@ -109,8 +109,7 @@
       media_log_(media_log),
       weak_factory_(this) {}
 
-WebAudioSourceProviderImpl::~WebAudioSourceProviderImpl() {
-}
+WebAudioSourceProviderImpl::~WebAudioSourceProviderImpl() = default;
 
 void WebAudioSourceProviderImpl::SetClient(
     blink::WebAudioSourceProviderClient* client) {
diff --git a/media/blink/webaudiosourceprovider_impl_unittest.cc b/media/blink/webaudiosourceprovider_impl_unittest.cc
index fbee299a..f9045cc6 100644
--- a/media/blink/webaudiosourceprovider_impl_unittest.cc
+++ b/media/blink/webaudiosourceprovider_impl_unittest.cc
@@ -76,7 +76,7 @@
                            ? mock_sink_.get()
                            : wasp_impl_->fallback_sink()) {}
 
-  virtual ~WebAudioSourceProviderImplTest() {}
+  virtual ~WebAudioSourceProviderImplTest() = default;
 
   void CallAllSinkMethodsAndVerify(bool verify) {
     testing::InSequence s;
diff --git a/media/blink/webcontentdecryptionmodule_impl.cc b/media/blink/webcontentdecryptionmodule_impl.cc
index ed7a1ca..4a14bcc 100644
--- a/media/blink/webcontentdecryptionmodule_impl.cc
+++ b/media/blink/webcontentdecryptionmodule_impl.cc
@@ -114,8 +114,7 @@
     : adapter_(adapter) {
 }
 
-WebContentDecryptionModuleImpl::~WebContentDecryptionModuleImpl() {
-}
+WebContentDecryptionModuleImpl::~WebContentDecryptionModuleImpl() = default;
 
 std::unique_ptr<blink::WebContentDecryptionModuleSession>
 WebContentDecryptionModuleImpl::CreateSession() {
diff --git a/media/blink/webcontentdecryptionmoduleaccess_impl.cc b/media/blink/webcontentdecryptionmoduleaccess_impl.cc
index 5ee0ac3..f452983 100644
--- a/media/blink/webcontentdecryptionmoduleaccess_impl.cc
+++ b/media/blink/webcontentdecryptionmoduleaccess_impl.cc
@@ -58,8 +58,8 @@
       client_(client) {
 }
 
-WebContentDecryptionModuleAccessImpl::~WebContentDecryptionModuleAccessImpl() {
-}
+WebContentDecryptionModuleAccessImpl::~WebContentDecryptionModuleAccessImpl() =
+    default;
 
 blink::WebMediaKeySystemConfiguration
 WebContentDecryptionModuleAccessImpl::GetConfiguration() {
diff --git a/media/blink/webcontentdecryptionmodulesession_impl.cc b/media/blink/webcontentdecryptionmodulesession_impl.cc
index 2e85f54b..c8f15ad6 100644
--- a/media/blink/webcontentdecryptionmodulesession_impl.cc
+++ b/media/blink/webcontentdecryptionmodulesession_impl.cc
@@ -211,8 +211,8 @@
 // something back to blink).
 class IgnoreResponsePromise : public SimpleCdmPromise {
  public:
-  IgnoreResponsePromise() {}
-  ~IgnoreResponsePromise() override {}
+  IgnoreResponsePromise() = default;
+  ~IgnoreResponsePromise() override = default;
 
   // SimpleCdmPromise implementation.
   void resolve() final { MarkPromiseSettled(); }
diff --git a/media/blink/webencryptedmediaclient_impl.cc b/media/blink/webencryptedmediaclient_impl.cc
index ffefea61..c907360 100644
--- a/media/blink/webencryptedmediaclient_impl.cc
+++ b/media/blink/webencryptedmediaclient_impl.cc
@@ -53,7 +53,7 @@
       : uma_name_(kKeySystemSupportUMAPrefix + key_system_for_uma),
         is_request_reported_(false),
         is_support_reported_(false) {}
-  ~Reporter() {}
+  ~Reporter() = default;
 
   void ReportRequested() {
     if (is_request_reported_)
@@ -96,8 +96,7 @@
   DCHECK(cdm_factory_);
 }
 
-WebEncryptedMediaClientImpl::~WebEncryptedMediaClientImpl() {
-}
+WebEncryptedMediaClientImpl::~WebEncryptedMediaClientImpl() = default;
 
 void WebEncryptedMediaClientImpl::RequestMediaKeySystemAccess(
     blink::WebEncryptedMediaRequest request) {
diff --git a/media/blink/webmediaplayer_impl_unittest.cc b/media/blink/webmediaplayer_impl_unittest.cc
index 320923f4..6eb909a 100644
--- a/media/blink/webmediaplayer_impl_unittest.cc
+++ b/media/blink/webmediaplayer_impl_unittest.cc
@@ -97,7 +97,7 @@
 
 class DummyWebMediaPlayerClient : public blink::WebMediaPlayerClient {
  public:
-  DummyWebMediaPlayerClient() {}
+  DummyWebMediaPlayerClient() = default;
 
   // blink::WebMediaPlayerClient implementation.
   void NetworkStateChanged() override {}
diff --git a/media/blink/webmediaplayer_params.cc b/media/blink/webmediaplayer_params.cc
index e1d5c41..427b3b2 100644
--- a/media/blink/webmediaplayer_params.cc
+++ b/media/blink/webmediaplayer_params.cc
@@ -57,6 +57,6 @@
       create_bridge_callback_(create_bridge_callback),
       context_provider_(std::move(context_provider)) {}
 
-WebMediaPlayerParams::~WebMediaPlayerParams() {}
+WebMediaPlayerParams::~WebMediaPlayerParams() = default;
 
 }  // namespace media
diff --git a/media/blink/webmediaplayer_util.cc b/media/blink/webmediaplayer_util.cc
index 51f74505..b4c3d0c 100644
--- a/media/blink/webmediaplayer_util.cc
+++ b/media/blink/webmediaplayer_util.cc
@@ -200,7 +200,7 @@
       : web_callback_(web_callback) {}
   SetSinkIdCallback(const SetSinkIdCallback& other)
       : web_callback_(std::move(other.web_callback_)) {}
-  ~SetSinkIdCallback() {}
+  ~SetSinkIdCallback() = default;
   friend void RunSetSinkIdCallback(const SetSinkIdCallback& callback,
                                    OutputDeviceStatus result);
 
diff --git a/media/blink/webmediasource_impl.cc b/media/blink/webmediasource_impl.cc
index 812b9cc..f79db7d 100644
--- a/media/blink/webmediasource_impl.cc
+++ b/media/blink/webmediasource_impl.cc
@@ -29,7 +29,7 @@
   DCHECK(demuxer_);
 }
 
-WebMediaSourceImpl::~WebMediaSourceImpl() {}
+WebMediaSourceImpl::~WebMediaSourceImpl() = default;
 
 WebMediaSource::AddStatus WebMediaSourceImpl::AddSourceBuffer(
     const blink::WebString& type,
diff --git a/media/capture/content/animated_content_sampler.cc b/media/capture/content/animated_content_sampler.cc
index d53fad8..ea184a59 100644
--- a/media/capture/content/animated_content_sampler.cc
+++ b/media/capture/content/animated_content_sampler.cc
@@ -48,8 +48,7 @@
   DCHECK_GT(min_capture_period_, base::TimeDelta());
 }
 
-AnimatedContentSampler::~AnimatedContentSampler() {
-}
+AnimatedContentSampler::~AnimatedContentSampler() = default;
 
 void AnimatedContentSampler::SetMinCapturePeriod(base::TimeDelta period) {
   DCHECK_GT(period, base::TimeDelta());
diff --git a/media/capture/content/animated_content_sampler_unittest.cc b/media/capture/content/animated_content_sampler_unittest.cc
index 1a8766cd..10f5dc8 100644
--- a/media/capture/content/animated_content_sampler_unittest.cc
+++ b/media/capture/content/animated_content_sampler_unittest.cc
@@ -33,8 +33,8 @@
 
 class AnimatedContentSamplerTest : public ::testing::Test {
  public:
-  AnimatedContentSamplerTest() {}
-  ~AnimatedContentSamplerTest() override {}
+  AnimatedContentSamplerTest() = default;
+  ~AnimatedContentSamplerTest() override = default;
 
   void SetUp() override {
     rand_seed_ = static_cast<int>(
@@ -256,7 +256,7 @@
  public:
   AnimatedContentSamplerParameterizedTest()
       : count_dropped_frames_(0), count_sampled_frames_(0) {}
-  virtual ~AnimatedContentSamplerParameterizedTest() {}
+  virtual ~AnimatedContentSamplerParameterizedTest() = default;
 
   void SetUp() override {
     AnimatedContentSamplerTest::SetUp();
diff --git a/media/capture/content/capture_resolution_chooser.cc b/media/capture/content/capture_resolution_chooser.cc
index 2841635..f665bf3 100644
--- a/media/capture/content/capture_resolution_chooser.cc
+++ b/media/capture/content/capture_resolution_chooser.cc
@@ -64,8 +64,7 @@
       capture_size_(kDefaultCaptureSize),
       snapped_sizes_({kDefaultCaptureSize}) {}
 
-CaptureResolutionChooser::~CaptureResolutionChooser() {
-}
+CaptureResolutionChooser::~CaptureResolutionChooser() = default;
 
 void CaptureResolutionChooser::SetConstraints(const gfx::Size& min_frame_size,
                                               const gfx::Size& max_frame_size,
diff --git a/media/capture/content/screen_capture_device_core.cc b/media/capture/content/screen_capture_device_core.cc
index 8fa0601..be901d10 100644
--- a/media/capture/content/screen_capture_device_core.cc
+++ b/media/capture/content/screen_capture_device_core.cc
@@ -26,11 +26,9 @@
 
 }  // namespace
 
-VideoCaptureMachine::VideoCaptureMachine() {
-}
+VideoCaptureMachine::VideoCaptureMachine() = default;
 
-VideoCaptureMachine::~VideoCaptureMachine() {
-}
+VideoCaptureMachine::~VideoCaptureMachine() = default;
 
 bool VideoCaptureMachine::IsAutoThrottlingEnabled() const {
   return false;
diff --git a/media/capture/content/thread_safe_capture_oracle.cc b/media/capture/content/thread_safe_capture_oracle.cc
index 386186ae..9283a384 100644
--- a/media/capture/content/thread_safe_capture_oracle.cc
+++ b/media/capture/content/thread_safe_capture_oracle.cc
@@ -59,8 +59,7 @@
                                     constraints.fixed_aspect_ratio);
 }
 
-ThreadSafeCaptureOracle::~ThreadSafeCaptureOracle() {
-}
+ThreadSafeCaptureOracle::~ThreadSafeCaptureOracle() = default;
 
 bool ThreadSafeCaptureOracle::ObserveEventAndDecideCapture(
     VideoCaptureOracle::Event event,
diff --git a/media/capture/content/video_capture_oracle.cc b/media/capture/content/video_capture_oracle.cc
index 358b7ae..b0ffd8b0 100644
--- a/media/capture/content/video_capture_oracle.cc
+++ b/media/capture/content/video_capture_oracle.cc
@@ -114,8 +114,7 @@
           << (auto_throttling_enabled_ ? "enabled." : "disabled.");
 }
 
-VideoCaptureOracle::~VideoCaptureOracle() {
-}
+VideoCaptureOracle::~VideoCaptureOracle() = default;
 
 void VideoCaptureOracle::SetMinCapturePeriod(base::TimeDelta period) {
   DCHECK_GT(period, base::TimeDelta());
diff --git a/media/capture/video/chromeos/camera_buffer_factory.cc b/media/capture/video/chromeos/camera_buffer_factory.cc
index fe37983..2816194 100644
--- a/media/capture/video/chromeos/camera_buffer_factory.cc
+++ b/media/capture/video/chromeos/camera_buffer_factory.cc
@@ -8,9 +8,9 @@
 
 namespace media {
 
-CameraBufferFactory::CameraBufferFactory() {}
+CameraBufferFactory::CameraBufferFactory() = default;
 
-CameraBufferFactory::~CameraBufferFactory() {}
+CameraBufferFactory::~CameraBufferFactory() = default;
 
 std::unique_ptr<gfx::GpuMemoryBuffer>
 CameraBufferFactory::CreateGpuMemoryBuffer(const gfx::Size& size,
diff --git a/media/capture/video/chromeos/camera_device_context.cc b/media/capture/video/chromeos/camera_device_context.cc
index 06ee5bf0..15cb775 100644
--- a/media/capture/video/chromeos/camera_device_context.cc
+++ b/media/capture/video/chromeos/camera_device_context.cc
@@ -13,7 +13,7 @@
   DETACH_FROM_SEQUENCE(sequence_checker_);
 }
 
-CameraDeviceContext::~CameraDeviceContext() {}
+CameraDeviceContext::~CameraDeviceContext() = default;
 
 void CameraDeviceContext::SetState(State state) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
diff --git a/media/capture/video/chromeos/camera_device_delegate.cc b/media/capture/video/chromeos/camera_device_delegate.cc
index c50567f..68550c9 100644
--- a/media/capture/video/chromeos/camera_device_delegate.cc
+++ b/media/capture/video/chromeos/camera_device_delegate.cc
@@ -20,9 +20,9 @@
 
 namespace media {
 
-StreamCaptureInterface::Plane::Plane() {}
+StreamCaptureInterface::Plane::Plane() = default;
 
-StreamCaptureInterface::Plane::~Plane() {}
+StreamCaptureInterface::Plane::~Plane() = default;
 
 class CameraDeviceDelegate::StreamCaptureInterfaceImpl final
     : public StreamCaptureInterface {
@@ -68,7 +68,7 @@
       ipc_task_runner_(std::move(ipc_task_runner)),
       weak_ptr_factory_(this) {}
 
-CameraDeviceDelegate::~CameraDeviceDelegate() {}
+CameraDeviceDelegate::~CameraDeviceDelegate() = default;
 
 void CameraDeviceDelegate::AllocateAndStart(
     const VideoCaptureParams& params,
diff --git a/media/capture/video/chromeos/camera_device_delegate_unittest.cc b/media/capture/video/chromeos/camera_device_delegate_unittest.cc
index c1a4785..2a9a1c4 100644
--- a/media/capture/video/chromeos/camera_device_delegate_unittest.cc
+++ b/media/capture/video/chromeos/camera_device_delegate_unittest.cc
@@ -37,9 +37,9 @@
 
 class MockCameraDevice : public arc::mojom::Camera3DeviceOps {
  public:
-  MockCameraDevice() {}
+  MockCameraDevice() = default;
 
-  ~MockCameraDevice() {}
+  ~MockCameraDevice() = default;
 
   void Initialize(arc::mojom::Camera3CallbackOpsPtr callback_ops,
                   InitializeCallback callback) override {
diff --git a/media/capture/video/chromeos/camera_hal_delegate.cc b/media/capture/video/chromeos/camera_hal_delegate.cc
index b31e0bfc..fcb63be 100644
--- a/media/capture/video/chromeos/camera_hal_delegate.cc
+++ b/media/capture/video/chromeos/camera_hal_delegate.cc
@@ -57,7 +57,7 @@
   DETACH_FROM_SEQUENCE(sequence_checker_);
 }
 
-CameraHalDelegate::~CameraHalDelegate() {}
+CameraHalDelegate::~CameraHalDelegate() = default;
 
 void CameraHalDelegate::RegisterCameraClient() {
   CameraHalDispatcherImpl::GetInstance()->AddClientObserver(
diff --git a/media/capture/video/chromeos/camera_hal_dispatcher_impl.cc b/media/capture/video/chromeos/camera_hal_dispatcher_impl.cc
index aaa0311..4c5f17d 100644
--- a/media/capture/video/chromeos/camera_hal_dispatcher_impl.cc
+++ b/media/capture/video/chromeos/camera_hal_dispatcher_impl.cc
@@ -88,7 +88,7 @@
 
 }  // namespace
 
-CameraClientObserver::~CameraClientObserver() {}
+CameraClientObserver::~CameraClientObserver() = default;
 
 // static
 CameraHalDispatcherImpl* CameraHalDispatcherImpl::GetInstance() {
diff --git a/media/capture/video/chromeos/camera_hal_dispatcher_impl_unittest.cc b/media/capture/video/chromeos/camera_hal_dispatcher_impl_unittest.cc
index 8af8fc2..d14966c 100644
--- a/media/capture/video/chromeos/camera_hal_dispatcher_impl_unittest.cc
+++ b/media/capture/video/chromeos/camera_hal_dispatcher_impl_unittest.cc
@@ -25,7 +25,7 @@
  public:
   MockCameraHalServer() : binding_(this) {}
 
-  ~MockCameraHalServer() {}
+  ~MockCameraHalServer() = default;
 
   void CreateChannel(
       arc::mojom::CameraModuleRequest camera_module_request) override {
@@ -51,7 +51,7 @@
  public:
   MockCameraHalClient() : binding_(this) {}
 
-  ~MockCameraHalClient() {}
+  ~MockCameraHalClient() = default;
 
   void SetUpChannel(arc::mojom::CameraModulePtr camera_module_ptr) override {
     DoSetUpChannel(camera_module_ptr);
@@ -76,9 +76,9 @@
 
 class CameraHalDispatcherImplTest : public ::testing::Test {
  public:
-  CameraHalDispatcherImplTest() {}
+  CameraHalDispatcherImplTest() = default;
 
-  ~CameraHalDispatcherImplTest() override {}
+  ~CameraHalDispatcherImplTest() override = default;
 
   void SetUp() override {
     dispatcher_ = new CameraHalDispatcherImpl();
diff --git a/media/capture/video/chromeos/mock_gpu_memory_buffer_manager.cc b/media/capture/video/chromeos/mock_gpu_memory_buffer_manager.cc
index 06f9d80..3fea2cc 100644
--- a/media/capture/video/chromeos/mock_gpu_memory_buffer_manager.cc
+++ b/media/capture/video/chromeos/mock_gpu_memory_buffer_manager.cc
@@ -11,13 +11,13 @@
 namespace media {
 namespace unittest_internal {
 
-MockGpuMemoryBuffer::MockGpuMemoryBuffer() {}
+MockGpuMemoryBuffer::MockGpuMemoryBuffer() = default;
 
-MockGpuMemoryBuffer::~MockGpuMemoryBuffer() {}
+MockGpuMemoryBuffer::~MockGpuMemoryBuffer() = default;
 
-MockGpuMemoryBufferManager::MockGpuMemoryBufferManager() {}
+MockGpuMemoryBufferManager::MockGpuMemoryBufferManager() = default;
 
-MockGpuMemoryBufferManager::~MockGpuMemoryBufferManager() {}
+MockGpuMemoryBufferManager::~MockGpuMemoryBufferManager() = default;
 
 std::unique_ptr<gfx::GpuMemoryBuffer>
 MockGpuMemoryBufferManager::ReturnValidBuffer(
diff --git a/media/capture/video/chromeos/stream_buffer_manager.cc b/media/capture/video/chromeos/stream_buffer_manager.cc
index eaa5592..8bba363f8 100644
--- a/media/capture/video/chromeos/stream_buffer_manager.cc
+++ b/media/capture/video/chromeos/stream_buffer_manager.cc
@@ -498,13 +498,13 @@
   RegisterBuffer();
 }
 
-StreamBufferManager::StreamContext::StreamContext() {}
+StreamBufferManager::StreamContext::StreamContext() = default;
 
-StreamBufferManager::StreamContext::~StreamContext() {}
+StreamBufferManager::StreamContext::~StreamContext() = default;
 
 StreamBufferManager::CaptureResult::CaptureResult()
     : metadata(arc::mojom::CameraMetadata::New()) {}
 
-StreamBufferManager::CaptureResult::~CaptureResult() {}
+StreamBufferManager::CaptureResult::~CaptureResult() = default;
 
 }  // namespace media
diff --git a/media/capture/video/fake_video_capture_device.cc b/media/capture/video/fake_video_capture_device.cc
index 800cdd03..6662752 100644
--- a/media/capture/video/fake_video_capture_device.cc
+++ b/media/capture/video/fake_video_capture_device.cc
@@ -106,7 +106,7 @@
  public:
   FrameDeliverer(std::unique_ptr<PacmanFramePainter> frame_painter)
       : frame_painter_(std::move(frame_painter)) {}
-  virtual ~FrameDeliverer() {}
+  virtual ~FrameDeliverer() = default;
   virtual void Initialize(VideoPixelFormat pixel_format,
                           std::unique_ptr<VideoCaptureDevice::Client> client,
                           const FakeDeviceState* device_state) {
diff --git a/media/capture/video/fake_video_capture_device_unittest.cc b/media/capture/video/fake_video_capture_device_unittest.cc
index dee4cab8..3abc9a1 100644
--- a/media/capture/video/fake_video_capture_device_unittest.cc
+++ b/media/capture/video/fake_video_capture_device_unittest.cc
@@ -55,7 +55,7 @@
   StubBufferHandleProvider(size_t mapped_size, uint8_t* data)
       : mapped_size_(mapped_size), data_(data) {}
 
-  ~StubBufferHandleProvider() override {}
+  ~StubBufferHandleProvider() override = default;
 
   mojo::ScopedSharedBufferHandle GetHandleForInterProcessTransit(
       bool read_only) override {
@@ -185,7 +185,7 @@
 
  private:
   friend class base::RefCounted<ImageCaptureClient>;
-  virtual ~ImageCaptureClient() {}
+  virtual ~ImageCaptureClient() = default;
 
   mojom::PhotoStatePtr state_;
 };
diff --git a/media/capture/video/file_video_capture_device.cc b/media/capture/video/file_video_capture_device.cc
index bd5f0799..cacd868 100644
--- a/media/capture/video/file_video_capture_device.cc
+++ b/media/capture/video/file_video_capture_device.cc
@@ -164,12 +164,12 @@
       current_byte_index_(0),
       first_frame_byte_index_(0) {}
 
-VideoFileParser::~VideoFileParser() {}
+VideoFileParser::~VideoFileParser() = default;
 
 Y4mFileParser::Y4mFileParser(const base::FilePath& file_path)
     : VideoFileParser(file_path) {}
 
-Y4mFileParser::~Y4mFileParser() {}
+Y4mFileParser::~Y4mFileParser() = default;
 
 bool Y4mFileParser::Initialize(media::VideoCaptureFormat* capture_format) {
   file_.reset(new base::File(file_path_,
@@ -218,7 +218,7 @@
 MjpegFileParser::MjpegFileParser(const base::FilePath& file_path)
     : VideoFileParser(file_path) {}
 
-MjpegFileParser::~MjpegFileParser() {}
+MjpegFileParser::~MjpegFileParser() = default;
 
 bool MjpegFileParser::Initialize(media::VideoCaptureFormat* capture_format) {
   mapped_file_.reset(new base::MemoryMappedFile());
diff --git a/media/capture/video/linux/camera_config_chromeos.cc b/media/capture/video/linux/camera_config_chromeos.cc
index a840c91f..500c0e7 100644
--- a/media/capture/video/linux/camera_config_chromeos.cc
+++ b/media/capture/video/linux/camera_config_chromeos.cc
@@ -48,7 +48,7 @@
   InitializeDeviceInfo(config_file_path);
 }
 
-CameraConfigChromeOS::~CameraConfigChromeOS() {}
+CameraConfigChromeOS::~CameraConfigChromeOS() = default;
 
 VideoFacingMode CameraConfigChromeOS::GetCameraFacing(
     const std::string& device_id,
diff --git a/media/capture/video/linux/v4l2_capture_delegate.cc b/media/capture/video/linux/v4l2_capture_delegate.cc
index f973788..7cb3b857 100644
--- a/media/capture/video/linux/v4l2_capture_delegate.cc
+++ b/media/capture/video/linux/v4l2_capture_delegate.cc
@@ -753,7 +753,7 @@
   return weak_factory_.GetWeakPtr();
 }
 
-V4L2CaptureDelegate::~V4L2CaptureDelegate() {}
+V4L2CaptureDelegate::~V4L2CaptureDelegate() = default;
 
 bool V4L2CaptureDelegate::MapAndQueueBuffer(int index) {
   v4l2_buffer buffer;
@@ -874,7 +874,7 @@
   client_->OnError(from_here, reason);
 }
 
-V4L2CaptureDelegate::BufferTracker::BufferTracker() {}
+V4L2CaptureDelegate::BufferTracker::BufferTracker() = default;
 
 V4L2CaptureDelegate::BufferTracker::~BufferTracker() {
   if (start_ == nullptr)
diff --git a/media/capture/video/linux/video_capture_device_factory_linux.cc b/media/capture/video/linux/video_capture_device_factory_linux.cc
index 1601250..d3636599 100644
--- a/media/capture/video/linux/video_capture_device_factory_linux.cc
+++ b/media/capture/video/linux/video_capture_device_factory_linux.cc
@@ -194,8 +194,7 @@
     : ui_task_runner_(ui_task_runner) {
 }
 
-VideoCaptureDeviceFactoryLinux::~VideoCaptureDeviceFactoryLinux() {
-}
+VideoCaptureDeviceFactoryLinux::~VideoCaptureDeviceFactoryLinux() = default;
 
 std::unique_ptr<VideoCaptureDevice>
 VideoCaptureDeviceFactoryLinux::CreateDevice(
diff --git a/media/capture/video/video_capture_buffer_pool_impl.cc b/media/capture/video/video_capture_buffer_pool_impl.cc
index 9ef965da..e983383 100644
--- a/media/capture/video/video_capture_buffer_pool_impl.cc
+++ b/media/capture/video/video_capture_buffer_pool_impl.cc
@@ -25,7 +25,7 @@
   DCHECK_GT(count, 0);
 }
 
-VideoCaptureBufferPoolImpl::~VideoCaptureBufferPoolImpl() {}
+VideoCaptureBufferPoolImpl::~VideoCaptureBufferPoolImpl() = default;
 
 mojo::ScopedSharedBufferHandle
 VideoCaptureBufferPoolImpl::GetHandleForInterProcessTransit(int buffer_id,
diff --git a/media/capture/video/video_capture_device.cc b/media/capture/video/video_capture_device.cc
index df3997c..f39cdba 100644
--- a/media/capture/video/video_capture_device.cc
+++ b/media/capture/video/video_capture_device.cc
@@ -33,7 +33,7 @@
 VideoCaptureDevice::Client::Buffer& VideoCaptureDevice::Client::Buffer::
 operator=(VideoCaptureDevice::Client::Buffer&& other) = default;
 
-VideoCaptureDevice::~VideoCaptureDevice() {}
+VideoCaptureDevice::~VideoCaptureDevice() = default;
 
 void VideoCaptureDevice::GetPhotoState(GetPhotoStateCallback callback) {}
 
diff --git a/media/capture/video/video_capture_device_client_unittest.cc b/media/capture/video/video_capture_device_client_unittest.cc
index a071f61..b1287313 100644
--- a/media/capture/video/video_capture_device_client_unittest.cc
+++ b/media/capture/video/video_capture_device_client_unittest.cc
@@ -55,7 +55,7 @@
         std::move(controller), buffer_pool,
         base::Bind(&ReturnNullPtrAsJpecDecoder));
   }
-  ~VideoCaptureDeviceClientTest() override {}
+  ~VideoCaptureDeviceClientTest() override = default;
 
  protected:
   MockVideoFrameReceiver* receiver_;
diff --git a/media/capture/video/video_capture_device_descriptor.cc b/media/capture/video/video_capture_device_descriptor.cc
index 7011608..b5a34f3 100644
--- a/media/capture/video/video_capture_device_descriptor.cc
+++ b/media/capture/video/video_capture_device_descriptor.cc
@@ -38,7 +38,7 @@
       capture_api(capture_api),
       transport_type(transport_type) {}
 
-VideoCaptureDeviceDescriptor::~VideoCaptureDeviceDescriptor() {}
+VideoCaptureDeviceDescriptor::~VideoCaptureDeviceDescriptor() = default;
 
 VideoCaptureDeviceDescriptor::VideoCaptureDeviceDescriptor(
     const VideoCaptureDeviceDescriptor& other) = default;
diff --git a/media/capture/video/video_capture_device_factory.cc b/media/capture/video/video_capture_device_factory.cc
index f482659..cefeb5c0 100644
--- a/media/capture/video/video_capture_device_factory.cc
+++ b/media/capture/video/video_capture_device_factory.cc
@@ -49,7 +49,7 @@
   thread_checker_.DetachFromThread();
 }
 
-VideoCaptureDeviceFactory::~VideoCaptureDeviceFactory() {}
+VideoCaptureDeviceFactory::~VideoCaptureDeviceFactory() = default;
 
 #if !defined(OS_MACOSX) && !defined(OS_LINUX) && !defined(OS_ANDROID) && \
     !defined(OS_WIN)
diff --git a/media/capture/video/video_capture_device_unittest.cc b/media/capture/video/video_capture_device_unittest.cc
index e71f3e33..5160067 100644
--- a/media/capture/video/video_capture_device_unittest.cc
+++ b/media/capture/video/video_capture_device_unittest.cc
@@ -221,7 +221,7 @@
 
  private:
   friend class base::RefCountedThreadSafe<MockImageCaptureClient>;
-  virtual ~MockImageCaptureClient() {}
+  virtual ~MockImageCaptureClient() = default;
 
   mojom::PhotoStatePtr state_;
 };
@@ -232,7 +232,7 @@
  public:
   MojoEnabledTestEnvironment() : mojo_ipc_thread_("MojoIpcThread") {}
 
-  ~MojoEnabledTestEnvironment() final {}
+  ~MojoEnabledTestEnvironment() final = default;
 
   void SetUp() final {
     mojo::edk::Init();
diff --git a/media/capture/video_capturer_source.cc b/media/capture/video_capturer_source.cc
index bafdf42..8adf4b1 100644
--- a/media/capture/video_capturer_source.cc
+++ b/media/capture/video_capturer_source.cc
@@ -11,6 +11,6 @@
 // object files for this destructor if it's defined in the header file and that
 // breaks linking. Consider removing this file when the compiler+linker is able
 // to generate symbols across linking units.
-VideoCapturerSource::~VideoCapturerSource() {}
+VideoCapturerSource::~VideoCapturerSource() = default;
 
 }  // namespace media
diff --git a/media/cast/cast_config.cc b/media/cast/cast_config.cc
index 0683925..3a27dc0 100644
--- a/media/cast/cast_config.cc
+++ b/media/cast/cast_config.cc
@@ -16,7 +16,7 @@
 
 VideoCodecParams::VideoCodecParams(const VideoCodecParams& other) = default;
 
-VideoCodecParams::~VideoCodecParams() {}
+VideoCodecParams::~VideoCodecParams() = default;
 
 // TODO(miu): Provide IsValidConfig() functions?
 
@@ -40,7 +40,7 @@
 
 FrameSenderConfig::FrameSenderConfig(const FrameSenderConfig& other) = default;
 
-FrameSenderConfig::~FrameSenderConfig() {}
+FrameSenderConfig::~FrameSenderConfig() = default;
 
 FrameReceiverConfig::FrameReceiverConfig()
     : receiver_ssrc(0),
@@ -55,7 +55,7 @@
 FrameReceiverConfig::FrameReceiverConfig(const FrameReceiverConfig& other) =
     default;
 
-FrameReceiverConfig::~FrameReceiverConfig() {}
+FrameReceiverConfig::~FrameReceiverConfig() = default;
 
 }  // namespace cast
 }  // namespace media
diff --git a/media/cast/cast_environment.cc b/media/cast/cast_environment.cc
index 6f697f13..6f28a6bc 100644
--- a/media/cast/cast_environment.cc
+++ b/media/cast/cast_environment.cc
@@ -26,7 +26,7 @@
       clock_(std::move(clock)),
       logger_(this) {}
 
-CastEnvironment::~CastEnvironment() {}
+CastEnvironment::~CastEnvironment() = default;
 
 bool CastEnvironment::PostTask(ThreadId identifier,
                                const base::Location& from_here,
diff --git a/media/cast/cast_sender_impl.cc b/media/cast/cast_sender_impl.cc
index 07a4cc1..5f7d547 100644
--- a/media/cast/cast_sender_impl.cc
+++ b/media/cast/cast_sender_impl.cc
@@ -49,7 +49,7 @@
   }
 
  protected:
-  ~LocalVideoFrameInput() final {}
+  ~LocalVideoFrameInput() final = default;
 
  private:
   friend class base::RefCountedThreadSafe<LocalVideoFrameInput>;
@@ -80,7 +80,7 @@
   }
 
  protected:
-  ~LocalAudioFrameInput() final {}
+  ~LocalAudioFrameInput() final = default;
 
  private:
   friend class base::RefCountedThreadSafe<LocalAudioFrameInput>;
diff --git a/media/cast/common/clock_drift_smoother.cc b/media/cast/common/clock_drift_smoother.cc
index d2abc90..79a6021 100644
--- a/media/cast/common/clock_drift_smoother.cc
+++ b/media/cast/common/clock_drift_smoother.cc
@@ -17,7 +17,7 @@
   DCHECK(time_constant_ > base::TimeDelta());
 }
 
-ClockDriftSmoother::~ClockDriftSmoother() {}
+ClockDriftSmoother::~ClockDriftSmoother() = default;
 
 base::TimeDelta ClockDriftSmoother::Current() const {
   DCHECK(!last_update_time_.is_null());
diff --git a/media/cast/common/transport_encryption_handler.cc b/media/cast/common/transport_encryption_handler.cc
index f032a08..3ee8cab 100644
--- a/media/cast/common/transport_encryption_handler.cc
+++ b/media/cast/common/transport_encryption_handler.cc
@@ -43,7 +43,7 @@
 TransportEncryptionHandler::TransportEncryptionHandler()
     : key_(), encryptor_(), iv_mask_(), is_activated_(false) {}
 
-TransportEncryptionHandler::~TransportEncryptionHandler() {}
+TransportEncryptionHandler::~TransportEncryptionHandler() = default;
 
 bool TransportEncryptionHandler::Initialize(const std::string& aes_key,
                                             const std::string& aes_iv_mask) {
diff --git a/media/cast/logging/log_deserializer.cc b/media/cast/logging/log_deserializer.cc
index d5a336b..3bd1ee6 100644
--- a/media/cast/logging/log_deserializer.cc
+++ b/media/cast/logging/log_deserializer.cc
@@ -247,8 +247,8 @@
   }
 }
 
-DeserializedLog::DeserializedLog() {}
-DeserializedLog::~DeserializedLog() {}
+DeserializedLog::DeserializedLog() = default;
+DeserializedLog::~DeserializedLog() = default;
 
 }  // namespace cast
 }  // namespace media
diff --git a/media/cast/logging/log_event_dispatcher.cc b/media/cast/logging/log_event_dispatcher.cc
index 21814c8..b14511c 100644
--- a/media/cast/logging/log_event_dispatcher.cc
+++ b/media/cast/logging/log_event_dispatcher.cc
@@ -21,7 +21,7 @@
   DCHECK(env_);
 }
 
-LogEventDispatcher::~LogEventDispatcher() {}
+LogEventDispatcher::~LogEventDispatcher() = default;
 
 void LogEventDispatcher::DispatchFrameEvent(
     std::unique_ptr<FrameEvent> event) const {
@@ -94,7 +94,7 @@
   }
 }
 
-LogEventDispatcher::Impl::Impl() {}
+LogEventDispatcher::Impl::Impl() = default;
 
 LogEventDispatcher::Impl::~Impl() {
   DCHECK(subscribers_.empty());
diff --git a/media/cast/logging/logging_defines.cc b/media/cast/logging/logging_defines.cc
index d8443066..a7e4c714 100644
--- a/media/cast/logging/logging_defines.cc
+++ b/media/cast/logging/logging_defines.cc
@@ -43,7 +43,7 @@
       encoder_cpu_utilization(-1.0),
       idealized_bitrate_utilization(-1.0) {}
 FrameEvent::FrameEvent(const FrameEvent& other) = default;
-FrameEvent::~FrameEvent() {}
+FrameEvent::~FrameEvent() = default;
 
 PacketEvent::PacketEvent()
     : max_packet_id(0),
@@ -51,7 +51,7 @@
       size(0),
       type(UNKNOWN),
       media_type(UNKNOWN_EVENT) {}
-PacketEvent::~PacketEvent() {}
+PacketEvent::~PacketEvent() = default;
 
 }  // namespace cast
 }  // namespace media
diff --git a/media/cast/logging/receiver_time_offset_estimator_impl.cc b/media/cast/logging/receiver_time_offset_estimator_impl.cc
index 4a84597..437bd10 100644
--- a/media/cast/logging/receiver_time_offset_estimator_impl.cc
+++ b/media/cast/logging/receiver_time_offset_estimator_impl.cc
@@ -26,7 +26,7 @@
 
 ReceiverTimeOffsetEstimatorImpl::BoundCalculator::BoundCalculator()
     : has_bound_(false) {}
-ReceiverTimeOffsetEstimatorImpl::BoundCalculator::~BoundCalculator() {}
+ReceiverTimeOffsetEstimatorImpl::BoundCalculator::~BoundCalculator() = default;
 
 void ReceiverTimeOffsetEstimatorImpl::BoundCalculator::SetSent(
     RtpTimeTicks rtp,
@@ -80,8 +80,7 @@
   }
 }
 
-ReceiverTimeOffsetEstimatorImpl::ReceiverTimeOffsetEstimatorImpl() {
-}
+ReceiverTimeOffsetEstimatorImpl::ReceiverTimeOffsetEstimatorImpl() = default;
 
 ReceiverTimeOffsetEstimatorImpl::~ReceiverTimeOffsetEstimatorImpl() {
   DCHECK(thread_checker_.CalledOnValidThread());
diff --git a/media/cast/logging/serialize_deserialize_test.cc b/media/cast/logging/serialize_deserialize_test.cc
index 68e6e67..d8155a0 100644
--- a/media/cast/logging/serialize_deserialize_test.cc
+++ b/media/cast/logging/serialize_deserialize_test.cc
@@ -51,7 +51,7 @@
   SerializeDeserializeTest()
       : serialized_(new char[kMaxSerializedBytes]), output_bytes_(0) {}
 
-  ~SerializeDeserializeTest() override {}
+  ~SerializeDeserializeTest() override = default;
 
   void Init() {
     metadata_.set_first_rtp_timestamp(12345678 * 90);
diff --git a/media/cast/logging/simple_event_subscriber.cc b/media/cast/logging/simple_event_subscriber.cc
index 7146f64f..d0f0df56 100644
--- a/media/cast/logging/simple_event_subscriber.cc
+++ b/media/cast/logging/simple_event_subscriber.cc
@@ -9,7 +9,7 @@
 namespace media {
 namespace cast {
 
-SimpleEventSubscriber::SimpleEventSubscriber() {}
+SimpleEventSubscriber::SimpleEventSubscriber() = default;
 
 SimpleEventSubscriber::~SimpleEventSubscriber() {
   DCHECK(thread_checker_.CalledOnValidThread());
diff --git a/media/cast/logging/stats_event_subscriber.cc b/media/cast/logging/stats_event_subscriber.cc
index f3e25f6f..4f6594c8 100644
--- a/media/cast/logging/stats_event_subscriber.cc
+++ b/media/cast/logging/stats_event_subscriber.cc
@@ -45,8 +45,7 @@
   CHECK_EQ(0, (max_ - min_) % width_);
 }
 
-StatsEventSubscriber::SimpleHistogram::~SimpleHistogram() {
-}
+StatsEventSubscriber::SimpleHistogram::~SimpleHistogram() = default;
 
 void StatsEventSubscriber::SimpleHistogram::Add(int64_t sample) {
   if (sample < min_) {
@@ -742,16 +741,15 @@
 
 StatsEventSubscriber::FrameLogStats::FrameLogStats()
     : event_counter(0), sum_size(0) {}
-StatsEventSubscriber::FrameLogStats::~FrameLogStats() {}
+StatsEventSubscriber::FrameLogStats::~FrameLogStats() = default;
 
 StatsEventSubscriber::PacketLogStats::PacketLogStats()
     : event_counter(0), sum_size(0) {}
-StatsEventSubscriber::PacketLogStats::~PacketLogStats() {}
+StatsEventSubscriber::PacketLogStats::~PacketLogStats() = default;
 
 StatsEventSubscriber::FrameInfo::FrameInfo() : encoded(false) {
 }
-StatsEventSubscriber::FrameInfo::~FrameInfo() {
-}
+StatsEventSubscriber::FrameInfo::~FrameInfo() = default;
 
 }  // namespace cast
 }  // namespace media
diff --git a/media/cast/net/cast_transport_config.cc b/media/cast/net/cast_transport_config.cc
index e3ee10b..c9602d0 100644
--- a/media/cast/net/cast_transport_config.cc
+++ b/media/cast/net/cast_transport_config.cc
@@ -13,13 +13,13 @@
       feedback_ssrc(0),
       rtp_payload_type(RtpPayloadType::UNKNOWN) {}
 
-CastTransportRtpConfig::~CastTransportRtpConfig() {}
+CastTransportRtpConfig::~CastTransportRtpConfig() = default;
 
 EncodedFrame::EncodedFrame()
     : dependency(UNKNOWN_DEPENDENCY),
       new_playout_delay_ms(0) {}
 
-EncodedFrame::~EncodedFrame() {}
+EncodedFrame::~EncodedFrame() = default;
 
 void EncodedFrame::CopyMetadataTo(EncodedFrame* dest) const {
   DCHECK(dest);
@@ -36,7 +36,7 @@
       ntp_fraction(0),
       send_packet_count(0),
       send_octet_count(0) {}
-RtcpSenderInfo::~RtcpSenderInfo() {}
+RtcpSenderInfo::~RtcpSenderInfo() = default;
 
 RtcpReportBlock::RtcpReportBlock()
     : remote_ssrc(0),
@@ -47,11 +47,11 @@
       jitter(0),
       last_sr(0),
       delay_since_last_sr(0) {}
-RtcpReportBlock::~RtcpReportBlock() {}
+RtcpReportBlock::~RtcpReportBlock() = default;
 
 RtcpDlrrReportBlock::RtcpDlrrReportBlock()
     : last_rr(0), delay_since_last_rr(0) {}
-RtcpDlrrReportBlock::~RtcpDlrrReportBlock() {}
+RtcpDlrrReportBlock::~RtcpDlrrReportBlock() = default;
 
 }  // namespace cast
 }  // namespace media
diff --git a/media/cast/net/cast_transport_impl_unittest.cc b/media/cast/net/cast_transport_impl_unittest.cc
index 1c101b2..123453cc 100644
--- a/media/cast/net/cast_transport_impl_unittest.cc
+++ b/media/cast/net/cast_transport_impl_unittest.cc
@@ -32,7 +32,7 @@
 
 class StubRtcpObserver : public RtcpObserver {
  public:
-  StubRtcpObserver() {}
+  StubRtcpObserver() = default;
 
   void OnReceivedCastMessage(const RtcpCastMessage& cast_message) final {}
   void OnReceivedRtt(base::TimeDelta round_trip_time) final {}
@@ -96,7 +96,7 @@
     task_runner_ = new FakeSingleThreadTaskRunner(&testing_clock_);
   }
 
-  ~CastTransportImplTest() override {}
+  ~CastTransportImplTest() override = default;
 
   void InitWithoutLogging();
   void InitWithOptions();
diff --git a/media/cast/net/mock_cast_transport.cc b/media/cast/net/mock_cast_transport.cc
index 70314c3..01d789f6 100644
--- a/media/cast/net/mock_cast_transport.cc
+++ b/media/cast/net/mock_cast_transport.cc
@@ -7,9 +7,9 @@
 namespace media {
 namespace cast {
 
-MockCastTransport::MockCastTransport() {}
+MockCastTransport::MockCastTransport() = default;
 
-MockCastTransport::~MockCastTransport() {}
+MockCastTransport::~MockCastTransport() = default;
 
 }  // namespace cast
 }  // namespace media
diff --git a/media/cast/net/pacing/mock_paced_packet_sender.cc b/media/cast/net/pacing/mock_paced_packet_sender.cc
index 3219ba2..16e396fd 100644
--- a/media/cast/net/pacing/mock_paced_packet_sender.cc
+++ b/media/cast/net/pacing/mock_paced_packet_sender.cc
@@ -7,9 +7,9 @@
 namespace media {
 namespace cast {
 
-MockPacedPacketSender::MockPacedPacketSender() {}
+MockPacedPacketSender::MockPacedPacketSender() = default;
 
-MockPacedPacketSender::~MockPacedPacketSender() {}
+MockPacedPacketSender::~MockPacedPacketSender() = default;
 
 }  // namespace cast
 }  // namespace media
diff --git a/media/cast/net/pacing/paced_sender.cc b/media/cast/net/pacing/paced_sender.cc
index 34ab762..d673cad 100644
--- a/media/cast/net/pacing/paced_sender.cc
+++ b/media/cast/net/pacing/paced_sender.cc
@@ -37,7 +37,7 @@
 
 PacketKey::PacketKey(const PacketKey& other) = default;
 
-PacketKey::~PacketKey() {}
+PacketKey::~PacketKey() = default;
 
 struct PacedSender::PacketSendRecord {
   PacketSendRecord()
@@ -54,7 +54,7 @@
 struct PacedSender::RtpSession {
   explicit RtpSession(bool is_audio_stream)
       : last_byte_sent(0), is_audio(is_audio_stream) {}
-  RtpSession() {}
+  RtpSession() = default;
 
   // Tracks recently-logged RTP timestamps so that it can expand the truncated
   // values found in packets.
@@ -84,7 +84,7 @@
       state_(State_Unblocked),
       weak_factory_(this) {}
 
-PacedSender::~PacedSender() {}
+PacedSender::~PacedSender() = default;
 
 void PacedSender::RegisterSsrc(uint32_t ssrc, bool is_audio) {
   if (sessions_.find(ssrc) != sessions_.end())
diff --git a/media/cast/net/rtcp/receiver_rtcp_event_subscriber_unittest.cc b/media/cast/net/rtcp/receiver_rtcp_event_subscriber_unittest.cc
index 8662622..b600035 100644
--- a/media/cast/net/rtcp/receiver_rtcp_event_subscriber_unittest.cc
+++ b/media/cast/net/rtcp/receiver_rtcp_event_subscriber_unittest.cc
@@ -39,7 +39,7 @@
             task_runner_,
             task_runner_)) {}
 
-  ~ReceiverRtcpEventSubscriberTest() override {}
+  ~ReceiverRtcpEventSubscriberTest() override = default;
 
   void TearDown() final {
     if (event_subscriber_) {
diff --git a/media/cast/net/rtcp/receiver_rtcp_session.cc b/media/cast/net/rtcp/receiver_rtcp_session.cc
index 547906d4..71c0988 100644
--- a/media/cast/net/rtcp/receiver_rtcp_session.cc
+++ b/media/cast/net/rtcp/receiver_rtcp_session.cc
@@ -23,7 +23,7 @@
       lip_sync_ntp_timestamp_(0),
       parser_(local_ssrc, remote_ssrc) {}
 
-ReceiverRtcpSession::~ReceiverRtcpSession() {}
+ReceiverRtcpSession::~ReceiverRtcpSession() = default;
 
 bool ReceiverRtcpSession::IncomingRtcpPacket(const uint8_t* data,
                                              size_t length) {
diff --git a/media/cast/net/rtcp/rtcp_builder.cc b/media/cast/net/rtcp/rtcp_builder.cc
index 49eca97..3d386b46 100644
--- a/media/cast/net/rtcp/rtcp_builder.cc
+++ b/media/cast/net/rtcp/rtcp_builder.cc
@@ -55,7 +55,7 @@
         packet_count_(0),
         last_packet_id_(-1),
         contiguous_sequence_(false) {}
-  ~NackStringBuilder() {}
+  ~NackStringBuilder() = default;
 
   bool Empty() const { return frame_count_ == 0; }
 
@@ -116,7 +116,7 @@
 RtcpBuilder::RtcpBuilder(uint32_t sending_ssrc)
     : writer_(NULL, 0), local_ssrc_(sending_ssrc), ptr_of_length_(NULL) {}
 
-RtcpBuilder::~RtcpBuilder() {}
+RtcpBuilder::~RtcpBuilder() = default;
 
 void RtcpBuilder::PatchLengthField() {
   if (ptr_of_length_) {
diff --git a/media/cast/net/rtcp/rtcp_defines.cc b/media/cast/net/rtcp/rtcp_defines.cc
index cbe76ec..6554f0d 100644
--- a/media/cast/net/rtcp/rtcp_defines.cc
+++ b/media/cast/net/rtcp/rtcp_defines.cc
@@ -12,27 +12,27 @@
 RtcpCastMessage::RtcpCastMessage(uint32_t ssrc)
     : remote_ssrc(ssrc), target_delay_ms(0) {}
 RtcpCastMessage::RtcpCastMessage() : RtcpCastMessage(0) {}
-RtcpCastMessage::~RtcpCastMessage() {}
+RtcpCastMessage::~RtcpCastMessage() = default;
 
 RtcpPliMessage::RtcpPliMessage(uint32_t ssrc) : remote_ssrc(ssrc) {}
 RtcpPliMessage::RtcpPliMessage() : remote_ssrc(0) {}
 
 RtcpReceiverEventLogMessage::RtcpReceiverEventLogMessage()
     : type(UNKNOWN), packet_id(0u) {}
-RtcpReceiverEventLogMessage::~RtcpReceiverEventLogMessage() {}
+RtcpReceiverEventLogMessage::~RtcpReceiverEventLogMessage() = default;
 
 RtcpReceiverFrameLogMessage::RtcpReceiverFrameLogMessage(RtpTimeTicks timestamp)
     : rtp_timestamp_(timestamp) {}
 RtcpReceiverFrameLogMessage::RtcpReceiverFrameLogMessage(
     const RtcpReceiverFrameLogMessage& other) = default;
-RtcpReceiverFrameLogMessage::~RtcpReceiverFrameLogMessage() {}
+RtcpReceiverFrameLogMessage::~RtcpReceiverFrameLogMessage() = default;
 
 RtcpReceiverReferenceTimeReport::RtcpReceiverReferenceTimeReport()
     : remote_ssrc(0u), ntp_seconds(0u), ntp_fraction(0u) {}
-RtcpReceiverReferenceTimeReport::~RtcpReceiverReferenceTimeReport() {}
+RtcpReceiverReferenceTimeReport::~RtcpReceiverReferenceTimeReport() = default;
 
 RtcpEvent::RtcpEvent() : type(UNKNOWN), packet_id(0u) {}
-RtcpEvent::~RtcpEvent() {}
+RtcpEvent::~RtcpEvent() = default;
 
 RtpReceiverStatistics::RtpReceiverStatistics() :
     fraction_lost(0),
@@ -44,7 +44,7 @@
     : ssrc(0),
       sender_ssrc(0) {}
 
-SendRtcpFromRtpReceiver_Params::~SendRtcpFromRtpReceiver_Params() {}
+SendRtcpFromRtpReceiver_Params::~SendRtcpFromRtpReceiver_Params() = default;
 
 }  // namespace cast
 }  // namespace media
diff --git a/media/cast/net/rtcp/rtcp_unittest.cc b/media/cast/net/rtcp/rtcp_unittest.cc
index 779c789..ed2fab8 100644
--- a/media/cast/net/rtcp/rtcp_unittest.cc
+++ b/media/cast/net/rtcp/rtcp_unittest.cc
@@ -100,7 +100,7 @@
     rtp_receiver_pacer_.set_rtcp_destination(&rtcp_at_rtp_sender_);
   }
 
-  ~RtcpTest() override {}
+  ~RtcpTest() override = default;
 
   // RtcpObserver implementation.
   void OnReceivedCastMessage(const RtcpCastMessage& cast_message) override {
diff --git a/media/cast/net/rtcp/rtcp_utility.cc b/media/cast/net/rtcp/rtcp_utility.cc
index 169b478..2cc8ca5 100644
--- a/media/cast/net/rtcp/rtcp_utility.cc
+++ b/media/cast/net/rtcp/rtcp_utility.cc
@@ -37,7 +37,7 @@
       has_receiver_reference_time_report_(false),
       has_picture_loss_indicator_(false) {}
 
-RtcpParser::~RtcpParser() {}
+RtcpParser::~RtcpParser() = default;
 
 void RtcpParser::SetMaxValidFrameId(FrameId frame_id) {
   max_valid_frame_id_ = frame_id;
diff --git a/media/cast/net/rtcp/sender_rtcp_session.cc b/media/cast/net/rtcp/sender_rtcp_session.cc
index 15c568c..091cf96b 100644
--- a/media/cast/net/rtcp/sender_rtcp_session.cc
+++ b/media/cast/net/rtcp/sender_rtcp_session.cc
@@ -82,7 +82,7 @@
           std::numeric_limits<int64_t>::min())),
       parser_(local_ssrc, remote_ssrc) {}
 
-SenderRtcpSession::~SenderRtcpSession() {}
+SenderRtcpSession::~SenderRtcpSession() = default;
 
 void SenderRtcpSession::WillSendFrame(FrameId frame_id) {
   if (parser_.max_valid_frame_id().is_null() ||
diff --git a/media/cast/net/rtp/cast_message_builder.cc b/media/cast/net/rtp/cast_message_builder.cc
index 3b11c2bd..9f3720a 100644
--- a/media/cast/net/rtp/cast_message_builder.cc
+++ b/media/cast/net/rtp/cast_message_builder.cc
@@ -45,7 +45,7 @@
   cast_msg_.ack_frame_id = FrameId::first() - 1;
 }
 
-CastMessageBuilder::~CastMessageBuilder() {}
+CastMessageBuilder::~CastMessageBuilder() = default;
 
 void CastMessageBuilder::CompleteFrameReceived(FrameId frame_id) {
   DCHECK_GE(frame_id, last_acked_frame_id());
diff --git a/media/cast/net/rtp/cast_message_builder_unittest.cc b/media/cast/net/rtp/cast_message_builder_unittest.cc
index 404d13c..a801967 100644
--- a/media/cast/net/rtp/cast_message_builder_unittest.cc
+++ b/media/cast/net/rtp/cast_message_builder_unittest.cc
@@ -103,7 +103,7 @@
         base::TimeDelta::FromMilliseconds(kStartMillisecond));
   }
 
-  ~CastMessageBuilderTest() override {}
+  ~CastMessageBuilderTest() override = default;
 
   void SetFrameIds(FrameId frame_id, FrameId reference_frame_id) {
     rtp_header_.frame_id = frame_id;
diff --git a/media/cast/net/rtp/frame_buffer.cc b/media/cast/net/rtp/frame_buffer.cc
index cf31790..1013a944 100644
--- a/media/cast/net/rtp/frame_buffer.cc
+++ b/media/cast/net/rtp/frame_buffer.cc
@@ -18,7 +18,7 @@
       total_data_size_(0),
       packets_() {}
 
-FrameBuffer::~FrameBuffer() {}
+FrameBuffer::~FrameBuffer() = default;
 
 bool FrameBuffer::InsertPacket(const uint8_t* payload_data,
                                size_t payload_size,
diff --git a/media/cast/net/rtp/frame_buffer_unittest.cc b/media/cast/net/rtp/frame_buffer_unittest.cc
index 0938a821..60f35378 100644
--- a/media/cast/net/rtp/frame_buffer_unittest.cc
+++ b/media/cast/net/rtp/frame_buffer_unittest.cc
@@ -20,7 +20,7 @@
     rtp_header_.reference_frame_id = FrameId::first();
   }
 
-  ~FrameBufferTest() override {}
+  ~FrameBufferTest() override = default;
 
   FrameBuffer buffer_;
   std::vector<uint8_t> payload_;
diff --git a/media/cast/net/rtp/framer.cc b/media/cast/net/rtp/framer.cc
index 8b61cae2..c59f677 100644
--- a/media/cast/net/rtp/framer.cc
+++ b/media/cast/net/rtp/framer.cc
@@ -28,7 +28,7 @@
   DCHECK(incoming_payload_feedback) << "Invalid argument";
 }
 
-Framer::~Framer() {}
+Framer::~Framer() = default;
 
 bool Framer::InsertPacket(const uint8_t* payload_data,
                           size_t payload_size,
diff --git a/media/cast/net/rtp/framer_unittest.cc b/media/cast/net/rtp/framer_unittest.cc
index 11f45af1..cc6a05d 100644
--- a/media/cast/net/rtp/framer_unittest.cc
+++ b/media/cast/net/rtp/framer_unittest.cc
@@ -25,7 +25,7 @@
         .WillRepeatedly(testing::Return());
   }
 
-  ~FramerTest() override {}
+  ~FramerTest() override = default;
 
   std::vector<uint8_t> payload_;
   RtpCastHeader rtp_header_;
diff --git a/media/cast/net/rtp/mock_rtp_payload_feedback.cc b/media/cast/net/rtp/mock_rtp_payload_feedback.cc
index cde8e388..fc87b1cf 100644
--- a/media/cast/net/rtp/mock_rtp_payload_feedback.cc
+++ b/media/cast/net/rtp/mock_rtp_payload_feedback.cc
@@ -7,9 +7,9 @@
 namespace media {
 namespace cast {
 
-MockRtpPayloadFeedback::MockRtpPayloadFeedback() {}
+MockRtpPayloadFeedback::MockRtpPayloadFeedback() = default;
 
-MockRtpPayloadFeedback::~MockRtpPayloadFeedback() {}
+MockRtpPayloadFeedback::~MockRtpPayloadFeedback() = default;
 
 }  // namespace cast
 }  // namespace media
diff --git a/media/cast/net/rtp/packet_storage.cc b/media/cast/net/rtp/packet_storage.cc
index 5155a95..53c0d35 100644
--- a/media/cast/net/rtp/packet_storage.cc
+++ b/media/cast/net/rtp/packet_storage.cc
@@ -12,8 +12,7 @@
 
 PacketStorage::PacketStorage() : zombie_count_(0) {}
 
-PacketStorage::~PacketStorage() {
-}
+PacketStorage::~PacketStorage() = default;
 
 size_t PacketStorage::GetNumberOfStoredFrames() const {
   return frames_.size() - zombie_count_;
diff --git a/media/cast/net/rtp/receiver_stats_unittest.cc b/media/cast/net/rtp/receiver_stats_unittest.cc
index 0727990..ec132e4 100644
--- a/media/cast/net/rtp/receiver_stats_unittest.cc
+++ b/media/cast/net/rtp/receiver_stats_unittest.cc
@@ -28,7 +28,7 @@
     start_time_ = testing_clock_.NowTicks();
     delta_increments_ = base::TimeDelta::FromMilliseconds(kStdTimeIncrementMs);
   }
-  ~ReceiverStatsTest() override {}
+  ~ReceiverStatsTest() override = default;
 
   uint32_t ExpectedJitter(uint32_t const_interval, int num_packets) {
     float jitter = 0;
diff --git a/media/cast/net/rtp/rtp_defines.cc b/media/cast/net/rtp/rtp_defines.cc
index 4f0c4075..16144042 100644
--- a/media/cast/net/rtp/rtp_defines.cc
+++ b/media/cast/net/rtp/rtp_defines.cc
@@ -17,7 +17,7 @@
       max_packet_id(0),
       new_playout_delay_ms(0) {}
 
-RtpPayloadFeedback::~RtpPayloadFeedback() {}
+RtpPayloadFeedback::~RtpPayloadFeedback() = default;
 
 }  // namespace cast
 }  // namespace media
diff --git a/media/cast/net/rtp/rtp_packetizer.cc b/media/cast/net/rtp/rtp_packetizer.cc
index 39640f5..403de59 100644
--- a/media/cast/net/rtp/rtp_packetizer.cc
+++ b/media/cast/net/rtp/rtp_packetizer.cc
@@ -20,7 +20,7 @@
       sequence_number(0),
       ssrc(0) {}
 
-RtpPacketizerConfig::~RtpPacketizerConfig() {}
+RtpPacketizerConfig::~RtpPacketizerConfig() = default;
 
 RtpPacketizer::RtpPacketizer(PacedSender* const transport,
                              PacketStorage* packet_storage,
@@ -34,7 +34,7 @@
   DCHECK(transport) << "Invalid argument";
 }
 
-RtpPacketizer::~RtpPacketizer() {}
+RtpPacketizer::~RtpPacketizer() = default;
 
 uint16_t RtpPacketizer::NextSequenceNumber() {
   ++sequence_number_;
diff --git a/media/cast/net/rtp/rtp_parser.cc b/media/cast/net/rtp/rtp_parser.cc
index c2e63f8c..4d85bae8 100644
--- a/media/cast/net/rtp/rtp_parser.cc
+++ b/media/cast/net/rtp/rtp_parser.cc
@@ -27,7 +27,7 @@
       expected_payload_type_(expected_payload_type),
       last_parsed_frame_id_(FrameId::first() - 1) {}
 
-RtpParser::~RtpParser() {}
+RtpParser::~RtpParser() = default;
 
 bool RtpParser::ParsePacket(const uint8_t* packet,
                             size_t length,
diff --git a/media/cast/net/rtp/rtp_parser_unittest.cc b/media/cast/net/rtp/rtp_parser_unittest.cc
index f259c67..a832e0c 100644
--- a/media/cast/net/rtp/rtp_parser_unittest.cc
+++ b/media/cast/net/rtp/rtp_parser_unittest.cc
@@ -39,7 +39,7 @@
     cast_header_.marker = true;
   }
 
-  ~RtpParserTest() override {}
+  ~RtpParserTest() override = default;
 
   void ExpectParsesPacket() {
     RtpCastHeader parsed_header;
diff --git a/media/cast/net/rtp/rtp_sender.cc b/media/cast/net/rtp/rtp_sender.cc
index 4389997..62286e0 100644
--- a/media/cast/net/rtp/rtp_sender.cc
+++ b/media/cast/net/rtp/rtp_sender.cc
@@ -35,7 +35,7 @@
   config_.sequence_number = base::RandInt(0, 65535);
 }
 
-RtpSender::~RtpSender() {}
+RtpSender::~RtpSender() = default;
 
 bool RtpSender::Initialize(const CastTransportRtpConfig& config) {
   config_.ssrc = config.ssrc;
diff --git a/media/cast/net/udp_transport.cc b/media/cast/net/udp_transport.cc
index b444d10..57e3b67 100644
--- a/media/cast/net/udp_transport.cc
+++ b/media/cast/net/udp_transport.cc
@@ -84,7 +84,7 @@
   DCHECK(!IsEmpty(local_end_point) || !IsEmpty(remote_end_point));
 }
 
-UdpTransport::~UdpTransport() {}
+UdpTransport::~UdpTransport() = default;
 
 void UdpTransport::StartReceiving(
     const PacketReceiverCallbackWithStatus& packet_receiver) {
diff --git a/media/cast/receiver/audio_decoder.cc b/media/cast/receiver/audio_decoder.cc
index 033fc50..9792777 100644
--- a/media/cast/receiver/audio_decoder.cc
+++ b/media/cast/receiver/audio_decoder.cc
@@ -85,7 +85,7 @@
 
  protected:
   friend class base::RefCountedThreadSafe<ImplBase>;
-  virtual ~ImplBase() {}
+  virtual ~ImplBase() = default;
 
   virtual void RecoverBecauseFramesWereDropped() {}
 
@@ -130,7 +130,7 @@
   }
 
  private:
-  ~OpusImpl() final {}
+  ~OpusImpl() final = default;
 
   void RecoverBecauseFramesWereDropped() final {
     // Passing NULL for the input data notifies the decoder of frame loss.
@@ -189,7 +189,7 @@
   }
 
  private:
-  ~Pcm16Impl() final {}
+  ~Pcm16Impl() final = default;
 
   std::unique_ptr<AudioBus> Decode(uint8_t* data, int len) final {
     std::unique_ptr<AudioBus> audio_bus;
@@ -231,7 +231,7 @@
   }
 }
 
-AudioDecoder::~AudioDecoder() {}
+AudioDecoder::~AudioDecoder() = default;
 
 OperationalStatus AudioDecoder::InitializationResult() const {
   if (impl_.get())
diff --git a/media/cast/receiver/cast_receiver_impl.cc b/media/cast/receiver/cast_receiver_impl.cc
index 31c1f1dd..ac2d3f9 100644
--- a/media/cast/receiver/cast_receiver_impl.cc
+++ b/media/cast/receiver/cast_receiver_impl.cc
@@ -46,7 +46,7 @@
       audio_codec_(audio_config.codec),
       video_codec_(video_config.codec) {}
 
-CastReceiverImpl::~CastReceiverImpl() {}
+CastReceiverImpl::~CastReceiverImpl() = default;
 
 void CastReceiverImpl::ReceivePacket(std::unique_ptr<Packet> packet) {
   const uint8_t* const data = &packet->front();
diff --git a/media/cast/receiver/frame_receiver_unittest.cc b/media/cast/receiver/frame_receiver_unittest.cc
index 623d27d..70ddd84c 100644
--- a/media/cast/receiver/frame_receiver_unittest.cc
+++ b/media/cast/receiver/frame_receiver_unittest.cc
@@ -42,7 +42,7 @@
 class FakeFrameClient {
  public:
   FakeFrameClient() : num_called_(0) {}
-  virtual ~FakeFrameClient() {}
+  virtual ~FakeFrameClient() = default;
 
   void AddExpectedResult(FrameId expected_frame_id,
                          const base::TimeTicks& expected_playout_time) {
@@ -84,7 +84,7 @@
                             task_runner_, task_runner_, task_runner_);
   }
 
-  ~FrameReceiverTest() override {}
+  ~FrameReceiverTest() override = default;
 
   void SetUp() final {
     payload_.assign(kPacketSize, 0);
diff --git a/media/cast/receiver/video_decoder.cc b/media/cast/receiver/video_decoder.cc
index 2498d1e..8976c11 100644
--- a/media/cast/receiver/video_decoder.cc
+++ b/media/cast/receiver/video_decoder.cc
@@ -85,7 +85,7 @@
 
  protected:
   friend class base::RefCountedThreadSafe<ImplBase>;
-  virtual ~ImplBase() {}
+  virtual ~ImplBase() = default;
 
   virtual void RecoverBecauseFramesWereDropped() {}
 
@@ -196,7 +196,7 @@
   }
 
  private:
-  ~FakeImpl() final {}
+  ~FakeImpl() final = default;
 
   scoped_refptr<VideoFrame> Decode(uint8_t* data, int len) final {
     // Make sure this is a JSON string.
@@ -250,7 +250,7 @@
   }
 }
 
-VideoDecoder::~VideoDecoder() {}
+VideoDecoder::~VideoDecoder() = default;
 
 OperationalStatus VideoDecoder::InitializationResult() const {
   if (impl_.get())
diff --git a/media/cast/sender/audio_encoder.cc b/media/cast/sender/audio_encoder.cc
index aa1aa942..05e368a0 100644
--- a/media/cast/sender/audio_encoder.cc
+++ b/media/cast/sender/audio_encoder.cc
@@ -183,7 +183,7 @@
 
  protected:
   friend class base::RefCountedThreadSafe<ImplBase>;
-  virtual ~ImplBase() {}
+  virtual ~ImplBase() = default;
 
   virtual void TransferSamplesIntoBuffer(const AudioBus* audio_bus,
                                          int source_offset,
@@ -276,7 +276,7 @@
   }
 
  private:
-  ~OpusImpl() final {}
+  ~OpusImpl() final = default;
 
   void TransferSamplesIntoBuffer(const AudioBus* audio_bus,
                                  int source_offset,
@@ -727,7 +727,7 @@
   }
 
  private:
-  ~Pcm16Impl() final {}
+  ~Pcm16Impl() final = default;
 
   void TransferSamplesIntoBuffer(const AudioBus* audio_bus,
                                  int source_offset,
@@ -797,7 +797,7 @@
   }
 }
 
-AudioEncoder::~AudioEncoder() {}
+AudioEncoder::~AudioEncoder() = default;
 
 OperationalStatus AudioEncoder::InitializationResult() const {
   DCHECK(insert_thread_checker_.CalledOnValidThread());
diff --git a/media/cast/sender/audio_encoder_unittest.cc b/media/cast/sender/audio_encoder_unittest.cc
index 584e913..15329740 100644
--- a/media/cast/sender/audio_encoder_unittest.cc
+++ b/media/cast/sender/audio_encoder_unittest.cc
@@ -34,7 +34,7 @@
 class TestEncodedAudioFrameReceiver {
  public:
   TestEncodedAudioFrameReceiver() : frames_received_(0) {}
-  virtual ~TestEncodedAudioFrameReceiver() {}
+  virtual ~TestEncodedAudioFrameReceiver() = default;
 
   int frames_received() const { return frames_received_; }
 
@@ -116,7 +116,7 @@
                             task_runner_, task_runner_, task_runner_);
   }
 
-  virtual ~AudioEncoderTest() {}
+  virtual ~AudioEncoderTest() = default;
 
   void RunTestForCodec(Codec codec) {
     const TestScenario& scenario = GetParam();
diff --git a/media/cast/sender/audio_sender.cc b/media/cast/sender/audio_sender.cc
index 13db100..bc0a577d 100644
--- a/media/cast/sender/audio_sender.cc
+++ b/media/cast/sender/audio_sender.cc
@@ -51,7 +51,7 @@
       audio_config.rtp_timebase / audio_encoder_->GetSamplesPerFrame();
 }
 
-AudioSender::~AudioSender() {}
+AudioSender::~AudioSender() = default;
 
 void AudioSender::InsertAudio(std::unique_ptr<AudioBus> audio_bus,
                               const base::TimeTicks& recorded_time) {
diff --git a/media/cast/sender/audio_sender_unittest.cc b/media/cast/sender/audio_sender_unittest.cc
index f882a43e..fa3224e0 100644
--- a/media/cast/sender/audio_sender_unittest.cc
+++ b/media/cast/sender/audio_sender_unittest.cc
@@ -39,7 +39,7 @@
 
 class TransportClient : public CastTransport::Client {
  public:
-  TransportClient() {}
+  TransportClient() = default;
 
   void OnStatusChanged(CastTransportStatus status) final {
     EXPECT_EQ(TRANSPORT_STREAM_INITIALIZED, status);
@@ -122,7 +122,7 @@
     CHECK_EQ(STATUS_INITIALIZED, operational_status);
   }
 
-  ~AudioSenderTest() override {}
+  ~AudioSenderTest() override = default;
 
   base::SimpleTestTickClock* testing_clock_;  // Owned by CastEnvironment.
   TestPacketSender* transport_;               // Owned by CastTransport.
diff --git a/media/cast/sender/congestion_control.cc b/media/cast/sender/congestion_control.cc
index 58983fe..34894fb 100644
--- a/media/cast/sender/congestion_control.cc
+++ b/media/cast/sender/congestion_control.cc
@@ -105,7 +105,7 @@
 class FixedCongestionControl : public CongestionControl {
  public:
   explicit FixedCongestionControl(int bitrate) : bitrate_(bitrate) {}
-  ~FixedCongestionControl() final {}
+  ~FixedCongestionControl() final = default;
 
   // CongestionControl implementation.
   void UpdateRtt(base::TimeDelta rtt) final {}
@@ -181,8 +181,8 @@
   DCHECK(!frame_stats_[0].ack_time.is_null());
 }
 
-CongestionControl::~CongestionControl() {}
-AdaptiveCongestionControl::~AdaptiveCongestionControl() {}
+CongestionControl::~CongestionControl() = default;
+AdaptiveCongestionControl::~AdaptiveCongestionControl() = default;
 
 void AdaptiveCongestionControl::UpdateRtt(base::TimeDelta rtt) {
   rtt_ = (7 * rtt_ + rtt) / 8;
diff --git a/media/cast/sender/external_video_encoder.cc b/media/cast/sender/external_video_encoder.cc
index 14cb1b9..b0c46de 100644
--- a/media/cast/sender/external_video_encoder.cc
+++ b/media/cast/sender/external_video_encoder.cc
@@ -619,8 +619,7 @@
                  status_change_cb));
 }
 
-ExternalVideoEncoder::~ExternalVideoEncoder() {
-}
+ExternalVideoEncoder::~ExternalVideoEncoder() = default;
 
 bool ExternalVideoEncoder::EncodeVideoFrame(
     const scoped_refptr<media::VideoFrame>& video_frame,
@@ -722,7 +721,8 @@
       create_vea_cb_(create_vea_cb),
       create_video_encode_memory_cb_(create_video_encode_memory_cb) {}
 
-SizeAdaptableExternalVideoEncoder::~SizeAdaptableExternalVideoEncoder() {}
+SizeAdaptableExternalVideoEncoder::~SizeAdaptableExternalVideoEncoder() =
+    default;
 
 std::unique_ptr<VideoEncoder>
 SizeAdaptableExternalVideoEncoder::CreateEncoder() {
@@ -732,9 +732,9 @@
       create_video_encode_memory_cb_));
 }
 
-QuantizerEstimator::QuantizerEstimator() {}
+QuantizerEstimator::QuantizerEstimator() = default;
 
-QuantizerEstimator::~QuantizerEstimator() {}
+QuantizerEstimator::~QuantizerEstimator() = default;
 
 void QuantizerEstimator::Reset() {
   last_frame_pixel_buffer_.reset();
diff --git a/media/cast/sender/fake_software_video_encoder.cc b/media/cast/sender/fake_software_video_encoder.cc
index 7a24750..214929b 100644
--- a/media/cast/sender/fake_software_video_encoder.cc
+++ b/media/cast/sender/fake_software_video_encoder.cc
@@ -26,7 +26,7 @@
   DCHECK_GT(video_config_.max_frame_rate, 0);
 }
 
-FakeSoftwareVideoEncoder::~FakeSoftwareVideoEncoder() {}
+FakeSoftwareVideoEncoder::~FakeSoftwareVideoEncoder() = default;
 
 void FakeSoftwareVideoEncoder::Initialize() {}
 
diff --git a/media/cast/sender/fake_video_encode_accelerator_factory.cc b/media/cast/sender/fake_video_encode_accelerator_factory.cc
index b06eb56..9428c3c6 100644
--- a/media/cast/sender/fake_video_encode_accelerator_factory.cc
+++ b/media/cast/sender/fake_video_encode_accelerator_factory.cc
@@ -21,7 +21,8 @@
       last_response_vea_(nullptr),
       last_response_shm_(nullptr) {}
 
-FakeVideoEncodeAcceleratorFactory::~FakeVideoEncodeAcceleratorFactory() {}
+FakeVideoEncodeAcceleratorFactory::~FakeVideoEncodeAcceleratorFactory() =
+    default;
 
 void FakeVideoEncodeAcceleratorFactory::SetInitializationWillSucceed(
     bool will_init_succeed) {
diff --git a/media/cast/sender/frame_sender.cc b/media/cast/sender/frame_sender.cc
index 2320b7a..2d48010 100644
--- a/media/cast/sender/frame_sender.cc
+++ b/media/cast/sender/frame_sender.cc
@@ -35,7 +35,7 @@
 FrameSender::RtcpClient::RtcpClient(base::WeakPtr<FrameSender> frame_sender)
     : frame_sender_(frame_sender) {}
 
-FrameSender::RtcpClient::~RtcpClient() {}
+FrameSender::RtcpClient::~RtcpClient() = default;
 
 void FrameSender::RtcpClient::OnReceivedCastMessage(
     const RtcpCastMessage& cast_message) {
@@ -99,8 +99,7 @@
       base::MakeUnique<FrameSender::RtcpClient>(weak_factory_.GetWeakPtr()));
 }
 
-FrameSender::~FrameSender() {
-}
+FrameSender::~FrameSender() = default;
 
 void FrameSender::ScheduleNextRtcpReport() {
   DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
diff --git a/media/cast/sender/sender_encoded_frame.cc b/media/cast/sender/sender_encoded_frame.cc
index 611a745..4463ebd 100644
--- a/media/cast/sender/sender_encoded_frame.cc
+++ b/media/cast/sender/sender_encoded_frame.cc
@@ -10,7 +10,7 @@
 SenderEncodedFrame::SenderEncodedFrame()
     : EncodedFrame(), encoder_utilization(-1.0), lossy_utilization(-1.0) {}
 
-SenderEncodedFrame::~SenderEncodedFrame() {}
+SenderEncodedFrame::~SenderEncodedFrame() = default;
 
 }  //  namespace cast
 }  //  namespace media
diff --git a/media/cast/sender/video_encoder_unittest.cc b/media/cast/sender/video_encoder_unittest.cc
index 0c71b63..8ebd7135 100644
--- a/media/cast/sender/video_encoder_unittest.cc
+++ b/media/cast/sender/video_encoder_unittest.cc
@@ -49,7 +49,7 @@
     first_frame_time_ = testing_clock_->NowTicks();
   }
 
-  ~VideoEncoderTest() override {}
+  ~VideoEncoderTest() override = default;
 
   void SetUp() final {
     video_config_.codec = GetParam().first;
diff --git a/media/cast/sender/video_sender.cc b/media/cast/sender/video_sender.cc
index 6be7d80..196e111 100644
--- a/media/cast/sender/video_sender.cc
+++ b/media/cast/sender/video_sender.cc
@@ -126,8 +126,7 @@
   }
 }
 
-VideoSender::~VideoSender() {
-}
+VideoSender::~VideoSender() = default;
 
 void VideoSender::InsertRawVideoFrame(
     const scoped_refptr<media::VideoFrame>& video_frame,
diff --git a/media/cast/sender/video_sender_unittest.cc b/media/cast/sender/video_sender_unittest.cc
index 69c00f2..27cf37a 100644
--- a/media/cast/sender/video_sender_unittest.cc
+++ b/media/cast/sender/video_sender_unittest.cc
@@ -131,7 +131,7 @@
 
 class TransportClient : public CastTransport::Client {
  public:
-  TransportClient() {}
+  TransportClient() = default;
 
   void OnStatusChanged(CastTransportStatus status) final {
     EXPECT_EQ(TRANSPORT_STREAM_INITIALIZED, status);
@@ -167,7 +167,7 @@
         base::WrapUnique(transport_), task_runner_));
   }
 
-  ~VideoSenderTest() override {}
+  ~VideoSenderTest() override = default;
 
   void TearDown() final {
     video_sender_.reset();
diff --git a/media/cast/sender/vp8_quantizer_parser.cc b/media/cast/sender/vp8_quantizer_parser.cc
index b24d310..0cb8a172 100644
--- a/media/cast/sender/vp8_quantizer_parser.cc
+++ b/media/cast/sender/vp8_quantizer_parser.cc
@@ -24,7 +24,7 @@
       : encoded_data_(data), encoded_data_end_(data + size) {
     Vp8DecoderReadBytes();
   }
-  ~Vp8BitReader() {}
+  ~Vp8BitReader() = default;
 
   // Decode one bit. The output is 0 or 1.
   unsigned int DecodeBit();
diff --git a/media/cast/test/end2end_unittest.cc b/media/cast/test/end2end_unittest.cc
index 7d9994b..9b80af7c 100644
--- a/media/cast/test/end2end_unittest.cc
+++ b/media/cast/test/end2end_unittest.cc
@@ -150,7 +150,7 @@
   explicit LoopBackPacketPipe(const PacketReceiverCallback& packet_receiver)
       : packet_receiver_(packet_receiver) {}
 
-  ~LoopBackPacketPipe() final {}
+  ~LoopBackPacketPipe() final = default;
 
   // PacketPipe implementations.
   void Send(std::unique_ptr<Packet> packet) final {
@@ -303,8 +303,7 @@
   int number_times_called() const { return num_called_; }
 
  protected:
-  virtual ~TestReceiverAudioCallback() {
-  }
+  virtual ~TestReceiverAudioCallback() = default;
 
  private:
   friend class base::RefCountedThreadSafe<TestReceiverAudioCallback>;
@@ -382,7 +381,7 @@
   int number_times_called() const { return num_called_; }
 
  protected:
-  virtual ~TestReceiverVideoCallback() {}
+  virtual ~TestReceiverVideoCallback() = default;
 
  private:
   friend class base::RefCountedThreadSafe<TestReceiverVideoCallback>;
diff --git a/media/cast/test/fake_media_source.cc b/media/cast/test/fake_media_source.cc
index e1cde67..83553bc 100644
--- a/media/cast/test/fake_media_source.cc
+++ b/media/cast/test/fake_media_source.cc
@@ -103,8 +103,7 @@
                               kSoundFrequency, kSoundVolume));
 }
 
-FakeMediaSource::~FakeMediaSource() {
-}
+FakeMediaSource::~FakeMediaSource() = default;
 
 void FakeMediaSource::SetSourceFile(const base::FilePath& video_file,
                                     int final_fps) {
diff --git a/media/cast/test/fake_receiver_time_offset_estimator.cc b/media/cast/test/fake_receiver_time_offset_estimator.cc
index 3cc5f721..d48aa88 100644
--- a/media/cast/test/fake_receiver_time_offset_estimator.cc
+++ b/media/cast/test/fake_receiver_time_offset_estimator.cc
@@ -12,7 +12,7 @@
     base::TimeDelta offset)
     : offset_(offset) {}
 
-FakeReceiverTimeOffsetEstimator::~FakeReceiverTimeOffsetEstimator() {}
+FakeReceiverTimeOffsetEstimator::~FakeReceiverTimeOffsetEstimator() = default;
 
 void FakeReceiverTimeOffsetEstimator::OnReceiveFrameEvent(
     const FrameEvent& frame_event) {
diff --git a/media/cast/test/loopback_transport.cc b/media/cast/test/loopback_transport.cc
index 3500f62..84603d6 100644
--- a/media/cast/test/loopback_transport.cc
+++ b/media/cast/test/loopback_transport.cc
@@ -23,7 +23,7 @@
       const PacketReceiverCallback& packet_receiver)
       : packet_receiver_(packet_receiver) {}
 
-  ~LoopBackPacketPipe() final {}
+  ~LoopBackPacketPipe() final = default;
 
   // PacketPipe implementations.
   void Send(std::unique_ptr<Packet> packet) final {
@@ -44,8 +44,7 @@
       bytes_sent_(0) {
 }
 
-LoopBackTransport::~LoopBackTransport() {
-}
+LoopBackTransport::~LoopBackTransport() = default;
 
 bool LoopBackTransport::SendPacket(PacketRef packet,
                                    const base::Closure& cb) {
diff --git a/media/cast/test/skewed_single_thread_task_runner.cc b/media/cast/test/skewed_single_thread_task_runner.cc
index b7b6db7..d7daef0e 100644
--- a/media/cast/test/skewed_single_thread_task_runner.cc
+++ b/media/cast/test/skewed_single_thread_task_runner.cc
@@ -20,7 +20,7 @@
     task_runner_(task_runner) {
 }
 
-SkewedSingleThreadTaskRunner::~SkewedSingleThreadTaskRunner() {}
+SkewedSingleThreadTaskRunner::~SkewedSingleThreadTaskRunner() = default;
 
 void SkewedSingleThreadTaskRunner::SetSkew(double skew) {
   skew_ = skew;
diff --git a/media/cast/test/utility/audio_utility.cc b/media/cast/test/utility/audio_utility.cc
index 436400a6..d5d499f 100644
--- a/media/cast/test/utility/audio_utility.cc
+++ b/media/cast/test/utility/audio_utility.cc
@@ -29,7 +29,7 @@
   CHECK_LE(volume_, 1.0f);
 }
 
-TestAudioBusFactory::~TestAudioBusFactory() {}
+TestAudioBusFactory::~TestAudioBusFactory() = default;
 
 std::unique_ptr<AudioBus> TestAudioBusFactory::NextAudioBus(
     const base::TimeDelta& duration) {
diff --git a/media/cast/test/utility/input_builder.cc b/media/cast/test/utility/input_builder.cc
index d3a84fdf..442bb1e3 100644
--- a/media/cast/test/utility/input_builder.cc
+++ b/media/cast/test/utility/input_builder.cc
@@ -27,7 +27,7 @@
       low_range_(low_range),
       high_range_(high_range) {}
 
-InputBuilder::~InputBuilder() {}
+InputBuilder::~InputBuilder() = default;
 
 std::string InputBuilder::GetStringInput() const {
   if (!base::CommandLine::ForCurrentProcess()->HasSwitch(kEnablePromptsSwitch))
diff --git a/media/cast/test/utility/udp_proxy.cc b/media/cast/test/utility/udp_proxy.cc
index b576f38..d4ecd5ef 100644
--- a/media/cast/test/utility/udp_proxy.cc
+++ b/media/cast/test/utility/udp_proxy.cc
@@ -29,8 +29,8 @@
 
 const size_t kMaxPacketSize = 65536;
 
-PacketPipe::PacketPipe() {}
-PacketPipe::~PacketPipe() {}
+PacketPipe::PacketPipe() = default;
+PacketPipe::~PacketPipe() = default;
 void PacketPipe::InitOnIOThread(
     const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
     base::TickClock* clock) {
@@ -139,7 +139,7 @@
 class SimpleDelayBase : public PacketPipe {
  public:
   SimpleDelayBase() : weak_factory_(this) {}
-  ~SimpleDelayBase() override {}
+  ~SimpleDelayBase() override = default;
 
   void Send(std::unique_ptr<Packet> packet) override {
     double seconds = GetDelay();
@@ -428,8 +428,7 @@
   ComputeRates();
 }
 
-InterruptedPoissonProcess::~InterruptedPoissonProcess() {
-}
+InterruptedPoissonProcess::~InterruptedPoissonProcess() = default;
 
 void InterruptedPoissonProcess::InitOnIOThread(
     const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
diff --git a/media/cdm/aes_decryptor.cc b/media/cdm/aes_decryptor.cc
index 2729729..067563c1 100644
--- a/media/cdm/aes_decryptor.cc
+++ b/media/cdm/aes_decryptor.cc
@@ -81,8 +81,8 @@
       std::list<std::pair<std::string, std::unique_ptr<DecryptionKey>>>;
 
  public:
-  SessionIdDecryptionKeyMap() {}
-  ~SessionIdDecryptionKeyMap() {}
+  SessionIdDecryptionKeyMap() = default;
+  ~SessionIdDecryptionKeyMap() = default;
 
   // Replaces value if |session_id| is already present, or adds it if not.
   // This |decryption_key| becomes the latest until another insertion or
@@ -771,7 +771,7 @@
     : secret_(secret) {
 }
 
-AesDecryptor::DecryptionKey::~DecryptionKey() {}
+AesDecryptor::DecryptionKey::~DecryptionKey() = default;
 
 bool AesDecryptor::DecryptionKey::Init() {
   CHECK(!secret_.empty());
diff --git a/media/cdm/cdm_adapter_factory.cc b/media/cdm/cdm_adapter_factory.cc
index baaa811..77c7227c 100644
--- a/media/cdm/cdm_adapter_factory.cc
+++ b/media/cdm/cdm_adapter_factory.cc
@@ -17,7 +17,7 @@
   DCHECK(helper_creation_cb_);
 }
 
-CdmAdapterFactory::~CdmAdapterFactory() {}
+CdmAdapterFactory::~CdmAdapterFactory() = default;
 
 void CdmAdapterFactory::Create(
     const std::string& key_system,
diff --git a/media/cdm/cdm_allocator.cc b/media/cdm/cdm_allocator.cc
index 52e722c..5417266 100644
--- a/media/cdm/cdm_allocator.cc
+++ b/media/cdm/cdm_allocator.cc
@@ -6,8 +6,8 @@
 
 namespace media {
 
-CdmAllocator::CdmAllocator() {}
+CdmAllocator::CdmAllocator() = default;
 
-CdmAllocator::~CdmAllocator() {}
+CdmAllocator::~CdmAllocator() = default;
 
 }  // namespace media
diff --git a/media/cdm/cdm_auxiliary_helper.cc b/media/cdm/cdm_auxiliary_helper.cc
index b78b511..7950eac7 100644
--- a/media/cdm/cdm_auxiliary_helper.cc
+++ b/media/cdm/cdm_auxiliary_helper.cc
@@ -8,8 +8,8 @@
 
 namespace media {
 
-CdmAuxiliaryHelper::CdmAuxiliaryHelper() {}
-CdmAuxiliaryHelper::~CdmAuxiliaryHelper() {}
+CdmAuxiliaryHelper::CdmAuxiliaryHelper() = default;
+CdmAuxiliaryHelper::~CdmAuxiliaryHelper() = default;
 
 void CdmAuxiliaryHelper::SetFileReadCB(FileReadCB file_read_cb) {}
 
diff --git a/media/cdm/cdm_manager.cc b/media/cdm/cdm_manager.cc
index 8fd7e76..277333ca 100644
--- a/media/cdm/cdm_manager.cc
+++ b/media/cdm/cdm_manager.cc
@@ -11,9 +11,9 @@
 
 namespace media {
 
-CdmManager::CdmManager() {}
+CdmManager::CdmManager() = default;
 
-CdmManager::~CdmManager() {}
+CdmManager::~CdmManager() = default;
 
 // static
 CdmManager* CdmManager::GetInstance() {
diff --git a/media/cdm/cdm_module.cc b/media/cdm/cdm_module.cc
index 2bf399f7..9c85192 100644
--- a/media/cdm/cdm_module.cc
+++ b/media/cdm/cdm_module.cc
@@ -95,7 +95,7 @@
   g_cdm_module = nullptr;
 }
 
-CdmModule::CdmModule() {}
+CdmModule::CdmModule() = default;
 
 CdmModule::~CdmModule() {
   if (deinitialize_cdm_module_func_)
diff --git a/media/cdm/default_cdm_factory.cc b/media/cdm/default_cdm_factory.cc
index e586a3ad..118b4e5 100644
--- a/media/cdm/default_cdm_factory.cc
+++ b/media/cdm/default_cdm_factory.cc
@@ -18,11 +18,9 @@
 
 namespace media {
 
-DefaultCdmFactory::DefaultCdmFactory() {
-}
+DefaultCdmFactory::DefaultCdmFactory() = default;
 
-DefaultCdmFactory::~DefaultCdmFactory() {
-}
+DefaultCdmFactory::~DefaultCdmFactory() = default;
 
 static bool ShouldCreateAesDecryptor(const std::string& key_system) {
   if (CanUseAesDecryptor(key_system))
diff --git a/media/cdm/json_web_key_unittest.cc b/media/cdm/json_web_key_unittest.cc
index d0ba9711..689d781 100644
--- a/media/cdm/json_web_key_unittest.cc
+++ b/media/cdm/json_web_key_unittest.cc
@@ -17,7 +17,7 @@
 
 class JSONWebKeyTest : public testing::Test {
  public:
-  JSONWebKeyTest() {}
+  JSONWebKeyTest() = default;
 
  protected:
   void ExtractJWKKeysAndExpect(const std::string& jwk,
diff --git a/media/cdm/mock_helpers.cc b/media/cdm/mock_helpers.cc
index 160cb4c7..fcd85efe 100644
--- a/media/cdm/mock_helpers.cc
+++ b/media/cdm/mock_helpers.cc
@@ -10,7 +10,7 @@
     std::unique_ptr<CdmAllocator> allocator)
     : allocator_(std::move(allocator)) {}
 
-MockCdmAuxiliaryHelper::~MockCdmAuxiliaryHelper() {}
+MockCdmAuxiliaryHelper::~MockCdmAuxiliaryHelper() = default;
 
 void MockCdmAuxiliaryHelper::SetFileReadCB(FileReadCB file_read_cb) {}
 
diff --git a/media/cdm/player_tracker_impl.cc b/media/cdm/player_tracker_impl.cc
index e0caf7b..3bfae54 100644
--- a/media/cdm/player_tracker_impl.cc
+++ b/media/cdm/player_tracker_impl.cc
@@ -18,13 +18,12 @@
 PlayerTrackerImpl::PlayerCallbacks::PlayerCallbacks(
     const PlayerCallbacks& other) = default;
 
-PlayerTrackerImpl::PlayerCallbacks::~PlayerCallbacks() {
-}
+PlayerTrackerImpl::PlayerCallbacks::~PlayerCallbacks() = default;
 
 PlayerTrackerImpl::PlayerTrackerImpl() : next_registration_id_(1) {
 }
 
-PlayerTrackerImpl::~PlayerTrackerImpl() {}
+PlayerTrackerImpl::~PlayerTrackerImpl() = default;
 
 int PlayerTrackerImpl::RegisterPlayer(const base::Closure& new_key_cb,
                                       const base::Closure& cdm_unset_cb) {
diff --git a/media/cdm/ppapi/cdm_file_io_test.cc b/media/cdm/ppapi/cdm_file_io_test.cc
index fcfe894b..05540c1e 100644
--- a/media/cdm/ppapi/cdm_file_io_test.cc
+++ b/media/cdm/ppapi/cdm_file_io_test.cc
@@ -523,7 +523,7 @@
     : create_file_io_cb_(create_file_io_cb),
       test_name_(test_name) {}
 
-FileIOTest::~FileIOTest() {}
+FileIOTest::~FileIOTest() = default;
 
 void FileIOTest::AddTestStep(StepType type,
                              Status status,
diff --git a/media/cdm/ppapi/external_clear_key/clear_key_cdm.cc b/media/cdm/ppapi/external_clear_key/clear_key_cdm.cc
index 995509a..f981279 100644
--- a/media/cdm/ppapi/external_clear_key/clear_key_cdm.cc
+++ b/media/cdm/ppapi/external_clear_key/clear_key_cdm.cc
@@ -364,7 +364,7 @@
 #endif  // CLEAR_KEY_CDM_USE_FAKE_AUDIO_DECODER
 }
 
-ClearKeyCdm::~ClearKeyCdm() {}
+ClearKeyCdm::~ClearKeyCdm() = default;
 
 void ClearKeyCdm::Initialize(bool allow_distinctive_identifier,
                              bool allow_persistent_state) {
diff --git a/media/cdm/ppapi/external_clear_key/clear_key_persistent_session_cdm.cc b/media/cdm/ppapi/external_clear_key/clear_key_persistent_session_cdm.cc
index 92095468..65cdc95 100644
--- a/media/cdm/ppapi/external_clear_key/clear_key_persistent_session_cdm.cc
+++ b/media/cdm/ppapi/external_clear_key/clear_key_persistent_session_cdm.cc
@@ -28,7 +28,7 @@
                                  std::unique_ptr<NewSessionCdmPromise> promise)
       : session_created_cb_(std::move(session_created_cb)),
         promise_(std::move(promise)) {}
-  ~NewPersistentSessionCdmPromise() override {}
+  ~NewPersistentSessionCdmPromise() override = default;
 
   // NewSessionCdmPromise implementation.
   void resolve(const std::string& session_id) override {
@@ -61,7 +61,7 @@
   FinishLoadCdmPromise(const std::string& session_id,
                        std::unique_ptr<NewSessionCdmPromise> promise)
       : session_id_(session_id), promise_(std::move(promise)) {}
-  ~FinishLoadCdmPromise() override {}
+  ~FinishLoadCdmPromise() override = default;
 
   // CdmSimplePromise implementation.
   void resolve() override {
diff --git a/media/cdm/ppapi/ppapi_cdm_adapter.cc b/media/cdm/ppapi/ppapi_cdm_adapter.cc
index 58be708..afeb97c 100644
--- a/media/cdm/ppapi/ppapi_cdm_adapter.cc
+++ b/media/cdm/ppapi/ppapi_cdm_adapter.cc
@@ -389,7 +389,7 @@
   callback_factory_.Initialize(this);
 }
 
-PpapiCdmAdapter::~PpapiCdmAdapter() {}
+PpapiCdmAdapter::~PpapiCdmAdapter() = default;
 
 CdmWrapper* PpapiCdmAdapter::CreateCdmInstance(const std::string& key_system) {
   // The Pepper plugin will be staticly linked to the CDM, so pass the plugin's
diff --git a/media/cdm/simple_cdm_allocator.cc b/media/cdm/simple_cdm_allocator.cc
index 5741a90..8a566ded 100644
--- a/media/cdm/simple_cdm_allocator.cc
+++ b/media/cdm/simple_cdm_allocator.cc
@@ -18,8 +18,8 @@
 
 class SimpleCdmVideoFrame : public VideoFrameImpl {
  public:
-  SimpleCdmVideoFrame() {}
-  ~SimpleCdmVideoFrame() final {}
+  SimpleCdmVideoFrame() = default;
+  ~SimpleCdmVideoFrame() final = default;
 
   // VideoFrameImpl implementation.
   scoped_refptr<media::VideoFrame> TransformToVideoFrame(
@@ -53,9 +53,9 @@
 
 }  // namespace
 
-SimpleCdmAllocator::SimpleCdmAllocator() {}
+SimpleCdmAllocator::SimpleCdmAllocator() = default;
 
-SimpleCdmAllocator::~SimpleCdmAllocator() {}
+SimpleCdmAllocator::~SimpleCdmAllocator() = default;
 
 // Creates a new SimpleCdmBuffer on every request. It does not keep track of
 // the memory allocated, so the caller is responsible for calling Destroy()
diff --git a/media/cdm/simple_cdm_allocator_unittest.cc b/media/cdm/simple_cdm_allocator_unittest.cc
index 6e95c53..a1520e9f 100644
--- a/media/cdm/simple_cdm_allocator_unittest.cc
+++ b/media/cdm/simple_cdm_allocator_unittest.cc
@@ -36,7 +36,7 @@
     // Verify that Destroy() is called on this object.
     EXPECT_CALL(*this, DestroyCalled());
   }
-  ~TestCdmBuffer() final {}
+  ~TestCdmBuffer() final = default;
 
   MOCK_METHOD0(DestroyCalled, void());
 
@@ -48,8 +48,8 @@
 
 class SimpleCdmAllocatorTest : public testing::Test {
  public:
-  SimpleCdmAllocatorTest() {}
-  ~SimpleCdmAllocatorTest() override {}
+  SimpleCdmAllocatorTest() = default;
+  ~SimpleCdmAllocatorTest() override = default;
 
  protected:
   SimpleCdmAllocator allocator_;
diff --git a/media/cdm/simple_cdm_buffer.cc b/media/cdm/simple_cdm_buffer.cc
index 712c8b7..76d0e1e9 100644
--- a/media/cdm/simple_cdm_buffer.cc
+++ b/media/cdm/simple_cdm_buffer.cc
@@ -23,7 +23,7 @@
 SimpleCdmBuffer::SimpleCdmBuffer(uint32_t capacity)
     : buffer_(capacity), size_(0) {}
 
-SimpleCdmBuffer::~SimpleCdmBuffer() {}
+SimpleCdmBuffer::~SimpleCdmBuffer() = default;
 
 void SimpleCdmBuffer::Destroy() {
   delete this;
diff --git a/media/device_monitors/device_monitor_udev.cc b/media/device_monitors/device_monitor_udev.cc
index 1c2cea7..d0e8bb8f 100644
--- a/media/device_monitors/device_monitor_udev.cc
+++ b/media/device_monitors/device_monitor_udev.cc
@@ -44,7 +44,7 @@
       base::Bind(&DeviceMonitorLinux::Initialize, base::Unretained(this)));
 }
 
-DeviceMonitorLinux::~DeviceMonitorLinux() {}
+DeviceMonitorLinux::~DeviceMonitorLinux() = default;
 
 void DeviceMonitorLinux::Initialize() {
   DCHECK(io_task_runner_->BelongsToCurrentThread());
diff --git a/media/ffmpeg/ffmpeg_common_unittest.cc b/media/ffmpeg/ffmpeg_common_unittest.cc
index 21b8726..c221685 100644
--- a/media/ffmpeg/ffmpeg_common_unittest.cc
+++ b/media/ffmpeg/ffmpeg_common_unittest.cc
@@ -28,7 +28,7 @@
   FFmpegCommonTest() {
     FFmpegGlue::InitializeFFmpeg();
   }
-  ~FFmpegCommonTest() override {}
+  ~FFmpegCommonTest() override = default;
 };
 
 uint8_t kExtraData[5] = {0x00, 0x01, 0x02, 0x03, 0x04};
diff --git a/media/ffmpeg/ffmpeg_decoding_loop.cc b/media/ffmpeg/ffmpeg_decoding_loop.cc
index 8a3f4e48..5cc9782f 100644
--- a/media/ffmpeg/ffmpeg_decoding_loop.cc
+++ b/media/ffmpeg/ffmpeg_decoding_loop.cc
@@ -15,7 +15,7 @@
       context_(context),
       frame_(av_frame_alloc()) {}
 
-FFmpegDecodingLoop::~FFmpegDecodingLoop() {}
+FFmpegDecodingLoop::~FFmpegDecodingLoop() = default;
 
 FFmpegDecodingLoop::DecodeStatus FFmpegDecodingLoop::DecodePacket(
     const AVPacket* packet,
diff --git a/media/filters/audio_clock.cc b/media/filters/audio_clock.cc
index 819ad19..9affd9c0 100644
--- a/media/filters/audio_clock.cc
+++ b/media/filters/audio_clock.cc
@@ -23,8 +23,7 @@
       front_timestamp_micros_(start_timestamp.InMicroseconds()),
       back_timestamp_micros_(start_timestamp.InMicroseconds()) {}
 
-AudioClock::~AudioClock() {
-}
+AudioClock::~AudioClock() = default;
 
 void AudioClock::WroteAudio(int frames_written,
                             int frames_requested,
diff --git a/media/filters/audio_clock_unittest.cc b/media/filters/audio_clock_unittest.cc
index 7a94055..92016c5d 100644
--- a/media/filters/audio_clock_unittest.cc
+++ b/media/filters/audio_clock_unittest.cc
@@ -16,7 +16,7 @@
  public:
   AudioClockTest() { SetupClock(base::TimeDelta(), 10); }
 
-  ~AudioClockTest() override {}
+  ~AudioClockTest() override = default;
 
   void WroteAudio(int frames_written,
                   int frames_requested,
diff --git a/media/filters/audio_file_reader_unittest.cc b/media/filters/audio_file_reader_unittest.cc
index e26d805..3ea4146 100644
--- a/media/filters/audio_file_reader_unittest.cc
+++ b/media/filters/audio_file_reader_unittest.cc
@@ -24,7 +24,7 @@
 class AudioFileReaderTest : public testing::Test {
  public:
   AudioFileReaderTest() : packet_verification_disabled_(false) {}
-  ~AudioFileReaderTest() override {}
+  ~AudioFileReaderTest() override = default;
 
   void Initialize(const char* filename) {
     data_ = ReadTestDataFile(filename);
diff --git a/media/filters/audio_renderer_algorithm.cc b/media/filters/audio_renderer_algorithm.cc
index d990ff7..771c27e 100644
--- a/media/filters/audio_renderer_algorithm.cc
+++ b/media/filters/audio_renderer_algorithm.cc
@@ -84,7 +84,7 @@
       initial_capacity_(0),
       max_capacity_(0) {}
 
-AudioRendererAlgorithm::~AudioRendererAlgorithm() {}
+AudioRendererAlgorithm::~AudioRendererAlgorithm() = default;
 
 void AudioRendererAlgorithm::Initialize(const AudioParameters& params,
                                         bool is_encrypted) {
diff --git a/media/filters/audio_renderer_algorithm_unittest.cc b/media/filters/audio_renderer_algorithm_unittest.cc
index 34cc54a..c7c50156 100644
--- a/media/filters/audio_renderer_algorithm_unittest.cc
+++ b/media/filters/audio_renderer_algorithm_unittest.cc
@@ -80,7 +80,7 @@
         bytes_per_sample_(0) {
   }
 
-  ~AudioRendererAlgorithmTest() override {}
+  ~AudioRendererAlgorithmTest() override = default;
 
   void Initialize() {
     Initialize(CHANNEL_LAYOUT_STEREO, kSampleFormatS16, kSamplesPerSecond,
diff --git a/media/filters/audio_timestamp_validator.cc b/media/filters/audio_timestamp_validator.cc
index 0bc40bc..11b3983 100644
--- a/media/filters/audio_timestamp_validator.cc
+++ b/media/filters/audio_timestamp_validator.cc
@@ -36,7 +36,7 @@
   DCHECK(decoder_config.IsValidConfig());
 }
 
-AudioTimestampValidator::~AudioTimestampValidator() {}
+AudioTimestampValidator::~AudioTimestampValidator() = default;
 
 void AudioTimestampValidator::CheckForTimestampGap(
     const scoped_refptr<DecoderBuffer>& buffer) {
diff --git a/media/filters/audio_timestamp_validator_unittest.cc b/media/filters/audio_timestamp_validator_unittest.cc
index 7724b04..aed67e1 100644
--- a/media/filters/audio_timestamp_validator_unittest.cc
+++ b/media/filters/audio_timestamp_validator_unittest.cc
@@ -41,7 +41,7 @@
     : public testing::Test,
       public ::testing::WithParamInterface<ValidatorTestParams> {
  public:
-  AudioTimestampValidatorTest() {}
+  AudioTimestampValidatorTest() = default;
 
  protected:
   void SetUp() override {
diff --git a/media/filters/audio_video_metadata_extractor.cc b/media/filters/audio_video_metadata_extractor.cc
index bb67967..77b3bfcf 100644
--- a/media/filters/audio_video_metadata_extractor.cc
+++ b/media/filters/audio_video_metadata_extractor.cc
@@ -54,12 +54,12 @@
 
 }  // namespace
 
-AudioVideoMetadataExtractor::StreamInfo::StreamInfo() {}
+AudioVideoMetadataExtractor::StreamInfo::StreamInfo() = default;
 
 AudioVideoMetadataExtractor::StreamInfo::StreamInfo(const StreamInfo& other) =
     default;
 
-AudioVideoMetadataExtractor::StreamInfo::~StreamInfo() {}
+AudioVideoMetadataExtractor::StreamInfo::~StreamInfo() = default;
 
 AudioVideoMetadataExtractor::AudioVideoMetadataExtractor()
     : extracted_(false),
@@ -71,7 +71,7 @@
       rotation_(-1),
       track_(-1) {}
 
-AudioVideoMetadataExtractor::~AudioVideoMetadataExtractor() {}
+AudioVideoMetadataExtractor::~AudioVideoMetadataExtractor() = default;
 
 bool AudioVideoMetadataExtractor::Extract(DataSource* source,
                                           bool extract_attached_images) {
diff --git a/media/filters/blocking_url_protocol.cc b/media/filters/blocking_url_protocol.cc
index c21a7c98..62b6673 100644
--- a/media/filters/blocking_url_protocol.cc
+++ b/media/filters/blocking_url_protocol.cc
@@ -29,7 +29,7 @@
       last_read_bytes_(0),
       read_position_(0) {}
 
-BlockingUrlProtocol::~BlockingUrlProtocol() {}
+BlockingUrlProtocol::~BlockingUrlProtocol() = default;
 
 void BlockingUrlProtocol::Abort() {
   aborted_.Signal();
diff --git a/media/filters/chunk_demuxer.cc b/media/filters/chunk_demuxer.cc
index 7e812fc..7d8e94b 100644
--- a/media/filters/chunk_demuxer.cc
+++ b/media/filters/chunk_demuxer.cc
@@ -384,7 +384,7 @@
   state_ = state;
 }
 
-ChunkDemuxerStream::~ChunkDemuxerStream() {}
+ChunkDemuxerStream::~ChunkDemuxerStream() = default;
 
 void ChunkDemuxerStream::CompletePendingReadIfPossible_Locked() {
   lock_.AssertAcquired();
diff --git a/media/filters/demuxer_perftest.cc b/media/filters/demuxer_perftest.cc
index 768e945..d48a2e4 100644
--- a/media/filters/demuxer_perftest.cc
+++ b/media/filters/demuxer_perftest.cc
@@ -32,8 +32,8 @@
 
 class DemuxerHostImpl : public media::DemuxerHost {
  public:
-  DemuxerHostImpl() {}
-  ~DemuxerHostImpl() override {}
+  DemuxerHostImpl() = default;
+  ~DemuxerHostImpl() override = default;
 
   // DemuxerHost implementation.
   void OnBufferedTimeRangesChanged(
@@ -112,7 +112,7 @@
   }
 }
 
-StreamReader::~StreamReader() {}
+StreamReader::~StreamReader() = default;
 
 void StreamReader::Read() {
   int index = GetNextStreamIndexToRead();
diff --git a/media/filters/ffmpeg_aac_bitstream_converter.cc b/media/filters/ffmpeg_aac_bitstream_converter.cc
index e8cc90fb..6f231c8 100644
--- a/media/filters/ffmpeg_aac_bitstream_converter.cc
+++ b/media/filters/ffmpeg_aac_bitstream_converter.cc
@@ -168,8 +168,7 @@
   CHECK(stream_codec_parameters_);
 }
 
-FFmpegAACBitstreamConverter::~FFmpegAACBitstreamConverter() {
-}
+FFmpegAACBitstreamConverter::~FFmpegAACBitstreamConverter() = default;
 
 bool FFmpegAACBitstreamConverter::ConvertPacket(AVPacket* packet) {
   if (packet == NULL || !packet->data) {
diff --git a/media/filters/ffmpeg_demuxer_unittest.cc b/media/filters/ffmpeg_demuxer_unittest.cc
index 455b8e8d..8b78482 100644
--- a/media/filters/ffmpeg_demuxer_unittest.cc
+++ b/media/filters/ffmpeg_demuxer_unittest.cc
@@ -140,7 +140,7 @@
 // FFmpeg, pipeline and filter host mocks.
 class FFmpegDemuxerTest : public testing::Test {
  protected:
-  FFmpegDemuxerTest() {}
+  FFmpegDemuxerTest() = default;
 
   virtual ~FFmpegDemuxerTest() { Shutdown(); }
 
diff --git a/media/filters/ffmpeg_glue_unittest.cc b/media/filters/ffmpeg_glue_unittest.cc
index 11f56f1..20c670dd 100644
--- a/media/filters/ffmpeg_glue_unittest.cc
+++ b/media/filters/ffmpeg_glue_unittest.cc
@@ -30,7 +30,7 @@
 
 class MockProtocol : public FFmpegURLProtocol {
  public:
-  MockProtocol() {}
+  MockProtocol() = default;
 
   MOCK_METHOD2(Read, int(int size, uint8_t* data));
   MOCK_METHOD1(GetPosition, bool(int64_t* position_out));
@@ -81,7 +81,7 @@
 
 class FFmpegGlueDestructionTest : public ::testing::Test {
  public:
-  FFmpegGlueDestructionTest() {}
+  FFmpegGlueDestructionTest() = default;
 
   void Initialize(const char* filename) {
     data_ = ReadTestDataFile(filename);
@@ -119,8 +119,8 @@
 // for supported containers.
 class FFmpegGlueContainerTest : public FFmpegGlueDestructionTest {
  public:
-  FFmpegGlueContainerTest() {}
-  ~FFmpegGlueContainerTest() override {}
+  FFmpegGlueContainerTest() = default;
+  ~FFmpegGlueContainerTest() override = default;
 
  protected:
   void InitializeAndOpen(const char* filename) {
diff --git a/media/filters/ffmpeg_h264_to_annex_b_bitstream_converter.cc b/media/filters/ffmpeg_h264_to_annex_b_bitstream_converter.cc
index a3eb5bcc..a8d56d2 100644
--- a/media/filters/ffmpeg_h264_to_annex_b_bitstream_converter.cc
+++ b/media/filters/ffmpeg_h264_to_annex_b_bitstream_converter.cc
@@ -19,7 +19,8 @@
   CHECK(stream_codec_parameters_);
 }
 
-FFmpegH264ToAnnexBBitstreamConverter::~FFmpegH264ToAnnexBBitstreamConverter() {}
+FFmpegH264ToAnnexBBitstreamConverter::~FFmpegH264ToAnnexBBitstreamConverter() =
+    default;
 
 bool FFmpegH264ToAnnexBBitstreamConverter::ConvertPacket(AVPacket* packet) {
   std::unique_ptr<mp4::AVCDecoderConfigurationRecord> avc_config;
diff --git a/media/filters/file_data_source.cc b/media/filters/file_data_source.cc
index c90082d..6249bde 100644
--- a/media/filters/file_data_source.cc
+++ b/media/filters/file_data_source.cc
@@ -69,6 +69,6 @@
 
 void FileDataSource::SetBitrate(int bitrate) {}
 
-FileDataSource::~FileDataSource() {}
+FileDataSource::~FileDataSource() = default;
 
 }  // namespace media
diff --git a/media/filters/file_data_source_unittest.cc b/media/filters/file_data_source_unittest.cc
index 08ff943d..ee107a1 100644
--- a/media/filters/file_data_source_unittest.cc
+++ b/media/filters/file_data_source_unittest.cc
@@ -22,7 +22,7 @@
 
 class ReadCBHandler {
  public:
-  ReadCBHandler() {}
+  ReadCBHandler() = default;
 
   MOCK_METHOD1(ReadCB, void(int size));
 
diff --git a/media/filters/frame_processor_unittest.cc b/media/filters/frame_processor_unittest.cc
index 98eab02..cce81136 100644
--- a/media/filters/frame_processor_unittest.cc
+++ b/media/filters/frame_processor_unittest.cc
@@ -65,8 +65,8 @@
 // test for missing or extra callbacks.
 class FrameProcessorTestCallbackHelper {
  public:
-  FrameProcessorTestCallbackHelper() {}
-  virtual ~FrameProcessorTestCallbackHelper() {}
+  FrameProcessorTestCallbackHelper() = default;
+  virtual ~FrameProcessorTestCallbackHelper() = default;
 
   MOCK_METHOD1(OnParseWarning, void(const SourceBufferParseWarning));
   MOCK_METHOD1(PossibleDurationIncrease, void(base::TimeDelta new_duration));
diff --git a/media/filters/gpu_video_decoder.cc b/media/filters/gpu_video_decoder.cc
index 8b1d8cf..53bc1bf 100644
--- a/media/filters/gpu_video_decoder.cc
+++ b/media/filters/gpu_video_decoder.cc
@@ -68,7 +68,7 @@
       visible_rect(vr),
       natural_size(ns) {}
 
-GpuVideoDecoder::BufferData::~BufferData() {}
+GpuVideoDecoder::BufferData::~BufferData() = default;
 
 GpuVideoDecoder::GpuVideoDecoder(
     GpuVideoAcceleratorFactories* factories,
diff --git a/media/filters/h264_to_annex_b_bitstream_converter.cc b/media/filters/h264_to_annex_b_bitstream_converter.cc
index 35de6945..1397c3bf 100644
--- a/media/filters/h264_to_annex_b_bitstream_converter.cc
+++ b/media/filters/h264_to_annex_b_bitstream_converter.cc
@@ -36,7 +36,7 @@
       nal_unit_length_field_width_(0) {
 }
 
-H264ToAnnexBBitstreamConverter::~H264ToAnnexBBitstreamConverter() {}
+H264ToAnnexBBitstreamConverter::~H264ToAnnexBBitstreamConverter() = default;
 
 bool H264ToAnnexBBitstreamConverter::ParseConfiguration(
     const uint8_t* configuration_record,
diff --git a/media/filters/h264_to_annex_b_bitstream_converter_unittest.cc b/media/filters/h264_to_annex_b_bitstream_converter_unittest.cc
index 044cc85..654d5b3 100644
--- a/media/filters/h264_to_annex_b_bitstream_converter_unittest.cc
+++ b/media/filters/h264_to_annex_b_bitstream_converter_unittest.cc
@@ -16,9 +16,9 @@
 
 class H264ToAnnexBBitstreamConverterTest : public testing::Test {
  protected:
-  H264ToAnnexBBitstreamConverterTest() {}
+  H264ToAnnexBBitstreamConverterTest() = default;
 
-  ~H264ToAnnexBBitstreamConverterTest() override {}
+  ~H264ToAnnexBBitstreamConverterTest() override = default;
 
  protected:
   mp4::AVCDecoderConfigurationRecord avc_config_;
diff --git a/media/filters/in_memory_url_protocol.cc b/media/filters/in_memory_url_protocol.cc
index 8c1883a..4a484f1b 100644
--- a/media/filters/in_memory_url_protocol.cc
+++ b/media/filters/in_memory_url_protocol.cc
@@ -16,7 +16,7 @@
       position_(0),
       streaming_(streaming) {}
 
-InMemoryUrlProtocol::~InMemoryUrlProtocol() {}
+InMemoryUrlProtocol::~InMemoryUrlProtocol() = default;
 
 int InMemoryUrlProtocol::Read(int size, uint8_t* data) {
   if (size < 0)
diff --git a/media/filters/media_file_checker.cc b/media/filters/media_file_checker.cc
index 1919c53..588987d 100644
--- a/media/filters/media_file_checker.cc
+++ b/media/filters/media_file_checker.cc
@@ -38,7 +38,7 @@
 
 MediaFileChecker::MediaFileChecker(base::File file) : file_(std::move(file)) {}
 
-MediaFileChecker::~MediaFileChecker() {}
+MediaFileChecker::~MediaFileChecker() = default;
 
 bool MediaFileChecker::Start(base::TimeDelta check_time) {
   media::FileDataSource source(std::move(file_));
diff --git a/media/filters/memory_data_source.cc b/media/filters/memory_data_source.cc
index 7031e42d..b1b96f9 100644
--- a/media/filters/memory_data_source.cc
+++ b/media/filters/memory_data_source.cc
@@ -13,7 +13,7 @@
 MemoryDataSource::MemoryDataSource(const uint8_t* data, size_t size)
     : data_(data), size_(size) {}
 
-MemoryDataSource::~MemoryDataSource() {}
+MemoryDataSource::~MemoryDataSource() = default;
 
 void MemoryDataSource::Read(int64_t position,
                             int size,
diff --git a/media/filters/memory_data_source_unittest.cc b/media/filters/memory_data_source_unittest.cc
index f5494eeb..b95118c 100644
--- a/media/filters/memory_data_source_unittest.cc
+++ b/media/filters/memory_data_source_unittest.cc
@@ -16,7 +16,7 @@
 
 class MemoryDataSourceTest : public ::testing::Test {
  public:
-  MemoryDataSourceTest() {}
+  MemoryDataSourceTest() = default;
 
  protected:
   void Initialize(size_t size) {
diff --git a/media/filters/pipeline_controller_unittest.cc b/media/filters/pipeline_controller_unittest.cc
index 4f1c3204..90ef4a03 100644
--- a/media/filters/pipeline_controller_unittest.cc
+++ b/media/filters/pipeline_controller_unittest.cc
@@ -47,7 +47,7 @@
                              base::Bind(&PipelineControllerTest::OnError,
                                         base::Unretained(this))) {}
 
-  ~PipelineControllerTest() override {}
+  ~PipelineControllerTest() override = default;
 
   PipelineStatusCB StartPipeline(bool is_streaming, bool is_static) {
     EXPECT_FALSE(pipeline_controller_.IsStable());
diff --git a/media/filters/source_buffer_range.cc b/media/filters/source_buffer_range.cc
index 925d48b6..6890259 100644
--- a/media/filters/source_buffer_range.cc
+++ b/media/filters/source_buffer_range.cc
@@ -25,7 +25,7 @@
   DCHECK(!interbuffer_distance_cb.is_null());
 }
 
-SourceBufferRange::~SourceBufferRange() {}
+SourceBufferRange::~SourceBufferRange() = default;
 
 void SourceBufferRange::SeekToStart() {
   CHECK(!buffers_.empty());
diff --git a/media/filters/source_buffer_range_by_dts.cc b/media/filters/source_buffer_range_by_dts.cc
index a043b29..95e81f4 100644
--- a/media/filters/source_buffer_range_by_dts.cc
+++ b/media/filters/source_buffer_range_by_dts.cc
@@ -37,7 +37,7 @@
   AppendBuffersToEnd(new_buffers, range_start_decode_time_);
 }
 
-SourceBufferRangeByDts::~SourceBufferRangeByDts() {}
+SourceBufferRangeByDts::~SourceBufferRangeByDts() = default;
 
 void SourceBufferRangeByDts::AppendRangeToEnd(
     const SourceBufferRangeByDts& range,
diff --git a/media/filters/source_buffer_range_by_pts.cc b/media/filters/source_buffer_range_by_pts.cc
index 61b410f..ab854d9 100644
--- a/media/filters/source_buffer_range_by_pts.cc
+++ b/media/filters/source_buffer_range_by_pts.cc
@@ -28,7 +28,7 @@
   AppendBuffersToEnd(new_buffers, range_start_pts_);
 }
 
-SourceBufferRangeByPts::~SourceBufferRangeByPts() {}
+SourceBufferRangeByPts::~SourceBufferRangeByPts() = default;
 
 void SourceBufferRangeByPts::DeleteAll(BufferQueue* deleted_buffers) {
   DVLOG(1) << __func__;
diff --git a/media/filters/source_buffer_stream.cc b/media/filters/source_buffer_stream.cc
index 9e99312..5d50b25 100644
--- a/media/filters/source_buffer_stream.cc
+++ b/media/filters/source_buffer_stream.cc
@@ -231,7 +231,7 @@
       memory_limit_(kDemuxerStreamAudioMemoryLimit) {}
 
 template <typename RangeClass>
-SourceBufferStream<RangeClass>::~SourceBufferStream() {}
+SourceBufferStream<RangeClass>::~SourceBufferStream() = default;
 
 template <>
 void SourceBufferStream<SourceBufferRangeByDts>::OnStartOfCodedFrameGroup(
diff --git a/media/filters/video_cadence_estimator.cc b/media/filters/video_cadence_estimator.cc
index ee8916e..550db73 100644
--- a/media/filters/video_cadence_estimator.cc
+++ b/media/filters/video_cadence_estimator.cc
@@ -80,8 +80,7 @@
   Reset();
 }
 
-VideoCadenceEstimator::~VideoCadenceEstimator() {
-}
+VideoCadenceEstimator::~VideoCadenceEstimator() = default;
 
 void VideoCadenceEstimator::Reset() {
   cadence_.clear();
diff --git a/media/filters/video_renderer_algorithm.cc b/media/filters/video_renderer_algorithm.cc
index 976151f..635292f 100644
--- a/media/filters/video_renderer_algorithm.cc
+++ b/media/filters/video_renderer_algorithm.cc
@@ -25,8 +25,7 @@
 VideoRendererAlgorithm::ReadyFrame::ReadyFrame(const ReadyFrame& other) =
     default;
 
-VideoRendererAlgorithm::ReadyFrame::~ReadyFrame() {
-}
+VideoRendererAlgorithm::ReadyFrame::~ReadyFrame() = default;
 
 bool VideoRendererAlgorithm::ReadyFrame::operator<(
     const ReadyFrame& other) const {
@@ -46,7 +45,7 @@
   Reset();
 }
 
-VideoRendererAlgorithm::~VideoRendererAlgorithm() {}
+VideoRendererAlgorithm::~VideoRendererAlgorithm() = default;
 
 scoped_refptr<VideoFrame> VideoRendererAlgorithm::Render(
     base::TimeTicks deadline_min,
diff --git a/media/filters/video_renderer_algorithm_unittest.cc b/media/filters/video_renderer_algorithm_unittest.cc
index de025f7..ea84d52 100644
--- a/media/filters/video_renderer_algorithm_unittest.cc
+++ b/media/filters/video_renderer_algorithm_unittest.cc
@@ -80,7 +80,7 @@
     tick_clock_->Advance(base::TimeDelta::FromMicroseconds(10000));
     time_source_.set_tick_clock_for_testing(tick_clock_.get());
   }
-  ~VideoRendererAlgorithmTest() override {}
+  ~VideoRendererAlgorithmTest() override = default;
 
   scoped_refptr<VideoFrame> CreateFrame(base::TimeDelta timestamp) {
     const gfx::Size natural_size(8, 8);
diff --git a/media/filters/vp8_bool_decoder_unittest.cc b/media/filters/vp8_bool_decoder_unittest.cc
index cb8d711..f1f020b0 100644
--- a/media/filters/vp8_bool_decoder_unittest.cc
+++ b/media/filters/vp8_bool_decoder_unittest.cc
@@ -37,7 +37,7 @@
 
 class Vp8BoolDecoderTest : public ::testing::Test {
  public:
-  Vp8BoolDecoderTest() {}
+  Vp8BoolDecoderTest() = default;
 
  protected:
   // Fixture member, the bool decoder to be tested.
diff --git a/media/filters/vp8_parser.cc b/media/filters/vp8_parser.cc
index 54b0c429..ea355bb 100644
--- a/media/filters/vp8_parser.cc
+++ b/media/filters/vp8_parser.cc
@@ -51,8 +51,7 @@
 Vp8Parser::Vp8Parser() : stream_(nullptr), bytes_left_(0) {
 }
 
-Vp8Parser::~Vp8Parser() {
-}
+Vp8Parser::~Vp8Parser() = default;
 
 bool Vp8Parser::ParseFrame(const uint8_t* ptr,
                            size_t frame_size,
diff --git a/media/filters/vp9_bool_decoder.cc b/media/filters/vp9_bool_decoder.cc
index e8d50b1..7700b98 100644
--- a/media/filters/vp9_bool_decoder.cc
+++ b/media/filters/vp9_bool_decoder.cc
@@ -35,9 +35,9 @@
 };
 }  // namespace
 
-Vp9BoolDecoder::Vp9BoolDecoder() {}
+Vp9BoolDecoder::Vp9BoolDecoder() = default;
 
-Vp9BoolDecoder::~Vp9BoolDecoder() {}
+Vp9BoolDecoder::~Vp9BoolDecoder() = default;
 
 // 9.2.1 Initialization process for Boolean decoder
 bool Vp9BoolDecoder::Initialize(const uint8_t* data, size_t size) {
diff --git a/media/filters/vp9_compressed_header_parser.cc b/media/filters/vp9_compressed_header_parser.cc
index 6178108..3fc72fd 100644
--- a/media/filters/vp9_compressed_header_parser.cc
+++ b/media/filters/vp9_compressed_header_parser.cc
@@ -59,7 +59,7 @@
 
 }  // namespace
 
-Vp9CompressedHeaderParser::Vp9CompressedHeaderParser() {}
+Vp9CompressedHeaderParser::Vp9CompressedHeaderParser() = default;
 
 // 6.3.1 Tx mode syntax
 void Vp9CompressedHeaderParser::ReadTxMode(Vp9FrameHeader* fhdr) {
diff --git a/media/filters/vp9_parser.cc b/media/filters/vp9_parser.cc
index 3bf7548..07f3041 100644
--- a/media/filters/vp9_parser.cc
+++ b/media/filters/vp9_parser.cc
@@ -235,7 +235,7 @@
 Vp9Parser::Context::Vp9FrameContextManager::Vp9FrameContextManager()
     : weak_ptr_factory_(this) {}
 
-Vp9Parser::Context::Vp9FrameContextManager::~Vp9FrameContextManager() {}
+Vp9Parser::Context::Vp9FrameContextManager::~Vp9FrameContextManager() = default;
 
 const Vp9FrameContext&
 Vp9Parser::Context::Vp9FrameContextManager::frame_context() const {
@@ -333,7 +333,7 @@
   Reset();
 }
 
-Vp9Parser::~Vp9Parser() {}
+Vp9Parser::~Vp9Parser() = default;
 
 void Vp9Parser::SetStream(const uint8_t* stream, off_t stream_size) {
   DCHECK(stream);
diff --git a/media/filters/vp9_raw_bits_reader.cc b/media/filters/vp9_raw_bits_reader.cc
index da9e5be4..1fc8f77 100644
--- a/media/filters/vp9_raw_bits_reader.cc
+++ b/media/filters/vp9_raw_bits_reader.cc
@@ -13,7 +13,7 @@
 
 Vp9RawBitsReader::Vp9RawBitsReader() : valid_(true) {}
 
-Vp9RawBitsReader::~Vp9RawBitsReader() {}
+Vp9RawBitsReader::~Vp9RawBitsReader() = default;
 
 void Vp9RawBitsReader::Initialize(const uint8_t* data, size_t size) {
   DCHECK(data);
diff --git a/media/formats/common/offset_byte_queue.cc b/media/formats/common/offset_byte_queue.cc
index 032ac1f2..b355e1a 100644
--- a/media/formats/common/offset_byte_queue.cc
+++ b/media/formats/common/offset_byte_queue.cc
@@ -9,7 +9,7 @@
 namespace media {
 
 OffsetByteQueue::OffsetByteQueue() : buf_(NULL), size_(0), head_(0) {}
-OffsetByteQueue::~OffsetByteQueue() {}
+OffsetByteQueue::~OffsetByteQueue() = default;
 
 void OffsetByteQueue::Reset() {
   queue_.Reset();
diff --git a/media/formats/common/stream_parser_test_base.cc b/media/formats/common/stream_parser_test_base.cc
index 026c6b9..4266592 100644
--- a/media/formats/common/stream_parser_test_base.cc
+++ b/media/formats/common/stream_parser_test_base.cc
@@ -47,7 +47,7 @@
       &media_log_);
 }
 
-StreamParserTestBase::~StreamParserTestBase() {}
+StreamParserTestBase::~StreamParserTestBase() = default;
 
 std::string StreamParserTestBase::ParseFile(const std::string& filename,
                                             int append_bytes) {
diff --git a/media/formats/mp4/aac.cc b/media/formats/mp4/aac.cc
index 9ab7cbb..6590e48 100644
--- a/media/formats/mp4/aac.cc
+++ b/media/formats/mp4/aac.cc
@@ -24,8 +24,7 @@
 
 AAC::AAC(const AAC& other) = default;
 
-AAC::~AAC() {
-}
+AAC::~AAC() = default;
 
 bool AAC::Parse(const std::vector<uint8_t>& data, MediaLog* media_log) {
 #if defined(OS_ANDROID)
diff --git a/media/formats/mp4/aac_unittest.cc b/media/formats/mp4/aac_unittest.cc
index dcf1e42..e328dc0 100644
--- a/media/formats/mp4/aac_unittest.cc
+++ b/media/formats/mp4/aac_unittest.cc
@@ -49,7 +49,7 @@
 
 class AACTest : public testing::Test {
  public:
-  AACTest() {}
+  AACTest() = default;
 
   bool Parse(const std::vector<uint8_t>& data) {
     return aac_.Parse(data, &media_log_);
diff --git a/media/formats/mp4/avc.cc b/media/formats/mp4/avc.cc
index 1e18a5e..e9cb86c6 100644
--- a/media/formats/mp4/avc.cc
+++ b/media/formats/mp4/avc.cc
@@ -319,8 +319,7 @@
 #endif  // BUILDFLAG(ENABLE_DOLBY_VISION_DEMUXING)
 }
 
-AVCBitstreamConverter::~AVCBitstreamConverter() {
-}
+AVCBitstreamConverter::~AVCBitstreamConverter() = default;
 
 bool AVCBitstreamConverter::ConvertFrame(
     std::vector<uint8_t>* frame_buf,
diff --git a/media/formats/mp4/bitstream_converter.cc b/media/formats/mp4/bitstream_converter.cc
index fc972cb..e6cd01a 100644
--- a/media/formats/mp4/bitstream_converter.cc
+++ b/media/formats/mp4/bitstream_converter.cc
@@ -7,8 +7,7 @@
 namespace media {
 namespace mp4 {
 
-BitstreamConverter::~BitstreamConverter() {
-}
+BitstreamConverter::~BitstreamConverter() = default;
 
 }  // namespace mp4
 }  // namespace media
diff --git a/media/formats/mp4/box_definitions.cc b/media/formats/mp4/box_definitions.cc
index fab76e4..ea6926ca 100644
--- a/media/formats/mp4/box_definitions.cc
+++ b/media/formats/mp4/box_definitions.cc
@@ -39,9 +39,9 @@
 
 }  // namespace
 
-FileType::FileType() {}
+FileType::FileType() = default;
 FileType::FileType(const FileType& other) = default;
-FileType::~FileType() {}
+FileType::~FileType() = default;
 FourCC FileType::BoxType() const { return FOURCC_FTYP; }
 
 bool FileType::Parse(BoxReader* reader) {
@@ -50,10 +50,10 @@
   return reader->SkipBytes(sizeof(FourCC) * num_brands);  // compatible_brands
 }
 
-ProtectionSystemSpecificHeader::ProtectionSystemSpecificHeader() {}
+ProtectionSystemSpecificHeader::ProtectionSystemSpecificHeader() = default;
 ProtectionSystemSpecificHeader::ProtectionSystemSpecificHeader(
     const ProtectionSystemSpecificHeader& other) = default;
-ProtectionSystemSpecificHeader::~ProtectionSystemSpecificHeader() {}
+ProtectionSystemSpecificHeader::~ProtectionSystemSpecificHeader() = default;
 FourCC ProtectionSystemSpecificHeader::BoxType() const { return FOURCC_PSSH; }
 
 bool ProtectionSystemSpecificHeader::Parse(BoxReader* reader) {
@@ -64,10 +64,12 @@
   return true;
 }
 
-FullProtectionSystemSpecificHeader::FullProtectionSystemSpecificHeader() {}
+FullProtectionSystemSpecificHeader::FullProtectionSystemSpecificHeader() =
+    default;
 FullProtectionSystemSpecificHeader::FullProtectionSystemSpecificHeader(
     const FullProtectionSystemSpecificHeader& other) = default;
-FullProtectionSystemSpecificHeader::~FullProtectionSystemSpecificHeader() {}
+FullProtectionSystemSpecificHeader::~FullProtectionSystemSpecificHeader() =
+    default;
 FourCC FullProtectionSystemSpecificHeader::BoxType() const {
   return FOURCC_PSSH;
 }
@@ -118,10 +120,10 @@
   return true;
 }
 
-SampleAuxiliaryInformationOffset::SampleAuxiliaryInformationOffset() {}
+SampleAuxiliaryInformationOffset::SampleAuxiliaryInformationOffset() = default;
 SampleAuxiliaryInformationOffset::SampleAuxiliaryInformationOffset(
     const SampleAuxiliaryInformationOffset& other) = default;
-SampleAuxiliaryInformationOffset::~SampleAuxiliaryInformationOffset() {}
+SampleAuxiliaryInformationOffset::~SampleAuxiliaryInformationOffset() = default;
 FourCC SampleAuxiliaryInformationOffset::BoxType() const { return FOURCC_SAIO; }
 
 bool SampleAuxiliaryInformationOffset::Parse(BoxReader* reader) {
@@ -158,7 +160,7 @@
 }
 SampleAuxiliaryInformationSize::SampleAuxiliaryInformationSize(
     const SampleAuxiliaryInformationSize& other) = default;
-SampleAuxiliaryInformationSize::~SampleAuxiliaryInformationSize() {}
+SampleAuxiliaryInformationSize::~SampleAuxiliaryInformationSize() = default;
 FourCC SampleAuxiliaryInformationSize::BoxType() const { return FOURCC_SAIZ; }
 
 bool SampleAuxiliaryInformationSize::Parse(BoxReader* reader) {
@@ -173,10 +175,10 @@
   return true;
 }
 
-SampleEncryptionEntry::SampleEncryptionEntry() {}
+SampleEncryptionEntry::SampleEncryptionEntry() = default;
 SampleEncryptionEntry::SampleEncryptionEntry(
     const SampleEncryptionEntry& other) = default;
-SampleEncryptionEntry::~SampleEncryptionEntry() {}
+SampleEncryptionEntry::~SampleEncryptionEntry() = default;
 
 bool SampleEncryptionEntry::Parse(BufferReader* reader,
                                   uint8_t iv_size,
@@ -225,7 +227,7 @@
 
 SampleEncryption::SampleEncryption() : use_subsample_encryption(false) {}
 SampleEncryption::SampleEncryption(const SampleEncryption& other) = default;
-SampleEncryption::~SampleEncryption() {}
+SampleEncryption::~SampleEncryption() = default;
 FourCC SampleEncryption::BoxType() const {
   return FOURCC_SENC;
 }
@@ -240,7 +242,7 @@
 
 OriginalFormat::OriginalFormat() : format(FOURCC_NULL) {}
 OriginalFormat::OriginalFormat(const OriginalFormat& other) = default;
-OriginalFormat::~OriginalFormat() {}
+OriginalFormat::~OriginalFormat() = default;
 FourCC OriginalFormat::BoxType() const { return FOURCC_FRMA; }
 
 bool OriginalFormat::Parse(BoxReader* reader) {
@@ -249,7 +251,7 @@
 
 SchemeType::SchemeType() : type(FOURCC_NULL), version(0) {}
 SchemeType::SchemeType(const SchemeType& other) = default;
-SchemeType::~SchemeType() {}
+SchemeType::~SchemeType() = default;
 FourCC SchemeType::BoxType() const { return FOURCC_SCHM; }
 
 bool SchemeType::Parse(BoxReader* reader) {
@@ -271,7 +273,7 @@
 {
 }
 TrackEncryption::TrackEncryption(const TrackEncryption& other) = default;
-TrackEncryption::~TrackEncryption() {}
+TrackEncryption::~TrackEncryption() = default;
 FourCC TrackEncryption::BoxType() const { return FOURCC_TENC; }
 
 bool TrackEncryption::Parse(BoxReader* reader) {
@@ -307,19 +309,19 @@
   return true;
 }
 
-SchemeInfo::SchemeInfo() {}
+SchemeInfo::SchemeInfo() = default;
 SchemeInfo::SchemeInfo(const SchemeInfo& other) = default;
-SchemeInfo::~SchemeInfo() {}
+SchemeInfo::~SchemeInfo() = default;
 FourCC SchemeInfo::BoxType() const { return FOURCC_SCHI; }
 
 bool SchemeInfo::Parse(BoxReader* reader) {
   return reader->ScanChildren() && reader->ReadChild(&track_encryption);
 }
 
-ProtectionSchemeInfo::ProtectionSchemeInfo() {}
+ProtectionSchemeInfo::ProtectionSchemeInfo() = default;
 ProtectionSchemeInfo::ProtectionSchemeInfo(const ProtectionSchemeInfo& other) =
     default;
-ProtectionSchemeInfo::~ProtectionSchemeInfo() {}
+ProtectionSchemeInfo::~ProtectionSchemeInfo() = default;
 FourCC ProtectionSchemeInfo::BoxType() const { return FOURCC_SINF; }
 
 bool ProtectionSchemeInfo::Parse(BoxReader* reader) {
@@ -356,7 +358,7 @@
       volume(-1),
       next_track_id(0) {}
 MovieHeader::MovieHeader(const MovieHeader& other) = default;
-MovieHeader::~MovieHeader() {}
+MovieHeader::~MovieHeader() = default;
 FourCC MovieHeader::BoxType() const { return FOURCC_MVHD; }
 
 bool MovieHeader::Parse(BoxReader* reader) {
@@ -398,7 +400,7 @@
       width(0),
       height(0) {}
 TrackHeader::TrackHeader(const TrackHeader& other) = default;
-TrackHeader::~TrackHeader() {}
+TrackHeader::~TrackHeader() = default;
 FourCC TrackHeader::BoxType() const { return FOURCC_TKHD; }
 
 bool TrackHeader::Parse(BoxReader* reader) {
@@ -441,7 +443,7 @@
 
 SampleDescription::SampleDescription() : type(kInvalid) {}
 SampleDescription::SampleDescription(const SampleDescription& other) = default;
-SampleDescription::~SampleDescription() {}
+SampleDescription::~SampleDescription() = default;
 FourCC SampleDescription::BoxType() const { return FOURCC_STSD; }
 
 bool SampleDescription::Parse(BoxReader* reader) {
@@ -461,10 +463,10 @@
   return true;
 }
 
-SampleTable::SampleTable() {}
+SampleTable::SampleTable() = default;
 SampleTable::SampleTable(const SampleTable& other) = default;
 
-SampleTable::~SampleTable() {}
+SampleTable::~SampleTable() = default;
 FourCC SampleTable::BoxType() const { return FOURCC_STBL; }
 
 bool SampleTable::Parse(BoxReader* reader) {
@@ -483,9 +485,9 @@
   return true;
 }
 
-EditList::EditList() {}
+EditList::EditList() = default;
 EditList::EditList(const EditList& other) = default;
-EditList::~EditList() {}
+EditList::~EditList() = default;
 FourCC EditList::BoxType() const { return FOURCC_ELST; }
 
 bool EditList::Parse(BoxReader* reader) {
@@ -519,9 +521,9 @@
   return true;
 }
 
-Edit::Edit() {}
+Edit::Edit() = default;
 Edit::Edit(const Edit& other) = default;
-Edit::~Edit() {}
+Edit::~Edit() = default;
 FourCC Edit::BoxType() const { return FOURCC_EDTS; }
 
 bool Edit::Parse(BoxReader* reader) {
@@ -530,7 +532,7 @@
 
 HandlerReference::HandlerReference() : type(kInvalid) {}
 HandlerReference::HandlerReference(const HandlerReference& other) = default;
-HandlerReference::~HandlerReference() {}
+HandlerReference::~HandlerReference() = default;
 FourCC HandlerReference::BoxType() const { return FOURCC_HDLR; }
 
 bool HandlerReference::Parse(BoxReader* reader) {
@@ -583,7 +585,7 @@
       length_size(0) {}
 AVCDecoderConfigurationRecord::AVCDecoderConfigurationRecord(
     const AVCDecoderConfigurationRecord& other) = default;
-AVCDecoderConfigurationRecord::~AVCDecoderConfigurationRecord() {}
+AVCDecoderConfigurationRecord::~AVCDecoderConfigurationRecord() = default;
 FourCC AVCDecoderConfigurationRecord::BoxType() const { return FOURCC_AVCC; }
 
 bool AVCDecoderConfigurationRecord::Parse(BoxReader* reader) {
@@ -641,7 +643,7 @@
 VPCodecConfigurationRecord::VPCodecConfigurationRecord(
     const VPCodecConfigurationRecord& other) = default;
 
-VPCodecConfigurationRecord::~VPCodecConfigurationRecord() {}
+VPCodecConfigurationRecord::~VPCodecConfigurationRecord() = default;
 
 FourCC VPCodecConfigurationRecord::BoxType() const {
   return FOURCC_VPCC;
@@ -677,7 +679,7 @@
 PixelAspectRatioBox::PixelAspectRatioBox() : h_spacing(1), v_spacing(1) {}
 PixelAspectRatioBox::PixelAspectRatioBox(const PixelAspectRatioBox& other) =
     default;
-PixelAspectRatioBox::~PixelAspectRatioBox() {}
+PixelAspectRatioBox::~PixelAspectRatioBox() = default;
 FourCC PixelAspectRatioBox::BoxType() const { return FOURCC_PASP; }
 
 bool PixelAspectRatioBox::Parse(BoxReader* reader) {
@@ -696,7 +698,7 @@
 
 VideoSampleEntry::VideoSampleEntry(const VideoSampleEntry& other) = default;
 
-VideoSampleEntry::~VideoSampleEntry() {}
+VideoSampleEntry::~VideoSampleEntry() = default;
 FourCC VideoSampleEntry::BoxType() const {
   DCHECK(false) << "VideoSampleEntry should be parsed according to the "
                 << "handler type recovered in its Media ancestor.";
@@ -884,7 +886,7 @@
 ElementaryStreamDescriptor::ElementaryStreamDescriptor(
     const ElementaryStreamDescriptor& other) = default;
 
-ElementaryStreamDescriptor::~ElementaryStreamDescriptor() {}
+ElementaryStreamDescriptor::~ElementaryStreamDescriptor() = default;
 
 FourCC ElementaryStreamDescriptor::BoxType() const {
   return FOURCC_ESDS;
@@ -911,7 +913,7 @@
 
 FlacSpecificBox::FlacSpecificBox(const FlacSpecificBox& other) = default;
 
-FlacSpecificBox::~FlacSpecificBox() {}
+FlacSpecificBox::~FlacSpecificBox() = default;
 
 FourCC FlacSpecificBox::BoxType() const {
   return FOURCC_DFLA;
@@ -982,7 +984,7 @@
 
 AudioSampleEntry::AudioSampleEntry(const AudioSampleEntry& other) = default;
 
-AudioSampleEntry::~AudioSampleEntry() {}
+AudioSampleEntry::~AudioSampleEntry() = default;
 
 FourCC AudioSampleEntry::BoxType() const {
   DCHECK(false) << "AudioSampleEntry should be parsed according to the "
@@ -1059,7 +1061,7 @@
       duration(0),
       language_code(0) {}
 MediaHeader::MediaHeader(const MediaHeader& other) = default;
-MediaHeader::~MediaHeader() {}
+MediaHeader::~MediaHeader() = default;
 FourCC MediaHeader::BoxType() const { return FOURCC_MDHD; }
 
 bool MediaHeader::Parse(BoxReader* reader) {
@@ -1109,9 +1111,9 @@
   return lang_chars;
 }
 
-MediaInformation::MediaInformation() {}
+MediaInformation::MediaInformation() = default;
 MediaInformation::MediaInformation(const MediaInformation& other) = default;
-MediaInformation::~MediaInformation() {}
+MediaInformation::~MediaInformation() = default;
 FourCC MediaInformation::BoxType() const { return FOURCC_MINF; }
 
 bool MediaInformation::Parse(BoxReader* reader) {
@@ -1119,9 +1121,9 @@
          reader->ReadChild(&sample_table);
 }
 
-Media::Media() {}
+Media::Media() = default;
 Media::Media(const Media& other) = default;
-Media::~Media() {}
+Media::~Media() = default;
 FourCC Media::BoxType() const { return FOURCC_MDIA; }
 
 bool Media::Parse(BoxReader* reader) {
@@ -1140,9 +1142,9 @@
   return true;
 }
 
-Track::Track() {}
+Track::Track() = default;
 Track::Track(const Track& other) = default;
-Track::~Track() {}
+Track::~Track() = default;
 FourCC Track::BoxType() const { return FOURCC_TRAK; }
 
 bool Track::Parse(BoxReader* reader) {
@@ -1156,7 +1158,7 @@
 MovieExtendsHeader::MovieExtendsHeader() : fragment_duration(0) {}
 MovieExtendsHeader::MovieExtendsHeader(const MovieExtendsHeader& other) =
     default;
-MovieExtendsHeader::~MovieExtendsHeader() {}
+MovieExtendsHeader::~MovieExtendsHeader() = default;
 FourCC MovieExtendsHeader::BoxType() const { return FOURCC_MEHD; }
 
 bool MovieExtendsHeader::Parse(BoxReader* reader) {
@@ -1176,7 +1178,7 @@
       default_sample_size(0),
       default_sample_flags(0) {}
 TrackExtends::TrackExtends(const TrackExtends& other) = default;
-TrackExtends::~TrackExtends() {}
+TrackExtends::~TrackExtends() = default;
 FourCC TrackExtends::BoxType() const { return FOURCC_TREX; }
 
 bool TrackExtends::Parse(BoxReader* reader) {
@@ -1189,9 +1191,9 @@
   return true;
 }
 
-MovieExtends::MovieExtends() {}
+MovieExtends::MovieExtends() = default;
 MovieExtends::MovieExtends(const MovieExtends& other) = default;
-MovieExtends::~MovieExtends() {}
+MovieExtends::~MovieExtends() = default;
 FourCC MovieExtends::BoxType() const { return FOURCC_MVEX; }
 
 bool MovieExtends::Parse(BoxReader* reader) {
@@ -1203,7 +1205,7 @@
 
 Movie::Movie() : fragmented(false) {}
 Movie::Movie(const Movie& other) = default;
-Movie::~Movie() {}
+Movie::~Movie() = default;
 FourCC Movie::BoxType() const { return FOURCC_MOOV; }
 
 bool Movie::Parse(BoxReader* reader) {
@@ -1221,7 +1223,7 @@
 TrackFragmentDecodeTime::TrackFragmentDecodeTime() : decode_time(0) {}
 TrackFragmentDecodeTime::TrackFragmentDecodeTime(
     const TrackFragmentDecodeTime& other) = default;
-TrackFragmentDecodeTime::~TrackFragmentDecodeTime() {}
+TrackFragmentDecodeTime::~TrackFragmentDecodeTime() = default;
 FourCC TrackFragmentDecodeTime::BoxType() const { return FOURCC_TFDT; }
 
 bool TrackFragmentDecodeTime::Parse(BoxReader* reader) {
@@ -1235,7 +1237,7 @@
 MovieFragmentHeader::MovieFragmentHeader() : sequence_number(0) {}
 MovieFragmentHeader::MovieFragmentHeader(const MovieFragmentHeader& other) =
     default;
-MovieFragmentHeader::~MovieFragmentHeader() {}
+MovieFragmentHeader::~MovieFragmentHeader() = default;
 FourCC MovieFragmentHeader::BoxType() const { return FOURCC_MFHD; }
 
 bool MovieFragmentHeader::Parse(BoxReader* reader) {
@@ -1252,7 +1254,7 @@
 
 TrackFragmentHeader::TrackFragmentHeader(const TrackFragmentHeader& other) =
     default;
-TrackFragmentHeader::~TrackFragmentHeader() {}
+TrackFragmentHeader::~TrackFragmentHeader() = default;
 FourCC TrackFragmentHeader::BoxType() const { return FOURCC_TFHD; }
 
 bool TrackFragmentHeader::Parse(BoxReader* reader) {
@@ -1300,7 +1302,7 @@
 TrackFragmentRun::TrackFragmentRun()
     : sample_count(0), data_offset(0) {}
 TrackFragmentRun::TrackFragmentRun(const TrackFragmentRun& other) = default;
-TrackFragmentRun::~TrackFragmentRun() {}
+TrackFragmentRun::~TrackFragmentRun() = default;
 FourCC TrackFragmentRun::BoxType() const { return FOURCC_TRUN; }
 
 bool TrackFragmentRun::Parse(BoxReader* reader) {
@@ -1378,7 +1380,7 @@
 
 SampleToGroup::SampleToGroup() : grouping_type(0), grouping_type_parameter(0) {}
 SampleToGroup::SampleToGroup(const SampleToGroup& other) = default;
-SampleToGroup::~SampleToGroup() {}
+SampleToGroup::~SampleToGroup() = default;
 FourCC SampleToGroup::BoxType() const { return FOURCC_SBGP; }
 
 bool SampleToGroup::Parse(BoxReader* reader) {
@@ -1427,7 +1429,7 @@
 }
 CencSampleEncryptionInfoEntry::CencSampleEncryptionInfoEntry(
     const CencSampleEncryptionInfoEntry& other) = default;
-CencSampleEncryptionInfoEntry::~CencSampleEncryptionInfoEntry() {}
+CencSampleEncryptionInfoEntry::~CencSampleEncryptionInfoEntry() = default;
 
 bool CencSampleEncryptionInfoEntry::Parse(BoxReader* reader) {
   uint8_t flag;
@@ -1462,7 +1464,7 @@
 SampleGroupDescription::SampleGroupDescription() : grouping_type(0) {}
 SampleGroupDescription::SampleGroupDescription(
     const SampleGroupDescription& other) = default;
-SampleGroupDescription::~SampleGroupDescription() {}
+SampleGroupDescription::~SampleGroupDescription() = default;
 FourCC SampleGroupDescription::BoxType() const { return FOURCC_SGPD; }
 
 bool SampleGroupDescription::Parse(BoxReader* reader) {
@@ -1513,9 +1515,9 @@
   return true;
 }
 
-TrackFragment::TrackFragment() {}
+TrackFragment::TrackFragment() = default;
 TrackFragment::TrackFragment(const TrackFragment& other) = default;
-TrackFragment::~TrackFragment() {}
+TrackFragment::~TrackFragment() = default;
 FourCC TrackFragment::BoxType() const { return FOURCC_TRAF; }
 
 bool TrackFragment::Parse(BoxReader* reader) {
@@ -1546,9 +1548,9 @@
   return true;
 }
 
-MovieFragment::MovieFragment() {}
+MovieFragment::MovieFragment() = default;
 MovieFragment::MovieFragment(const MovieFragment& other) = default;
-MovieFragment::~MovieFragment() {}
+MovieFragment::~MovieFragment() = default;
 FourCC MovieFragment::BoxType() const { return FOURCC_MOOF; }
 
 bool MovieFragment::Parse(BoxReader* reader) {
@@ -1559,10 +1561,10 @@
   return true;
 }
 
-IndependentAndDisposableSamples::IndependentAndDisposableSamples() {}
+IndependentAndDisposableSamples::IndependentAndDisposableSamples() = default;
 IndependentAndDisposableSamples::IndependentAndDisposableSamples(
     const IndependentAndDisposableSamples& other) = default;
-IndependentAndDisposableSamples::~IndependentAndDisposableSamples() {}
+IndependentAndDisposableSamples::~IndependentAndDisposableSamples() = default;
 FourCC IndependentAndDisposableSamples::BoxType() const { return FOURCC_SDTP; }
 
 bool IndependentAndDisposableSamples::Parse(BoxReader* reader) {
diff --git a/media/formats/mp4/box_reader.cc b/media/formats/mp4/box_reader.cc
index e281daf..bf7e265 100644
--- a/media/formats/mp4/box_reader.cc
+++ b/media/formats/mp4/box_reader.cc
@@ -15,7 +15,7 @@
 namespace media {
 namespace mp4 {
 
-Box::~Box() {}
+Box::~Box() = default;
 
 bool BufferReader::Read1(uint8_t* v) {
   RCHECK(HasBytes(1));
diff --git a/media/formats/mp4/box_reader_unittest.cc b/media/formats/mp4/box_reader_unittest.cc
index 018f430..948845f 100644
--- a/media/formats/mp4/box_reader_unittest.cc
+++ b/media/formats/mp4/box_reader_unittest.cc
@@ -79,12 +79,12 @@
   ~SkipBox() override;
 };
 
-SkipBox::SkipBox() {}
-SkipBox::~SkipBox() {}
+SkipBox::SkipBox() = default;
+SkipBox::~SkipBox() = default;
 
 class BoxReaderTest : public testing::Test {
  public:
-  BoxReaderTest() {}
+  BoxReaderTest() = default;
 
  protected:
   std::vector<uint8_t> GetBuf() {
diff --git a/media/formats/mp4/es_descriptor.cc b/media/formats/mp4/es_descriptor.cc
index 9fde9c2..08223d0 100644
--- a/media/formats/mp4/es_descriptor.cc
+++ b/media/formats/mp4/es_descriptor.cc
@@ -42,7 +42,7 @@
     : object_type_(kForbidden) {
 }
 
-ESDescriptor::~ESDescriptor() {}
+ESDescriptor::~ESDescriptor() = default;
 
 bool ESDescriptor::Parse(const std::vector<uint8_t>& data) {
   BitReader reader(&data[0], data.size());
diff --git a/media/formats/mp4/mp4_box_reader_fuzzer.cc b/media/formats/mp4/mp4_box_reader_fuzzer.cc
index 7cafff5d..f8c71b5 100644
--- a/media/formats/mp4/mp4_box_reader_fuzzer.cc
+++ b/media/formats/mp4/mp4_box_reader_fuzzer.cc
@@ -14,8 +14,8 @@
 
 class NullMediaLog : public media::MediaLog {
  public:
-  NullMediaLog() {}
-  ~NullMediaLog() override {}
+  NullMediaLog() = default;
+  ~NullMediaLog() override = default;
 
   void AddEvent(std::unique_ptr<media::MediaLogEvent> event) override {}
 
diff --git a/media/formats/mp4/mp4_stream_parser.cc b/media/formats/mp4/mp4_stream_parser.cc
index 5d8e0ae..d93cebc 100644
--- a/media/formats/mp4/mp4_stream_parser.cc
+++ b/media/formats/mp4/mp4_stream_parser.cc
@@ -92,7 +92,7 @@
   DCHECK(!has_flac || base::FeatureList::IsEnabled(kMseFlacInIsobmff));
 }
 
-MP4StreamParser::~MP4StreamParser() {}
+MP4StreamParser::~MP4StreamParser() = default;
 
 void MP4StreamParser::Init(
     const InitCB& init_cb,
diff --git a/media/formats/mp4/sample_to_group_iterator.cc b/media/formats/mp4/sample_to_group_iterator.cc
index 01c70729..f5ce394 100644
--- a/media/formats/mp4/sample_to_group_iterator.cc
+++ b/media/formats/mp4/sample_to_group_iterator.cc
@@ -23,7 +23,7 @@
   }
 }
 
-SampleToGroupIterator::~SampleToGroupIterator() {}
+SampleToGroupIterator::~SampleToGroupIterator() = default;
 
 bool SampleToGroupIterator::Advance() {
   DCHECK(IsValid());
diff --git a/media/formats/mp4/track_run_iterator.cc b/media/formats/mp4/track_run_iterator.cc
index 88e59b3..3472487 100644
--- a/media/formats/mp4/track_run_iterator.cc
+++ b/media/formats/mp4/track_run_iterator.cc
@@ -68,7 +68,7 @@
       aux_info_default_size(-1),
       aux_info_total_size(-1) {
 }
-TrackRunInfo::~TrackRunInfo() {}
+TrackRunInfo::~TrackRunInfo() = default;
 
 base::TimeDelta TimeDeltaFromRational(int64_t numer, int64_t denom) {
   // TODO(sandersd): Change all callers to pass a |denom| as a uint32_t. This is
@@ -118,7 +118,7 @@
   CHECK(moov);
 }
 
-TrackRunIterator::~TrackRunIterator() {}
+TrackRunIterator::~TrackRunIterator() = default;
 
 static std::string HexFlags(uint32_t flags) {
   std::stringstream stream;
diff --git a/media/formats/mpeg/adts_stream_parser.cc b/media/formats/mpeg/adts_stream_parser.cc
index d80a1843..c629ab6 100644
--- a/media/formats/mpeg/adts_stream_parser.cc
+++ b/media/formats/mpeg/adts_stream_parser.cc
@@ -18,7 +18,7 @@
 ADTSStreamParser::ADTSStreamParser()
     : MPEGAudioStreamParserBase(kADTSStartCodeMask, kCodecAAC, 0) {}
 
-ADTSStreamParser::~ADTSStreamParser() {}
+ADTSStreamParser::~ADTSStreamParser() = default;
 
 int ADTSStreamParser::ParseFrameHeader(const uint8_t* data,
                                        int size,
diff --git a/media/formats/mpeg/mpeg1_audio_stream_parser.cc b/media/formats/mpeg/mpeg1_audio_stream_parser.cc
index 843b3ad..6b83096 100644
--- a/media/formats/mpeg/mpeg1_audio_stream_parser.cc
+++ b/media/formats/mpeg/mpeg1_audio_stream_parser.cc
@@ -220,7 +220,7 @@
 MPEG1AudioStreamParser::MPEG1AudioStreamParser()
     : MPEGAudioStreamParserBase(kMPEG1StartCodeMask, kCodecMP3, kCodecDelay) {}
 
-MPEG1AudioStreamParser::~MPEG1AudioStreamParser() {}
+MPEG1AudioStreamParser::~MPEG1AudioStreamParser() = default;
 
 int MPEG1AudioStreamParser::ParseFrameHeader(
     const uint8_t* data,
diff --git a/media/formats/mpeg/mpeg_audio_stream_parser_base.cc b/media/formats/mpeg/mpeg_audio_stream_parser_base.cc
index 20eacf26..80be6da 100644
--- a/media/formats/mpeg/mpeg_audio_stream_parser_base.cc
+++ b/media/formats/mpeg/mpeg_audio_stream_parser_base.cc
@@ -60,7 +60,7 @@
       audio_codec_(audio_codec),
       codec_delay_(codec_delay) {}
 
-MPEGAudioStreamParserBase::~MPEGAudioStreamParserBase() {}
+MPEGAudioStreamParserBase::~MPEGAudioStreamParserBase() = default;
 
 void MPEGAudioStreamParserBase::Init(
     const InitCB& init_cb,
diff --git a/media/formats/webm/cluster_builder.cc b/media/formats/webm/cluster_builder.cc
index 5ec7a3a..b80be28 100644
--- a/media/formats/webm/cluster_builder.cc
+++ b/media/formats/webm/cluster_builder.cc
@@ -64,10 +64,10 @@
 
 Cluster::Cluster(std::unique_ptr<uint8_t[]> data, int size)
     : data_(std::move(data)), size_(size) {}
-Cluster::~Cluster() {}
+Cluster::~Cluster() = default;
 
 ClusterBuilder::ClusterBuilder() { Reset(); }
-ClusterBuilder::~ClusterBuilder() {}
+ClusterBuilder::~ClusterBuilder() = default;
 
 void ClusterBuilder::SetClusterTimecode(int64_t cluster_timecode) {
   DCHECK_EQ(cluster_timecode_, -1);
diff --git a/media/formats/webm/opus_packet_builder.cc b/media/formats/webm/opus_packet_builder.cc
index aa5fa7ad..90b9f2d 100644
--- a/media/formats/webm/opus_packet_builder.cc
+++ b/media/formats/webm/opus_packet_builder.cc
@@ -49,8 +49,7 @@
   data_.push_back(static_cast<uint8_t>(0));
 }
 
-OpusPacket::~OpusPacket() {
-}
+OpusPacket::~OpusPacket() = default;
 
 const uint8_t* OpusPacket::data() const {
   return &(data_[0]);
diff --git a/media/formats/webm/tracks_builder.cc b/media/formats/webm/tracks_builder.cc
index 458f522..7549e12 100644
--- a/media/formats/webm/tracks_builder.cc
+++ b/media/formats/webm/tracks_builder.cc
@@ -152,7 +152,7 @@
     : allow_invalid_values_(allow_invalid_values) {}
 TracksBuilder::TracksBuilder()
     : allow_invalid_values_(false) {}
-TracksBuilder::~TracksBuilder() {}
+TracksBuilder::~TracksBuilder() = default;
 
 void TracksBuilder::AddVideoTrack(int track_num,
                                   uint64_t track_uid,
diff --git a/media/formats/webm/webm_audio_client.cc b/media/formats/webm/webm_audio_client.cc
index caec868c..6eff0dd 100644
--- a/media/formats/webm/webm_audio_client.cc
+++ b/media/formats/webm/webm_audio_client.cc
@@ -14,8 +14,7 @@
   Reset();
 }
 
-WebMAudioClient::~WebMAudioClient() {
-}
+WebMAudioClient::~WebMAudioClient() = default;
 
 void WebMAudioClient::Reset() {
   channels_ = -1;
diff --git a/media/formats/webm/webm_cluster_parser.cc b/media/formats/webm/webm_cluster_parser.cc
index b9b3412..583f188 100644
--- a/media/formats/webm/webm_cluster_parser.cc
+++ b/media/formats/webm/webm_cluster_parser.cc
@@ -66,7 +66,7 @@
   }
 }
 
-WebMClusterParser::~WebMClusterParser() {}
+WebMClusterParser::~WebMClusterParser() = default;
 
 void WebMClusterParser::Reset() {
   last_block_timecode_ = -1;
@@ -630,7 +630,7 @@
 
 WebMClusterParser::Track::Track(const Track& other) = default;
 
-WebMClusterParser::Track::~Track() {}
+WebMClusterParser::Track::~Track() = default;
 
 DecodeTimestamp WebMClusterParser::Track::GetReadyUpperBound() {
   DCHECK(ready_buffers_.empty());
diff --git a/media/formats/webm/webm_colour_parser.cc b/media/formats/webm/webm_colour_parser.cc
index e2f108c..908d31a 100644
--- a/media/formats/webm/webm_colour_parser.cc
+++ b/media/formats/webm/webm_colour_parser.cc
@@ -254,11 +254,11 @@
 
 // ---- End copy/paste from libwebm/webm_parser/include/webm/dom_types.h ----
 
-WebMColorMetadata::WebMColorMetadata() {}
+WebMColorMetadata::WebMColorMetadata() = default;
 WebMColorMetadata::WebMColorMetadata(const WebMColorMetadata& rhs) = default;
 
-WebMMasteringMetadataParser::WebMMasteringMetadataParser() {}
-WebMMasteringMetadataParser::~WebMMasteringMetadataParser() {}
+WebMMasteringMetadataParser::WebMMasteringMetadataParser() = default;
+WebMMasteringMetadataParser::~WebMMasteringMetadataParser() = default;
 
 bool WebMMasteringMetadataParser::OnFloat(int id, double val) {
   switch (id) {
@@ -303,7 +303,7 @@
   Reset();
 }
 
-WebMColourParser::~WebMColourParser() {}
+WebMColourParser::~WebMColourParser() = default;
 
 void WebMColourParser::Reset() {
   matrix_coefficients_ = -1;
diff --git a/media/formats/webm/webm_content_encodings.cc b/media/formats/webm/webm_content_encodings.cc
index 440dcce..9a03ea1 100644
--- a/media/formats/webm/webm_content_encodings.cc
+++ b/media/formats/webm/webm_content_encodings.cc
@@ -15,7 +15,7 @@
       cipher_mode_(kCipherModeInvalid) {
 }
 
-ContentEncoding::~ContentEncoding() {}
+ContentEncoding::~ContentEncoding() = default;
 
 void ContentEncoding::SetEncryptionKeyId(const uint8_t* encryption_key_id,
                                          int size) {
diff --git a/media/formats/webm/webm_content_encodings_client.cc b/media/formats/webm/webm_content_encodings_client.cc
index 105a4918..35749ebb4 100644
--- a/media/formats/webm/webm_content_encodings_client.cc
+++ b/media/formats/webm/webm_content_encodings_client.cc
@@ -14,8 +14,7 @@
       content_encryption_encountered_(false),
       content_encodings_ready_(false) {}
 
-WebMContentEncodingsClient::~WebMContentEncodingsClient() {
-}
+WebMContentEncodingsClient::~WebMContentEncodingsClient() = default;
 
 const ContentEncodings& WebMContentEncodingsClient::content_encodings() const {
   DCHECK(content_encodings_ready_);
diff --git a/media/formats/webm/webm_info_parser.cc b/media/formats/webm/webm_info_parser.cc
index 1e13ef7..c8d6b7a8b 100644
--- a/media/formats/webm/webm_info_parser.cc
+++ b/media/formats/webm/webm_info_parser.cc
@@ -18,7 +18,7 @@
       duration_(-1) {
 }
 
-WebMInfoParser::~WebMInfoParser() {}
+WebMInfoParser::~WebMInfoParser() = default;
 
 int WebMInfoParser::Parse(const uint8_t* buf, int size) {
   timecode_scale_ = -1;
diff --git a/media/formats/webm/webm_parser.cc b/media/formats/webm/webm_parser.cc
index 8ee800cc..fe6b72f 100644
--- a/media/formats/webm/webm_parser.cc
+++ b/media/formats/webm/webm_parser.cc
@@ -697,8 +697,8 @@
   return result;
 }
 
-WebMParserClient::WebMParserClient() {}
-WebMParserClient::~WebMParserClient() {}
+WebMParserClient::WebMParserClient() = default;
+WebMParserClient::~WebMParserClient() = default;
 
 WebMParserClient* WebMParserClient::OnListStart(int id) {
   DVLOG(1) << "Unexpected list element start with ID " << std::hex << id;
@@ -739,7 +739,7 @@
   DCHECK(client);
 }
 
-WebMListParser::~WebMListParser() {}
+WebMListParser::~WebMListParser() = default;
 
 void WebMListParser::Reset() {
   ChangeState(NEED_LIST_HEADER);
diff --git a/media/formats/webm/webm_parser_unittest.cc b/media/formats/webm/webm_parser_unittest.cc
index 6440aee7..b24fb48 100644
--- a/media/formats/webm/webm_parser_unittest.cc
+++ b/media/formats/webm/webm_parser_unittest.cc
@@ -27,7 +27,7 @@
 
 class MockWebMParserClient : public WebMParserClient {
  public:
-  virtual ~MockWebMParserClient() {}
+  virtual ~MockWebMParserClient() = default;
 
   // WebMParserClient methods.
   MOCK_METHOD1(OnListStart, WebMParserClient*(int));
diff --git a/media/formats/webm/webm_stream_parser.cc b/media/formats/webm/webm_stream_parser.cc
index 99b5321..e398713 100644
--- a/media/formats/webm/webm_stream_parser.cc
+++ b/media/formats/webm/webm_stream_parser.cc
@@ -27,8 +27,7 @@
       unknown_segment_size_(false) {
 }
 
-WebMStreamParser::~WebMStreamParser() {
-}
+WebMStreamParser::~WebMStreamParser() = default;
 
 void WebMStreamParser::Init(
     const InitCB& init_cb,
diff --git a/media/formats/webm/webm_stream_parser_unittest.cc b/media/formats/webm/webm_stream_parser_unittest.cc
index b1d3eaa..c009bb08 100644
--- a/media/formats/webm/webm_stream_parser_unittest.cc
+++ b/media/formats/webm/webm_stream_parser_unittest.cc
@@ -23,7 +23,7 @@
 
 class WebMStreamParserTest : public testing::Test {
  public:
-  WebMStreamParserTest() {}
+  WebMStreamParserTest() = default;
 
  protected:
   void ParseWebMFile(const std::string& filename,
diff --git a/media/formats/webm/webm_tracks_parser.cc b/media/formats/webm/webm_tracks_parser.cc
index d93809aa..2379ac5 100644
--- a/media/formats/webm/webm_tracks_parser.cc
+++ b/media/formats/webm/webm_tracks_parser.cc
@@ -53,7 +53,7 @@
   Reset();
 }
 
-WebMTracksParser::~WebMTracksParser() {}
+WebMTracksParser::~WebMTracksParser() = default;
 
 void WebMTracksParser::Reset() {
   ResetTrackEntry();
diff --git a/media/formats/webm/webm_tracks_parser_unittest.cc b/media/formats/webm/webm_tracks_parser_unittest.cc
index 9f7ab7fb..2d5c63e7 100644
--- a/media/formats/webm/webm_tracks_parser_unittest.cc
+++ b/media/formats/webm/webm_tracks_parser_unittest.cc
@@ -30,7 +30,7 @@
 
 class WebMTracksParserTest : public testing::Test {
  public:
-  WebMTracksParserTest() {}
+  WebMTracksParserTest() = default;
 
  protected:
   void VerifyTextTrackInfo(const uint8_t* buffer,
diff --git a/media/formats/webm/webm_video_client.cc b/media/formats/webm/webm_video_client.cc
index 5950f95..bcd420a 100644
--- a/media/formats/webm/webm_video_client.cc
+++ b/media/formats/webm/webm_video_client.cc
@@ -33,7 +33,7 @@
   Reset();
 }
 
-WebMVideoClient::~WebMVideoClient() {}
+WebMVideoClient::~WebMVideoClient() = default;
 
 void WebMVideoClient::Reset() {
   pixel_width_ = -1;
diff --git a/media/formats/webm/webm_webvtt_parser_unittest.cc b/media/formats/webm/webm_webvtt_parser_unittest.cc
index 5ce3e180..6d1fef7 100644
--- a/media/formats/webm/webm_webvtt_parser_unittest.cc
+++ b/media/formats/webm/webm_webvtt_parser_unittest.cc
@@ -32,7 +32,7 @@
 
 class WebMWebVTTParserTest : public testing::Test {
  public:
-  WebMWebVTTParserTest() {}
+  WebMWebVTTParserTest() = default;
 };
 
 TEST_F(WebMWebVTTParserTest, Blank) {
diff --git a/media/gpu/fake_video_decode_accelerator.cc b/media/gpu/fake_video_decode_accelerator.cc
index f4386c6a..39973f7 100644
--- a/media/gpu/fake_video_decode_accelerator.cc
+++ b/media/gpu/fake_video_decode_accelerator.cc
@@ -40,7 +40,7 @@
       flushing_(false),
       weak_this_factory_(this) {}
 
-FakeVideoDecodeAccelerator::~FakeVideoDecodeAccelerator() {}
+FakeVideoDecodeAccelerator::~FakeVideoDecodeAccelerator() = default;
 
 bool FakeVideoDecodeAccelerator::Initialize(const Config& config,
                                             Client* client) {
diff --git a/media/gpu/gpu_video_decode_accelerator_factory.cc b/media/gpu/gpu_video_decode_accelerator_factory.cc
index 2cee490..378cd052 100644
--- a/media/gpu/gpu_video_decode_accelerator_factory.cc
+++ b/media/gpu/gpu_video_decode_accelerator_factory.cc
@@ -277,6 +277,6 @@
       get_gles2_decoder_cb_(get_gles2_decoder_cb),
       overlay_factory_cb_(overlay_factory_cb) {}
 
-GpuVideoDecodeAcceleratorFactory::~GpuVideoDecodeAcceleratorFactory() {}
+GpuVideoDecodeAcceleratorFactory::~GpuVideoDecodeAcceleratorFactory() = default;
 
 }  // namespace media
diff --git a/media/gpu/h264_decoder.cc b/media/gpu/h264_decoder.cc
index 9d94e5f..9bd6a688 100644
--- a/media/gpu/h264_decoder.cc
+++ b/media/gpu/h264_decoder.cc
@@ -16,9 +16,9 @@
 
 namespace media {
 
-H264Decoder::H264Accelerator::H264Accelerator() {}
+H264Decoder::H264Accelerator::H264Accelerator() = default;
 
-H264Decoder::H264Accelerator::~H264Accelerator() {}
+H264Decoder::H264Accelerator::~H264Accelerator() = default;
 
 H264Decoder::H264Decoder(H264Accelerator* accelerator)
     : state_(kNeedStreamMetadata),
@@ -31,7 +31,7 @@
   Reset();
 }
 
-H264Decoder::~H264Decoder() {}
+H264Decoder::~H264Decoder() = default;
 
 void H264Decoder::Reset() {
   curr_pic_ = nullptr;
diff --git a/media/gpu/h264_decoder_unittest.cc b/media/gpu/h264_decoder_unittest.cc
index 3286c757..1d1e31d 100644
--- a/media/gpu/h264_decoder_unittest.cc
+++ b/media/gpu/h264_decoder_unittest.cc
@@ -42,7 +42,7 @@
 
 class MockH264Accelerator : public H264Decoder::H264Accelerator {
  public:
-  MockH264Accelerator() {}
+  MockH264Accelerator() = default;
 
   MOCK_METHOD0(CreateH264Picture, scoped_refptr<H264Picture>());
   MOCK_METHOD1(SubmitDecode, bool(const scoped_refptr<H264Picture>& pic));
diff --git a/media/gpu/h264_dpb.cc b/media/gpu/h264_dpb.cc
index 3cc32a62..92c7c1d 100644
--- a/media/gpu/h264_dpb.cc
+++ b/media/gpu/h264_dpb.cc
@@ -44,7 +44,7 @@
   memset(&ref_pic_marking, 0, sizeof(ref_pic_marking));
 }
 
-H264Picture::~H264Picture() {}
+H264Picture::~H264Picture() = default;
 
 V4L2H264Picture* H264Picture::AsV4L2H264Picture() {
   return nullptr;
@@ -55,7 +55,7 @@
 }
 
 H264DPB::H264DPB() : max_num_pics_(0) {}
-H264DPB::~H264DPB() {}
+H264DPB::~H264DPB() = default;
 
 void H264DPB::Clear() {
   pics_.clear();
diff --git a/media/gpu/ipc/common/create_video_encoder_params.cc b/media/gpu/ipc/common/create_video_encoder_params.cc
index 11fe006..4de82bf 100644
--- a/media/gpu/ipc/common/create_video_encoder_params.cc
+++ b/media/gpu/ipc/common/create_video_encoder_params.cc
@@ -14,6 +14,6 @@
       initial_bitrate(0),
       encoder_route_id(MSG_ROUTING_NONE) {}
 
-CreateVideoEncoderParams::~CreateVideoEncoderParams() {}
+CreateVideoEncoderParams::~CreateVideoEncoderParams() = default;
 
 }  // namespace media
diff --git a/media/gpu/ipc/service/gpu_video_decode_accelerator.cc b/media/gpu/ipc/service/gpu_video_decode_accelerator.cc
index 6b65188..515e4c6 100644
--- a/media/gpu/ipc/service/gpu_video_decode_accelerator.cc
+++ b/media/gpu/ipc/service/gpu_video_decode_accelerator.cc
@@ -134,7 +134,7 @@
   }
 
  protected:
-  ~MessageFilter() override {}
+  ~MessageFilter() override = default;
 
  private:
   GpuVideoDecodeAccelerator* const owner_;
diff --git a/media/gpu/ipc/service/gpu_video_encode_accelerator.cc b/media/gpu/ipc/service/gpu_video_encode_accelerator.cc
index 998d663f..8108649 100644
--- a/media/gpu/ipc/service/gpu_video_encode_accelerator.cc
+++ b/media/gpu/ipc/service/gpu_video_encode_accelerator.cc
@@ -78,7 +78,7 @@
   }
 
  protected:
-  ~MessageFilter() override {}
+  ~MessageFilter() override = default;
 
  private:
   GpuVideoEncodeAccelerator* const owner_;
diff --git a/media/gpu/ipc/service/media_gpu_channel.cc b/media/gpu/ipc/service/media_gpu_channel.cc
index 7cbbee8..f6023c3 100644
--- a/media/gpu/ipc/service/media_gpu_channel.cc
+++ b/media/gpu/ipc/service/media_gpu_channel.cc
@@ -88,7 +88,7 @@
   channel_->AddFilter(filter_.get());
 }
 
-MediaGpuChannel::~MediaGpuChannel() {}
+MediaGpuChannel::~MediaGpuChannel() = default;
 
 bool MediaGpuChannel::Send(IPC::Message* msg) {
   return channel_->Send(msg);
diff --git a/media/gpu/ipc/service/media_gpu_channel_manager.cc b/media/gpu/ipc/service/media_gpu_channel_manager.cc
index 0a66567..ee0d616 100644
--- a/media/gpu/ipc/service/media_gpu_channel_manager.cc
+++ b/media/gpu/ipc/service/media_gpu_channel_manager.cc
@@ -21,7 +21,7 @@
     gpu::GpuChannelManager* channel_manager)
     : channel_manager_(channel_manager) {}
 
-MediaGpuChannelManager::~MediaGpuChannelManager() {}
+MediaGpuChannelManager::~MediaGpuChannelManager() = default;
 
 void MediaGpuChannelManager::AddChannel(int32_t client_id) {
   gpu::GpuChannel* gpu_channel = channel_manager_->LookupChannel(client_id);
diff --git a/media/midi/midi_manager_unittest.cc b/media/midi/midi_manager_unittest.cc
index 6280a6f..ee01bcf 100644
--- a/media/midi/midi_manager_unittest.cc
+++ b/media/midi/midi_manager_unittest.cc
@@ -33,7 +33,7 @@
       : MidiManager(service),
         start_initialization_is_called_(false),
         finalize_is_called_(false) {}
-  ~FakeMidiManager() override {}
+  ~FakeMidiManager() override = default;
 
   // MidiManager implementation.
   void StartInitialization() override {
@@ -94,7 +94,7 @@
  public:
   FakeMidiManagerClient()
       : result_(Result::NOT_SUPPORTED), wait_for_result_(true) {}
-  ~FakeMidiManagerClient() override {}
+  ~FakeMidiManagerClient() override = default;
 
   // MidiManagerClient implementation.
   void AddInputPort(const MidiPortInfo& info) override {}
diff --git a/media/midi/midi_manager_usb_unittest.cc b/media/midi/midi_manager_usb_unittest.cc
index ce3dfda..d23434e 100644
--- a/media/midi/midi_manager_usb_unittest.cc
+++ b/media/midi/midi_manager_usb_unittest.cc
@@ -33,8 +33,8 @@
 
 class Logger {
  public:
-  Logger() {}
-  ~Logger() {}
+  Logger() = default;
+  ~Logger() = default;
 
   void AddLog(const std::string& message) { log_ += message; }
   std::string TakeLog() {
@@ -52,7 +52,7 @@
 class FakeUsbMidiDevice : public UsbMidiDevice {
  public:
   explicit FakeUsbMidiDevice(Logger* logger) : logger_(logger) {}
-  ~FakeUsbMidiDevice() override {}
+  ~FakeUsbMidiDevice() override = default;
 
   std::vector<uint8_t> GetDescriptors() override {
     logger_->AddLog("UsbMidiDevice::GetDescriptors\n");
@@ -101,7 +101,7 @@
       : complete_start_session_(false),
         result_(Result::NOT_SUPPORTED),
         logger_(logger) {}
-  ~FakeMidiManagerClient() override {}
+  ~FakeMidiManagerClient() override = default;
 
   void AddInputPort(const MidiPortInfo& info) override {
     input_ports_.push_back(info);
@@ -154,8 +154,8 @@
 
 class TestUsbMidiDeviceFactory : public UsbMidiDevice::Factory {
  public:
-  TestUsbMidiDeviceFactory() {}
-  ~TestUsbMidiDeviceFactory() override {}
+  TestUsbMidiDeviceFactory() = default;
+  ~TestUsbMidiDeviceFactory() override = default;
   void EnumerateDevices(UsbMidiDeviceDelegate* device,
                         Callback callback) override {
     callback_ = std::move(callback);
@@ -173,7 +173,7 @@
       std::unique_ptr<UsbMidiDevice::Factory> device_factory,
       MidiService* service)
       : MidiManagerUsb(service, std::move(device_factory)) {}
-  ~MidiManagerUsbForTesting() override {}
+  ~MidiManagerUsbForTesting() override = default;
 
   void CallCompleteInitialization(Result result) {
     CompleteInitialization(result);
diff --git a/media/midi/midi_message_queue.cc b/media/midi/midi_message_queue.cc
index 77ea641..08501ec7 100644
--- a/media/midi/midi_message_queue.cc
+++ b/media/midi/midi_message_queue.cc
@@ -14,7 +14,7 @@
 MidiMessageQueue::MidiMessageQueue(bool allow_running_status)
     : allow_running_status_(allow_running_status) {}
 
-MidiMessageQueue::~MidiMessageQueue() {}
+MidiMessageQueue::~MidiMessageQueue() = default;
 
 void MidiMessageQueue::Add(const std::vector<uint8_t>& data) {
   queue_.insert(queue_.end(), data.begin(), data.end());
diff --git a/media/midi/midi_port_info.cc b/media/midi/midi_port_info.cc
index 90cbebf..7188346 100644
--- a/media/midi/midi_port_info.cc
+++ b/media/midi/midi_port_info.cc
@@ -8,7 +8,7 @@
 
 using mojom::PortState;
 
-MidiPortInfo::MidiPortInfo() {}
+MidiPortInfo::MidiPortInfo() = default;
 
 MidiPortInfo::MidiPortInfo(const std::string& in_id,
                            const std::string& in_manufacturer,
@@ -21,13 +21,8 @@
       version(in_version),
       state(in_state) {}
 
-MidiPortInfo::~MidiPortInfo() {}
+MidiPortInfo::~MidiPortInfo() = default;
 
-MidiPortInfo::MidiPortInfo(const MidiPortInfo& info)
-    : id(info.id),
-      manufacturer(info.manufacturer),
-      name(info.name),
-      version(info.version),
-      state(info.state) {}
+MidiPortInfo::MidiPortInfo(const MidiPortInfo& info) = default;
 
 }  // namespace midi
diff --git a/media/midi/task_service_unittest.cc b/media/midi/task_service_unittest.cc
index 894e736f..2c60323 100644
--- a/media/midi/task_service_unittest.cc
+++ b/media/midi/task_service_unittest.cc
@@ -124,7 +124,7 @@
 
 class MidiTaskServiceTest : public ::testing::Test {
  public:
-  MidiTaskServiceTest() {}
+  MidiTaskServiceTest() = default;
 
  protected:
   TaskService* task_service() { return &task_service_; }
diff --git a/media/midi/usb_midi_descriptor_parser.cc b/media/midi/usb_midi_descriptor_parser.cc
index f473153..fad5e41e 100644
--- a/media/midi/usb_midi_descriptor_parser.cc
+++ b/media/midi/usb_midi_descriptor_parser.cc
@@ -78,7 +78,7 @@
       current_endpoint_address_(0),
       current_cable_number_(0) {}
 
-UsbMidiDescriptorParser::~UsbMidiDescriptorParser() {}
+UsbMidiDescriptorParser::~UsbMidiDescriptorParser() = default;
 
 bool UsbMidiDescriptorParser::Parse(UsbMidiDevice* device,
                                     const uint8_t* data,
diff --git a/media/midi/usb_midi_input_stream.cc b/media/midi/usb_midi_input_stream.cc
index 9eb24078..9042097 100644
--- a/media/midi/usb_midi_input_stream.cc
+++ b/media/midi/usb_midi_input_stream.cc
@@ -37,7 +37,7 @@
 UsbMidiInputStream::UsbMidiInputStream(Delegate* delegate)
     : delegate_(delegate) {}
 
-UsbMidiInputStream::~UsbMidiInputStream() {}
+UsbMidiInputStream::~UsbMidiInputStream() = default;
 
 void UsbMidiInputStream::Add(const UsbMidiJack& jack) {
   JackUniqueKey key(jack.device,
diff --git a/media/midi/usb_midi_input_stream_unittest.cc b/media/midi/usb_midi_input_stream_unittest.cc
index 3ebd99ab..a88489ba 100644
--- a/media/midi/usb_midi_input_stream_unittest.cc
+++ b/media/midi/usb_midi_input_stream_unittest.cc
@@ -25,8 +25,8 @@
 
 class TestUsbMidiDevice : public UsbMidiDevice {
  public:
-  TestUsbMidiDevice() {}
-  ~TestUsbMidiDevice() override {}
+  TestUsbMidiDevice() = default;
+  ~TestUsbMidiDevice() override = default;
   std::vector<uint8_t> GetDescriptors() override {
     return std::vector<uint8_t>();
   }
@@ -41,8 +41,8 @@
 
 class MockDelegate : public UsbMidiInputStream::Delegate {
  public:
-  MockDelegate() {}
-  ~MockDelegate() override {}
+  MockDelegate() = default;
+  ~MockDelegate() override = default;
   void OnReceivedData(size_t jack_index,
                       const uint8_t* data,
                       size_t size,
diff --git a/media/midi/usb_midi_output_stream_unittest.cc b/media/midi/usb_midi_output_stream_unittest.cc
index 0f1e2e8..9e4bfb78 100644
--- a/media/midi/usb_midi_output_stream_unittest.cc
+++ b/media/midi/usb_midi_output_stream_unittest.cc
@@ -27,8 +27,8 @@
 
 class MockUsbMidiDevice : public UsbMidiDevice {
  public:
-  MockUsbMidiDevice() {}
-  ~MockUsbMidiDevice() override {}
+  MockUsbMidiDevice() = default;
+  ~MockUsbMidiDevice() override = default;
 
   std::vector<uint8_t> GetDescriptors() override {
     return std::vector<uint8_t>();
diff --git a/media/mojo/clients/mojo_cdm_factory.cc b/media/mojo/clients/mojo_cdm_factory.cc
index c0e2284..58144f70 100644
--- a/media/mojo/clients/mojo_cdm_factory.cc
+++ b/media/mojo/clients/mojo_cdm_factory.cc
@@ -25,7 +25,7 @@
   DCHECK(interface_factory_);
 }
 
-MojoCdmFactory::~MojoCdmFactory() {}
+MojoCdmFactory::~MojoCdmFactory() = default;
 
 void MojoCdmFactory::Create(
     const std::string& key_system,
diff --git a/media/mojo/clients/mojo_cdm_unittest.cc b/media/mojo/clients/mojo_cdm_unittest.cc
index 220a3b1..63c055a 100644
--- a/media/mojo/clients/mojo_cdm_unittest.cc
+++ b/media/mojo/clients/mojo_cdm_unittest.cc
@@ -81,7 +81,7 @@
                                              &cdm_factory_)),
         cdm_binding_(mojo_cdm_service_.get()) {}
 
-  virtual ~MojoCdmTest() {}
+  virtual ~MojoCdmTest() = default;
 
   void Initialize(ExpectedResult expected_result) {
     // TODO(xhwang): Add pending init support.
diff --git a/media/mojo/clients/mojo_decoder_factory.cc b/media/mojo/clients/mojo_decoder_factory.cc
index 02657b5f..0ae03b7 100644
--- a/media/mojo/clients/mojo_decoder_factory.cc
+++ b/media/mojo/clients/mojo_decoder_factory.cc
@@ -21,7 +21,7 @@
   DCHECK(interface_factory_);
 }
 
-MojoDecoderFactory::~MojoDecoderFactory() {}
+MojoDecoderFactory::~MojoDecoderFactory() = default;
 
 void MojoDecoderFactory::CreateAudioDecoders(
     scoped_refptr<base::SingleThreadTaskRunner> task_runner,
diff --git a/media/mojo/clients/mojo_decryptor_unittest.cc b/media/mojo/clients/mojo_decryptor_unittest.cc
index e257548..382633f 100644
--- a/media/mojo/clients/mojo_decryptor_unittest.cc
+++ b/media/mojo/clients/mojo_decryptor_unittest.cc
@@ -45,7 +45,7 @@
     mojo_decryptor_.reset(new MojoDecryptor(std::move(remote_decryptor)));
   }
 
-  ~MojoDecryptorTest() override {}
+  ~MojoDecryptorTest() override = default;
 
   void DestroyClient() {
     EXPECT_CALL(*this, OnConnectionClosed());
diff --git a/media/mojo/clients/mojo_demuxer_stream_impl.cc b/media/mojo/clients/mojo_demuxer_stream_impl.cc
index 89d4772..e2043fa 100644
--- a/media/mojo/clients/mojo_demuxer_stream_impl.cc
+++ b/media/mojo/clients/mojo_demuxer_stream_impl.cc
@@ -24,7 +24,7 @@
       stream_(stream),
       weak_factory_(this) {}
 
-MojoDemuxerStreamImpl::~MojoDemuxerStreamImpl() {}
+MojoDemuxerStreamImpl::~MojoDemuxerStreamImpl() = default;
 
 // This is called when our DemuxerStreamClient has connected itself and is
 // ready to receive messages.  Send an initial config and notify it that
diff --git a/media/mojo/clients/mojo_renderer_factory.cc b/media/mojo/clients/mojo_renderer_factory.cc
index 321459c..bd4b097 100644
--- a/media/mojo/clients/mojo_renderer_factory.cc
+++ b/media/mojo/clients/mojo_renderer_factory.cc
@@ -33,7 +33,7 @@
   DCHECK(!interface_factory_);
 }
 
-MojoRendererFactory::~MojoRendererFactory() {}
+MojoRendererFactory::~MojoRendererFactory() = default;
 
 std::unique_ptr<Renderer> MojoRendererFactory::CreateRenderer(
     const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner,
diff --git a/media/mojo/clients/mojo_renderer_unittest.cc b/media/mojo/clients/mojo_renderer_unittest.cc
index 4a604874..533f2ed0 100644
--- a/media/mojo/clients/mojo_renderer_unittest.cc
+++ b/media/mojo/clients/mojo_renderer_unittest.cc
@@ -86,7 +86,7 @@
         .WillRepeatedly(Return(base::TimeDelta()));
   }
 
-  virtual ~MojoRendererTest() {}
+  virtual ~MojoRendererTest() = default;
 
   void Destroy() {
     mojo_renderer_.reset();
diff --git a/media/mojo/services/gpu_mojo_media_client.cc b/media/mojo/services/gpu_mojo_media_client.cc
index c39e5ab..a8c97917 100644
--- a/media/mojo/services/gpu_mojo_media_client.cc
+++ b/media/mojo/services/gpu_mojo_media_client.cc
@@ -90,7 +90,7 @@
       media_gpu_channel_manager_(std::move(media_gpu_channel_manager)),
       android_overlay_factory_cb_(std::move(android_overlay_factory_cb)) {}
 
-GpuMojoMediaClient::~GpuMojoMediaClient() {}
+GpuMojoMediaClient::~GpuMojoMediaClient() = default;
 
 void GpuMojoMediaClient::Initialize(
     service_manager::Connector* connector,
diff --git a/media/mojo/services/media_resource_shim.cc b/media/mojo/services/media_resource_shim.cc
index aec5040..4f863d68 100644
--- a/media/mojo/services/media_resource_shim.cc
+++ b/media/mojo/services/media_resource_shim.cc
@@ -29,7 +29,7 @@
   }
 }
 
-MediaResourceShim::~MediaResourceShim() {}
+MediaResourceShim::~MediaResourceShim() = default;
 
 std::vector<DemuxerStream*> MediaResourceShim::GetAllStreams() {
   DCHECK(demuxer_ready_cb_.is_null());
diff --git a/media/mojo/services/media_service.cc b/media/mojo/services/media_service.cc
index 0de4bae..686e95d 100644
--- a/media/mojo/services/media_service.cc
+++ b/media/mojo/services/media_service.cc
@@ -30,7 +30,7 @@
       base::Bind(&MediaService::Create, base::Unretained(this)));
 }
 
-MediaService::~MediaService() {}
+MediaService::~MediaService() = default;
 
 void MediaService::OnStart() {
   DVLOG(1) << __func__;
@@ -38,6 +38,9 @@
   ref_factory_.reset(new service_manager::ServiceContextRefFactory(
       base::Bind(&service_manager::ServiceContext::RequestQuit,
                  base::Unretained(context()))));
+
+  // TODO(liberato): Remove plumbing for the ref factory once
+  // MediaCodecVideoDecoder no longer takes a ref. (crbug.com/783973)
   mojo_media_client_->Initialize(context()->connector(), ref_factory_.get());
 }
 
diff --git a/media/mojo/services/media_service.h b/media/mojo/services/media_service.h
index 2b02202..41a3a0dc 100644
--- a/media/mojo/services/media_service.h
+++ b/media/mojo/services/media_service.h
@@ -62,16 +62,21 @@
       mojom::InterfaceFactoryRequest request,
       service_manager::mojom::InterfaceProviderPtr host_interfaces) final;
 
+  MediaLog media_log_;
+  std::unique_ptr<service_manager::ServiceContextRefFactory> ref_factory_;
+
   // Note: Since each instance runs on a different thread, do not share a common
   // MojoMediaClient with other instances to avoid threading issues. Hence using
   // a unique_ptr here.
+  //
+  // Note: Since |*ref_factory_| is passed to |mojo_media_client_|,
+  // |mojo_media_client_| must be destructed before |ref_factory_|.
   std::unique_ptr<MojoMediaClient> mojo_media_client_;
 
+  // Note: Since |&media_log_| is passed to bindings, the bindings must be
+  // destructed first.
   mojo::StrongBindingSet<mojom::InterfaceFactory> interface_factory_bindings_;
 
-  MediaLog media_log_;
-  std::unique_ptr<service_manager::ServiceContextRefFactory> ref_factory_;
-
   service_manager::BinderRegistry registry_;
   mojo::BindingSet<mojom::MediaService> bindings_;
 };
diff --git a/media/mojo/services/media_service_unittest.cc b/media/mojo/services/media_service_unittest.cc
index d7d82cc..14f35e4 100644
--- a/media/mojo/services/media_service_unittest.cc
+++ b/media/mojo/services/media_service_unittest.cc
@@ -54,8 +54,8 @@
 
 class MockRendererClient : public mojom::RendererClient {
  public:
-  MockRendererClient() {}
-  ~MockRendererClient() override {}
+  MockRendererClient() = default;
+  ~MockRendererClient() override = default;
 
   // mojom::RendererClient implementation.
   MOCK_METHOD3(OnTimeUpdate,
@@ -84,7 +84,7 @@
       : ServiceTest("media_service_unittests"),
         renderer_client_binding_(&renderer_client_),
         video_stream_(DemuxerStream::VIDEO) {}
-  ~MediaServiceTest() override {}
+  ~MediaServiceTest() override = default;
 
   void SetUp() override {
     ServiceTest::SetUp();
diff --git a/media/mojo/services/mojo_audio_decoder_service.cc b/media/mojo/services/mojo_audio_decoder_service.cc
index ea94fdb..b563711 100644
--- a/media/mojo/services/mojo_audio_decoder_service.cc
+++ b/media/mojo/services/mojo_audio_decoder_service.cc
@@ -25,7 +25,7 @@
   weak_this_ = weak_factory_.GetWeakPtr();
 }
 
-MojoAudioDecoderService::~MojoAudioDecoderService() {}
+MojoAudioDecoderService::~MojoAudioDecoderService() = default;
 
 void MojoAudioDecoderService::Construct(
     mojom::AudioDecoderClientAssociatedPtrInfo client) {
diff --git a/media/mojo/services/mojo_audio_input_stream_unittest.cc b/media/mojo/services/mojo_audio_input_stream_unittest.cc
index 8389bdb..a1f3eba 100644
--- a/media/mojo/services/mojo_audio_input_stream_unittest.cc
+++ b/media/mojo/services/mojo_audio_input_stream_unittest.cc
@@ -38,7 +38,7 @@
 
 class TestCancelableSyncSocket : public base::CancelableSyncSocket {
  public:
-  TestCancelableSyncSocket() {}
+  TestCancelableSyncSocket() = default;
 
   void ExpectOwnershipTransfer() { expect_ownership_transfer_ = true; }
 
@@ -58,8 +58,8 @@
 
 class MockDelegate : public AudioInputDelegate {
  public:
-  MockDelegate() {}
-  ~MockDelegate() {}
+  MockDelegate() = default;
+  ~MockDelegate() = default;
 
   MOCK_METHOD0(GetStreamId, int());
   MOCK_METHOD0(OnRecordStream, void());
@@ -94,7 +94,7 @@
 
 class MockClient : public mojom::AudioInputStreamClient {
  public:
-  MockClient() {}
+  MockClient() = default;
 
   void Initialized(mojo::ScopedSharedBufferHandle shared_buffer,
                    mojo::ScopedHandle socket_handle,
diff --git a/media/mojo/services/mojo_audio_output_stream_unittest.cc b/media/mojo/services/mojo_audio_output_stream_unittest.cc
index e5982a8..cc69e472 100644
--- a/media/mojo/services/mojo_audio_output_stream_unittest.cc
+++ b/media/mojo/services/mojo_audio_output_stream_unittest.cc
@@ -36,7 +36,7 @@
 
 class TestCancelableSyncSocket : public base::CancelableSyncSocket {
  public:
-  TestCancelableSyncSocket() {}
+  TestCancelableSyncSocket() = default;
 
   void ExpectOwnershipTransfer() { expect_ownership_transfer_ = true; }
 
@@ -56,8 +56,8 @@
 
 class MockDelegate : public AudioOutputDelegate {
  public:
-  MockDelegate() {}
-  ~MockDelegate() {}
+  MockDelegate() = default;
+  ~MockDelegate() = default;
 
   MOCK_METHOD0(GetStreamId, int());
   MOCK_METHOD0(OnPlayStream, void());
@@ -93,7 +93,7 @@
 
 class MockClient : public mojom::AudioOutputStreamClient {
  public:
-  MockClient() {}
+  MockClient() = default;
 
   void Initialized(mojo::ScopedSharedBufferHandle shared_buffer,
                    mojo::ScopedHandle socket_handle) {
diff --git a/media/mojo/services/mojo_cdm_allocator.cc b/media/mojo/services/mojo_cdm_allocator.cc
index f67696da..f302368 100644
--- a/media/mojo/services/mojo_cdm_allocator.cc
+++ b/media/mojo/services/mojo_cdm_allocator.cc
@@ -119,7 +119,7 @@
   explicit MojoCdmVideoFrame(
       const MojoSharedBufferDoneCB& mojo_shared_buffer_done_cb)
       : mojo_shared_buffer_done_cb_(mojo_shared_buffer_done_cb) {}
-  ~MojoCdmVideoFrame() final {}
+  ~MojoCdmVideoFrame() final = default;
 
   // VideoFrameImpl implementation.
   scoped_refptr<media::VideoFrame> TransformToVideoFrame(
@@ -162,7 +162,7 @@
 
 MojoCdmAllocator::MojoCdmAllocator() : weak_ptr_factory_(this) {}
 
-MojoCdmAllocator::~MojoCdmAllocator() {}
+MojoCdmAllocator::~MojoCdmAllocator() = default;
 
 // Creates a cdm::Buffer, reusing an existing buffer if one is available.
 // If not, a new buffer is created using AllocateNewBuffer(). The caller is
diff --git a/media/mojo/services/mojo_cdm_allocator_unittest.cc b/media/mojo/services/mojo_cdm_allocator_unittest.cc
index 96e8f9b..333a0f9 100644
--- a/media/mojo/services/mojo_cdm_allocator_unittest.cc
+++ b/media/mojo/services/mojo_cdm_allocator_unittest.cc
@@ -19,8 +19,8 @@
 
 class MojoCdmAllocatorTest : public testing::Test {
  public:
-  MojoCdmAllocatorTest() {}
-  ~MojoCdmAllocatorTest() override {}
+  MojoCdmAllocatorTest() = default;
+  ~MojoCdmAllocatorTest() override = default;
 
  protected:
   cdm::Buffer* CreateCdmBuffer(size_t capacity) {
diff --git a/media/mojo/services/mojo_cdm_file_io_unittest.cc b/media/mojo/services/mojo_cdm_file_io_unittest.cc
index 5dd56dd..82dbbe1 100644
--- a/media/mojo/services/mojo_cdm_file_io_unittest.cc
+++ b/media/mojo/services/mojo_cdm_file_io_unittest.cc
@@ -22,8 +22,8 @@
 
 class MockFileIOClient : public cdm::FileIOClient {
  public:
-  MockFileIOClient() {}
-  ~MockFileIOClient() override {}
+  MockFileIOClient() = default;
+  ~MockFileIOClient() override = default;
 
   MOCK_METHOD1(OnOpenComplete, void(Status));
   MOCK_METHOD3(OnReadComplete, void(Status, const uint8_t*, uint32_t));
@@ -32,8 +32,8 @@
 
 class MockCdmStorage : public mojom::CdmStorage {
  public:
-  MockCdmStorage() {}
-  ~MockCdmStorage() override {}
+  MockCdmStorage() = default;
+  ~MockCdmStorage() override = default;
 
   bool SetUp() { return temp_directory_.CreateUniqueTempDir(); }
 
@@ -68,8 +68,8 @@
 
 class MojoCdmFileIOTest : public testing::Test, public MojoCdmFileIO::Delegate {
  protected:
-  MojoCdmFileIOTest() {}
-  ~MojoCdmFileIOTest() override {}
+  MojoCdmFileIOTest() = default;
+  ~MojoCdmFileIOTest() override = default;
 
   // testing::Test implementation.
   void SetUp() override {
diff --git a/media/mojo/services/mojo_cdm_helper.cc b/media/mojo/services/mojo_cdm_helper.cc
index 6fb6e13a..ef254d70 100644
--- a/media/mojo/services/mojo_cdm_helper.cc
+++ b/media/mojo/services/mojo_cdm_helper.cc
@@ -17,7 +17,7 @@
     service_manager::mojom::InterfaceProvider* interface_provider)
     : interface_provider_(interface_provider), weak_factory_(this) {}
 
-MojoCdmHelper::~MojoCdmHelper() {}
+MojoCdmHelper::~MojoCdmHelper() = default;
 
 void MojoCdmHelper::SetFileReadCB(FileReadCB file_read_cb) {
   file_read_cb_ = std::move(file_read_cb);
diff --git a/media/mojo/services/mojo_cdm_helper_unittest.cc b/media/mojo/services/mojo_cdm_helper_unittest.cc
index 16bd9910..33abd094 100644
--- a/media/mojo/services/mojo_cdm_helper_unittest.cc
+++ b/media/mojo/services/mojo_cdm_helper_unittest.cc
@@ -26,8 +26,8 @@
 
 class MockFileIOClient : public cdm::FileIOClient {
  public:
-  MockFileIOClient() {}
-  ~MockFileIOClient() override {}
+  MockFileIOClient() = default;
+  ~MockFileIOClient() override = default;
 
   MOCK_METHOD1(OnOpenComplete, void(Status));
   MOCK_METHOD3(OnReadComplete, void(Status, const uint8_t*, uint32_t));
@@ -37,7 +37,7 @@
 class MockCdmStorage : public mojom::CdmStorage {
  public:
   MockCdmStorage() { CHECK(temp_directory_.CreateUniqueTempDir()); }
-  ~MockCdmStorage() override {}
+  ~MockCdmStorage() override = default;
 
   // MojoCdmFileIO calls CdmStorage::Open() to actually open the file.
   // Simulate this by creating a file in the temp directory and returning it.
@@ -65,7 +65,7 @@
   TestInterfaceProvider() {
     registry_.AddInterface(base::Bind(&CreateCdmStorage));
   }
-  ~TestInterfaceProvider() override {}
+  ~TestInterfaceProvider() override = default;
 
   void GetInterface(const std::string& interface_name,
                     mojo::ScopedMessagePipeHandle handle) override {
@@ -81,7 +81,7 @@
 class MojoCdmHelperTest : public testing::Test {
  protected:
   MojoCdmHelperTest() : helper_(&test_interface_provider_) {}
-  ~MojoCdmHelperTest() override {}
+  ~MojoCdmHelperTest() override = default;
 
   base::test::ScopedTaskEnvironment scoped_task_environment_;
   TestInterfaceProvider test_interface_provider_;
diff --git a/media/mojo/services/mojo_cdm_service_context.cc b/media/mojo/services/mojo_cdm_service_context.cc
index 3b19674..3d50f301 100644
--- a/media/mojo/services/mojo_cdm_service_context.cc
+++ b/media/mojo/services/mojo_cdm_service_context.cc
@@ -11,10 +11,9 @@
 
 namespace media {
 
-MojoCdmServiceContext::MojoCdmServiceContext() {}
+MojoCdmServiceContext::MojoCdmServiceContext() = default;
 
-MojoCdmServiceContext::~MojoCdmServiceContext() {
-}
+MojoCdmServiceContext::~MojoCdmServiceContext() = default;
 
 void MojoCdmServiceContext::RegisterCdm(int cdm_id,
                                         MojoCdmService* cdm_service) {
diff --git a/media/mojo/services/mojo_decryptor_service.cc b/media/mojo/services/mojo_decryptor_service.cc
index d675bb9..7d3c8d4 100644
--- a/media/mojo/services/mojo_decryptor_service.cc
+++ b/media/mojo/services/mojo_decryptor_service.cc
@@ -58,7 +58,7 @@
   binding_.set_connection_error_handler(error_handler);
 }
 
-MojoDecryptorService::~MojoDecryptorService() {}
+MojoDecryptorService::~MojoDecryptorService() = default;
 
 void MojoDecryptorService::Initialize(
     mojo::ScopedDataPipeConsumerHandle receive_pipe,
diff --git a/media/mojo/services/mojo_jpeg_decode_accelerator_service_unittest.cc b/media/mojo/services/mojo_jpeg_decode_accelerator_service_unittest.cc
index e18ede2..4e7fc0d3 100644
--- a/media/mojo/services/mojo_jpeg_decode_accelerator_service_unittest.cc
+++ b/media/mojo/services/mojo_jpeg_decode_accelerator_service_unittest.cc
@@ -22,8 +22,8 @@
 // simulate the actual decoding without the need for special hardware.
 class MojoJpegDecodeAcceleratorServiceTest : public ::testing::Test {
  public:
-  MojoJpegDecodeAcceleratorServiceTest() {}
-  ~MojoJpegDecodeAcceleratorServiceTest() override {}
+ MojoJpegDecodeAcceleratorServiceTest() = default;
+  ~MojoJpegDecodeAcceleratorServiceTest() override = default;
 
   void SetUp() override {
     base::CommandLine::ForCurrentProcess()->AppendSwitch(
diff --git a/media/mojo/services/mojo_media_client.cc b/media/mojo/services/mojo_media_client.cc
index fbece3a..7992107 100644
--- a/media/mojo/services/mojo_media_client.cc
+++ b/media/mojo/services/mojo_media_client.cc
@@ -15,9 +15,9 @@
 
 namespace media {
 
-MojoMediaClient::MojoMediaClient() {}
+MojoMediaClient::MojoMediaClient() = default;
 
-MojoMediaClient::~MojoMediaClient() {}
+MojoMediaClient::~MojoMediaClient() = default;
 
 void MojoMediaClient::Initialize(
     service_manager::Connector* connector,
diff --git a/media/mojo/services/mojo_provision_fetcher.cc b/media/mojo/services/mojo_provision_fetcher.cc
index 06460e6..79bb5d9d 100644
--- a/media/mojo/services/mojo_provision_fetcher.cc
+++ b/media/mojo/services/mojo_provision_fetcher.cc
@@ -15,7 +15,7 @@
   DVLOG(1) << __func__;
 }
 
-MojoProvisionFetcher::~MojoProvisionFetcher() {}
+MojoProvisionFetcher::~MojoProvisionFetcher() = default;
 
 // ProvisionFetcher implementation:
 void MojoProvisionFetcher::Retrieve(const std::string& default_url,
diff --git a/media/mojo/services/mojo_renderer_service.cc b/media/mojo/services/mojo_renderer_service.cc
index 787ef4f6..cb0c2c5 100644
--- a/media/mojo/services/mojo_renderer_service.cc
+++ b/media/mojo/services/mojo_renderer_service.cc
@@ -74,7 +74,7 @@
   weak_this_ = weak_factory_.GetWeakPtr();
 }
 
-MojoRendererService::~MojoRendererService() {}
+MojoRendererService::~MojoRendererService() = default;
 
 void MojoRendererService::Initialize(
     mojom::RendererClientAssociatedPtrInfo client,
diff --git a/media/mojo/services/mojo_video_decoder_service.cc b/media/mojo/services/mojo_video_decoder_service.cc
index 9f026d7..4523a461 100644
--- a/media/mojo/services/mojo_video_decoder_service.cc
+++ b/media/mojo/services/mojo_video_decoder_service.cc
@@ -35,7 +35,7 @@
   weak_this_ = weak_factory_.GetWeakPtr();
 }
 
-MojoVideoDecoderService::~MojoVideoDecoderService() {}
+MojoVideoDecoderService::~MojoVideoDecoderService() = default;
 
 void MojoVideoDecoderService::Construct(
     mojom::VideoDecoderClientAssociatedPtrInfo client,
diff --git a/media/mojo/services/mojo_video_encode_accelerator_provider.cc b/media/mojo/services/mojo_video_encode_accelerator_provider.cc
index 87b4e76..3d23adc32 100644
--- a/media/mojo/services/mojo_video_encode_accelerator_provider.cc
+++ b/media/mojo/services/mojo_video_encode_accelerator_provider.cc
@@ -33,7 +33,8 @@
     : create_vea_callback_(create_vea_callback),
       gpu_preferences_(gpu_preferences) {}
 
-MojoVideoEncodeAcceleratorProvider::~MojoVideoEncodeAcceleratorProvider() {}
+MojoVideoEncodeAcceleratorProvider::~MojoVideoEncodeAcceleratorProvider() =
+    default;
 
 void MojoVideoEncodeAcceleratorProvider::CreateVideoEncodeAccelerator(
     mojom::VideoEncodeAcceleratorRequest request) {
diff --git a/media/mojo/services/test_mojo_media_client.cc b/media/mojo/services/test_mojo_media_client.cc
index ff0ab3b..427d9ff 100644
--- a/media/mojo/services/test_mojo_media_client.cc
+++ b/media/mojo/services/test_mojo_media_client.cc
@@ -23,7 +23,7 @@
 
 namespace media {
 
-TestMojoMediaClient::TestMojoMediaClient() {}
+TestMojoMediaClient::TestMojoMediaClient() = default;
 
 TestMojoMediaClient::~TestMojoMediaClient() {
   DVLOG(1) << __func__;
diff --git a/media/mojo/services/video_decode_perf_history_unittest.cc b/media/mojo/services/video_decode_perf_history_unittest.cc
index 59467cc..c979e44 100644
--- a/media/mojo/services/video_decode_perf_history_unittest.cc
+++ b/media/mojo/services/video_decode_perf_history_unittest.cc
@@ -34,7 +34,7 @@
 class FakeVideoDecodeStatsDB : public VideoDecodeStatsDB {
  public:
   FakeVideoDecodeStatsDB() = default;
-  ~FakeVideoDecodeStatsDB() override {}
+  ~FakeVideoDecodeStatsDB() override = default;
 
   // Call CompleteInitialize(...) to run |init_cb| callback.
   void Initialize(base::OnceCallback<void(bool)> init_cb) override {
diff --git a/media/mojo/services/watch_time_recorder.cc b/media/mojo/services/watch_time_recorder.cc
index e857627..b3d7a91c 100644
--- a/media/mojo/services/watch_time_recorder.cc
+++ b/media/mojo/services/watch_time_recorder.cc
@@ -38,8 +38,8 @@
 
 class WatchTimeRecorderProvider : public mojom::WatchTimeRecorderProvider {
  public:
-  WatchTimeRecorderProvider() {}
-  ~WatchTimeRecorderProvider() override {}
+  WatchTimeRecorderProvider() = default;
+  ~WatchTimeRecorderProvider() override = default;
 
  private:
   // mojom::WatchTimeRecorderProvider implementation:
diff --git a/media/mojo/services/watch_time_recorder_unittest.cc b/media/mojo/services/watch_time_recorder_unittest.cc
index 16f3e7d..666b224 100644
--- a/media/mojo/services/watch_time_recorder_unittest.cc
+++ b/media/mojo/services/watch_time_recorder_unittest.cc
@@ -111,14 +111,15 @@
       return;
     }
 
-    ASSERT_EQ(1u, test_recorder_->sources_count());
-
-    const auto* source = test_recorder_->GetSourceForUrl(kTestOrigin);
-    ASSERT_TRUE(source);
-
-    for (auto key : keys) {
-      test_recorder_->ExpectMetric(*source, UkmEntry::kEntryName, key.data(),
-                                   value.InMilliseconds());
+    const auto& entries =
+        test_recorder_->GetEntriesByName(UkmEntry::kEntryName);
+    EXPECT_EQ(1u, entries.size());
+    for (const auto* entry : entries) {
+      test_recorder_->ExpectEntrySourceHasUrl(entry, GURL(kTestOrigin));
+      for (auto key : keys) {
+        test_recorder_->ExpectEntryMetric(entry, key.data(),
+                                          value.InMilliseconds());
+      }
     }
   }
 
@@ -239,9 +240,9 @@
 }
 
 #define EXPECT_UKM(name, value) \
-  test_recorder_->ExpectMetric(*source, UkmEntry::kEntryName, name, value)
+  test_recorder_->ExpectEntryMetric(entry, name, value)
 #define EXPECT_NO_UKM(name) \
-  EXPECT_FALSE(test_recorder_->HasMetric(*source, UkmEntry::kEntryName, name))
+  EXPECT_FALSE(test_recorder_->EntryHasMetric(entry, name))
 
 TEST_F(WatchTimeRecorderTest, BasicUkmAudioVideo) {
   mojom::PlaybackPropertiesPtr properties = mojom::PlaybackProperties::New(
@@ -255,33 +256,35 @@
   wtr_.reset();
   base::RunLoop().RunUntilIdle();
 
-  ASSERT_EQ(1u, test_recorder_->sources_count());
-  auto* source = test_recorder_->GetSourceForUrl(kTestOrigin);
-  ASSERT_TRUE(source);
+  const auto& entries = test_recorder_->GetEntriesByName(UkmEntry::kEntryName);
+  EXPECT_EQ(1u, entries.size());
+  for (const auto* entry : entries) {
+    test_recorder_->ExpectEntrySourceHasUrl(entry, GURL(kTestOrigin));
 
-  EXPECT_UKM(UkmEntry::kWatchTimeName, kWatchTime.InMilliseconds());
-  EXPECT_UKM(UkmEntry::kIsBackgroundName, false);
-  EXPECT_UKM(UkmEntry::kAudioCodecName, properties->audio_codec);
-  EXPECT_UKM(UkmEntry::kVideoCodecName, properties->video_codec);
-  EXPECT_UKM(UkmEntry::kHasAudioName, properties->has_audio);
-  EXPECT_UKM(UkmEntry::kHasVideoName, properties->has_video);
-  EXPECT_UKM(UkmEntry::kIsEMEName, properties->is_eme);
-  EXPECT_UKM(UkmEntry::kIsMSEName, properties->is_mse);
-  EXPECT_UKM(UkmEntry::kLastPipelineStatusName, PIPELINE_OK);
-  EXPECT_UKM(UkmEntry::kRebuffersCountName, 0);
-  EXPECT_UKM(UkmEntry::kVideoNaturalWidthName,
-             properties->natural_size.width());
-  EXPECT_UKM(UkmEntry::kVideoNaturalHeightName,
-             properties->natural_size.height());
+    EXPECT_UKM(UkmEntry::kWatchTimeName, kWatchTime.InMilliseconds());
+    EXPECT_UKM(UkmEntry::kIsBackgroundName, false);
+    EXPECT_UKM(UkmEntry::kAudioCodecName, properties->audio_codec);
+    EXPECT_UKM(UkmEntry::kVideoCodecName, properties->video_codec);
+    EXPECT_UKM(UkmEntry::kHasAudioName, properties->has_audio);
+    EXPECT_UKM(UkmEntry::kHasVideoName, properties->has_video);
+    EXPECT_UKM(UkmEntry::kIsEMEName, properties->is_eme);
+    EXPECT_UKM(UkmEntry::kIsMSEName, properties->is_mse);
+    EXPECT_UKM(UkmEntry::kLastPipelineStatusName, PIPELINE_OK);
+    EXPECT_UKM(UkmEntry::kRebuffersCountName, 0);
+    EXPECT_UKM(UkmEntry::kVideoNaturalWidthName,
+               properties->natural_size.width());
+    EXPECT_UKM(UkmEntry::kVideoNaturalHeightName,
+               properties->natural_size.height());
 
-  EXPECT_NO_UKM(UkmEntry::kMeanTimeBetweenRebuffersName);
-  EXPECT_NO_UKM(UkmEntry::kWatchTime_ACName);
-  EXPECT_NO_UKM(UkmEntry::kWatchTime_BatteryName);
-  EXPECT_NO_UKM(UkmEntry::kWatchTime_NativeControlsOnName);
-  EXPECT_NO_UKM(UkmEntry::kWatchTime_NativeControlsOffName);
-  EXPECT_NO_UKM(UkmEntry::kWatchTime_DisplayFullscreenName);
-  EXPECT_NO_UKM(UkmEntry::kWatchTime_DisplayInlineName);
-  EXPECT_NO_UKM(UkmEntry::kWatchTime_DisplayPictureInPictureName);
+    EXPECT_NO_UKM(UkmEntry::kMeanTimeBetweenRebuffersName);
+    EXPECT_NO_UKM(UkmEntry::kWatchTime_ACName);
+    EXPECT_NO_UKM(UkmEntry::kWatchTime_BatteryName);
+    EXPECT_NO_UKM(UkmEntry::kWatchTime_NativeControlsOnName);
+    EXPECT_NO_UKM(UkmEntry::kWatchTime_NativeControlsOffName);
+    EXPECT_NO_UKM(UkmEntry::kWatchTime_DisplayFullscreenName);
+    EXPECT_NO_UKM(UkmEntry::kWatchTime_DisplayInlineName);
+    EXPECT_NO_UKM(UkmEntry::kWatchTime_DisplayPictureInPictureName);
+  }
 }
 
 TEST_F(WatchTimeRecorderTest, BasicUkmAudioVideoWithExtras) {
@@ -316,39 +319,40 @@
   wtr_.reset();
   base::RunLoop().RunUntilIdle();
 
-  ASSERT_EQ(1u, test_recorder_->sources_count());
-  auto* source = test_recorder_->GetSourceForUrl(kTestOrigin);
-  ASSERT_TRUE(source);
+  const auto& entries = test_recorder_->GetEntriesByName(UkmEntry::kEntryName);
+  EXPECT_EQ(1u, entries.size());
+  for (const auto* entry : entries) {
+    test_recorder_->ExpectEntrySourceHasUrl(entry, GURL(kTestOrigin));
+    EXPECT_UKM(UkmEntry::kWatchTimeName, kWatchTime2.InMilliseconds());
+    EXPECT_UKM(UkmEntry::kWatchTime_ACName, kWatchTime.InMilliseconds());
+    EXPECT_UKM(UkmEntry::kWatchTime_BatteryName, kWatchTime.InMilliseconds());
+    EXPECT_UKM(UkmEntry::kWatchTime_NativeControlsOnName,
+               kWatchTime.InMilliseconds());
+    EXPECT_UKM(UkmEntry::kWatchTime_NativeControlsOffName,
+               kWatchTime.InMilliseconds());
+    EXPECT_UKM(UkmEntry::kWatchTime_DisplayFullscreenName,
+               kWatchTime3.InMilliseconds());
+    EXPECT_UKM(UkmEntry::kWatchTime_DisplayInlineName,
+               kWatchTime3.InMilliseconds());
+    EXPECT_UKM(UkmEntry::kWatchTime_DisplayPictureInPictureName,
+               kWatchTime3.InMilliseconds());
+    EXPECT_UKM(UkmEntry::kMeanTimeBetweenRebuffersName,
+               kWatchTime2.InMilliseconds() / 3);
 
-  EXPECT_UKM(UkmEntry::kWatchTimeName, kWatchTime2.InMilliseconds());
-  EXPECT_UKM(UkmEntry::kWatchTime_ACName, kWatchTime.InMilliseconds());
-  EXPECT_UKM(UkmEntry::kWatchTime_BatteryName, kWatchTime.InMilliseconds());
-  EXPECT_UKM(UkmEntry::kWatchTime_NativeControlsOnName,
-             kWatchTime.InMilliseconds());
-  EXPECT_UKM(UkmEntry::kWatchTime_NativeControlsOffName,
-             kWatchTime.InMilliseconds());
-  EXPECT_UKM(UkmEntry::kWatchTime_DisplayFullscreenName,
-             kWatchTime3.InMilliseconds());
-  EXPECT_UKM(UkmEntry::kWatchTime_DisplayInlineName,
-             kWatchTime3.InMilliseconds());
-  EXPECT_UKM(UkmEntry::kWatchTime_DisplayPictureInPictureName,
-             kWatchTime3.InMilliseconds());
-  EXPECT_UKM(UkmEntry::kMeanTimeBetweenRebuffersName,
-             kWatchTime2.InMilliseconds() / 3);
-
-  EXPECT_UKM(UkmEntry::kIsBackgroundName, false);
-  EXPECT_UKM(UkmEntry::kAudioCodecName, properties->audio_codec);
-  EXPECT_UKM(UkmEntry::kVideoCodecName, properties->video_codec);
-  EXPECT_UKM(UkmEntry::kHasAudioName, properties->has_audio);
-  EXPECT_UKM(UkmEntry::kHasVideoName, properties->has_video);
-  EXPECT_UKM(UkmEntry::kIsEMEName, properties->is_eme);
-  EXPECT_UKM(UkmEntry::kIsMSEName, properties->is_mse);
-  EXPECT_UKM(UkmEntry::kLastPipelineStatusName, PIPELINE_ERROR_DECODE);
-  EXPECT_UKM(UkmEntry::kRebuffersCountName, 3);
-  EXPECT_UKM(UkmEntry::kVideoNaturalWidthName,
-             properties->natural_size.width());
-  EXPECT_UKM(UkmEntry::kVideoNaturalHeightName,
-             properties->natural_size.height());
+    EXPECT_UKM(UkmEntry::kIsBackgroundName, false);
+    EXPECT_UKM(UkmEntry::kAudioCodecName, properties->audio_codec);
+    EXPECT_UKM(UkmEntry::kVideoCodecName, properties->video_codec);
+    EXPECT_UKM(UkmEntry::kHasAudioName, properties->has_audio);
+    EXPECT_UKM(UkmEntry::kHasVideoName, properties->has_video);
+    EXPECT_UKM(UkmEntry::kIsEMEName, properties->is_eme);
+    EXPECT_UKM(UkmEntry::kIsMSEName, properties->is_mse);
+    EXPECT_UKM(UkmEntry::kLastPipelineStatusName, PIPELINE_ERROR_DECODE);
+    EXPECT_UKM(UkmEntry::kRebuffersCountName, 3);
+    EXPECT_UKM(UkmEntry::kVideoNaturalWidthName,
+               properties->natural_size.width());
+    EXPECT_UKM(UkmEntry::kVideoNaturalHeightName,
+               properties->natural_size.height());
+  }
 }
 
 TEST_F(WatchTimeRecorderTest, BasicUkmAudioVideoBackground) {
@@ -363,33 +367,35 @@
   wtr_.reset();
   base::RunLoop().RunUntilIdle();
 
-  ASSERT_EQ(1u, test_recorder_->sources_count());
-  auto* source = test_recorder_->GetSourceForUrl(kTestOrigin);
-  ASSERT_TRUE(source);
+  const auto& entries = test_recorder_->GetEntriesByName(UkmEntry::kEntryName);
+  EXPECT_EQ(1u, entries.size());
+  for (const auto* entry : entries) {
+    test_recorder_->ExpectEntrySourceHasUrl(entry, GURL(kTestOrigin));
 
-  EXPECT_UKM(UkmEntry::kWatchTimeName, kWatchTime.InMilliseconds());
-  EXPECT_UKM(UkmEntry::kIsBackgroundName, true);
-  EXPECT_UKM(UkmEntry::kAudioCodecName, properties->audio_codec);
-  EXPECT_UKM(UkmEntry::kVideoCodecName, properties->video_codec);
-  EXPECT_UKM(UkmEntry::kHasAudioName, properties->has_audio);
-  EXPECT_UKM(UkmEntry::kHasVideoName, properties->has_video);
-  EXPECT_UKM(UkmEntry::kIsEMEName, properties->is_eme);
-  EXPECT_UKM(UkmEntry::kIsMSEName, properties->is_mse);
-  EXPECT_UKM(UkmEntry::kLastPipelineStatusName, PIPELINE_OK);
-  EXPECT_UKM(UkmEntry::kRebuffersCountName, 0);
-  EXPECT_UKM(UkmEntry::kVideoNaturalWidthName,
-             properties->natural_size.width());
-  EXPECT_UKM(UkmEntry::kVideoNaturalHeightName,
-             properties->natural_size.height());
+    EXPECT_UKM(UkmEntry::kWatchTimeName, kWatchTime.InMilliseconds());
+    EXPECT_UKM(UkmEntry::kIsBackgroundName, true);
+    EXPECT_UKM(UkmEntry::kAudioCodecName, properties->audio_codec);
+    EXPECT_UKM(UkmEntry::kVideoCodecName, properties->video_codec);
+    EXPECT_UKM(UkmEntry::kHasAudioName, properties->has_audio);
+    EXPECT_UKM(UkmEntry::kHasVideoName, properties->has_video);
+    EXPECT_UKM(UkmEntry::kIsEMEName, properties->is_eme);
+    EXPECT_UKM(UkmEntry::kIsMSEName, properties->is_mse);
+    EXPECT_UKM(UkmEntry::kLastPipelineStatusName, PIPELINE_OK);
+    EXPECT_UKM(UkmEntry::kRebuffersCountName, 0);
+    EXPECT_UKM(UkmEntry::kVideoNaturalWidthName,
+               properties->natural_size.width());
+    EXPECT_UKM(UkmEntry::kVideoNaturalHeightName,
+               properties->natural_size.height());
 
-  EXPECT_NO_UKM(UkmEntry::kMeanTimeBetweenRebuffersName);
-  EXPECT_NO_UKM(UkmEntry::kWatchTime_ACName);
-  EXPECT_NO_UKM(UkmEntry::kWatchTime_BatteryName);
-  EXPECT_NO_UKM(UkmEntry::kWatchTime_NativeControlsOnName);
-  EXPECT_NO_UKM(UkmEntry::kWatchTime_NativeControlsOffName);
-  EXPECT_NO_UKM(UkmEntry::kWatchTime_DisplayFullscreenName);
-  EXPECT_NO_UKM(UkmEntry::kWatchTime_DisplayInlineName);
-  EXPECT_NO_UKM(UkmEntry::kWatchTime_DisplayPictureInPictureName);
+    EXPECT_NO_UKM(UkmEntry::kMeanTimeBetweenRebuffersName);
+    EXPECT_NO_UKM(UkmEntry::kWatchTime_ACName);
+    EXPECT_NO_UKM(UkmEntry::kWatchTime_BatteryName);
+    EXPECT_NO_UKM(UkmEntry::kWatchTime_NativeControlsOnName);
+    EXPECT_NO_UKM(UkmEntry::kWatchTime_NativeControlsOffName);
+    EXPECT_NO_UKM(UkmEntry::kWatchTime_DisplayFullscreenName);
+    EXPECT_NO_UKM(UkmEntry::kWatchTime_DisplayInlineName);
+    EXPECT_NO_UKM(UkmEntry::kWatchTime_DisplayPictureInPictureName);
+  }
 }
 #undef EXPECT_UKM
 #undef EXPECT_NO_UKM
diff --git a/media/muxers/webm_muxer.cc b/media/muxers/webm_muxer.cc
index e0ee4e5..59e68a0 100644
--- a/media/muxers/webm_muxer.cc
+++ b/media/muxers/webm_muxer.cc
@@ -95,7 +95,7 @@
                                              &frame_rate));
 }
 
-WebmMuxer::VideoParameters::~VideoParameters() {}
+WebmMuxer::VideoParameters::~VideoParameters() = default;
 
 WebmMuxer::WebmMuxer(VideoCodec video_codec,
                      AudioCodec audio_codec,
@@ -392,6 +392,6 @@
       timestamp(timestamp),
       is_keyframe(is_keyframe) {}
 
-WebmMuxer::EncodedVideoFrame::~EncodedVideoFrame() {}
+WebmMuxer::EncodedVideoFrame::~EncodedVideoFrame() = default;
 
 }  // namespace media
diff --git a/media/remoting/courier_renderer_factory.cc b/media/remoting/courier_renderer_factory.cc
index c87b568..459338b 100644
--- a/media/remoting/courier_renderer_factory.cc
+++ b/media/remoting/courier_renderer_factory.cc
@@ -21,7 +21,7 @@
     std::unique_ptr<RendererController> controller)
     : controller_(std::move(controller)) {}
 
-CourierRendererFactory::~CourierRendererFactory() {}
+CourierRendererFactory::~CourierRendererFactory() = default;
 
 std::unique_ptr<Renderer> CourierRendererFactory::CreateRenderer(
     const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner,
diff --git a/media/remoting/courier_renderer_unittest.cc b/media/remoting/courier_renderer_unittest.cc
index 33e1d711..74374b2 100644
--- a/media/remoting/courier_renderer_unittest.cc
+++ b/media/remoting/courier_renderer_unittest.cc
@@ -78,7 +78,7 @@
         .WillByDefault(
             Invoke(this, &RendererClientImpl::DelegateOnDurationChange));
   }
-  ~RendererClientImpl() {}
+  ~RendererClientImpl() = default;
 
   // RendererClient implementation.
   void OnError(PipelineStatus status) override {}
diff --git a/media/remoting/demuxer_stream_adapter_unittest.cc b/media/remoting/demuxer_stream_adapter_unittest.cc
index be006ac..f9c66758 100644
--- a/media/remoting/demuxer_stream_adapter_unittest.cc
+++ b/media/remoting/demuxer_stream_adapter_unittest.cc
@@ -110,7 +110,7 @@
 
 class DemuxerStreamAdapterTest : public ::testing::Test {
  public:
-  DemuxerStreamAdapterTest() {}
+  DemuxerStreamAdapterTest() = default;
   ~DemuxerStreamAdapterTest() override = default;
 
   void SetUpDataPipe() {
diff --git a/media/remoting/end2end_test_renderer.cc b/media/remoting/end2end_test_renderer.cc
index 9459da8..6c6cb8ee 100644
--- a/media/remoting/end2end_test_renderer.cc
+++ b/media/remoting/end2end_test_renderer.cc
@@ -34,7 +34,7 @@
         type_(type),
         send_frame_to_sink_cb_(callback) {}
 
-  ~TestStreamSender() override {}
+  ~TestStreamSender() override = default;
 
   // mojom::RemotingDataStreamSender implementation.
 
@@ -78,7 +78,7 @@
         send_message_to_sink_cb_(send_message_to_sink_cb),
         send_frame_to_sink_cb_(send_frame_to_sink_cb) {}
 
-  ~TestRemoter() override {}
+  ~TestRemoter() override = default;
 
   // mojom::Remoter implementation.
 
@@ -161,7 +161,7 @@
       base::ThreadTaskRunnerHandle::Get(), controller_->GetWeakPtr(), nullptr));
 }
 
-End2EndTestRenderer::~End2EndTestRenderer() {}
+End2EndTestRenderer::~End2EndTestRenderer() = default;
 
 void End2EndTestRenderer::Initialize(MediaResource* media_resource,
                                      RendererClient* client,
diff --git a/media/remoting/fake_media_resource.cc b/media/remoting/fake_media_resource.cc
index c8b2efb..14e21e1 100644
--- a/media/remoting/fake_media_resource.cc
+++ b/media/remoting/fake_media_resource.cc
@@ -97,7 +97,7 @@
 FakeMediaResource::FakeMediaResource()
     : demuxer_stream_(new FakeDemuxerStream(true)) {}
 
-FakeMediaResource::~FakeMediaResource() {}
+FakeMediaResource::~FakeMediaResource() = default;
 
 std::vector<DemuxerStream*> FakeMediaResource::GetAllStreams() {
   std::vector<DemuxerStream*> streams;
diff --git a/media/remoting/fake_remoter.cc b/media/remoting/fake_remoter.cc
index 85101f7..10c6257e 100644
--- a/media/remoting/fake_remoter.cc
+++ b/media/remoting/fake_remoter.cc
@@ -120,7 +120,7 @@
       start_will_fail_(start_will_fail),
       weak_factory_(this) {}
 
-FakeRemoter::~FakeRemoter() {}
+FakeRemoter::~FakeRemoter() = default;
 
 void FakeRemoter::Start() {
   if (start_will_fail_) {
@@ -180,7 +180,7 @@
 FakeRemoterFactory::FakeRemoterFactory(bool start_will_fail)
     : start_will_fail_(start_will_fail) {}
 
-FakeRemoterFactory::~FakeRemoterFactory() {}
+FakeRemoterFactory::~FakeRemoterFactory() = default;
 
 void FakeRemoterFactory::Create(mojom::RemotingSourcePtr source,
                                 mojom::RemoterRequest request) {
diff --git a/media/remoting/integration_test.cc b/media/remoting/integration_test.cc
index eedd256b..68ed1d8 100644
--- a/media/remoting/integration_test.cc
+++ b/media/remoting/integration_test.cc
@@ -21,7 +21,7 @@
   explicit TestRendererFactory(
       std::unique_ptr<PipelineTestRendererFactory> renderer_factory)
       : default_renderer_factory_(std::move(renderer_factory)) {}
-  ~TestRendererFactory() override {}
+  ~TestRendererFactory() override = default;
 
   // PipelineTestRendererFactory implementation.
   std::unique_ptr<Renderer> CreateRenderer(
diff --git a/media/remoting/remoting_cdm.cc b/media/remoting/remoting_cdm.cc
index d94d762d..20d18cd 100644
--- a/media/remoting/remoting_cdm.cc
+++ b/media/remoting/remoting_cdm.cc
@@ -27,7 +27,7 @@
   // TODO(xjz): Not implemented. Need to merge with erickung's implementation.
 }
 
-RemotingCdm::~RemotingCdm() {}
+RemotingCdm::~RemotingCdm() = default;
 
 void RemotingCdm::SetServerCertificate(
     const std::vector<uint8_t>& certificate,
diff --git a/media/remoting/remoting_cdm_context.cc b/media/remoting/remoting_cdm_context.cc
index 5842faa..a58d47f 100644
--- a/media/remoting/remoting_cdm_context.cc
+++ b/media/remoting/remoting_cdm_context.cc
@@ -19,7 +19,7 @@
 RemotingCdmContext::RemotingCdmContext(RemotingCdm* remoting_cdm)
     : remoting_cdm_(remoting_cdm) {}
 
-RemotingCdmContext::~RemotingCdmContext() {}
+RemotingCdmContext::~RemotingCdmContext() = default;
 
 RemotingCdmContext* RemotingCdmContext::From(CdmContext* cdm_context) {
   if (cdm_context && cdm_context->GetClassIdentifier() == kClassIdentifier)
diff --git a/media/remoting/remoting_cdm_factory.cc b/media/remoting/remoting_cdm_factory.cc
index 7f37539..8476d89 100644
--- a/media/remoting/remoting_cdm_factory.cc
+++ b/media/remoting/remoting_cdm_factory.cc
@@ -27,7 +27,7 @@
   DCHECK(sink_observer_);
 }
 
-RemotingCdmFactory::~RemotingCdmFactory() {}
+RemotingCdmFactory::~RemotingCdmFactory() = default;
 
 std::unique_ptr<RemotingCdmController>
 RemotingCdmFactory::CreateRemotingCdmController() {
diff --git a/media/remoting/renderer_controller_unittest.cc b/media/remoting/renderer_controller_unittest.cc
index ec411cd..c1a8391 100644
--- a/media/remoting/renderer_controller_unittest.cc
+++ b/media/remoting/renderer_controller_unittest.cc
@@ -70,8 +70,8 @@
 class RendererControllerTest : public ::testing::Test,
                                public MediaObserverClient {
  public:
-  RendererControllerTest() {}
-  ~RendererControllerTest() override {}
+  RendererControllerTest() = default;
+  ~RendererControllerTest() override = default;
 
   void TearDown() final { RunUntilIdle(); }
 
diff --git a/media/remoting/rpc_broker_unittest.cc b/media/remoting/rpc_broker_unittest.cc
index fb25210..5267b0a9 100644
--- a/media/remoting/rpc_broker_unittest.cc
+++ b/media/remoting/rpc_broker_unittest.cc
@@ -33,7 +33,7 @@
         has_sent_message_(false),
         send_count_(0),
         weak_factory_(this) {}
-  ~FakeMessageSender() {}
+  ~FakeMessageSender() = default;
 
   void OnSendMessageAndQuit(std::unique_ptr<std::vector<uint8_t>> message) {
     EXPECT_TRUE(
@@ -63,7 +63,7 @@
 class FakeMessageReceiver {
  public:
   FakeMessageReceiver() : has_received_message_(false), weak_factory_(this) {}
-  ~FakeMessageReceiver() {}
+  ~FakeMessageReceiver() = default;
 
   // RpcBroker::MessageReceiver implementation.
   void OnReceivedRpc(std::unique_ptr<pb::RpcMessage> message) {
diff --git a/media/remoting/sink_availability_observer.cc b/media/remoting/sink_availability_observer.cc
index 2020c63..94eadea 100644
--- a/media/remoting/sink_availability_observer.cc
+++ b/media/remoting/sink_availability_observer.cc
@@ -12,7 +12,7 @@
     mojom::RemoterPtr remoter)
     : binding_(this, std::move(source_request)), remoter_(std::move(remoter)) {}
 
-SinkAvailabilityObserver::~SinkAvailabilityObserver() {}
+SinkAvailabilityObserver::~SinkAvailabilityObserver() = default;
 
 bool SinkAvailabilityObserver::IsRemoteDecryptionAvailable() const {
   return std::find(std::begin(sink_metadata_.features),
diff --git a/media/remoting/stream_provider.cc b/media/remoting/stream_provider.cc
index 9308989..4f28082 100644
--- a/media/remoting/stream_provider.cc
+++ b/media/remoting/stream_provider.cc
@@ -392,7 +392,7 @@
       error_callback_(error_callback),
       weak_factory_(this) {}
 
-StreamProvider::~StreamProvider() {}
+StreamProvider::~StreamProvider() = default;
 
 void StreamProvider::Initialize(int remote_audio_handle,
                                 int remote_video_handle,
diff --git a/media/renderers/audio_renderer_impl_unittest.cc b/media/renderers/audio_renderer_impl_unittest.cc
index 2ed20a2a..944c2aa 100644
--- a/media/renderers/audio_renderer_impl_unittest.cc
+++ b/media/renderers/audio_renderer_impl_unittest.cc
@@ -50,8 +50,8 @@
 
 class MockMediaClient : public MediaClient {
  public:
-  MockMediaClient() {}
-  ~MockMediaClient() override {}
+  MockMediaClient() = default;
+  ~MockMediaClient() override = default;
 
   void AddSupportedKeySystems(
       std::vector<std::unique_ptr<KeySystemProperties>>* key_systems) override {
diff --git a/media/renderers/default_renderer_factory.cc b/media/renderers/default_renderer_factory.cc
index 0796d919..7b05a41 100644
--- a/media/renderers/default_renderer_factory.cc
+++ b/media/renderers/default_renderer_factory.cc
@@ -48,7 +48,7 @@
       decoder_factory_(decoder_factory),
       get_gpu_factories_cb_(get_gpu_factories_cb) {}
 
-DefaultRendererFactory::~DefaultRendererFactory() {}
+DefaultRendererFactory::~DefaultRendererFactory() = default;
 
 std::vector<std::unique_ptr<AudioDecoder>>
 DefaultRendererFactory::CreateAudioDecoders(
diff --git a/media/renderers/paint_canvas_video_renderer.cc b/media/renderers/paint_canvas_video_renderer.cc
index 148a4b0b..1f71196 100644
--- a/media/renderers/paint_canvas_video_renderer.cc
+++ b/media/renderers/paint_canvas_video_renderer.cc
@@ -69,7 +69,7 @@
 class SyncTokenClientImpl : public VideoFrame::SyncTokenClient {
  public:
   explicit SyncTokenClientImpl(gpu::gles2::GLES2Interface* gl) : gl_(gl) {}
-  ~SyncTokenClientImpl() override {}
+  ~SyncTokenClientImpl() override = default;
   void GenerateSyncToken(gpu::SyncToken* sync_token) override {
     const uint64_t fence_sync = gl_->InsertFenceSyncCHROMIUM();
     gl_->ShallowFlushCHROMIUM();
@@ -232,7 +232,7 @@
         frame_(frame) {
     DCHECK(!frame_->HasTextures());
   }
-  ~VideoImageGenerator() override {}
+  ~VideoImageGenerator() override = default;
 
   sk_sp<SkData> GetEncodedData() const override { return nullptr; }
 
diff --git a/media/renderers/paint_canvas_video_renderer_unittest.cc b/media/renderers/paint_canvas_video_renderer_unittest.cc
index 48032ee4..a64c756 100644
--- a/media/renderers/paint_canvas_video_renderer_unittest.cc
+++ b/media/renderers/paint_canvas_video_renderer_unittest.cc
@@ -219,7 +219,7 @@
                    cropped_frame()->stride(VideoFrame::kVPlane), 16, 16);
 }
 
-PaintCanvasVideoRendererTest::~PaintCanvasVideoRendererTest() {}
+PaintCanvasVideoRendererTest::~PaintCanvasVideoRendererTest() = default;
 
 void PaintCanvasVideoRendererTest::PaintWithoutFrame(cc::PaintCanvas* canvas) {
   cc::PaintFlags flags;
diff --git a/media/renderers/renderer_impl_unittest.cc b/media/renderers/renderer_impl_unittest.cc
index 21529d3..0295ef7 100644
--- a/media/renderers/renderer_impl_unittest.cc
+++ b/media/renderers/renderer_impl_unittest.cc
@@ -59,8 +59,8 @@
   // also lets us test for missing callbacks.
   class CallbackHelper : public MockRendererClient {
    public:
-    CallbackHelper() {}
-    virtual ~CallbackHelper() {}
+    CallbackHelper() = default;
+    virtual ~CallbackHelper() = default;
 
     // Completion callbacks.
     MOCK_METHOD1(OnInitialize, void(PipelineStatus));
diff --git a/media/renderers/video_overlay_factory.cc b/media/renderers/video_overlay_factory.cc
index c594172..6f5ff3b 100644
--- a/media/renderers/video_overlay_factory.cc
+++ b/media/renderers/video_overlay_factory.cc
@@ -81,7 +81,7 @@
     GpuVideoAcceleratorFactories* gpu_factories)
     : gpu_factories_(gpu_factories) {}
 
-VideoOverlayFactory::~VideoOverlayFactory() {}
+VideoOverlayFactory::~VideoOverlayFactory() = default;
 
 scoped_refptr<VideoFrame> VideoOverlayFactory::CreateFrame(
     const gfx::Size& size) {
diff --git a/media/renderers/video_renderer_impl_unittest.cc b/media/renderers/video_renderer_impl_unittest.cc
index 2653a8b..a2dd42c 100644
--- a/media/renderers/video_renderer_impl_unittest.cc
+++ b/media/renderers/video_renderer_impl_unittest.cc
@@ -111,7 +111,7 @@
                        scoped_refptr<DecoderBuffer>(new DecoderBuffer(0))));
   }
 
-  virtual ~VideoRendererImplTest() {}
+  virtual ~VideoRendererImplTest() = default;
 
   void Initialize() {
     InitializeWithLowDelay(false);
@@ -795,8 +795,8 @@
 
 class TestMemoryPressureMonitor : public base::MemoryPressureMonitor {
  public:
-  TestMemoryPressureMonitor() {}
-  ~TestMemoryPressureMonitor() override {}
+  TestMemoryPressureMonitor() = default;
+  ~TestMemoryPressureMonitor() override = default;
 
   MemoryPressureLevel GetCurrentPressureLevel() override {
     return base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE;
diff --git a/media/test/fake_encrypted_media.cc b/media/test/fake_encrypted_media.cc
index 0445c3a..70cc7a9 100644
--- a/media/test/fake_encrypted_media.cc
+++ b/media/test/fake_encrypted_media.cc
@@ -34,7 +34,7 @@
       cdm_context_(decryptor_.get()),
       app_(app) {}
 
-FakeEncryptedMedia::~FakeEncryptedMedia() {}
+FakeEncryptedMedia::~FakeEncryptedMedia() = default;
 
 CdmContext* FakeEncryptedMedia::GetCdmContext() {
   return &cdm_context_;
diff --git a/media/test/mock_media_source.cc b/media/test/mock_media_source.cc
index 4d41792c..d983983c 100644
--- a/media/test/mock_media_source.cc
+++ b/media/test/mock_media_source.cc
@@ -57,7 +57,7 @@
   CHECK_LE(initial_append_size_, file_data_->data_size());
 }
 
-MockMediaSource::~MockMediaSource() {}
+MockMediaSource::~MockMediaSource() = default;
 
 std::unique_ptr<Demuxer> MockMediaSource::GetDemuxer() {
   return std::move(owned_chunk_demuxer_);
diff --git a/media/test/pipeline_integration_fuzzertest.cc b/media/test/pipeline_integration_fuzzertest.cc
index 05d3923..4550616 100644
--- a/media/test/pipeline_integration_fuzzertest.cc
+++ b/media/test/pipeline_integration_fuzzertest.cc
@@ -133,7 +133,8 @@
         BindToCurrentLoop(base::BindRepeating(&OnAudioPlayDelay, this)));
   }
 
-  ~ProgressivePipelineIntegrationFuzzerTest() override{};
+  ~ProgressivePipelineIntegrationFuzzerTest() override = default;
+  ;
 
   void RunTest(const uint8_t* data, size_t size) {
     if (PIPELINE_OK != Start(data, size, kUnreliableDuration))
@@ -157,7 +158,8 @@
         BindToCurrentLoop(base::BindRepeating(&OnAudioPlayDelay, this)));
   }
 
-  ~MediaSourcePipelineIntegrationFuzzerTest() override{};
+  ~MediaSourcePipelineIntegrationFuzzerTest() override = default;
+  ;
 
   void RunTest(const uint8_t* data, size_t size, const std::string& mimetype) {
     if (size == 0)
diff --git a/media/test/pipeline_integration_test.cc b/media/test/pipeline_integration_test.cc
index c4122a8..eb4ecda 100644
--- a/media/test/pipeline_integration_test.cc
+++ b/media/test/pipeline_integration_test.cc
@@ -214,7 +214,7 @@
 // Provides the test key in response to the encrypted event.
 class KeyProvidingApp : public FakeEncryptedMedia::AppBase {
  public:
-  KeyProvidingApp() {}
+  KeyProvidingApp() = default;
 
   void OnResolveWithSession(PromiseResult expected,
                             const std::string& session_id) {
diff --git a/media/test/pipeline_integration_test_base.cc b/media/test/pipeline_integration_test_base.cc
index eb82c6a..9343866 100644
--- a/media/test/pipeline_integration_test_base.cc
+++ b/media/test/pipeline_integration_test_base.cc
@@ -103,7 +103,7 @@
  public:
   explicit RendererFactoryImpl(PipelineIntegrationTestBase* integration_test)
       : integration_test_(integration_test) {}
-  ~RendererFactoryImpl() override {}
+  ~RendererFactoryImpl() override = default;
 
   // PipelineTestRendererFactory implementation.
   std::unique_ptr<Renderer> CreateRenderer(
diff --git a/media/test/run_all_unittests.cc b/media/test/run_all_unittests.cc
index 6c5bdda..ac2abc6 100644
--- a/media/test/run_all_unittests.cc
+++ b/media/test/run_all_unittests.cc
@@ -21,7 +21,7 @@
 class TestSuiteNoAtExit : public base::TestSuite {
  public:
   TestSuiteNoAtExit(int argc, char** argv) : TestSuite(argc, argv) {}
-  ~TestSuiteNoAtExit() override {}
+  ~TestSuiteNoAtExit() override = default;
 
  protected:
   void Initialize() override;
diff --git a/media/video/gpu_memory_buffer_video_frame_pool.cc b/media/video/gpu_memory_buffer_video_frame_pool.cc
index 8497c2be..10e7b458 100644
--- a/media/video/gpu_memory_buffer_video_frame_pool.cc
+++ b/media/video/gpu_memory_buffer_video_frame_pool.cc
@@ -880,7 +880,7 @@
   }
 }
 
-GpuMemoryBufferVideoFramePool::GpuMemoryBufferVideoFramePool() {}
+GpuMemoryBufferVideoFramePool::GpuMemoryBufferVideoFramePool() = default;
 
 GpuMemoryBufferVideoFramePool::GpuMemoryBufferVideoFramePool(
     const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner,
diff --git a/media/video/gpu_memory_buffer_video_frame_pool_unittest.cc b/media/video/gpu_memory_buffer_video_frame_pool_unittest.cc
index e1f03ec..0bef038 100644
--- a/media/video/gpu_memory_buffer_video_frame_pool_unittest.cc
+++ b/media/video/gpu_memory_buffer_video_frame_pool_unittest.cc
@@ -79,7 +79,7 @@
 
 class GpuMemoryBufferVideoFramePoolTest : public ::testing::Test {
  public:
-  GpuMemoryBufferVideoFramePoolTest() {}
+  GpuMemoryBufferVideoFramePoolTest() = default;
   void SetUp() override {
     // Seed test clock with some dummy non-zero value to avoid confusion with
     // empty base::TimeTicks values.
diff --git a/media/video/h264_bit_reader.cc b/media/video/h264_bit_reader.cc
index 4b7a569e..b3a13719 100644
--- a/media/video/h264_bit_reader.cc
+++ b/media/video/h264_bit_reader.cc
@@ -15,7 +15,7 @@
       prev_two_bytes_(0),
       emulation_prevention_bytes_(0) {}
 
-H264BitReader::~H264BitReader() {}
+H264BitReader::~H264BitReader() = default;
 
 bool H264BitReader::Initialize(const uint8_t* data, off_t size) {
   DCHECK(data);
diff --git a/media/video/h264_parser.cc b/media/video/h264_parser.cc
index 41b518eb..bc84257 100644
--- a/media/video/h264_parser.cc
+++ b/media/video/h264_parser.cc
@@ -215,7 +215,7 @@
   Reset();
 }
 
-H264Parser::~H264Parser() {}
+H264Parser::~H264Parser() = default;
 
 void H264Parser::Reset() {
   stream_ = NULL;
diff --git a/media/video/h264_poc.cc b/media/video/h264_poc.cc
index a363526..8f6c619 100644
--- a/media/video/h264_poc.cc
+++ b/media/video/h264_poc.cc
@@ -45,7 +45,7 @@
   Reset();
 }
 
-H264POC::~H264POC() {}
+H264POC::~H264POC() = default;
 
 void H264POC::Reset() {
   // It shouldn't be necessary to reset these values, but doing so will improve
diff --git a/media/video/half_float_maker.cc b/media/video/half_float_maker.cc
index ee8061f..b200dd0 100644
--- a/media/video/half_float_maker.cc
+++ b/media/video/half_float_maker.cc
@@ -7,7 +7,7 @@
 
 namespace media {
 
-HalfFloatMaker::~HalfFloatMaker() {}
+HalfFloatMaker::~HalfFloatMaker() = default;
 
 // By OR-ing with 0x3800, 10-bit numbers become half-floats in the
 // range [0.5..1) and 9-bit numbers get the range [0.5..0.75).
diff --git a/media/video/jpeg_decode_accelerator.cc b/media/video/jpeg_decode_accelerator.cc
index 035c3216..c8629c5 100644
--- a/media/video/jpeg_decode_accelerator.cc
+++ b/media/video/jpeg_decode_accelerator.cc
@@ -6,7 +6,6 @@
 
 namespace media {
 
-JpegDecodeAccelerator::~JpegDecodeAccelerator() {
-}
+JpegDecodeAccelerator::~JpegDecodeAccelerator() = default;
 
 }  // namespace media
diff --git a/media/video/mock_gpu_video_accelerator_factories.cc b/media/video/mock_gpu_video_accelerator_factories.cc
index 56d8f88b..96ce3353 100644
--- a/media/video/mock_gpu_video_accelerator_factories.cc
+++ b/media/video/mock_gpu_video_accelerator_factories.cc
@@ -82,7 +82,7 @@
     gpu::gles2::GLES2Interface* gles2)
     : gles2_(gles2) {}
 
-MockGpuVideoAcceleratorFactories::~MockGpuVideoAcceleratorFactories() {}
+MockGpuVideoAcceleratorFactories::~MockGpuVideoAcceleratorFactories() = default;
 
 bool MockGpuVideoAcceleratorFactories::IsGpuVideoAcceleratorEnabled() {
   return true;
diff --git a/media/video/mock_video_decode_accelerator.cc b/media/video/mock_video_decode_accelerator.cc
index a1a9a2b..0f2f1bb 100644
--- a/media/video/mock_video_decode_accelerator.cc
+++ b/media/video/mock_video_decode_accelerator.cc
@@ -14,7 +14,7 @@
       .WillByDefault(Invoke(this, &MockVideoDecodeAccelerator::DeleteThis));
 }
 
-MockVideoDecodeAccelerator::~MockVideoDecodeAccelerator() {}
+MockVideoDecodeAccelerator::~MockVideoDecodeAccelerator() = default;
 
 void MockVideoDecodeAccelerator::DeleteThis() { delete this; }
 
diff --git a/media/video/mock_video_encode_accelerator.cc b/media/video/mock_video_encode_accelerator.cc
index 8011303..8470833 100644
--- a/media/video/mock_video_encode_accelerator.cc
+++ b/media/video/mock_video_encode_accelerator.cc
@@ -14,7 +14,7 @@
       .WillByDefault(Invoke(this, &MockVideoEncodeAccelerator::DeleteThis));
 }
 
-MockVideoEncodeAccelerator::~MockVideoEncodeAccelerator() {}
+MockVideoEncodeAccelerator::~MockVideoEncodeAccelerator() = default;
 
 void MockVideoEncodeAccelerator::DeleteThis() {
   delete this;
diff --git a/media/video/picture.cc b/media/video/picture.cc
index f207090..dc1d48e 100644
--- a/media/video/picture.cc
+++ b/media/video/picture.cc
@@ -53,7 +53,7 @@
 
 PictureBuffer::PictureBuffer(const PictureBuffer& other) = default;
 
-PictureBuffer::~PictureBuffer() {}
+PictureBuffer::~PictureBuffer() = default;
 
 gpu::Mailbox PictureBuffer::texture_mailbox(size_t plane) const {
   if (plane >= texture_mailboxes_.size()) {
diff --git a/media/video/video_decode_accelerator.cc b/media/video/video_decode_accelerator.cc
index 873e847..55520f8d 100644
--- a/media/video/video_decode_accelerator.cc
+++ b/media/video/video_decode_accelerator.cc
@@ -29,7 +29,7 @@
   NOTREACHED() << "By default deferred initialization is not supported.";
 }
 
-VideoDecodeAccelerator::~VideoDecodeAccelerator() {}
+VideoDecodeAccelerator::~VideoDecodeAccelerator() = default;
 
 bool VideoDecodeAccelerator::TryToSetupDecodeOnSeparateThread(
     const base::WeakPtr<Client>& decode_client,
@@ -56,14 +56,14 @@
 VideoDecodeAccelerator::SupportedProfile::SupportedProfile()
     : profile(media::VIDEO_CODEC_PROFILE_UNKNOWN), encrypted_only(false) {}
 
-VideoDecodeAccelerator::SupportedProfile::~SupportedProfile() {}
+VideoDecodeAccelerator::SupportedProfile::~SupportedProfile() = default;
 
 VideoDecodeAccelerator::Capabilities::Capabilities() : flags(NO_FLAGS) {}
 
 VideoDecodeAccelerator::Capabilities::Capabilities(const Capabilities& other) =
     default;
 
-VideoDecodeAccelerator::Capabilities::~Capabilities() {}
+VideoDecodeAccelerator::Capabilities::~Capabilities() = default;
 
 std::string VideoDecodeAccelerator::Capabilities::AsHumanReadableString()
     const {
diff --git a/media/video/video_encode_accelerator.cc b/media/video/video_encode_accelerator.cc
index 186645c..1285078 100644
--- a/media/video/video_encode_accelerator.cc
+++ b/media/video/video_encode_accelerator.cc
@@ -8,7 +8,7 @@
 
 namespace media {
 
-VideoEncodeAccelerator::~VideoEncodeAccelerator() {}
+VideoEncodeAccelerator::~VideoEncodeAccelerator() = default;
 
 VideoEncodeAccelerator::SupportedProfile::SupportedProfile()
     : profile(media::VIDEO_CODEC_PROFILE_UNKNOWN),
@@ -16,8 +16,7 @@
       max_framerate_denominator(0) {
 }
 
-VideoEncodeAccelerator::SupportedProfile::~SupportedProfile() {
-}
+VideoEncodeAccelerator::SupportedProfile::~SupportedProfile() = default;
 
 bool VideoEncodeAccelerator::TryToSetupEncodeOnSeparateThread(
     const base::WeakPtr<Client>& encode_client,
diff --git a/mojo/public/tools/bindings/pylib/mojom/generate/pack.py b/mojo/public/tools/bindings/pylib/mojom/generate/pack.py
index 37dc8f3..e4204a0 100644
--- a/mojo/public/tools/bindings/pylib/mojom/generate/pack.py
+++ b/mojo/public/tools/bindings/pylib/mojom/generate/pack.py
@@ -56,7 +56,8 @@
       # TODO(mpcomplete): what about big enums?
       return cls.kind_to_size[mojom.INT32]
     if not kind in cls.kind_to_size:
-      raise Exception("Invalid kind: %s" % kind.spec)
+      raise Exception("Undefined type: %s. Did you forget to import the file "
+                      "containing the definition?" % kind.spec)
     return cls.kind_to_size[kind]
 
   @classmethod
diff --git a/net/base/address_list.cc b/net/base/address_list.cc
index 13a79660..6a69714 100644
--- a/net/base/address_list.cc
+++ b/net/base/address_list.cc
@@ -33,11 +33,11 @@
 
 }  // namespace
 
-AddressList::AddressList() {}
+AddressList::AddressList() = default;
 
 AddressList::AddressList(const AddressList&) = default;
 
-AddressList::~AddressList() {}
+AddressList::~AddressList() = default;
 
 AddressList::AddressList(const IPEndPoint& endpoint) {
   push_back(endpoint);
diff --git a/net/base/address_tracker_linux_unittest.cc b/net/base/address_tracker_linux_unittest.cc
index 88031c7..cad81e53 100644
--- a/net/base/address_tracker_linux_unittest.cc
+++ b/net/base/address_tracker_linux_unittest.cc
@@ -51,7 +51,7 @@
 
 class AddressTrackerLinuxTest : public testing::Test {
  protected:
-  AddressTrackerLinuxTest() {}
+  AddressTrackerLinuxTest() = default;
 
   void InitializeAddressTracker(bool tracking) {
     if (tracking) {
@@ -696,7 +696,7 @@
         done_(base::WaitableEvent::ResetPolicy::MANUAL,
               base::WaitableEvent::InitialState::NOT_SIGNALED),
         thread_(this, thread_name) {}
-  ~GetCurrentConnectionTypeRunner() override {}
+  ~GetCurrentConnectionTypeRunner() override = default;
 
   void Run() override {
     tracker_->GetCurrentConnectionType();
diff --git a/net/base/arena.cc b/net/base/arena.cc
index 3bf29a7..4632fe5 100644
--- a/net/base/arena.cc
+++ b/net/base/arena.cc
@@ -14,7 +14,7 @@
 
 UnsafeArena::UnsafeArena(size_t block_size) : block_size_(block_size) {}
 
-UnsafeArena::~UnsafeArena() {}
+UnsafeArena::~UnsafeArena() = default;
 
 UnsafeArena::UnsafeArena(UnsafeArena&& other) = default;
 UnsafeArena& UnsafeArena::operator=(UnsafeArena&& other) = default;
@@ -89,7 +89,7 @@
 
 UnsafeArena::Block::Block(size_t s) : data(new char[s]), size(s), used(0) {}
 
-UnsafeArena::Block::~Block() {}
+UnsafeArena::Block::~Block() = default;
 
 UnsafeArena::Block::Block(UnsafeArena::Block&& other)
     : size(other.size), used(other.used) {
diff --git a/net/base/auth.cc b/net/base/auth.cc
index 9815ed59..343d0b5 100644
--- a/net/base/auth.cc
+++ b/net/base/auth.cc
@@ -15,11 +15,9 @@
           this->realm == that.realm);
 }
 
-AuthChallengeInfo::~AuthChallengeInfo() {
-}
+AuthChallengeInfo::~AuthChallengeInfo() = default;
 
-AuthCredentials::AuthCredentials() {
-}
+AuthCredentials::AuthCredentials() = default;
 
 AuthCredentials::AuthCredentials(const base::string16& username,
                                  const base::string16& password)
@@ -27,8 +25,7 @@
       password_(password) {
 }
 
-AuthCredentials::~AuthCredentials() {
-}
+AuthCredentials::~AuthCredentials() = default;
 
 void AuthCredentials::Set(const base::string16& username,
                           const base::string16& password) {
diff --git a/net/base/backoff_entry_serializer_unittest.cc b/net/base/backoff_entry_serializer_unittest.cc
index 3fbd636..e5d22cf 100644
--- a/net/base/backoff_entry_serializer_unittest.cc
+++ b/net/base/backoff_entry_serializer_unittest.cc
@@ -31,8 +31,8 @@
 
 class TestTickClock : public base::TickClock {
  public:
-  TestTickClock() {}
-  ~TestTickClock() override {}
+  TestTickClock() = default;
+  ~TestTickClock() override = default;
 
   TimeTicks NowTicks() override { return now_ticks_; }
   void set_now(TimeTicks now) { now_ticks_ = now; }
diff --git a/net/base/backoff_entry_unittest.cc b/net/base/backoff_entry_unittest.cc
index 29a4281..0bed782e 100644
--- a/net/base/backoff_entry_unittest.cc
+++ b/net/base/backoff_entry_unittest.cc
@@ -19,8 +19,8 @@
 
 class TestTickClock : public base::TickClock {
  public:
-  TestTickClock() {}
-  ~TestTickClock() override {}
+  TestTickClock() = default;
+  ~TestTickClock() override = default;
 
   TimeTicks NowTicks() override { return now_ticks_; }
   void set_now(TimeTicks now) { now_ticks_ = now; }
diff --git a/net/base/chunked_upload_data_stream.cc b/net/base/chunked_upload_data_stream.cc
index 494e495..2bae390 100644
--- a/net/base/chunked_upload_data_stream.cc
+++ b/net/base/chunked_upload_data_stream.cc
@@ -11,7 +11,7 @@
 
 namespace net {
 
-ChunkedUploadDataStream::Writer::~Writer() {}
+ChunkedUploadDataStream::Writer::~Writer() = default;
 
 bool ChunkedUploadDataStream::Writer::AppendData(const char* data,
                                                  int data_len,
@@ -34,8 +34,7 @@
       read_buffer_len_(0),
       weak_factory_(this) {}
 
-ChunkedUploadDataStream::~ChunkedUploadDataStream() {
-}
+ChunkedUploadDataStream::~ChunkedUploadDataStream() = default;
 
 std::unique_ptr<ChunkedUploadDataStream::Writer>
 ChunkedUploadDataStream::CreateWriter() {
diff --git a/net/base/directory_lister.cc b/net/base/directory_lister.cc
index e776c15..98a90e67 100644
--- a/net/base/directory_lister.cc
+++ b/net/base/directory_lister.cc
@@ -101,7 +101,7 @@
   DCHECK(lister_);
 }
 
-DirectoryLister::Core::~Core() {}
+DirectoryLister::Core::~Core() = default;
 
 void DirectoryLister::Core::CancelOnOriginSequence() {
   DCHECK(origin_task_runner_->RunsTasksInCurrentSequence());
diff --git a/net/base/elements_upload_data_stream.cc b/net/base/elements_upload_data_stream.cc
index 78d5637..b9fef7e 100644
--- a/net/base/elements_upload_data_stream.cc
+++ b/net/base/elements_upload_data_stream.cc
@@ -23,8 +23,7 @@
       read_error_(OK),
       weak_ptr_factory_(this) {}
 
-ElementsUploadDataStream::~ElementsUploadDataStream() {
-}
+ElementsUploadDataStream::~ElementsUploadDataStream() = default;
 
 std::unique_ptr<UploadDataStream> ElementsUploadDataStream::CreateWithReader(
     std::unique_ptr<UploadElementReader> reader,
diff --git a/net/base/elements_upload_data_stream_unittest.cc b/net/base/elements_upload_data_stream_unittest.cc
index ea2a8d57..4cf5bf9 100644
--- a/net/base/elements_upload_data_stream_unittest.cc
+++ b/net/base/elements_upload_data_stream_unittest.cc
@@ -72,7 +72,7 @@
         init_result_(OK),
         read_result_(OK) {}
 
-  ~MockUploadElementReader() override {}
+  ~MockUploadElementReader() override = default;
 
   // UploadElementReader overrides.
   MOCK_METHOD1(Init, int(const CompletionCallback& callback));
diff --git a/net/base/file_stream_context.cc b/net/base/file_stream_context.cc
index 651c8be..9745e291 100644
--- a/net/base/file_stream_context.cc
+++ b/net/base/file_stream_context.cc
@@ -47,8 +47,7 @@
 
 // ---------------------------------------------------------------------
 
-FileStream::Context::OpenResult::OpenResult() {
-}
+FileStream::Context::OpenResult::OpenResult() = default;
 
 FileStream::Context::OpenResult::OpenResult(base::File file,
                                             IOResult error_code)
diff --git a/net/base/file_stream_context_posix.cc b/net/base/file_stream_context_posix.cc
index 80fdf80..20dc04d 100644
--- a/net/base/file_stream_context_posix.cc
+++ b/net/base/file_stream_context_posix.cc
@@ -35,8 +35,7 @@
       orphaned_(false),
       task_runner_(task_runner) {}
 
-FileStream::Context::~Context() {
-}
+FileStream::Context::~Context() = default;
 
 int FileStream::Context::Read(IOBuffer* in_buf,
                               int buf_len,
diff --git a/net/base/host_mapping_rules.cc b/net/base/host_mapping_rules.cc
index b8fef17..8915f3a6 100644
--- a/net/base/host_mapping_rules.cc
+++ b/net/base/host_mapping_rules.cc
@@ -26,12 +26,12 @@
   std::string hostname_pattern;
 };
 
-HostMappingRules::HostMappingRules() {}
+HostMappingRules::HostMappingRules() = default;
 
 HostMappingRules::HostMappingRules(const HostMappingRules& host_mapping_rules) =
     default;
 
-HostMappingRules::~HostMappingRules() {}
+HostMappingRules::~HostMappingRules() = default;
 
 HostMappingRules& HostMappingRules::operator=(
     const HostMappingRules& host_mapping_rules) = default;
diff --git a/net/base/io_buffer.cc b/net/base/io_buffer.cc
index 02c0d8e2..6337be54 100644
--- a/net/base/io_buffer.cc
+++ b/net/base/io_buffer.cc
@@ -70,8 +70,7 @@
   AssertValidBufferSize(size);
 }
 
-IOBufferWithSize::~IOBufferWithSize() {
-}
+IOBufferWithSize::~IOBufferWithSize() = default;
 
 StringIOBuffer::StringIOBuffer(const std::string& s)
     : IOBuffer(static_cast<char*>(NULL)),
diff --git a/net/base/ip_address.cc b/net/base/ip_address.cc
index 2345645..5443206 100644
--- a/net/base/ip_address.cc
+++ b/net/base/ip_address.cc
@@ -139,7 +139,7 @@
   Assign(data, data_len);
 }
 
-IPAddressBytes::~IPAddressBytes() {}
+IPAddressBytes::~IPAddressBytes() = default;
 IPAddressBytes::IPAddressBytes(IPAddressBytes const& other) = default;
 
 void IPAddressBytes::Assign(const uint8_t* data, size_t data_len) {
@@ -163,7 +163,7 @@
   return !(*this == other);
 }
 
-IPAddress::IPAddress() {}
+IPAddress::IPAddress() = default;
 
 IPAddress::IPAddress(const IPAddress& other) = default;
 
@@ -213,7 +213,7 @@
   ip_address_.push_back(b15);
 }
 
-IPAddress::~IPAddress() {}
+IPAddress::~IPAddress() = default;
 
 bool IPAddress::IsIPv4() const {
   return ip_address_.size() == kIPv4AddressSize;
diff --git a/net/base/ip_endpoint.cc b/net/base/ip_endpoint.cc
index e24a5d6f..b3866b9 100644
--- a/net/base/ip_endpoint.cc
+++ b/net/base/ip_endpoint.cc
@@ -82,7 +82,7 @@
 
 IPEndPoint::IPEndPoint() : port_(0) {}
 
-IPEndPoint::~IPEndPoint() {}
+IPEndPoint::~IPEndPoint() = default;
 
 IPEndPoint::IPEndPoint(const IPAddress& address, uint16_t port)
     : address_(address), port_(port) {}
diff --git a/net/base/ip_pattern.cc b/net/base/ip_pattern.cc
index bba6b241..67c21503 100644
--- a/net/base/ip_pattern.cc
+++ b/net/base/ip_pattern.cc
@@ -37,7 +37,7 @@
   DISALLOW_COPY_AND_ASSIGN(ComponentPattern);
 };
 
-IPPattern::ComponentPattern::ComponentPattern() {}
+IPPattern::ComponentPattern::ComponentPattern() = default;
 
 void IPPattern::ComponentPattern::AppendRange(uint32_t min, uint32_t max) {
   ranges_.push_back(Range(min, max));
@@ -56,7 +56,7 @@
 
 IPPattern::IPPattern() : is_ipv4_(true) {}
 
-IPPattern::~IPPattern() {}
+IPPattern::~IPPattern() = default;
 
 bool IPPattern::Match(const IPAddress& address) const {
   if (ip_mask_.empty())
diff --git a/net/base/layered_network_delegate.cc b/net/base/layered_network_delegate.cc
index 2831dca8..46bd4b2 100644
--- a/net/base/layered_network_delegate.cc
+++ b/net/base/layered_network_delegate.cc
@@ -12,8 +12,7 @@
     std::unique_ptr<NetworkDelegate> nested_network_delegate)
     : nested_network_delegate_(std::move(nested_network_delegate)) {}
 
-LayeredNetworkDelegate::~LayeredNetworkDelegate() {
-}
+LayeredNetworkDelegate::~LayeredNetworkDelegate() = default;
 
 int LayeredNetworkDelegate::OnBeforeURLRequest(
     URLRequest* request,
diff --git a/net/base/layered_network_delegate_unittest.cc b/net/base/layered_network_delegate_unittest.cc
index ebf1b41..e4859b1d 100644
--- a/net/base/layered_network_delegate_unittest.cc
+++ b/net/base/layered_network_delegate_unittest.cc
@@ -37,7 +37,7 @@
   TestNetworkDelegateImpl(CountersMap* layered_network_delegate_counters)
       : layered_network_delegate_counters_(layered_network_delegate_counters) {}
 
-  ~TestNetworkDelegateImpl() override {}
+  ~TestNetworkDelegateImpl() override = default;
 
   // NetworkDelegateImpl implementation:
   int OnBeforeURLRequest(URLRequest* request,
@@ -172,7 +172,7 @@
     context_.Init();
   }
 
-  ~TestLayeredNetworkDelegate() override {}
+  ~TestLayeredNetworkDelegate() override = default;
 
   void CallAndVerify() {
     scoped_refptr<AuthChallengeInfo> auth_challenge(new AuthChallengeInfo());
diff --git a/net/base/load_timing_info.cc b/net/base/load_timing_info.cc
index 875acdd..5ce74ca 100644
--- a/net/base/load_timing_info.cc
+++ b/net/base/load_timing_info.cc
@@ -8,15 +8,15 @@
 
 namespace net {
 
-LoadTimingInfo::ConnectTiming::ConnectTiming() {}
+LoadTimingInfo::ConnectTiming::ConnectTiming() = default;
 
-LoadTimingInfo::ConnectTiming::~ConnectTiming() {}
+LoadTimingInfo::ConnectTiming::~ConnectTiming() = default;
 
 LoadTimingInfo::LoadTimingInfo()
     : socket_reused(false), socket_log_id(NetLogSource::kInvalidId) {}
 
 LoadTimingInfo::LoadTimingInfo(const LoadTimingInfo& other) = default;
 
-LoadTimingInfo::~LoadTimingInfo() {}
+LoadTimingInfo::~LoadTimingInfo() = default;
 
 }  // namespace net
diff --git a/net/base/lookup_string_in_fixed_set.cc b/net/base/lookup_string_in_fixed_set.cc
index 5c145f8..889c2d3 100644
--- a/net/base/lookup_string_in_fixed_set.cc
+++ b/net/base/lookup_string_in_fixed_set.cc
@@ -79,7 +79,7 @@
 FixedSetIncrementalLookup& FixedSetIncrementalLookup::operator=(
     const FixedSetIncrementalLookup& other) = default;
 
-FixedSetIncrementalLookup::~FixedSetIncrementalLookup() {}
+FixedSetIncrementalLookup::~FixedSetIncrementalLookup() = default;
 
 bool FixedSetIncrementalLookup::Advance(char input) {
   if (!pos_) {
diff --git a/net/base/mime_util.cc b/net/base/mime_util.cc
index 6d403784..f1c08b8 100644
--- a/net/base/mime_util.cc
+++ b/net/base/mime_util.cc
@@ -264,7 +264,7 @@
   return false;
 }
 
-MimeUtil::MimeUtil() {}
+MimeUtil::MimeUtil() = default;
 
 // Tests for MIME parameter equality. Each parameter in the |mime_type_pattern|
 // must be matched by a parameter in the |mime_type|. If there are no
diff --git a/net/base/mock_file_stream.cc b/net/base/mock_file_stream.cc
index 5947c79..67b8eff 100644
--- a/net/base/mock_file_stream.cc
+++ b/net/base/mock_file_stream.cc
@@ -33,8 +33,7 @@
       throttled_(false),
       weak_factory_(this) {}
 
-MockFileStream::~MockFileStream() {
-}
+MockFileStream::~MockFileStream() = default;
 
 int MockFileStream::Seek(int64_t offset,
                          const Int64CompletionCallback& callback) {
diff --git a/net/base/mock_network_change_notifier.cc b/net/base/mock_network_change_notifier.cc
index b01fda9..65e3f96 100644
--- a/net/base/mock_network_change_notifier.cc
+++ b/net/base/mock_network_change_notifier.cc
@@ -12,7 +12,7 @@
 MockNetworkChangeNotifier::MockNetworkChangeNotifier()
     : force_network_handles_supported_(false),
       connection_type_(CONNECTION_UNKNOWN) {}
-MockNetworkChangeNotifier::~MockNetworkChangeNotifier() {}
+MockNetworkChangeNotifier::~MockNetworkChangeNotifier() = default;
 
 MockNetworkChangeNotifier::ConnectionType
 MockNetworkChangeNotifier::GetCurrentConnectionType() const {
@@ -77,7 +77,7 @@
           new NetworkChangeNotifier::DisableForTest()),
       mock_network_change_notifier_(new MockNetworkChangeNotifier()) {}
 
-ScopedMockNetworkChangeNotifier::~ScopedMockNetworkChangeNotifier() {}
+ScopedMockNetworkChangeNotifier::~ScopedMockNetworkChangeNotifier() = default;
 
 MockNetworkChangeNotifier*
 ScopedMockNetworkChangeNotifier::mock_network_change_notifier() {
diff --git a/net/base/network_activity_monitor.cc b/net/base/network_activity_monitor.cc
index 78da8c8d..4a37d91 100644
--- a/net/base/network_activity_monitor.cc
+++ b/net/base/network_activity_monitor.cc
@@ -17,8 +17,7 @@
     : bytes_received_(0), bytes_sent_(0) {
 }
 
-NetworkActivityMonitor::~NetworkActivityMonitor() {
-}
+NetworkActivityMonitor::~NetworkActivityMonitor() = default;
 
 // static
 NetworkActivityMonitor* NetworkActivityMonitor::GetInstance() {
diff --git a/net/base/network_change_notifier.cc b/net/base/network_change_notifier.cc
index 4843dd5..190b420 100644
--- a/net/base/network_change_notifier.cc
+++ b/net/base/network_change_notifier.cc
@@ -392,8 +392,8 @@
 // NetworkState is thread safe.
 class NetworkChangeNotifier::NetworkState {
  public:
-  NetworkState() {}
-  ~NetworkState() {}
+  NetworkState() = default;
+  ~NetworkState() = default;
 
   void GetDnsConfig(DnsConfig* config) const {
     base::AutoLock lock(lock_);
@@ -411,8 +411,7 @@
 };
 
 NetworkChangeNotifier::NetworkChangeCalculatorParams::
-    NetworkChangeCalculatorParams() {
-}
+    NetworkChangeCalculatorParams() = default;
 
 // Calculates NetworkChange signal from IPAddress and ConnectionType signals.
 class NetworkChangeNotifier::NetworkChangeCalculator
diff --git a/net/base/network_interfaces.cc b/net/base/network_interfaces.cc
index ccbd66a..8ba3df11 100644
--- a/net/base/network_interfaces.cc
+++ b/net/base/network_interfaces.cc
@@ -38,11 +38,9 @@
 
 NetworkInterface::NetworkInterface(const NetworkInterface& other) = default;
 
-NetworkInterface::~NetworkInterface() {
-}
+NetworkInterface::~NetworkInterface() = default;
 
-ScopedWifiOptions::~ScopedWifiOptions() {
-}
+ScopedWifiOptions::~ScopedWifiOptions() = default;
 
 std::string GetHostName() {
 #if defined(OS_NACL)
diff --git a/net/base/network_throttle_manager_impl.cc b/net/base/network_throttle_manager_impl.cc
index 7eb7257d..4c96573b0 100644
--- a/net/base/network_throttle_manager_impl.cc
+++ b/net/base/network_throttle_manager_impl.cc
@@ -159,7 +159,7 @@
       tick_clock_(new base::DefaultTickClock()),
       weak_ptr_factory_(this) {}
 
-NetworkThrottleManagerImpl::~NetworkThrottleManagerImpl() {}
+NetworkThrottleManagerImpl::~NetworkThrottleManagerImpl() = default;
 
 std::unique_ptr<NetworkThrottleManager::Throttle>
 NetworkThrottleManagerImpl::CreateThrottle(
diff --git a/net/base/percentile_estimator.cc b/net/base/percentile_estimator.cc
index 7b3d9cf..216d6e6 100644
--- a/net/base/percentile_estimator.cc
+++ b/net/base/percentile_estimator.cc
@@ -55,7 +55,7 @@
       current_step_(1),
       generator_callback_(base::Bind(&GenerateRand0To99)) {}
 
-PercentileEstimator::~PercentileEstimator() {}
+PercentileEstimator::~PercentileEstimator() = default;
 
 void PercentileEstimator::AddSample(int sample) {
   int rand100 = generator_callback_.Run();
diff --git a/net/base/prioritized_dispatcher.cc b/net/base/prioritized_dispatcher.cc
index a6125a0..747a454 100644
--- a/net/base/prioritized_dispatcher.cc
+++ b/net/base/prioritized_dispatcher.cc
@@ -14,7 +14,7 @@
 
 PrioritizedDispatcher::Limits::Limits(const Limits& other) = default;
 
-PrioritizedDispatcher::Limits::~Limits() {}
+PrioritizedDispatcher::Limits::~Limits() = default;
 
 PrioritizedDispatcher::PrioritizedDispatcher(const Limits& limits)
     : queue_(limits.reserved_slots.size()),
@@ -23,7 +23,7 @@
   SetLimits(limits);
 }
 
-PrioritizedDispatcher::~PrioritizedDispatcher() {}
+PrioritizedDispatcher::~PrioritizedDispatcher() = default;
 
 PrioritizedDispatcher::Handle PrioritizedDispatcher::Add(
     Job* job, Priority priority) {
diff --git a/net/base/test_completion_callback.cc b/net/base/test_completion_callback.cc
index c50ba8c..ad56508 100644
--- a/net/base/test_completion_callback.cc
+++ b/net/base/test_completion_callback.cc
@@ -35,8 +35,8 @@
     : have_result_(false) {
 }
 
-TestCompletionCallbackBaseInternal::~TestCompletionCallbackBaseInternal() {
-}
+TestCompletionCallbackBaseInternal::~TestCompletionCallbackBaseInternal() =
+    default;
 
 }  // namespace internal
 
@@ -44,31 +44,27 @@
     : closure_(base::Bind(&TestClosure::DidSetResult, base::Unretained(this))) {
 }
 
-TestClosure::~TestClosure() {
-}
+TestClosure::~TestClosure() = default;
 
 TestCompletionCallback::TestCompletionCallback()
     : callback_(base::Bind(&TestCompletionCallback::SetResult,
                            base::Unretained(this))) {
 }
 
-TestCompletionCallback::~TestCompletionCallback() {
-}
+TestCompletionCallback::~TestCompletionCallback() = default;
 
 TestInt64CompletionCallback::TestInt64CompletionCallback()
     : callback_(base::Bind(&TestInt64CompletionCallback::SetResult,
                            base::Unretained(this))) {
 }
 
-TestInt64CompletionCallback::~TestInt64CompletionCallback() {
-}
+TestInt64CompletionCallback::~TestInt64CompletionCallback() = default;
 
 ReleaseBufferCompletionCallback::ReleaseBufferCompletionCallback(
     IOBuffer* buffer) : buffer_(buffer) {
 }
 
-ReleaseBufferCompletionCallback::~ReleaseBufferCompletionCallback() {
-}
+ReleaseBufferCompletionCallback::~ReleaseBufferCompletionCallback() = default;
 
 void ReleaseBufferCompletionCallback::SetResult(int result) {
   if (!buffer_->HasOneRef())
diff --git a/net/base/test_completion_callback_unittest.cc b/net/base/test_completion_callback_unittest.cc
index db62f7e..a0ac0b5 100644
--- a/net/base/test_completion_callback_unittest.cc
+++ b/net/base/test_completion_callback_unittest.cc
@@ -59,7 +59,7 @@
  private:
   friend class base::RefCountedThreadSafe<ExampleWorker>;
 
-  ~ExampleWorker() {}
+  ~ExampleWorker() = default;
 
   // Only used on the origin thread (where DoSomething was called).
   ExampleEmployer* employer_;
@@ -87,11 +87,9 @@
   callback_.Run(kMagicResult);
 }
 
-ExampleEmployer::ExampleEmployer() {
-}
+ExampleEmployer::ExampleEmployer() = default;
 
-ExampleEmployer::~ExampleEmployer() {
-}
+ExampleEmployer::~ExampleEmployer() = default;
 
 bool ExampleEmployer::DoSomething(const CompletionCallback& callback) {
   DCHECK(!request_.get()) << "already in use";
diff --git a/net/base/test_proxy_delegate.cc b/net/base/test_proxy_delegate.cc
index ffde618b..35d7f643 100644
--- a/net/base/test_proxy_delegate.cc
+++ b/net/base/test_proxy_delegate.cc
@@ -16,7 +16,7 @@
       on_tunnel_headers_received_called_(false),
       get_alternative_proxy_invocations_(0) {}
 
-TestProxyDelegate::~TestProxyDelegate() {}
+TestProxyDelegate::~TestProxyDelegate() = default;
 
 void TestProxyDelegate::VerifyOnTunnelRequestCompleted(
     const std::string& endpoint,
diff --git a/net/base/upload_bytes_element_reader.cc b/net/base/upload_bytes_element_reader.cc
index b8b0f010..29d3bd3 100644
--- a/net/base/upload_bytes_element_reader.cc
+++ b/net/base/upload_bytes_element_reader.cc
@@ -15,8 +15,7 @@
     : bytes_(bytes), length_(length), offset_(0) {
 }
 
-UploadBytesElementReader::~UploadBytesElementReader() {
-}
+UploadBytesElementReader::~UploadBytesElementReader() = default;
 
 const UploadBytesElementReader*
 UploadBytesElementReader::AsBytesReader() const {
@@ -64,7 +63,7 @@
   data_.swap(*data);
 }
 
-UploadOwnedBytesElementReader::~UploadOwnedBytesElementReader() {}
+UploadOwnedBytesElementReader::~UploadOwnedBytesElementReader() = default;
 
 UploadOwnedBytesElementReader*
 UploadOwnedBytesElementReader::CreateWithString(const std::string& string) {
diff --git a/net/base/upload_data_stream.cc b/net/base/upload_data_stream.cc
index 8b5a989..e6ecb73d 100644
--- a/net/base/upload_data_stream.cc
+++ b/net/base/upload_data_stream.cc
@@ -48,8 +48,7 @@
       is_eof_(false) {
 }
 
-UploadDataStream::~UploadDataStream() {
-}
+UploadDataStream::~UploadDataStream() = default;
 
 int UploadDataStream::Init(const CompletionCallback& callback,
                            const NetLogWithSource& net_log) {
diff --git a/net/base/upload_file_element_reader.cc b/net/base/upload_file_element_reader.cc
index 0b94663..26d08dba 100644
--- a/net/base/upload_file_element_reader.cc
+++ b/net/base/upload_file_element_reader.cc
@@ -64,8 +64,7 @@
   DCHECK(task_runner_.get());
 }
 
-UploadFileElementReader::~UploadFileElementReader() {
-}
+UploadFileElementReader::~UploadFileElementReader() = default;
 
 const UploadFileElementReader* UploadFileElementReader::AsFileReader() const {
   return this;
diff --git a/net/base/url_util.cc b/net/base/url_util.cc
index ac19306c..565788b 100644
--- a/net/base/url_util.cc
+++ b/net/base/url_util.cc
@@ -102,8 +102,7 @@
   }
 }
 
-QueryIterator::~QueryIterator() {
-}
+QueryIterator::~QueryIterator() = default;
 
 std::string QueryIterator::GetKey() const {
   DCHECK(!at_end_);
diff --git a/net/base/url_util_unittest.cc b/net/base/url_util_unittest.cc
index 3a7a1b4..cee4bb22 100644
--- a/net/base/url_util_unittest.cc
+++ b/net/base/url_util_unittest.cc
@@ -367,7 +367,7 @@
 class UrlUtilNonUniqueNameTest
     : public testing::TestWithParam<NonUniqueNameTestData> {
  public:
-  virtual ~UrlUtilNonUniqueNameTest() {}
+  virtual ~UrlUtilNonUniqueNameTest() = default;
 
  protected:
   bool IsUnique(const std::string& hostname) {
diff --git a/net/cert/caching_cert_verifier.cc b/net/cert/caching_cert_verifier.cc
index 15a48ae..f08d5f91 100644
--- a/net/cert/caching_cert_verifier.cc
+++ b/net/cert/caching_cert_verifier.cc
@@ -88,7 +88,7 @@
 
 CachingCertVerifier::CachedResult::CachedResult() : error(ERR_FAILED) {}
 
-CachingCertVerifier::CachedResult::~CachedResult() {}
+CachingCertVerifier::CachedResult::~CachedResult() = default;
 
 CachingCertVerifier::CacheValidityPeriod::CacheValidityPeriod(base::Time now)
     : verification_time(now), expiration_time(now) {}
diff --git a/net/cert/caching_cert_verifier_unittest.cc b/net/cert/caching_cert_verifier_unittest.cc
index 1347659..354059f 100644
--- a/net/cert/caching_cert_verifier_unittest.cc
+++ b/net/cert/caching_cert_verifier_unittest.cc
@@ -33,8 +33,8 @@
 
 class MockCacheVisitor : public CachingCertVerifier::CacheVisitor {
  public:
-  MockCacheVisitor() {}
-  ~MockCacheVisitor() override {}
+  MockCacheVisitor() = default;
+  ~MockCacheVisitor() override = default;
 
   MOCK_METHOD5(VisitEntry,
                bool(const CachingCertVerifier::RequestParams& params,
@@ -49,7 +49,7 @@
 class CachingCertVerifierTest : public ::testing::Test {
  public:
   CachingCertVerifierTest() : verifier_(std::make_unique<MockCertVerifier>()) {}
-  ~CachingCertVerifierTest() override {}
+  ~CachingCertVerifierTest() override = default;
 
  protected:
   CachingCertVerifier verifier_;
diff --git a/net/cert/cert_database_nss.cc b/net/cert/cert_database_nss.cc
index cd71820..403ffbe 100644
--- a/net/cert/cert_database_nss.cc
+++ b/net/cert/cert_database_nss.cc
@@ -14,6 +14,6 @@
   crypto::EnsureNSSInit();
 }
 
-CertDatabase::~CertDatabase() {}
+CertDatabase::~CertDatabase() = default;
 
 }  // namespace net
diff --git a/net/cert/cert_verifier.cc b/net/cert/cert_verifier.cc
index 24bb009..5742ee1 100644
--- a/net/cert/cert_verifier.cc
+++ b/net/cert/cert_verifier.cc
@@ -58,7 +58,7 @@
 
 CertVerifier::RequestParams::RequestParams(const RequestParams& other) =
     default;
-CertVerifier::RequestParams::~RequestParams() {}
+CertVerifier::RequestParams::~RequestParams() = default;
 
 bool CertVerifier::RequestParams::operator==(
     const CertVerifier::RequestParams& other) const {
diff --git a/net/cert/cert_verify_proc.cc b/net/cert/cert_verify_proc.cc
index cb97efb4..47562afd 100644
--- a/net/cert/cert_verify_proc.cc
+++ b/net/cert/cert_verify_proc.cc
@@ -465,7 +465,7 @@
 CertVerifyProc::CertVerifyProc()
     : sha1_legacy_mode_enabled(base::FeatureList::IsEnabled(kSHA1LegacyMode)) {}
 
-CertVerifyProc::~CertVerifyProc() {}
+CertVerifyProc::~CertVerifyProc() = default;
 
 int CertVerifyProc::Verify(X509Certificate* cert,
                            const std::string& hostname,
diff --git a/net/cert/cert_verify_proc_builtin.cc b/net/cert/cert_verify_proc_builtin.cc
index 9091d24..a822027 100644
--- a/net/cert/cert_verify_proc_builtin.cc
+++ b/net/cert/cert_verify_proc_builtin.cc
@@ -281,9 +281,9 @@
                      CertVerifyResult* verify_result) override;
 };
 
-CertVerifyProcBuiltin::CertVerifyProcBuiltin() {}
+CertVerifyProcBuiltin::CertVerifyProcBuiltin() = default;
 
-CertVerifyProcBuiltin::~CertVerifyProcBuiltin() {}
+CertVerifyProcBuiltin::~CertVerifyProcBuiltin() = default;
 
 bool CertVerifyProcBuiltin::SupportsAdditionalTrustAnchors() const {
   return true;
diff --git a/net/cert/cert_verify_proc_nss.cc b/net/cert/cert_verify_proc_nss.cc
index 20339e0..dc9a449 100644
--- a/net/cert/cert_verify_proc_nss.cc
+++ b/net/cert/cert_verify_proc_nss.cc
@@ -761,7 +761,7 @@
 {
 }
 
-CertVerifyProcNSS::~CertVerifyProcNSS() {}
+CertVerifyProcNSS::~CertVerifyProcNSS() = default;
 
 bool CertVerifyProcNSS::SupportsAdditionalTrustAnchors() const {
   return true;
diff --git a/net/cert/cert_verify_proc_unittest.cc b/net/cert/cert_verify_proc_unittest.cc
index c5a93bd..e7a8a9cc 100644
--- a/net/cert/cert_verify_proc_unittest.cc
+++ b/net/cert/cert_verify_proc_unittest.cc
@@ -80,7 +80,7 @@
   bool SupportsOCSPStapling() const override { return false; }
 
  protected:
-  ~MockCertVerifyProc() override {}
+  ~MockCertVerifyProc() override = default;
 
  private:
   int VerifyInternal(X509Certificate* cert,
@@ -2102,8 +2102,8 @@
 class CertVerifyProcWeakDigestTest
     : public testing::TestWithParam<WeakDigestTestData> {
  public:
-  CertVerifyProcWeakDigestTest() {}
-  virtual ~CertVerifyProcWeakDigestTest() {}
+  CertVerifyProcWeakDigestTest() = default;
+  virtual ~CertVerifyProcWeakDigestTest() = default;
 };
 
 // Tests that the CertVerifyProc::Verify() properly surfaces the (weak) hash
diff --git a/net/cert/cert_verify_result.cc b/net/cert/cert_verify_result.cc
index 4b60516..22ba649 100644
--- a/net/cert/cert_verify_result.cc
+++ b/net/cert/cert_verify_result.cc
@@ -16,8 +16,7 @@
 
 CertVerifyResult::CertVerifyResult(const CertVerifyResult& other) = default;
 
-CertVerifyResult::~CertVerifyResult() {
-}
+CertVerifyResult::~CertVerifyResult() = default;
 
 void CertVerifyResult::Reset() {
   verified_cert = NULL;
diff --git a/net/cert/crl_set.cc b/net/cert/crl_set.cc
index f20e2ec..a6f3e0e 100644
--- a/net/cert/crl_set.cc
+++ b/net/cert/crl_set.cc
@@ -14,8 +14,7 @@
       not_after_(0) {
 }
 
-CRLSet::~CRLSet() {
-}
+CRLSet::~CRLSet() = default;
 
 CRLSet::Result CRLSet::CheckSPKI(const base::StringPiece& spki_hash) const {
   for (std::vector<std::string>::const_iterator i = blocked_spkis_.begin();
diff --git a/net/cert/ct_verify_result.cc b/net/cert/ct_verify_result.cc
index b376241f..9da8828d 100644
--- a/net/cert/ct_verify_result.cc
+++ b/net/cert/ct_verify_result.cc
@@ -17,7 +17,7 @@
 
 CTVerifyResult::CTVerifyResult(const CTVerifyResult& other) = default;
 
-CTVerifyResult::~CTVerifyResult() {}
+CTVerifyResult::~CTVerifyResult() = default;
 
 SCTList SCTsMatchingStatus(
     const SignedCertificateTimestampAndStatusList& sct_and_status_list,
diff --git a/net/cert/ev_root_ca_metadata.cc b/net/cert/ev_root_ca_metadata.cc
index c4fba64..85c84e1a 100644
--- a/net/cert/ev_root_ca_metadata.cc
+++ b/net/cert/ev_root_ca_metadata.cc
@@ -1096,6 +1096,6 @@
 #endif
 }
 
-EVRootCAMetadata::~EVRootCAMetadata() { }
+EVRootCAMetadata::~EVRootCAMetadata() = default;
 
 }  // namespace net
diff --git a/net/cert/internal/cert_issuer_source_aia.cc b/net/cert/internal/cert_issuer_source_aia.cc
index 34c8fde9..2e22bfe7 100644
--- a/net/cert/internal/cert_issuer_source_aia.cc
+++ b/net/cert/internal/cert_issuer_source_aia.cc
@@ -20,7 +20,7 @@
 
 class AiaRequest : public CertIssuerSource::Request {
  public:
-  AiaRequest() {}
+  AiaRequest() = default;
   ~AiaRequest() override;
 
   // CertIssuerSource::Request implementation.
diff --git a/net/cert/internal/cert_issuer_source_aia_unittest.cc b/net/cert/internal/cert_issuer_source_aia_unittest.cc
index 4240f75..63774b2 100644
--- a/net/cert/internal/cert_issuer_source_aia_unittest.cc
+++ b/net/cert/internal/cert_issuer_source_aia_unittest.cc
@@ -65,7 +65,7 @@
 // MockCertNetFetcher is an implementation of CertNetFetcher for testing.
 class MockCertNetFetcher : public CertNetFetcher {
  public:
-  MockCertNetFetcher() {}
+  MockCertNetFetcher() = default;
   MOCK_METHOD0(Shutdown, void());
   MOCK_METHOD3(FetchCaIssuers,
                std::unique_ptr<Request>(const GURL& url,
@@ -82,7 +82,7 @@
                                         int max_response_bytes));
 
  protected:
-  ~MockCertNetFetcher() override {}
+  ~MockCertNetFetcher() override = default;
 };
 
 // MockCertNetFetcherRequest gives back the indicated error and bytes.
diff --git a/net/cert/internal/general_names.cc b/net/cert/internal/general_names.cc
index 73c34801b..7e13236 100644
--- a/net/cert/internal/general_names.cc
+++ b/net/cert/internal/general_names.cc
@@ -53,9 +53,9 @@
 
 }  // namespace
 
-GeneralNames::GeneralNames() {}
+GeneralNames::GeneralNames() = default;
 
-GeneralNames::~GeneralNames() {}
+GeneralNames::~GeneralNames() = default;
 
 // static
 std::unique_ptr<GeneralNames> GeneralNames::Create(
diff --git a/net/cert/internal/name_constraints.cc b/net/cert/internal/name_constraints.cc
index 586425e..49ab35a 100644
--- a/net/cert/internal/name_constraints.cc
+++ b/net/cert/internal/name_constraints.cc
@@ -163,7 +163,7 @@
 
 }  // namespace
 
-NameConstraints::~NameConstraints() {}
+NameConstraints::~NameConstraints() = default;
 
 // static
 std::unique_ptr<NameConstraints> NameConstraints::Create(
diff --git a/net/cert/internal/ocsp.cc b/net/cert/internal/ocsp.cc
index 49c34ddd..b8e99f1 100644
--- a/net/cert/internal/ocsp.cc
+++ b/net/cert/internal/ocsp.cc
@@ -25,17 +25,17 @@
 
 namespace net {
 
-OCSPCertID::OCSPCertID() {}
-OCSPCertID::~OCSPCertID() {}
+OCSPCertID::OCSPCertID() = default;
+OCSPCertID::~OCSPCertID() = default;
 
-OCSPSingleResponse::OCSPSingleResponse() {}
-OCSPSingleResponse::~OCSPSingleResponse() {}
+OCSPSingleResponse::OCSPSingleResponse() = default;
+OCSPSingleResponse::~OCSPSingleResponse() = default;
 
-OCSPResponseData::OCSPResponseData() {}
-OCSPResponseData::~OCSPResponseData() {}
+OCSPResponseData::OCSPResponseData() = default;
+OCSPResponseData::~OCSPResponseData() = default;
 
-OCSPResponse::OCSPResponse() {}
-OCSPResponse::~OCSPResponse() {}
+OCSPResponse::OCSPResponse() = default;
+OCSPResponse::~OCSPResponse() = default;
 
 der::Input BasicOCSPResponseOid() {
   // From RFC 6960:
diff --git a/net/cert/internal/parse_certificate.cc b/net/cert/internal/parse_certificate.cc
index 504193ad..c9f9f98 100644
--- a/net/cert/internal/parse_certificate.cc
+++ b/net/cert/internal/parse_certificate.cc
@@ -311,9 +311,9 @@
 
 }  // namespace
 
-ParsedTbsCertificate::ParsedTbsCertificate() {}
+ParsedTbsCertificate::ParsedTbsCertificate() = default;
 
-ParsedTbsCertificate::~ParsedTbsCertificate() {}
+ParsedTbsCertificate::~ParsedTbsCertificate() = default;
 
 bool VerifySerialNumber(const der::Input& value,
                         bool warnings_only,
diff --git a/net/cert/internal/parsed_certificate.cc b/net/cert/internal/parsed_certificate.cc
index 9b2f89e..1d84f30 100644
--- a/net/cert/internal/parsed_certificate.cc
+++ b/net/cert/internal/parsed_certificate.cc
@@ -70,8 +70,8 @@
   return true;
 }
 
-ParsedCertificate::ParsedCertificate() {}
-ParsedCertificate::~ParsedCertificate() {}
+ParsedCertificate::ParsedCertificate() = default;
+ParsedCertificate::~ParsedCertificate() = default;
 
 // static
 scoped_refptr<ParsedCertificate> ParsedCertificate::Create(
diff --git a/net/cert/internal/path_builder.cc b/net/cert/internal/path_builder.cc
index 58509e9..15c8874 100644
--- a/net/cert/internal/path_builder.cc
+++ b/net/cert/internal/path_builder.cc
@@ -505,7 +505,7 @@
   AddCertIssuerSource(trust_store);
 }
 
-CertPathBuilder::~CertPathBuilder() {}
+CertPathBuilder::~CertPathBuilder() = default;
 
 void CertPathBuilder::AddCertIssuerSource(
     CertIssuerSource* cert_issuer_source) {
diff --git a/net/cert/internal/path_builder_unittest.cc b/net/cert/internal/path_builder_unittest.cc
index be9e3f79..f384d9a 100644
--- a/net/cert/internal/path_builder_unittest.cc
+++ b/net/cert/internal/path_builder_unittest.cc
@@ -46,7 +46,7 @@
       issuers_.swap(issuers);
       issuers_iter_ = issuers_.begin();
     }
-    ~StaticAsyncRequest() override {}
+    ~StaticAsyncRequest() override = default;
 
     void GetNext(ParsedCertificateList* out_certs) override {
       if (issuers_iter_ != issuers_.end())
@@ -59,7 +59,7 @@
     DISALLOW_COPY_AND_ASSIGN(StaticAsyncRequest);
   };
 
-  ~AsyncCertIssuerSourceStatic() override {}
+  ~AsyncCertIssuerSourceStatic() override = default;
 
   void AddCert(scoped_refptr<ParsedCertificate> cert) {
     static_cert_issuer_source_.AddCert(std::move(cert));
@@ -1158,7 +1158,7 @@
 
 class PathBuilderSimpleChainTest : public ::testing::Test {
  public:
-  PathBuilderSimpleChainTest() {}
+  PathBuilderSimpleChainTest() = default;
 
  protected:
   void SetUp() override {
@@ -1217,7 +1217,7 @@
 // the trustedness of certain certificates.
 class PathBuilderDistrustTest : public PathBuilderSimpleChainTest {
  public:
-  PathBuilderDistrustTest() {}
+  PathBuilderDistrustTest() = default;
 
  protected:
   // Runs the path builder for the target certificate while |distrusted_cert| is
diff --git a/net/cert/internal/signature_algorithm.cc b/net/cert/internal/signature_algorithm.cc
index e2841a41..ec15765 100644
--- a/net/cert/internal/signature_algorithm.cc
+++ b/net/cert/internal/signature_algorithm.cc
@@ -543,8 +543,7 @@
     : mgf1_hash_(mgf1_hash), salt_length_(salt_length) {
 }
 
-SignatureAlgorithm::~SignatureAlgorithm() {
-}
+SignatureAlgorithm::~SignatureAlgorithm() = default;
 
 std::unique_ptr<SignatureAlgorithm> SignatureAlgorithm::Create(
     const der::Input& algorithm_identifier,
diff --git a/net/cert/internal/verify_certificate_chain.cc b/net/cert/internal/verify_certificate_chain.cc
index c0de3588..d01770eb 100644
--- a/net/cert/internal/verify_certificate_chain.cc
+++ b/net/cert/internal/verify_certificate_chain.cc
@@ -228,7 +228,7 @@
 //      the full tree of nodes.
 class ValidPolicyTree {
  public:
-  ValidPolicyTree() {}
+  ValidPolicyTree() = default;
 
   struct Node {
     // |root_policy| is equivalent to |valid_policy|, but in the domain of the
diff --git a/net/cert/merkle_audit_proof.cc b/net/cert/merkle_audit_proof.cc
index 92ead5a..95fd197 100644
--- a/net/cert/merkle_audit_proof.cc
+++ b/net/cert/merkle_audit_proof.cc
@@ -28,7 +28,7 @@
   return length;
 }
 
-MerkleAuditProof::MerkleAuditProof() {}
+MerkleAuditProof::MerkleAuditProof() = default;
 
 MerkleAuditProof::MerkleAuditProof(const MerkleAuditProof& other) = default;
 
diff --git a/net/cert/merkle_consistency_proof.cc b/net/cert/merkle_consistency_proof.cc
index 02f2b18..12ec936 100644
--- a/net/cert/merkle_consistency_proof.cc
+++ b/net/cert/merkle_consistency_proof.cc
@@ -8,7 +8,7 @@
 
 namespace ct {
 
-MerkleConsistencyProof::MerkleConsistencyProof() {}
+MerkleConsistencyProof::MerkleConsistencyProof() = default;
 
 MerkleConsistencyProof::MerkleConsistencyProof(
     const std::string& log_id,
@@ -20,7 +20,7 @@
       first_tree_size(old_size),
       second_tree_size(new_size) {}
 
-MerkleConsistencyProof::~MerkleConsistencyProof() {}
+MerkleConsistencyProof::~MerkleConsistencyProof() = default;
 
 }  // namespace ct
 
diff --git a/net/cert/merkle_tree_leaf.cc b/net/cert/merkle_tree_leaf.cc
index 5fb2eba..07cd469 100644
--- a/net/cert/merkle_tree_leaf.cc
+++ b/net/cert/merkle_tree_leaf.cc
@@ -13,7 +13,7 @@
 
 namespace ct {
 
-MerkleTreeLeaf::MerkleTreeLeaf() {}
+MerkleTreeLeaf::MerkleTreeLeaf() = default;
 
 MerkleTreeLeaf::MerkleTreeLeaf(const MerkleTreeLeaf& other) = default;
 
diff --git a/net/cert/mock_cert_verifier.cc b/net/cert/mock_cert_verifier.cc
index 9cbbafd..e7f9862 100644
--- a/net/cert/mock_cert_verifier.cc
+++ b/net/cert/mock_cert_verifier.cc
@@ -38,7 +38,7 @@
 
 MockCertVerifier::MockCertVerifier() : default_result_(ERR_CERT_INVALID) {}
 
-MockCertVerifier::~MockCertVerifier() {}
+MockCertVerifier::~MockCertVerifier() = default;
 
 int MockCertVerifier::Verify(const RequestParams& params,
                              CRLSet* crl_set,
diff --git a/net/cert/mock_client_cert_verifier.cc b/net/cert/mock_client_cert_verifier.cc
index 1196e2c7..21c9a5da 100644
--- a/net/cert/mock_client_cert_verifier.cc
+++ b/net/cert/mock_client_cert_verifier.cc
@@ -21,7 +21,7 @@
 MockClientCertVerifier::MockClientCertVerifier()
     : default_result_(ERR_CERT_INVALID) {}
 
-MockClientCertVerifier::~MockClientCertVerifier() {}
+MockClientCertVerifier::~MockClientCertVerifier() = default;
 
 int MockClientCertVerifier::Verify(X509Certificate* cert,
                                    const CompletionCallback& callback,
diff --git a/net/cert/multi_log_ct_verifier.cc b/net/cert/multi_log_ct_verifier.cc
index e6b6c85..784924a 100644
--- a/net/cert/multi_log_ct_verifier.cc
+++ b/net/cert/multi_log_ct_verifier.cc
@@ -67,7 +67,7 @@
 MultiLogCTVerifier::MultiLogCTVerifier() : observer_(nullptr) {
 }
 
-MultiLogCTVerifier::~MultiLogCTVerifier() { }
+MultiLogCTVerifier::~MultiLogCTVerifier() = default;
 
 void MultiLogCTVerifier::AddLogs(
     const std::vector<scoped_refptr<const CTLogVerifier>>& log_verifiers) {
diff --git a/net/cert/multi_threaded_cert_verifier_unittest.cc b/net/cert/multi_threaded_cert_verifier_unittest.cc
index aecbb51..cf85142 100644
--- a/net/cert/multi_threaded_cert_verifier_unittest.cc
+++ b/net/cert/multi_threaded_cert_verifier_unittest.cc
@@ -35,10 +35,10 @@
 
 class MockCertVerifyProc : public CertVerifyProc {
  public:
-  MockCertVerifyProc() {}
+  MockCertVerifyProc() = default;
 
  private:
-  ~MockCertVerifyProc() override {}
+  ~MockCertVerifyProc() override = default;
 
   // CertVerifyProc implementation
   bool SupportsAdditionalTrustAnchors() const override { return false; }
@@ -63,7 +63,7 @@
 class MultiThreadedCertVerifierTest : public ::testing::Test {
  public:
   MultiThreadedCertVerifierTest() : verifier_(new MockCertVerifyProc()) {}
-  ~MultiThreadedCertVerifierTest() override {}
+  ~MultiThreadedCertVerifierTest() override = default;
 
  protected:
   MultiThreadedCertVerifier verifier_;
diff --git a/net/cert/nss_cert_database.cc b/net/cert/nss_cert_database.cc
index 4c96f53..a36d647 100644
--- a/net/cert/nss_cert_database.cc
+++ b/net/cert/nss_cert_database.cc
@@ -44,7 +44,7 @@
   explicit CertNotificationForwarder(CertDatabase* cert_db)
       : cert_db_(cert_db) {}
 
-  ~CertNotificationForwarder() override {}
+  ~CertNotificationForwarder() override = default;
 
   void OnCertDBChanged() override { cert_db_->NotifyObserversCertDBChanged(); }
 
@@ -82,7 +82,7 @@
   psm::EnsurePKCS12Init();
 }
 
-NSSCertDatabase::~NSSCertDatabase() {}
+NSSCertDatabase::~NSSCertDatabase() = default;
 
 ScopedCERTCertificateList NSSCertDatabase::ListCertsSync() {
   return ListCertsImpl(crypto::ScopedPK11Slot());
diff --git a/net/cert/nss_cert_database_chromeos.cc b/net/cert/nss_cert_database_chromeos.cc
index 936c15d..8b4ec76 100644
--- a/net/cert/nss_cert_database_chromeos.cc
+++ b/net/cert/nss_cert_database_chromeos.cc
@@ -31,7 +31,7 @@
                        crypto::ScopedPK11Slot() /* no system slot */);
 }
 
-NSSCertDatabaseChromeOS::~NSSCertDatabaseChromeOS() {}
+NSSCertDatabaseChromeOS::~NSSCertDatabaseChromeOS() = default;
 
 void NSSCertDatabaseChromeOS::SetSystemSlot(
     crypto::ScopedPK11Slot system_slot) {
diff --git a/net/cert/nss_profile_filter_chromeos.cc b/net/cert/nss_profile_filter_chromeos.cc
index a119fed..6160256 100644
--- a/net/cert/nss_profile_filter_chromeos.cc
+++ b/net/cert/nss_profile_filter_chromeos.cc
@@ -36,7 +36,7 @@
 
 }  // namespace
 
-NSSProfileFilterChromeOS::NSSProfileFilterChromeOS() {}
+NSSProfileFilterChromeOS::NSSProfileFilterChromeOS() = default;
 
 NSSProfileFilterChromeOS::NSSProfileFilterChromeOS(
     const NSSProfileFilterChromeOS& other) {
@@ -50,7 +50,7 @@
       other.system_slot_ ? PK11_ReferenceSlot(other.system_slot_.get()) : NULL);
 }
 
-NSSProfileFilterChromeOS::~NSSProfileFilterChromeOS() {}
+NSSProfileFilterChromeOS::~NSSProfileFilterChromeOS() = default;
 
 NSSProfileFilterChromeOS& NSSProfileFilterChromeOS::operator=(
     const NSSProfileFilterChromeOS& other) {
diff --git a/net/cert/pem_tokenizer.cc b/net/cert/pem_tokenizer.cc
index 6721462e..fe2f780c 100644
--- a/net/cert/pem_tokenizer.cc
+++ b/net/cert/pem_tokenizer.cc
@@ -32,8 +32,7 @@
   Init(str, allowed_block_types);
 }
 
-PEMTokenizer::~PEMTokenizer() {
-}
+PEMTokenizer::~PEMTokenizer() = default;
 
 bool PEMTokenizer::GetNext() {
   while (pos_ != StringPiece::npos) {
diff --git a/net/cert/signed_certificate_timestamp.cc b/net/cert/signed_certificate_timestamp.cc
index a2ec06e..3fff518 100644
--- a/net/cert/signed_certificate_timestamp.cc
+++ b/net/cert/signed_certificate_timestamp.cc
@@ -31,7 +31,7 @@
 SignedCertificateTimestamp::SignedCertificateTimestamp()
     : version(V1), origin(SCT_EMBEDDED) {}
 
-SignedCertificateTimestamp::~SignedCertificateTimestamp() {}
+SignedCertificateTimestamp::~SignedCertificateTimestamp() = default;
 
 void SignedCertificateTimestamp::Persist(base::Pickle* pickle) {
   pickle->WriteInt(version);
@@ -80,7 +80,7 @@
 
 SignedEntryData::SignedEntryData() : type(LOG_ENTRY_TYPE_X509) {}
 
-SignedEntryData::~SignedEntryData() {}
+SignedEntryData::~SignedEntryData() = default;
 
 void SignedEntryData::Reset() {
   type = SignedEntryData::LOG_ENTRY_TYPE_X509;
@@ -91,7 +91,7 @@
 DigitallySigned::DigitallySigned()
     : hash_algorithm(HASH_ALGO_NONE), signature_algorithm(SIG_ALGO_ANONYMOUS) {}
 
-DigitallySigned::~DigitallySigned() {}
+DigitallySigned::~DigitallySigned() = default;
 
 bool DigitallySigned::SignatureParametersMatch(
     HashAlgorithm other_hash_algorithm,
diff --git a/net/cert/signed_certificate_timestamp_and_status.cc b/net/cert/signed_certificate_timestamp_and_status.cc
index 364bb2c1..a1ac7ac 100644
--- a/net/cert/signed_certificate_timestamp_and_status.cc
+++ b/net/cert/signed_certificate_timestamp_and_status.cc
@@ -8,7 +8,8 @@
 
 namespace net {
 
-SignedCertificateTimestampAndStatus::SignedCertificateTimestampAndStatus() {}
+SignedCertificateTimestampAndStatus::SignedCertificateTimestampAndStatus() =
+    default;
 
 SignedCertificateTimestampAndStatus::SignedCertificateTimestampAndStatus(
     const scoped_refptr<ct::SignedCertificateTimestamp>& sct,
@@ -18,6 +19,7 @@
 SignedCertificateTimestampAndStatus::SignedCertificateTimestampAndStatus(
     const SignedCertificateTimestampAndStatus& other) = default;
 
-SignedCertificateTimestampAndStatus::~SignedCertificateTimestampAndStatus() {}
+SignedCertificateTimestampAndStatus::~SignedCertificateTimestampAndStatus() =
+    default;
 
 }  // namespace net
diff --git a/net/cert/signed_tree_head.cc b/net/cert/signed_tree_head.cc
index 1816446..a2dc9efb 100644
--- a/net/cert/signed_tree_head.cc
+++ b/net/cert/signed_tree_head.cc
@@ -13,7 +13,7 @@
 namespace net {
 namespace ct {
 
-SignedTreeHead::SignedTreeHead() {}
+SignedTreeHead::SignedTreeHead() = default;
 
 SignedTreeHead::SignedTreeHead(Version version,
                                const base::Time& timestamp,
@@ -31,7 +31,7 @@
 
 SignedTreeHead::SignedTreeHead(const SignedTreeHead& other) = default;
 
-SignedTreeHead::~SignedTreeHead() {}
+SignedTreeHead::~SignedTreeHead() = default;
 
 void PrintTo(const SignedTreeHead& sth, std::ostream* os) {
   (*os) << "{\n"
diff --git a/net/cert/sth_distributor.cc b/net/cert/sth_distributor.cc
index eb4de35c..3de77d90 100644
--- a/net/cert/sth_distributor.cc
+++ b/net/cert/sth_distributor.cc
@@ -22,7 +22,7 @@
 STHDistributor::STHDistributor()
     : observer_list_(base::ObserverListPolicy::EXISTING_ONLY) {}
 
-STHDistributor::~STHDistributor() {}
+STHDistributor::~STHDistributor() = default;
 
 void STHDistributor::NewSTHObserved(const SignedTreeHead& sth) {
   auto it = std::find_if(observed_sths_.begin(), observed_sths_.end(),
diff --git a/net/cert/sth_distributor_unittest.cc b/net/cert/sth_distributor_unittest.cc
index b4edd23..c57b61d7 100644
--- a/net/cert/sth_distributor_unittest.cc
+++ b/net/cert/sth_distributor_unittest.cc
@@ -33,7 +33,7 @@
 
 class STHDistributorTest : public ::testing::Test {
  public:
-  STHDistributorTest() {}
+  STHDistributorTest() = default;
 
   void SetUp() override {
     ASSERT_TRUE(GetSampleSignedTreeHead(&sample_sth_));
diff --git a/net/cert/test_root_certs.cc b/net/cert/test_root_certs.cc
index c5f777e..cd07674c 100644
--- a/net/cert/test_root_certs.cc
+++ b/net/cert/test_root_certs.cc
@@ -57,7 +57,7 @@
   g_has_instance = true;
 }
 
-ScopedTestRoot::ScopedTestRoot() {}
+ScopedTestRoot::ScopedTestRoot() = default;
 
 ScopedTestRoot::ScopedTestRoot(X509Certificate* cert) {
   Reset(cert);
diff --git a/net/cert/x509_cert_types.cc b/net/cert/x509_cert_types.cc
index 4c31915..783f409 100644
--- a/net/cert/x509_cert_types.cc
+++ b/net/cert/x509_cert_types.cc
@@ -33,13 +33,11 @@
 
 }  // anonymous namespace
 
-CertPrincipal::CertPrincipal() {
-}
+CertPrincipal::CertPrincipal() = default;
 
 CertPrincipal::CertPrincipal(const std::string& name) : common_name(name) {}
 
-CertPrincipal::~CertPrincipal() {
-}
+CertPrincipal::~CertPrincipal() = default;
 
 bool CertPrincipal::ParseDistinguishedName(
     const void* ber_name_data,
diff --git a/net/cert/x509_cert_types_unittest.cc b/net/cert/x509_cert_types_unittest.cc
index 43db271..d269cbe 100644
--- a/net/cert/x509_cert_types_unittest.cc
+++ b/net/cert/x509_cert_types_unittest.cc
@@ -161,8 +161,8 @@
 
 class X509CertTypesDateTest : public testing::TestWithParam<CertDateTestData> {
   public:
-    virtual ~X509CertTypesDateTest() {}
-    void SetUp() override { test_data_ = GetParam(); }
+   virtual ~X509CertTypesDateTest() = default;
+   void SetUp() override { test_data_ = GetParam(); }
 
   protected:
    CertDateTestData test_data_;
diff --git a/net/cert/x509_certificate_unittest.cc b/net/cert/x509_certificate_unittest.cc
index 1a1c4a8c..a9cee29 100644
--- a/net/cert/x509_certificate_unittest.cc
+++ b/net/cert/x509_certificate_unittest.cc
@@ -971,7 +971,7 @@
 class X509CertificateParseTest
     : public testing::TestWithParam<CertificateFormatTestData> {
  public:
-  virtual ~X509CertificateParseTest() {}
+  virtual ~X509CertificateParseTest() = default;
   void SetUp() override { test_data_ = GetParam(); }
   void TearDown() override {}
 
diff --git a/net/cert_net/nss_ocsp.cc b/net/cert_net/nss_ocsp.cc
index e485462..1926cf6 100644
--- a/net/cert_net/nss_ocsp.cc
+++ b/net/cert_net/nss_ocsp.cc
@@ -478,7 +478,7 @@
  public:
   OCSPServerSession(const char* host, PRUint16 port)
       : host_and_port_(host, port) {}
-  ~OCSPServerSession() {}
+  ~OCSPServerSession() = default;
 
   OCSPRequestSession* CreateRequest(const char* http_protocol_variant,
                                     const char* path_and_query_string,
diff --git a/net/cert_net/nss_ocsp_unittest.cc b/net/cert_net/nss_ocsp_unittest.cc
index d86e6a2..45004f5 100644
--- a/net/cert_net/nss_ocsp_unittest.cc
+++ b/net/cert_net/nss_ocsp_unittest.cc
@@ -52,7 +52,7 @@
  public:
   AiaResponseHandler(const std::string& headers, const std::string& cert_data)
       : headers_(headers), cert_data_(cert_data), request_count_(0) {}
-  ~AiaResponseHandler() override {}
+  ~AiaResponseHandler() override = default;
 
   // URLRequestInterceptor implementation:
   URLRequestJob* MaybeInterceptRequest(
@@ -83,7 +83,7 @@
         handler_(NULL),
         verify_proc_(new CertVerifyProcNSS),
         verifier_(new MultiThreadedCertVerifier(verify_proc_.get())) {}
-  ~NssHttpTest() override {}
+  ~NssHttpTest() override = default;
 
   void SetUp() override {
     std::string file_contents;
diff --git a/net/cookies/canonical_cookie.cc b/net/cookies/canonical_cookie.cc
index fa6b40dd..0939cdd 100644
--- a/net/cookies/canonical_cookie.cc
+++ b/net/cookies/canonical_cookie.cc
@@ -123,7 +123,7 @@
       same_site_(same_site),
       priority_(priority) {}
 
-CanonicalCookie::~CanonicalCookie() {}
+CanonicalCookie::~CanonicalCookie() = default;
 
 // static
 std::string CanonicalCookie::CanonPathWithString(
diff --git a/net/cookies/cookie_monster.cc b/net/cookies/cookie_monster.cc
index ead56f9..748612eb 100644
--- a/net/cookies/cookie_monster.cc
+++ b/net/cookies/cookie_monster.cc
@@ -156,7 +156,7 @@
   CookieMonsterCookieChangedSubscription(
       const CookieStore::CookieChangedCallback& callback)
       : callback_(callback), weak_ptr_factory_(this) {}
-  ~CookieMonsterCookieChangedSubscription() override {}
+  ~CookieMonsterCookieChangedSubscription() override = default;
 
   void SetCallbackSubscription(
       std::unique_ptr<CookieStore::CookieChangedCallbackList::Subscription>
diff --git a/net/cookies/cookie_monster_store_test.cc b/net/cookies/cookie_monster_store_test.cc
index 067688fd..66f1812e 100644
--- a/net/cookies/cookie_monster_store_test.cc
+++ b/net/cookies/cookie_monster_store_test.cc
@@ -30,7 +30,7 @@
 CookieStoreCommand::CookieStoreCommand(const CookieStoreCommand& other) =
     default;
 
-CookieStoreCommand::~CookieStoreCommand() {}
+CookieStoreCommand::~CookieStoreCommand() = default;
 
 MockPersistentCookieStore::MockPersistentCookieStore()
     : store_load_commands_(false), load_return_value_(true), loaded_(false) {}
@@ -98,8 +98,7 @@
 void MockPersistentCookieStore::SetForceKeepSessionState() {
 }
 
-MockPersistentCookieStore::~MockPersistentCookieStore() {
-}
+MockPersistentCookieStore::~MockPersistentCookieStore() = default;
 
 std::unique_ptr<CanonicalCookie> BuildCanonicalCookie(
     const GURL& url,
@@ -242,7 +241,6 @@
   return std::make_unique<CookieMonster>(store.get());
 }
 
-MockSimplePersistentCookieStore::~MockSimplePersistentCookieStore() {
-}
+MockSimplePersistentCookieStore::~MockSimplePersistentCookieStore() = default;
 
 }  // namespace net
diff --git a/net/cookies/cookie_monster_unittest.cc b/net/cookies/cookie_monster_unittest.cc
index d5be5c2..da851feb 100644
--- a/net/cookies/cookie_monster_unittest.cc
+++ b/net/cookies/cookie_monster_unittest.cc
@@ -69,7 +69,7 @@
   MOCK_METHOD0(SetForceKeepSessionState, void());
 
  private:
-  virtual ~NewMockPersistentCookieStore() {}
+  virtual ~NewMockPersistentCookieStore() = default;
 };
 
 // False means 'less than or equal', so we test both ways for full equal.
@@ -2414,7 +2414,7 @@
   int flush_count() { return flush_count_; }
 
  private:
-  ~FlushablePersistentStore() override {}
+  ~FlushablePersistentStore() override = default;
 
   volatile int flush_count_;
 };
@@ -2430,7 +2430,7 @@
 
  private:
   friend class base::RefCountedThreadSafe<CallbackCounter>;
-  ~CallbackCounter() {}
+  ~CallbackCounter() = default;
 
   volatile int callback_count_;
 };
@@ -3105,7 +3105,7 @@
         store_(new MockPersistentCookieStore),
         monster_(new CookieMonster(store_.get())) {}
 
-  ~CookieMonsterNotificationTest() override {}
+  ~CookieMonsterNotificationTest() override = default;
 
   CookieMonster* monster() { return monster_.get(); }
 
diff --git a/net/cookies/cookie_store.cc b/net/cookies/cookie_store.cc
index a423a6a..9190dfa 100644
--- a/net/cookies/cookie_store.cc
+++ b/net/cookies/cookie_store.cc
@@ -10,7 +10,7 @@
 
 namespace net {
 
-CookieStore::~CookieStore() {}
+CookieStore::~CookieStore() = default;
 
 bool CookieStore::ChangeCauseIsDeletion(CookieStore::ChangeCause cause) {
   return cause != CookieStore::ChangeCause::INSERTED;
diff --git a/net/cookies/cookie_store_test_callbacks.cc b/net/cookies/cookie_store_test_callbacks.cc
index 9e36e70..d37225a0 100644
--- a/net/cookies/cookie_store_test_callbacks.cc
+++ b/net/cookies/cookie_store_test_callbacks.cc
@@ -18,7 +18,7 @@
 CookieCallback::CookieCallback()
     : run_in_thread_(NULL), run_in_loop_(base::MessageLoop::current()) {}
 
-CookieCallback::~CookieCallback() {}
+CookieCallback::~CookieCallback() = default;
 
 void CookieCallback::CallbackEpilogue() {
   base::MessageLoop* expected_loop = NULL;
@@ -38,20 +38,20 @@
   loop_to_quit_.Run();
 }
 
-StringResultCookieCallback::StringResultCookieCallback() {}
+StringResultCookieCallback::StringResultCookieCallback() = default;
 StringResultCookieCallback::StringResultCookieCallback(
     base::Thread* run_in_thread)
     : CookieCallback(run_in_thread) {}
 
-NoResultCookieCallback::NoResultCookieCallback() {}
+NoResultCookieCallback::NoResultCookieCallback() = default;
 NoResultCookieCallback::NoResultCookieCallback(base::Thread* run_in_thread)
     : CookieCallback(run_in_thread) {}
 
-GetCookieListCallback::GetCookieListCallback() {}
+GetCookieListCallback::GetCookieListCallback() = default;
 GetCookieListCallback::GetCookieListCallback(base::Thread* run_in_thread)
     : CookieCallback(run_in_thread) {}
 
-GetCookieListCallback::~GetCookieListCallback() {}
+GetCookieListCallback::~GetCookieListCallback() = default;
 
 void GetCookieListCallback::Run(const CookieList& cookies) {
   cookies_ = cookies;
diff --git a/net/cookies/cookie_store_test_helpers.cc b/net/cookies/cookie_store_test_helpers.cc
index e144e89..0f408fd 100644
--- a/net/cookies/cookie_store_test_helpers.cc
+++ b/net/cookies/cookie_store_test_helpers.cc
@@ -38,8 +38,7 @@
       did_run_(false),
       result_(false) {}
 
-DelayedCookieMonster::~DelayedCookieMonster() {
-}
+DelayedCookieMonster::~DelayedCookieMonster() = default;
 
 void DelayedCookieMonster::SetCookiesInternalCallback(bool result) {
   result_ = result;
diff --git a/net/cookies/parsed_cookie.cc b/net/cookies/parsed_cookie.cc
index 8c09060..1be10ee 100644
--- a/net/cookies/parsed_cookie.cc
+++ b/net/cookies/parsed_cookie.cc
@@ -147,8 +147,7 @@
     SetupAttributes();
 }
 
-ParsedCookie::~ParsedCookie() {
-}
+ParsedCookie::~ParsedCookie() = default;
 
 bool ParsedCookie::IsValid() const {
   return !pairs_.empty() && IsSameSiteAttributeValid();
diff --git a/net/disk_cache/backend_cleanup_tracker_unittest.cc b/net/disk_cache/backend_cleanup_tracker_unittest.cc
index 9f9a92352..1e1aec6d 100644
--- a/net/disk_cache/backend_cleanup_tracker_unittest.cc
+++ b/net/disk_cache/backend_cleanup_tracker_unittest.cc
@@ -21,7 +21,7 @@
 
 class BackendCleanupTrackerTest : public testing::Test {
  protected:
-  BackendCleanupTrackerTest() {}
+  BackendCleanupTrackerTest() = default;
 
   void SetUp() override {
     testing::Test::SetUp();
diff --git a/net/disk_cache/blockfile/block_files.cc b/net/disk_cache/blockfile/block_files.cc
index 78d75960..eac68fb 100644
--- a/net/disk_cache/blockfile/block_files.cc
+++ b/net/disk_cache/blockfile/block_files.cc
@@ -49,11 +49,9 @@
     : header_(reinterpret_cast<BlockFileHeader*>(file->buffer())) {
 }
 
-BlockHeader::BlockHeader(const BlockHeader& other) : header_(other.header_) {
-}
+BlockHeader::BlockHeader(const BlockHeader& other) = default;
 
-BlockHeader::~BlockHeader() {
-}
+BlockHeader::~BlockHeader() = default;
 
 bool BlockHeader::CreateMapBlock(int size, int* index) {
   DCHECK(size > 0 && size <= kMaxNumBlocks);
diff --git a/net/disk_cache/blockfile/entry_impl.cc b/net/disk_cache/blockfile/entry_impl.cc
index 5cd75f00..16e49b97 100644
--- a/net/disk_cache/blockfile/entry_impl.cc
+++ b/net/disk_cache/blockfile/entry_impl.cc
@@ -52,7 +52,7 @@
         end_event_type_(end_event_type) {
     entry_->IncrementIoCount();
   }
-  ~SyncCallback() override {}
+  ~SyncCallback() override = default;
 
   void OnFileIOComplete(int bytes_copied) override;
   void Discard();
diff --git a/net/disk_cache/blockfile/eviction.cc b/net/disk_cache/blockfile/eviction.cc
index 821be2d..7ff205e2 100644
--- a/net/disk_cache/blockfile/eviction.cc
+++ b/net/disk_cache/blockfile/eviction.cc
@@ -85,8 +85,7 @@
       ptr_factory_(this) {
 }
 
-Eviction::~Eviction() {
-}
+Eviction::~Eviction() = default;
 
 void Eviction::Init(BackendImpl* backend) {
   // We grab a bunch of info from the backend to make the code a little cleaner
diff --git a/net/disk_cache/blockfile/file_posix.cc b/net/disk_cache/blockfile/file_posix.cc
index 1297cf0..69058f1 100644
--- a/net/disk_cache/blockfile/file_posix.cc
+++ b/net/disk_cache/blockfile/file_posix.cc
@@ -31,7 +31,7 @@
                                   base::TaskPriority::USER_BLOCKING) {}
 
  protected:
-  ~FileWorkerPool() override {}
+  ~FileWorkerPool() override = default;
 };
 
 base::LazyInstance<FileWorkerPool>::Leaky s_worker_pool =
@@ -162,9 +162,7 @@
 void File::DropPendingIO() {
 }
 
-
-File::~File() {
-}
+File::~File() = default;
 
 base::PlatformFile File::platform_file() const {
   return base_file_.GetPlatformFile();
diff --git a/net/disk_cache/blockfile/in_flight_backend_io.cc b/net/disk_cache/blockfile/in_flight_backend_io.cc
index 2e7f7c6..2ea9b81 100644
--- a/net/disk_cache/blockfile/in_flight_backend_io.cc
+++ b/net/disk_cache/blockfile/in_flight_backend_io.cc
@@ -229,7 +229,7 @@
   entry_ = entry;
 }
 
-BackendIO::~BackendIO() {}
+BackendIO::~BackendIO() = default;
 
 bool BackendIO::ReturnsEntry() {
   return operation_ == OP_OPEN || operation_ == OP_CREATE ||
@@ -364,8 +364,7 @@
       ptr_factory_(this) {
 }
 
-InFlightBackendIO::~InFlightBackendIO() {
-}
+InFlightBackendIO::~InFlightBackendIO() = default;
 
 void InFlightBackendIO::Init(const net::CompletionCallback& callback) {
   scoped_refptr<BackendIO> operation(new BackendIO(this, backend_, callback));
diff --git a/net/disk_cache/blockfile/in_flight_io.cc b/net/disk_cache/blockfile/in_flight_io.cc
index 7fdd56b..b8fee8c4 100644
--- a/net/disk_cache/blockfile/in_flight_io.cc
+++ b/net/disk_cache/blockfile/in_flight_io.cc
@@ -32,8 +32,7 @@
   controller_ = NULL;
 }
 
-BackgroundIO::~BackgroundIO() {
-}
+BackgroundIO::~BackgroundIO() = default;
 
 // ---------------------------------------------------------------------------
 
@@ -41,8 +40,7 @@
     : callback_task_runner_(base::ThreadTaskRunnerHandle::Get()),
       running_(false) {}
 
-InFlightIO::~InFlightIO() {
-}
+InFlightIO::~InFlightIO() = default;
 
 // Runs on the background thread.
 void BackgroundIO::NotifyController() {
diff --git a/net/disk_cache/blockfile/mapped_file_unittest.cc b/net/disk_cache/blockfile/mapped_file_unittest.cc
index 1c864513..f5fd0f5 100644
--- a/net/disk_cache/blockfile/mapped_file_unittest.cc
+++ b/net/disk_cache/blockfile/mapped_file_unittest.cc
@@ -19,7 +19,7 @@
         helper_(helper),
         max_id_(max_id) {
   }
-  ~FileCallbackTest() override {}
+  ~FileCallbackTest() override = default;
 
   void OnFileIOComplete(int bytes_copied) override;
 
diff --git a/net/disk_cache/blockfile/rankings.cc b/net/disk_cache/blockfile/rankings.cc
index c0d023c7..68d2c3b 100644
--- a/net/disk_cache/blockfile/rankings.cc
+++ b/net/disk_cache/blockfile/rankings.cc
@@ -221,7 +221,7 @@
 
 Rankings::Rankings() : init_(false) {}
 
-Rankings::~Rankings() {}
+Rankings::~Rankings() = default;
 
 bool Rankings::Init(BackendImpl* backend, bool count_lists) {
   DCHECK(!init_);
diff --git a/net/disk_cache/blockfile/sparse_control.cc b/net/disk_cache/blockfile/sparse_control.cc
index d24e664..3391533 100644
--- a/net/disk_cache/blockfile/sparse_control.cc
+++ b/net/disk_cache/blockfile/sparse_control.cc
@@ -74,7 +74,7 @@
 
  private:
   friend class base::RefCounted<ChildrenDeleter>;
-  ~ChildrenDeleter() override {}
+  ~ChildrenDeleter() override = default;
 
   void DeleteChildren();
 
diff --git a/net/disk_cache/blockfile/stats.cc b/net/disk_cache/blockfile/stats.cc
index a371d28..72e15e7 100644
--- a/net/disk_cache/blockfile/stats.cc
+++ b/net/disk_cache/blockfile/stats.cc
@@ -92,11 +92,9 @@
   return true;
 }
 
-Stats::Stats() {
-}
+Stats::Stats() = default;
 
-Stats::~Stats() {
-}
+Stats::~Stats() = default;
 
 bool Stats::Init(void* data, int num_bytes, Addr address) {
   OnDiskStats local_stats;
diff --git a/net/disk_cache/disk_cache.cc b/net/disk_cache/disk_cache.cc
index fe7a2fa..94551a40 100644
--- a/net/disk_cache/disk_cache.cc
+++ b/net/disk_cache/disk_cache.cc
@@ -94,7 +94,7 @@
       net_log_(net_log) {
 }
 
-CacheCreator::~CacheCreator() {}
+CacheCreator::~CacheCreator() = default;
 
 int CacheCreator::Run() {
 #if defined(OS_ANDROID)
diff --git a/net/disk_cache/disk_cache_test_base.cc b/net/disk_cache/disk_cache_test_base.cc
index 17ffec7d..727dbb8f 100644
--- a/net/disk_cache/disk_cache_test_base.cc
+++ b/net/disk_cache/disk_cache_test_base.cc
@@ -38,8 +38,7 @@
   cache_path_ = temp_dir_.GetPath();
 }
 
-DiskCacheTest::~DiskCacheTest() {
-}
+DiskCacheTest::~DiskCacheTest() = default;
 
 bool DiskCacheTest::CopyTestCache(const std::string& name) {
   base::FilePath path;
@@ -66,7 +65,7 @@
     std::unique_ptr<disk_cache::Backend::Iterator> iterator)
     : iterator_(std::move(iterator)) {}
 
-DiskCacheTestWithCache::TestIterator::~TestIterator() {}
+DiskCacheTestWithCache::TestIterator::~TestIterator() = default;
 
 int DiskCacheTestWithCache::TestIterator::OpenNextEntry(
     disk_cache::Entry** next_entry) {
@@ -96,7 +95,7 @@
       use_current_thread_(false),
       scoped_task_env_(scoped_task_env) {}
 
-DiskCacheTestWithCache::~DiskCacheTestWithCache() {}
+DiskCacheTestWithCache::~DiskCacheTestWithCache() = default;
 
 void DiskCacheTestWithCache::InitCache() {
   if (memory_only_)
diff --git a/net/disk_cache/disk_cache_test_util.cc b/net/disk_cache/disk_cache_test_util.cc
index 426aeab..69314c5 100644
--- a/net/disk_cache/disk_cache_test_util.cc
+++ b/net/disk_cache/disk_cache_test_util.cc
@@ -84,7 +84,7 @@
       callback_reused_error_(false),
       callbacks_called_(0) {}
 
-MessageLoopHelper::~MessageLoopHelper() {}
+MessageLoopHelper::~MessageLoopHelper() = default;
 
 bool MessageLoopHelper::WaitUntilCacheIoFinished(int num_callbacks) {
   if (num_callbacks == callbacks_called_)
@@ -128,8 +128,7 @@
       reuse_(reuse ? 0 : 1) {
 }
 
-CallbackTest::~CallbackTest() {
-}
+CallbackTest::~CallbackTest() = default;
 
 // On the actual callback, increase the number of tests received and check for
 // errors (an unexpected test received)
diff --git a/net/disk_cache/simple/simple_entry_impl.cc b/net/disk_cache/simple/simple_entry_impl.cc
index 23ea000..7123aac 100644
--- a/net/disk_cache/simple/simple_entry_impl.cc
+++ b/net/disk_cache/simple/simple_entry_impl.cc
@@ -176,7 +176,7 @@
   SimpleEntryImpl* const entry_;
 };
 
-SimpleEntryImpl::ActiveEntryProxy::~ActiveEntryProxy() {}
+SimpleEntryImpl::ActiveEntryProxy::~ActiveEntryProxy() = default;
 
 SimpleEntryImpl::SimpleEntryImpl(
     net::CacheType cache_type,
diff --git a/net/disk_cache/simple/simple_entry_operation.cc b/net/disk_cache/simple/simple_entry_operation.cc
index 7e2f789..36ebde6 100644
--- a/net/disk_cache/simple/simple_entry_operation.cc
+++ b/net/disk_cache/simple/simple_entry_operation.cc
@@ -51,7 +51,7 @@
       alone_in_queue_(other.alone_in_queue_) {
 }
 
-SimpleEntryOperation::~SimpleEntryOperation() {}
+SimpleEntryOperation::~SimpleEntryOperation() = default;
 
 // static
 SimpleEntryOperation SimpleEntryOperation::OpenOperation(
diff --git a/net/disk_cache/simple/simple_file_tracker.cc b/net/disk_cache/simple/simple_file_tracker.cc
index 535b507..77b650b5 100644
--- a/net/disk_cache/simple/simple_file_tracker.cc
+++ b/net/disk_cache/simple/simple_file_tracker.cc
@@ -13,7 +13,7 @@
 
 namespace disk_cache {
 
-SimpleFileTracker::SimpleFileTracker() {}
+SimpleFileTracker::SimpleFileTracker() = default;
 
 SimpleFileTracker::~SimpleFileTracker() {
   DCHECK(tracked_files_.empty());
diff --git a/net/disk_cache/simple/simple_index_file.cc b/net/disk_cache/simple/simple_index_file.cc
index 073a45dd..d5aa642 100644
--- a/net/disk_cache/simple/simple_index_file.cc
+++ b/net/disk_cache/simple/simple_index_file.cc
@@ -210,8 +210,7 @@
       index_write_reason(SimpleIndex::INDEX_WRITE_REASON_MAX),
       flush_required(false) {}
 
-SimpleIndexLoadResult::~SimpleIndexLoadResult() {
-}
+SimpleIndexLoadResult::~SimpleIndexLoadResult() = default;
 
 void SimpleIndexLoadResult::Reset() {
   did_load = false;
@@ -353,7 +352,7 @@
       temp_index_file_(cache_directory_.AppendASCII(kIndexDirectory)
                            .AppendASCII(kTempIndexFileName)) {}
 
-SimpleIndexFile::~SimpleIndexFile() {}
+SimpleIndexFile::~SimpleIndexFile() = default;
 
 void SimpleIndexFile::LoadIndexEntries(base::Time cache_last_modified,
                                        const base::Closure& callback,
diff --git a/net/disk_cache/simple/simple_index_file_unittest.cc b/net/disk_cache/simple/simple_index_file_unittest.cc
index d3d6cbf..1e0254d4 100644
--- a/net/disk_cache/simple/simple_index_file_unittest.cc
+++ b/net/disk_cache/simple/simple_index_file_unittest.cc
@@ -155,7 +155,7 @@
                         base::ThreadTaskRunnerHandle::Get(),
                         net::DISK_CACHE,
                         index_file_directory) {}
-  ~WrappedSimpleIndexFile() override {}
+  ~WrappedSimpleIndexFile() override = default;
 
   const base::FilePath& GetIndexFilePath() const {
     return index_file_;
diff --git a/net/disk_cache/simple/simple_synchronous_entry.cc b/net/disk_cache/simple/simple_synchronous_entry.cc
index 2048281c..74b07f63 100644
--- a/net/disk_cache/simple/simple_synchronous_entry.cc
+++ b/net/disk_cache/simple/simple_synchronous_entry.cc
@@ -187,14 +187,13 @@
 SimpleStreamPrefetchData::SimpleStreamPrefetchData()
     : stream_crc32(crc32(0, Z_NULL, 0)) {}
 
-SimpleStreamPrefetchData::~SimpleStreamPrefetchData() {}
+SimpleStreamPrefetchData::~SimpleStreamPrefetchData() = default;
 
 SimpleEntryCreationResults::SimpleEntryCreationResults(
     SimpleEntryStat entry_stat)
     : sync_entry(NULL), entry_stat(entry_stat), result(net::OK) {}
 
-SimpleEntryCreationResults::~SimpleEntryCreationResults() {
-}
+SimpleEntryCreationResults::~SimpleEntryCreationResults() = default;
 
 SimpleSynchronousEntry::CRCRecord::CRCRecord() : index(-1),
                                                  has_crc32(false),
diff --git a/net/dns/address_sorter_posix_unittest.cc b/net/dns/address_sorter_posix_unittest.cc
index 102cc62..3871e7e 100644
--- a/net/dns/address_sorter_posix_unittest.cc
+++ b/net/dns/address_sorter_posix_unittest.cc
@@ -36,7 +36,7 @@
   explicit TestUDPClientSocket(const AddressMapping* mapping)
       : mapping_(mapping), connected_(false)  {}
 
-  ~TestUDPClientSocket() override {}
+  ~TestUDPClientSocket() override = default;
 
   int Read(IOBuffer*, int, const CompletionCallback&) override {
     NOTIMPLEMENTED();
@@ -100,8 +100,8 @@
 // Creates TestUDPClientSockets and maintains an AddressMapping.
 class TestSocketFactory : public ClientSocketFactory {
  public:
-  TestSocketFactory() {}
-  ~TestSocketFactory() override {}
+  TestSocketFactory() = default;
+  ~TestSocketFactory() override = default;
 
   std::unique_ptr<DatagramClientSocket> CreateDatagramClientSocket(
       DatagramSocket::BindType,
diff --git a/net/dns/dns_config_service.cc b/net/dns/dns_config_service.cc
index f314bd06..1f19a7b 100644
--- a/net/dns/dns_config_service.cc
+++ b/net/dns/dns_config_service.cc
@@ -29,7 +29,7 @@
 
 DnsConfig::DnsConfig(const DnsConfig& other) = default;
 
-DnsConfig::~DnsConfig() {}
+DnsConfig::~DnsConfig() = default;
 
 bool DnsConfig::Equals(const DnsConfig& d) const {
   return EqualsIgnoreHosts(d) && (hosts == d.hosts);
diff --git a/net/dns/dns_config_service_posix.cc b/net/dns/dns_config_service_posix.cc
index 339f0f1b..60d6abe 100644
--- a/net/dns/dns_config_service_posix.cc
+++ b/net/dns/dns_config_service_posix.cc
@@ -224,7 +224,7 @@
  public:
   explicit Watcher(DnsConfigServicePosix* service)
       : service_(service), weak_factory_(this) {}
-  ~Watcher() {}
+  ~Watcher() = default;
 
   bool Watch() {
     bool success = true;
@@ -343,7 +343,7 @@
   }
 
  private:
-  ~ConfigReader() override {}
+  ~ConfigReader() override = default;
 
   // Raw pointer to owning DnsConfigService. This must never be accessed inside
   // DoWork(), since service may be destroyed while SerialWorker is running
diff --git a/net/dns/dns_query.cc b/net/dns/dns_query.cc
index 2ee2a32..e3e9a4d9 100644
--- a/net/dns/dns_query.cc
+++ b/net/dns/dns_query.cc
@@ -75,8 +75,7 @@
   }
 }
 
-DnsQuery::~DnsQuery() {
-}
+DnsQuery::~DnsQuery() = default;
 
 std::unique_ptr<DnsQuery> DnsQuery::CloneWithNewId(uint16_t id) const {
   return base::WrapUnique(new DnsQuery(*this, id));
diff --git a/net/dns/dns_response.cc b/net/dns/dns_response.cc
index 63d549b2..167bb01 100644
--- a/net/dns/dns_response.cc
+++ b/net/dns/dns_response.cc
@@ -27,11 +27,9 @@
 
 }  // namespace
 
-DnsResourceRecord::DnsResourceRecord() {
-}
+DnsResourceRecord::DnsResourceRecord() = default;
 
-DnsResourceRecord::~DnsResourceRecord() {
-}
+DnsResourceRecord::~DnsResourceRecord() = default;
 
 DnsRecordParser::DnsRecordParser() : packet_(NULL), length_(0), cur_(0) {
 }
@@ -169,8 +167,7 @@
   memcpy(io_buffer_->data(), data, length);
 }
 
-DnsResponse::~DnsResponse() {
-}
+DnsResponse::~DnsResponse() = default;
 
 bool DnsResponse::InitParse(int nbytes, const DnsQuery& query) {
   DCHECK_GE(nbytes, 0);
diff --git a/net/dns/dns_session_unittest.cc b/net/dns/dns_session_unittest.cc
index 8c44440..a9afe2b 100644
--- a/net/dns/dns_session_unittest.cc
+++ b/net/dns/dns_session_unittest.cc
@@ -91,7 +91,7 @@
   MockDnsSocketPool(ClientSocketFactory* factory, DnsSessionTest* test)
       : DnsSocketPool(factory, base::Bind(&base::RandInt)), test_(test) {}
 
-  ~MockDnsSocketPool() override {}
+  ~MockDnsSocketPool() override = default;
 
   void Initialize(const std::vector<IPEndPoint>* nameservers,
                   NetLog* net_log) override {
@@ -193,8 +193,7 @@
   return std::move(socket);
 }
 
-TestClientSocketFactory::~TestClientSocketFactory() {
-}
+TestClientSocketFactory::~TestClientSocketFactory() = default;
 
 TEST_F(DnsSessionTest, AllocateFree) {
   std::unique_ptr<DnsSession::SocketLease> lease1, lease2;
diff --git a/net/dns/dns_socket_pool.cc b/net/dns/dns_socket_pool.cc
index f5844b40..e77a03a 100644
--- a/net/dns/dns_socket_pool.cc
+++ b/net/dns/dns_socket_pool.cc
@@ -152,7 +152,7 @@
   DISALLOW_COPY_AND_ASSIGN(DefaultDnsSocketPool);
 };
 
-DnsSocketPool::~DnsSocketPool() {}
+DnsSocketPool::~DnsSocketPool() = default;
 
 // static
 std::unique_ptr<DnsSocketPool> DnsSocketPool::CreateDefault(
@@ -174,8 +174,7 @@
     FillPool(server_index, kInitialPoolSize);
 }
 
-DefaultDnsSocketPool::~DefaultDnsSocketPool() {
-}
+DefaultDnsSocketPool::~DefaultDnsSocketPool() = default;
 
 std::unique_ptr<DatagramClientSocket> DefaultDnsSocketPool::AllocateSocket(
     unsigned server_index) {
diff --git a/net/dns/dns_socket_pool_unittest.cc b/net/dns/dns_socket_pool_unittest.cc
index a77697f..eba9749 100644
--- a/net/dns/dns_socket_pool_unittest.cc
+++ b/net/dns/dns_socket_pool_unittest.cc
@@ -30,7 +30,7 @@
 
 class DummyRandIntCallback {
  public:
-  DummyRandIntCallback() {}
+  DummyRandIntCallback() = default;
 
   RandIntCallback MakeCallback() {
     return base::Bind(&DummyRandIntCallback::GetRandInt, dummy_.GetWeakPtr());
diff --git a/net/dns/dns_test_util.cc b/net/dns/dns_test_util.cc
index 3ef643a..4ebb589 100644
--- a/net/dns/dns_test_util.cc
+++ b/net/dns/dns_test_util.cc
@@ -27,7 +27,7 @@
 
 class MockAddressSorter : public AddressSorter {
  public:
-  ~MockAddressSorter() override {}
+  ~MockAddressSorter() override = default;
   void Sort(const AddressList& list,
             const CallbackType& callback) const override {
     // Do nothing.
@@ -175,7 +175,7 @@
   explicit MockTransactionFactory(const MockDnsClientRuleList& rules)
       : rules_(rules) {}
 
-  ~MockTransactionFactory() override {}
+  ~MockTransactionFactory() override = default;
 
   std::unique_ptr<DnsTransaction> CreateTransaction(
       const std::string& hostname,
@@ -217,7 +217,7 @@
         address_sorter_(new MockAddressSorter()) {
 }
 
-MockDnsClient::~MockDnsClient() {}
+MockDnsClient::~MockDnsClient() = default;
 
 void MockDnsClient::SetConfig(const DnsConfig& config) {
   config_ = config;
diff --git a/net/dns/dns_transaction.cc b/net/dns/dns_transaction.cc
index 77d5f6dc..1cf17a3 100644
--- a/net/dns/dns_transaction.cc
+++ b/net/dns/dns_transaction.cc
@@ -81,7 +81,7 @@
   explicit DnsAttempt(unsigned server_index)
       : result_(ERR_FAILED), server_index_(server_index) {}
 
-  virtual ~DnsAttempt() {}
+  virtual ~DnsAttempt() = default;
   // Starts the attempt. Returns ERR_IO_PENDING if cannot complete synchronously
   // and calls |callback| upon completion.
   virtual int Start(const CompletionCallback& callback) = 0;
diff --git a/net/dns/dns_transaction_unittest.cc b/net/dns/dns_transaction_unittest.cc
index 53328d7..99fe1500 100644
--- a/net/dns/dns_transaction_unittest.cc
+++ b/net/dns/dns_transaction_unittest.cc
@@ -68,7 +68,7 @@
                                 query_->io_buffer()->size(),
                                 num_reads_and_writes()));
   }
-  ~DnsSocketData() {}
+  ~DnsSocketData() = default;
 
   // All responses must be added before GetProvider.
 
@@ -162,7 +162,7 @@
                          net::NetLog* net_log)
       : MockUDPClientSocket(data, net_log) {
   }
-  ~FailingUDPClientSocket() override {}
+  ~FailingUDPClientSocket() override = default;
   int Connect(const IPEndPoint& endpoint) override {
     return ERR_CONNECTION_REFUSED;
   }
@@ -179,7 +179,7 @@
                       net::NetLog* net_log)
       : MockUDPClientSocket(data, net_log), factory_(factory) {
   }
-  ~TestUDPClientSocket() override {}
+  ~TestUDPClientSocket() override = default;
   int Connect(const IPEndPoint& endpoint) override;
 
  private:
@@ -192,7 +192,7 @@
 class TestSocketFactory : public MockClientSocketFactory {
  public:
   TestSocketFactory() : fail_next_socket_(false) {}
-  ~TestSocketFactory() override {}
+  ~TestSocketFactory() override = default;
 
   std::unique_ptr<DatagramClientSocket> CreateDatagramClientSocket(
       DatagramSocket::BindType bind_type,
@@ -335,7 +335,7 @@
 
 class DnsTransactionTest : public testing::Test {
  public:
-  DnsTransactionTest() {}
+  DnsTransactionTest() = default;
 
   // Generates |nameservers| for DnsConfig.
   void ConfigureNumServers(unsigned num_servers) {
diff --git a/net/dns/fuzzed_host_resolver.cc b/net/dns/fuzzed_host_resolver.cc
index 9bf8cd5..94f3c87 100644
--- a/net/dns/fuzzed_host_resolver.cc
+++ b/net/dns/fuzzed_host_resolver.cc
@@ -125,7 +125,7 @@
   }
 
  private:
-  ~FuzzedHostResolverProc() override {}
+  ~FuzzedHostResolverProc() override = default;
 
   base::WeakPtr<base::FuzzedDataProvider> data_provider_;
 
@@ -155,7 +155,7 @@
   SetTaskRunnerForTesting(base::SequencedTaskRunnerHandle::Get());
 }
 
-FuzzedHostResolver::~FuzzedHostResolver() {}
+FuzzedHostResolver::~FuzzedHostResolver() = default;
 
 void FuzzedHostResolver::SetDnsClientEnabled(bool enabled) {
   if (!enabled) {
diff --git a/net/dns/host_cache.cc b/net/dns/host_cache.cc
index 091304f2..70e66a7f 100644
--- a/net/dns/host_cache.cc
+++ b/net/dns/host_cache.cc
@@ -96,7 +96,7 @@
       source_(source),
       ttl_(base::TimeDelta::FromSeconds(-1)) {}
 
-HostCache::Entry::~Entry() {}
+HostCache::Entry::~Entry() = default;
 
 HostCache::Entry::Entry(HostCache::Entry&& entry) = default;
 
diff --git a/net/dns/host_resolver.cc b/net/dns/host_resolver.cc
index c384983..165fb00 100644
--- a/net/dns/host_resolver.cc
+++ b/net/dns/host_resolver.cc
@@ -95,15 +95,10 @@
   host_port_pair_ = host_port_pair;
 }
 
-HostResolver::RequestInfo::RequestInfo(const RequestInfo& request_info)
-    : host_port_pair_(request_info.host_port_pair_),
-      address_family_(request_info.address_family_),
-      host_resolver_flags_(request_info.host_resolver_flags_),
-      allow_cached_response_(request_info.allow_cached_response_),
-      is_speculative_(request_info.is_speculative_),
-      is_my_ip_address_(request_info.is_my_ip_address_) {}
+HostResolver::RequestInfo::RequestInfo(const RequestInfo& request_info) =
+    default;
 
-HostResolver::RequestInfo::~RequestInfo() {}
+HostResolver::RequestInfo::~RequestInfo() = default;
 
 HostResolver::RequestInfo::RequestInfo()
     : address_family_(ADDRESS_FAMILY_UNSPECIFIED),
@@ -112,8 +107,7 @@
       is_speculative_(false),
       is_my_ip_address_(false) {}
 
-HostResolver::~HostResolver() {
-}
+HostResolver::~HostResolver() = default;
 
 void HostResolver::SetDnsClientEnabled(bool enabled) {
 }
@@ -165,6 +159,6 @@
   return CreateSystemResolverImpl(Options(), net_log);
 }
 
-HostResolver::HostResolver() {}
+HostResolver::HostResolver() = default;
 
 }  // namespace net
diff --git a/net/dns/host_resolver_impl.cc b/net/dns/host_resolver_impl.cc
index 6869b5d2..a4185d5 100644
--- a/net/dns/host_resolver_impl.cc
+++ b/net/dns/host_resolver_impl.cc
@@ -734,7 +734,7 @@
 
  private:
   friend class base::RefCountedThreadSafe<ProcTask>;
-  ~ProcTask() {}
+  ~ProcTask() = default;
 
   void StartLookupAttempt() {
     DCHECK(network_task_runner_->BelongsToCurrentThread());
@@ -983,8 +983,8 @@
     virtual void OnFirstDnsTransactionComplete() = 0;
 
    protected:
-    Delegate() {}
-    virtual ~Delegate() {}
+    Delegate() = default;
+    virtual ~Delegate() = default;
   };
 
   DnsTask(DnsClient* client,
@@ -1890,7 +1890,7 @@
 HostResolverImpl::ProcTaskParams::ProcTaskParams(const ProcTaskParams& other) =
     default;
 
-HostResolverImpl::ProcTaskParams::~ProcTaskParams() {}
+HostResolverImpl::ProcTaskParams::~ProcTaskParams() = default;
 
 HostResolverImpl::~HostResolverImpl() {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
diff --git a/net/dns/host_resolver_impl_fuzzer.cc b/net/dns/host_resolver_impl_fuzzer.cc
index 62613ce..06c87e7 100644
--- a/net/dns/host_resolver_impl_fuzzer.cc
+++ b/net/dns/host_resolver_impl_fuzzer.cc
@@ -42,7 +42,7 @@
         dns_requests_(dns_requests),
         is_running_(false) {}
 
-  ~DnsRequest() {}
+  ~DnsRequest() = default;
 
   // Creates and starts a DNS request using fuzzed parameters. If the request
   // doesn't complete synchronously, adds it to |dns_requests|.
diff --git a/net/dns/host_resolver_impl_unittest.cc b/net/dns/host_resolver_impl_unittest.cc
index fde7965..591bd88 100644
--- a/net/dns/host_resolver_impl_unittest.cc
+++ b/net/dns/host_resolver_impl_unittest.cc
@@ -187,7 +187,7 @@
   }
 
  protected:
-  ~MockHostResolverProc() override {}
+  ~MockHostResolverProc() override = default;
 
  private:
   mutable base::Lock lock_;
@@ -215,7 +215,7 @@
  public:
   // Base class of handlers to be executed on completion of requests.
   struct Handler {
-    virtual ~Handler() {}
+    virtual ~Handler() = default;
     virtual void Handle(Request* request) = 0;
   };
 
@@ -434,7 +434,7 @@
   }
 
  protected:
-  ~LookupAttemptHostResolverProc() override {}
+  ~LookupAttemptHostResolverProc() override = default;
 
  private:
   int attempt_number_to_resolve_;
@@ -462,7 +462,7 @@
                        bool ipv6_reachable)
       : HostResolverImpl(options, net_log), ipv6_reachable_(ipv6_reachable) {}
 
-  ~TestHostResolverImpl() override {}
+  ~TestHostResolverImpl() override = default;
 
  private:
   const bool ipv6_reachable_;
@@ -527,7 +527,7 @@
  protected:
   // A Request::Handler which is a proxy to the HostResolverImplTest fixture.
   struct Handler : public Request::Handler {
-    ~Handler() override {}
+    ~Handler() override = default;
 
     // Proxy functions so that classes derived from Handler can access them.
     Request* CreateRequest(const HostResolver::RequestInfo& info,
diff --git a/net/dns/host_resolver_mojo.cc b/net/dns/host_resolver_mojo.cc
index 574cbb0..4015d0af 100644
--- a/net/dns/host_resolver_mojo.cc
+++ b/net/dns/host_resolver_mojo.cc
@@ -54,7 +54,7 @@
  public:
   explicit RequestImpl(std::unique_ptr<Job> job) : job_(std::move(job)) {}
 
-  ~RequestImpl() override {}
+  ~RequestImpl() override = default;
 
   void ChangeRequestPriority(RequestPriority priority) override {}
 
diff --git a/net/dns/host_resolver_proc.cc b/net/dns/host_resolver_proc.cc
index 8b26955a..4ced225 100644
--- a/net/dns/host_resolver_proc.cc
+++ b/net/dns/host_resolver_proc.cc
@@ -68,8 +68,7 @@
     SetPreviousProc(default_proc_);
 }
 
-HostResolverProc::~HostResolverProc() {
-}
+HostResolverProc::~HostResolverProc() = default;
 
 int HostResolverProc::ResolveUsingPrevious(
     const std::string& host,
@@ -273,6 +272,6 @@
                                 os_error);
 }
 
-SystemHostResolverProc::~SystemHostResolverProc() {}
+SystemHostResolverProc::~SystemHostResolverProc() = default;
 
 }  // namespace net
diff --git a/net/dns/mapped_host_resolver.cc b/net/dns/mapped_host_resolver.cc
index dc14b650..4508df2 100644
--- a/net/dns/mapped_host_resolver.cc
+++ b/net/dns/mapped_host_resolver.cc
@@ -16,8 +16,7 @@
 MappedHostResolver::MappedHostResolver(std::unique_ptr<HostResolver> impl)
     : impl_(std::move(impl)) {}
 
-MappedHostResolver::~MappedHostResolver() {
-}
+MappedHostResolver::~MappedHostResolver() = default;
 
 int MappedHostResolver::Resolve(const RequestInfo& original_info,
                                 RequestPriority priority,
diff --git a/net/dns/mdns_cache.cc b/net/dns/mdns_cache.cc
index 308027a..5fe78914 100644
--- a/net/dns/mdns_cache.cc
+++ b/net/dns/mdns_cache.cc
@@ -27,22 +27,12 @@
     : type_(type), name_(name), optional_(optional) {
 }
 
-MDnsCache::Key::Key(
-    const MDnsCache::Key& other)
-    : type_(other.type_), name_(other.name_), optional_(other.optional_) {
-}
+MDnsCache::Key::Key(const MDnsCache::Key& other) = default;
 
+MDnsCache::Key& MDnsCache::Key::operator=(const MDnsCache::Key& other) =
+    default;
 
-MDnsCache::Key& MDnsCache::Key::operator=(
-    const MDnsCache::Key& other) {
-  type_ = other.type_;
-  name_ = other.name_;
-  optional_ = other.optional_;
-  return *this;
-}
-
-MDnsCache::Key::~Key() {
-}
+MDnsCache::Key::~Key() = default;
 
 bool MDnsCache::Key::operator<(const MDnsCache::Key& other) const {
   return std::tie(name_, type_, optional_) <
@@ -60,12 +50,9 @@
              GetOptionalFieldForRecord(record));
 }
 
+MDnsCache::MDnsCache() = default;
 
-MDnsCache::MDnsCache() {
-}
-
-MDnsCache::~MDnsCache() {
-}
+MDnsCache::~MDnsCache() = default;
 
 const RecordParsed* MDnsCache::LookupKey(const Key& key) {
   RecordMap::iterator found = mdns_cache_.find(key);
diff --git a/net/dns/mdns_cache_unittest.cc b/net/dns/mdns_cache_unittest.cc
index 1d8ceef..9c6abf9a 100644
--- a/net/dns/mdns_cache_unittest.cc
+++ b/net/dns/mdns_cache_unittest.cc
@@ -108,7 +108,7 @@
  public:
   MDnsCacheTest()
       : default_time_(base::Time::FromDoubleT(1234.0)) {}
-  virtual ~MDnsCacheTest() {}
+  virtual ~MDnsCacheTest() = default;
 
  protected:
   base::Time default_time_;
diff --git a/net/dns/mdns_client_impl.cc b/net/dns/mdns_client_impl.cc
index f61d881..a4902c4 100644
--- a/net/dns/mdns_client_impl.cc
+++ b/net/dns/mdns_client_impl.cc
@@ -62,8 +62,7 @@
       response_(dns_protocol::kMaxMulticastSize),
       send_in_progress_(false) {}
 
-MDnsConnection::SocketHandler::~SocketHandler() {
-}
+MDnsConnection::SocketHandler::~SocketHandler() = default;
 
 int MDnsConnection::SocketHandler::Start() {
   IPEndPoint end_point;
@@ -135,8 +134,7 @@
     : delegate_(delegate), weak_ptr_factory_(this) {
 }
 
-MDnsConnection::~MDnsConnection() {
-}
+MDnsConnection::~MDnsConnection() = default;
 
 bool MDnsConnection::Init(MDnsSocketFactory* socket_factory) {
   std::vector<std::unique_ptr<DatagramServerSocket>> sockets;
@@ -204,8 +202,7 @@
       connection_(new MDnsConnection(this)) {
 }
 
-MDnsClientImpl::Core::~Core() {
-}
+MDnsClientImpl::Core::~Core() = default;
 
 bool MDnsClientImpl::Core::Init(MDnsSocketFactory* socket_factory) {
   return connection_->Init(socket_factory);
@@ -428,8 +425,7 @@
                                std::unique_ptr<base::Timer> timer)
     : clock_(std::move(clock)), cleanup_timer_(std::move(timer)) {}
 
-MDnsClientImpl::~MDnsClientImpl() {
-}
+MDnsClientImpl::~MDnsClientImpl() = default;
 
 bool MDnsClientImpl::StartListening(MDnsSocketFactory* socket_factory) {
   DCHECK(!core_.get());
diff --git a/net/dns/mdns_client_unittest.cc b/net/dns/mdns_client_unittest.cc
index 15e85a00..76eb106 100644
--- a/net/dns/mdns_client_unittest.cc
+++ b/net/dns/mdns_client_unittest.cc
@@ -330,8 +330,8 @@
 
 class PtrRecordCopyContainer {
  public:
-  PtrRecordCopyContainer() {}
-  ~PtrRecordCopyContainer() {}
+  PtrRecordCopyContainer() = default;
+  ~PtrRecordCopyContainer() = default;
 
   bool is_set() const { return set_; }
 
@@ -364,7 +364,7 @@
 class MockClock : public base::DefaultClock {
  public:
   MockClock() : base::DefaultClock() {}
-  virtual ~MockClock() {}
+  virtual ~MockClock() = default;
 
   MOCK_METHOD0(Now, base::Time());
 
@@ -375,7 +375,7 @@
 class MockTimer : public base::MockTimer {
  public:
   MockTimer() : base::MockTimer(false, false) {}
-  ~MockTimer() {}
+  ~MockTimer() = default;
 
   void Start(const base::Location& posted_from,
              base::TimeDelta delay,
diff --git a/net/dns/mock_host_resolver.cc b/net/dns/mock_host_resolver.cc
index 2226e4b..2bb2441 100644
--- a/net/dns/mock_host_resolver.cc
+++ b/net/dns/mock_host_resolver.cc
@@ -449,8 +449,7 @@
                               host_resolver_flags, addrlist, os_error);
 }
 
-RuleBasedHostResolverProc::~RuleBasedHostResolverProc() {
-}
+RuleBasedHostResolverProc::~RuleBasedHostResolverProc() = default;
 
 void RuleBasedHostResolverProc::AddRuleInternal(const Rule& rule) {
   Rule fixed_rule = rule;
@@ -504,7 +503,7 @@
 
 //-----------------------------------------------------------------------------
 
-ScopedDefaultHostResolverProc::ScopedDefaultHostResolverProc() {}
+ScopedDefaultHostResolverProc::ScopedDefaultHostResolverProc() = default;
 
 ScopedDefaultHostResolverProc::ScopedDefaultHostResolverProc(
     HostResolverProc* proc) {
diff --git a/net/dns/mock_mdns_socket_factory.cc b/net/dns/mock_mdns_socket_factory.cc
index f2745069..f8a26a6 100644
--- a/net/dns/mock_mdns_socket_factory.cc
+++ b/net/dns/mock_mdns_socket_factory.cc
@@ -22,8 +22,7 @@
   local_address_ = GetMDnsIPEndPoint(address_family);
 }
 
-MockMDnsDatagramServerSocket::~MockMDnsDatagramServerSocket() {
-}
+MockMDnsDatagramServerSocket::~MockMDnsDatagramServerSocket() = default;
 
 int MockMDnsDatagramServerSocket::SendTo(IOBuffer* buf, int buf_len,
                                          const IPEndPoint& address,
@@ -60,11 +59,9 @@
   return ERR_IO_PENDING;
 }
 
-MockMDnsSocketFactory::MockMDnsSocketFactory() {
-}
+MockMDnsSocketFactory::MockMDnsSocketFactory() = default;
 
-MockMDnsSocketFactory::~MockMDnsSocketFactory() {
-}
+MockMDnsSocketFactory::~MockMDnsSocketFactory() = default;
 
 void MockMDnsSocketFactory::CreateSockets(
     std::vector<std::unique_ptr<DatagramServerSocket>>* sockets) {
diff --git a/net/dns/mojo_host_resolver_impl.cc b/net/dns/mojo_host_resolver_impl.cc
index e61387ab..d6c0a3c 100644
--- a/net/dns/mojo_host_resolver_impl.cc
+++ b/net/dns/mojo_host_resolver_impl.cc
@@ -110,8 +110,7 @@
     OnResolveDone(result);
 }
 
-MojoHostResolverImpl::Job::~Job() {
-}
+MojoHostResolverImpl::Job::~Job() = default;
 
 void MojoHostResolverImpl::Job::OnResolveDone(int result) {
   DCHECK(thread_checker_.CalledOnValidThread());
diff --git a/net/dns/mojo_host_resolver_impl_unittest.cc b/net/dns/mojo_host_resolver_impl_unittest.cc
index 55c5f7d..7fe5fb8 100644
--- a/net/dns/mojo_host_resolver_impl_unittest.cc
+++ b/net/dns/mojo_host_resolver_impl_unittest.cc
@@ -88,8 +88,8 @@
 
 class CallbackMockHostResolver : public MockHostResolver {
  public:
-  CallbackMockHostResolver() {}
-  ~CallbackMockHostResolver() override {}
+  CallbackMockHostResolver() = default;
+  ~CallbackMockHostResolver() override = default;
 
   // Set a callback to run whenever Resolve is called. Callback is cleared after
   // every run.
diff --git a/net/dns/record_parsed.cc b/net/dns/record_parsed.cc
index a7c7db68..d5492e6 100644
--- a/net/dns/record_parsed.cc
+++ b/net/dns/record_parsed.cc
@@ -25,8 +25,7 @@
       rdata_(std::move(rdata)),
       time_created_(time_created) {}
 
-RecordParsed::~RecordParsed() {
-}
+RecordParsed::~RecordParsed() = default;
 
 // static
 std::unique_ptr<const RecordParsed> RecordParsed::CreateFrom(
diff --git a/net/dns/record_rdata.cc b/net/dns/record_rdata.cc
index 9282b0ed..c8f86048 100644
--- a/net/dns/record_rdata.cc
+++ b/net/dns/record_rdata.cc
@@ -14,13 +14,12 @@
 
 static const size_t kSrvRecordMinimumSize = 6;
 
-RecordRdata::RecordRdata() {
-}
+RecordRdata::RecordRdata() = default;
 
 SrvRecordRdata::SrvRecordRdata() : priority_(0), weight_(0), port_(0) {
 }
 
-SrvRecordRdata::~SrvRecordRdata() {}
+SrvRecordRdata::~SrvRecordRdata() = default;
 
 // static
 std::unique_ptr<SrvRecordRdata> SrvRecordRdata::Create(
@@ -57,11 +56,9 @@
       target_ == srv_other->target_;
 }
 
-ARecordRdata::ARecordRdata() {
-}
+ARecordRdata::ARecordRdata() = default;
 
-ARecordRdata::~ARecordRdata() {
-}
+ARecordRdata::~ARecordRdata() = default;
 
 // static
 std::unique_ptr<ARecordRdata> ARecordRdata::Create(
@@ -86,11 +83,9 @@
   return address_ == a_other->address_;
 }
 
-AAAARecordRdata::AAAARecordRdata() {
-}
+AAAARecordRdata::AAAARecordRdata() = default;
 
-AAAARecordRdata::~AAAARecordRdata() {
-}
+AAAARecordRdata::~AAAARecordRdata() = default;
 
 // static
 std::unique_ptr<AAAARecordRdata> AAAARecordRdata::Create(
@@ -115,11 +110,9 @@
   return address_ == a_other->address_;
 }
 
-CnameRecordRdata::CnameRecordRdata() {
-}
+CnameRecordRdata::CnameRecordRdata() = default;
 
-CnameRecordRdata::~CnameRecordRdata() {
-}
+CnameRecordRdata::~CnameRecordRdata() = default;
 
 // static
 std::unique_ptr<CnameRecordRdata> CnameRecordRdata::Create(
@@ -144,11 +137,9 @@
   return cname_ == cname_other->cname_;
 }
 
-PtrRecordRdata::PtrRecordRdata() {
-}
+PtrRecordRdata::PtrRecordRdata() = default;
 
-PtrRecordRdata::~PtrRecordRdata() {
-}
+PtrRecordRdata::~PtrRecordRdata() = default;
 
 // static
 std::unique_ptr<PtrRecordRdata> PtrRecordRdata::Create(
@@ -172,11 +163,9 @@
   return ptrdomain_ == ptr_other->ptrdomain_;
 }
 
-TxtRecordRdata::TxtRecordRdata() {
-}
+TxtRecordRdata::TxtRecordRdata() = default;
 
-TxtRecordRdata::~TxtRecordRdata() {
-}
+TxtRecordRdata::~TxtRecordRdata() = default;
 
 // static
 std::unique_ptr<TxtRecordRdata> TxtRecordRdata::Create(
@@ -209,11 +198,9 @@
   return texts_ == txt_other->texts_;
 }
 
-NsecRecordRdata::NsecRecordRdata() {
-}
+NsecRecordRdata::NsecRecordRdata() = default;
 
-NsecRecordRdata::~NsecRecordRdata() {
-}
+NsecRecordRdata::~NsecRecordRdata() = default;
 
 // static
 std::unique_ptr<NsecRecordRdata> NsecRecordRdata::Create(
@@ -278,9 +265,9 @@
   return (bitmap_[byte_num] & (1 << bit_num)) != 0;
 }
 
-OptRecordRdata::OptRecordRdata() {}
+OptRecordRdata::OptRecordRdata() = default;
 
-OptRecordRdata::~OptRecordRdata() {}
+OptRecordRdata::~OptRecordRdata() = default;
 
 // static
 std::unique_ptr<OptRecordRdata> OptRecordRdata::Create(
diff --git a/net/dns/serial_worker.cc b/net/dns/serial_worker.cc
index 595c0b9..7d9f264 100644
--- a/net/dns/serial_worker.cc
+++ b/net/dns/serial_worker.cc
@@ -13,7 +13,7 @@
 
 SerialWorker::SerialWorker() : state_(IDLE) {}
 
-SerialWorker::~SerialWorker() {}
+SerialWorker::~SerialWorker() = default;
 
 void SerialWorker::WorkNow() {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
diff --git a/net/dns/serial_worker_unittest.cc b/net/dns/serial_worker_unittest.cc
index de16228..d52c0fd 100644
--- a/net/dns/serial_worker_unittest.cc
+++ b/net/dns/serial_worker_unittest.cc
@@ -33,7 +33,7 @@
       test_->OnWorkFinished();
     }
    private:
-    ~TestSerialWorker() override {}
+    ~TestSerialWorker() override = default;
     SerialWorkerTest* test_;
   };
 
diff --git a/net/ssl/channel_id_store.cc b/net/ssl/channel_id_store.cc
index 9acd57d..7fee5eaa 100644
--- a/net/ssl/channel_id_store.cc
+++ b/net/ssl/channel_id_store.cc
@@ -10,8 +10,7 @@
 
 namespace net {
 
-ChannelIDStore::ChannelID::ChannelID() {
-}
+ChannelIDStore::ChannelID::ChannelID() = default;
 
 ChannelIDStore::ChannelID::ChannelID(const std::string& server_identifier,
                                      base::Time creation_time,
@@ -37,7 +36,7 @@
   return *this;
 }
 
-ChannelIDStore::ChannelID::~ChannelID() {}
+ChannelIDStore::ChannelID::~ChannelID() = default;
 
 ChannelIDStore::~ChannelIDStore() {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
diff --git a/net/ssl/client_cert_store_nss.cc b/net/ssl/client_cert_store_nss.cc
index 959f497..512b38e 100644
--- a/net/ssl/client_cert_store_nss.cc
+++ b/net/ssl/client_cert_store_nss.cc
@@ -69,7 +69,7 @@
     const PasswordDelegateFactory& password_delegate_factory)
     : password_delegate_factory_(password_delegate_factory) {}
 
-ClientCertStoreNSS::~ClientCertStoreNSS() {}
+ClientCertStoreNSS::~ClientCertStoreNSS() = default;
 
 void ClientCertStoreNSS::GetClientCerts(
     const SSLCertRequestInfo& request,
diff --git a/net/ssl/client_cert_store_nss_unittest.cc b/net/ssl/client_cert_store_nss_unittest.cc
index cf8ed3a..5b9b323 100644
--- a/net/ssl/client_cert_store_nss_unittest.cc
+++ b/net/ssl/client_cert_store_nss_unittest.cc
@@ -50,7 +50,7 @@
 
 class ClientCertStoreNSSTestDelegate {
  public:
-  ClientCertStoreNSSTestDelegate() {}
+  ClientCertStoreNSSTestDelegate() = default;
 
   bool SelectClientCerts(const CertificateList& input_certs,
                          const SSLCertRequestInfo& cert_request_info,
diff --git a/net/ssl/default_channel_id_store.cc b/net/ssl/default_channel_id_store.cc
index 678ff6a..34f656a 100644
--- a/net/ssl/default_channel_id_store.cc
+++ b/net/ssl/default_channel_id_store.cc
@@ -36,8 +36,7 @@
   void InvokeCallback(base::Closure callback) const;
 };
 
-DefaultChannelIDStore::Task::~Task() {
-}
+DefaultChannelIDStore::Task::~Task() = default;
 
 void DefaultChannelIDStore::Task::InvokeCallback(
     base::Closure callback) const {
@@ -67,8 +66,7 @@
       callback_(callback) {
 }
 
-DefaultChannelIDStore::GetChannelIDTask::~GetChannelIDTask() {
-}
+DefaultChannelIDStore::GetChannelIDTask::~GetChannelIDTask() = default;
 
 void DefaultChannelIDStore::GetChannelIDTask::Run(
     DefaultChannelIDStore* store) {
@@ -98,8 +96,7 @@
     std::unique_ptr<ChannelID> channel_id)
     : channel_id_(std::move(channel_id)) {}
 
-DefaultChannelIDStore::SetChannelIDTask::~SetChannelIDTask() {
-}
+DefaultChannelIDStore::SetChannelIDTask::~SetChannelIDTask() = default;
 
 void DefaultChannelIDStore::SetChannelIDTask::Run(
     DefaultChannelIDStore* store) {
@@ -129,9 +126,7 @@
           callback_(callback) {
 }
 
-DefaultChannelIDStore::DeleteChannelIDTask::
-    ~DeleteChannelIDTask() {
-}
+DefaultChannelIDStore::DeleteChannelIDTask::~DeleteChannelIDTask() = default;
 
 void DefaultChannelIDStore::DeleteChannelIDTask::Run(
     DefaultChannelIDStore* store) {
@@ -172,7 +167,7 @@
       callback_(callback) {}
 
 DefaultChannelIDStore::DeleteForDomainsCreatedBetweenTask::
-    ~DeleteForDomainsCreatedBetweenTask() {}
+    ~DeleteForDomainsCreatedBetweenTask() = default;
 
 void DefaultChannelIDStore::DeleteForDomainsCreatedBetweenTask::Run(
     DefaultChannelIDStore* store) {
@@ -201,9 +196,7 @@
         : callback_(callback) {
 }
 
-DefaultChannelIDStore::GetAllChannelIDsTask::
-    ~GetAllChannelIDsTask() {
-}
+DefaultChannelIDStore::GetAllChannelIDsTask::~GetAllChannelIDsTask() = default;
 
 void DefaultChannelIDStore::GetAllChannelIDsTask::Run(
     DefaultChannelIDStore* store) {
@@ -439,8 +432,8 @@
   return !store_;
 }
 
-DefaultChannelIDStore::PersistentStore::PersistentStore() {}
+DefaultChannelIDStore::PersistentStore::PersistentStore() = default;
 
-DefaultChannelIDStore::PersistentStore::~PersistentStore() {}
+DefaultChannelIDStore::PersistentStore::~PersistentStore() = default;
 
 }  // namespace net
diff --git a/net/ssl/default_channel_id_store_unittest.cc b/net/ssl/default_channel_id_store_unittest.cc
index e7dcbc49..c4f9c07 100644
--- a/net/ssl/default_channel_id_store_unittest.cc
+++ b/net/ssl/default_channel_id_store_unittest.cc
@@ -90,7 +90,7 @@
   ChannelIDMap channel_ids_;
 };
 
-MockPersistentStore::MockPersistentStore() {}
+MockPersistentStore::MockPersistentStore() = default;
 
 void MockPersistentStore::Load(const LoadedCallback& loaded_callback) {
   std::unique_ptr<
@@ -122,7 +122,7 @@
 
 void MockPersistentStore::Flush() {}
 
-MockPersistentStore::~MockPersistentStore() {}
+MockPersistentStore::~MockPersistentStore() = default;
 
 bool DomainEquals(const std::string& domain1, const std::string& domain2) {
   return domain1 == domain2;
diff --git a/net/ssl/ssl_cert_request_info.cc b/net/ssl/ssl_cert_request_info.cc
index 245dfdc6..2ad30cdc 100644
--- a/net/ssl/ssl_cert_request_info.cc
+++ b/net/ssl/ssl_cert_request_info.cc
@@ -18,7 +18,6 @@
   cert_key_types.clear();
 }
 
-SSLCertRequestInfo::~SSLCertRequestInfo() {
-}
+SSLCertRequestInfo::~SSLCertRequestInfo() = default;
 
 }  // namespace net
diff --git a/net/ssl/ssl_client_auth_cache_unittest.cc b/net/ssl/ssl_client_auth_cache_unittest.cc
index 84d0e2e..04bc3d6 100644
--- a/net/ssl/ssl_client_auth_cache_unittest.cc
+++ b/net/ssl/ssl_client_auth_cache_unittest.cc
@@ -16,7 +16,7 @@
 
 class MockSSLPrivateKey : public SSLPrivateKey {
  public:
-  MockSSLPrivateKey() {}
+  MockSSLPrivateKey() = default;
 
   std::vector<uint16_t> GetAlgorithmPreferences() override {
     NOTIMPLEMENTED();
@@ -30,7 +30,7 @@
   }
 
  private:
-  ~MockSSLPrivateKey() override {}
+  ~MockSSLPrivateKey() override = default;
 
   DISALLOW_COPY_AND_ASSIGN(MockSSLPrivateKey);
 };
diff --git a/net/ssl/ssl_client_session_cache.cc b/net/ssl/ssl_client_session_cache.cc
index 2ea5fa0..eebca7640 100644
--- a/net/ssl/ssl_client_session_cache.cc
+++ b/net/ssl/ssl_client_session_cache.cc
@@ -158,7 +158,7 @@
                         undeduped_cert_count);
 }
 
-SSLClientSessionCache::Entry::Entry() {}
+SSLClientSessionCache::Entry::Entry() = default;
 SSLClientSessionCache::Entry::Entry(Entry&&) = default;
 SSLClientSessionCache::Entry::~Entry() = default;
 
diff --git a/net/ssl/ssl_config.cc b/net/ssl/ssl_config.cc
index 89f8133..a460ebe 100644
--- a/net/ssl/ssl_config.cc
+++ b/net/ssl/ssl_config.cc
@@ -18,8 +18,7 @@
 SSLConfig::CertAndStatus::CertAndStatus(scoped_refptr<X509Certificate> cert_arg,
                                         CertStatus status)
     : cert(std::move(cert_arg)), cert_status(status) {}
-SSLConfig::CertAndStatus::CertAndStatus(const CertAndStatus& other)
-    : cert(other.cert), cert_status(other.cert_status) {}
+SSLConfig::CertAndStatus::CertAndStatus(const CertAndStatus& other) = default;
 SSLConfig::CertAndStatus::~CertAndStatus() = default;
 
 SSLConfig::SSLConfig()
@@ -42,7 +41,7 @@
 
 SSLConfig::SSLConfig(const SSLConfig& other) = default;
 
-SSLConfig::~SSLConfig() {}
+SSLConfig::~SSLConfig() = default;
 
 bool SSLConfig::IsAllowedBadCert(X509Certificate* cert,
                                  CertStatus* cert_status) const {
diff --git a/net/ssl/ssl_config_service.cc b/net/ssl/ssl_config_service.cc
index 31dfdcf..f6e341b 100644
--- a/net/ssl/ssl_config_service.cc
+++ b/net/ssl/ssl_config_service.cc
@@ -72,8 +72,7 @@
     observer.OnSSLConfigChanged();
 }
 
-SSLConfigService::~SSLConfigService() {
-}
+SSLConfigService::~SSLConfigService() = default;
 
 void SSLConfigService::ProcessConfigUpdate(const SSLConfig& old_config,
                                            const SSLConfig& new_config) {
diff --git a/net/ssl/ssl_config_service_defaults.cc b/net/ssl/ssl_config_service_defaults.cc
index c512ed8..acbaa733 100644
--- a/net/ssl/ssl_config_service_defaults.cc
+++ b/net/ssl/ssl_config_service_defaults.cc
@@ -6,14 +6,12 @@
 
 namespace net {
 
-SSLConfigServiceDefaults::SSLConfigServiceDefaults() {
-}
+SSLConfigServiceDefaults::SSLConfigServiceDefaults() = default;
 
 void SSLConfigServiceDefaults::GetSSLConfig(SSLConfig* config) {
   *config = default_config_;
 }
 
-SSLConfigServiceDefaults::~SSLConfigServiceDefaults() {
-}
+SSLConfigServiceDefaults::~SSLConfigServiceDefaults() = default;
 
 }  // namespace net
diff --git a/net/ssl/ssl_config_service_unittest.cc b/net/ssl/ssl_config_service_unittest.cc
index a4d4f9f6a..6dac67b 100644
--- a/net/ssl/ssl_config_service_unittest.cc
+++ b/net/ssl/ssl_config_service_unittest.cc
@@ -29,15 +29,15 @@
   }
 
  private:
-  ~MockSSLConfigService() override {}
+  ~MockSSLConfigService() override = default;
 
   SSLConfig config_;
 };
 
 class MockSSLConfigServiceObserver : public SSLConfigService::Observer {
  public:
-  MockSSLConfigServiceObserver() {}
-  virtual ~MockSSLConfigServiceObserver() {}
+  MockSSLConfigServiceObserver() = default;
+  virtual ~MockSSLConfigServiceObserver() = default;
 
   MOCK_METHOD0(OnSSLConfigChanged, void());
 };
diff --git a/net/ssl/ssl_info.cc b/net/ssl/ssl_info.cc
index 9d9c2f4..28fcc14 100644
--- a/net/ssl/ssl_info.cc
+++ b/net/ssl/ssl_info.cc
@@ -23,31 +23,9 @@
   *this = info;
 }
 
-SSLInfo::~SSLInfo() {
-}
+SSLInfo::~SSLInfo() = default;
 
-SSLInfo& SSLInfo::operator=(const SSLInfo& info) {
-  cert = info.cert;
-  unverified_cert = info.unverified_cert;
-  cert_status = info.cert_status;
-  security_bits = info.security_bits;
-  key_exchange_group = info.key_exchange_group;
-  connection_status = info.connection_status;
-  is_issued_by_known_root = info.is_issued_by_known_root;
-  pkp_bypassed = info.pkp_bypassed;
-  client_cert_sent = info.client_cert_sent;
-  channel_id_sent = info.channel_id_sent;
-  token_binding_negotiated = info.token_binding_negotiated;
-  token_binding_key_param = info.token_binding_key_param;
-  handshake_type = info.handshake_type;
-  public_key_hashes = info.public_key_hashes;
-  pinning_failure_log = info.pinning_failure_log;
-  signed_certificate_timestamps = info.signed_certificate_timestamps;
-  ct_policy_compliance = info.ct_policy_compliance;
-  ct_policy_compliance_required = info.ct_policy_compliance_required;
-  ocsp_result = info.ocsp_result;
-  return *this;
-}
+SSLInfo& SSLInfo::operator=(const SSLInfo& info) = default;
 
 void SSLInfo::Reset() {
   cert = NULL;
diff --git a/net/ssl/ssl_platform_key_nss.cc b/net/ssl/ssl_platform_key_nss.cc
index 55dd9d6..be8588c 100644
--- a/net/ssl/ssl_platform_key_nss.cc
+++ b/net/ssl/ssl_platform_key_nss.cc
@@ -53,7 +53,7 @@
       : type_(type),
         password_delegate_(std::move(password_delegate)),
         key_(std::move(key)) {}
-  ~SSLPlatformKeyNSS() override {}
+  ~SSLPlatformKeyNSS() override = default;
 
   std::vector<uint16_t> GetAlgorithmPreferences() override {
     return SSLPrivateKey::DefaultAlgorithmPreferences(type_,
diff --git a/net/ssl/ssl_platform_key_util.cc b/net/ssl/ssl_platform_key_util.cc
index edee7db..46ba59f 100644
--- a/net/ssl/ssl_platform_key_util.cc
+++ b/net/ssl/ssl_platform_key_util.cc
@@ -28,7 +28,7 @@
     worker_thread_.StartWithOptions(options);
   }
 
-  ~SSLPlatformKeyTaskRunner() {}
+  ~SSLPlatformKeyTaskRunner() = default;
 
   scoped_refptr<base::SingleThreadTaskRunner> task_runner() {
     return worker_thread_.task_runner();
diff --git a/net/ssl/ssl_server_config.cc b/net/ssl/ssl_server_config.cc
index 0cdb9a1..266a4c8 100644
--- a/net/ssl/ssl_server_config.cc
+++ b/net/ssl/ssl_server_config.cc
@@ -18,6 +18,6 @@
 
 SSLServerConfig::SSLServerConfig(const SSLServerConfig& other) = default;
 
-SSLServerConfig::~SSLServerConfig() {}
+SSLServerConfig::~SSLServerConfig() = default;
 
 }  // namespace net
diff --git a/net/ssl/test_ssl_private_key.cc b/net/ssl/test_ssl_private_key.cc
index e7d0486..84602fe 100644
--- a/net/ssl/test_ssl_private_key.cc
+++ b/net/ssl/test_ssl_private_key.cc
@@ -29,7 +29,7 @@
   explicit TestSSLPlatformKey(bssl::UniquePtr<EVP_PKEY> key)
       : key_(std::move(key)) {}
 
-  ~TestSSLPlatformKey() override {}
+  ~TestSSLPlatformKey() override = default;
 
   std::vector<uint16_t> GetAlgorithmPreferences() override {
     return SSLPrivateKey::DefaultAlgorithmPreferences(EVP_PKEY_id(key_.get()),
diff --git a/net/ssl/threaded_ssl_private_key.cc b/net/ssl/threaded_ssl_private_key.cc
index d07942d..4158d40 100644
--- a/net/ssl/threaded_ssl_private_key.cc
+++ b/net/ssl/threaded_ssl_private_key.cc
@@ -44,7 +44,7 @@
 
  private:
   friend class base::RefCountedThreadSafe<Core>;
-  ~Core() {}
+  ~Core() = default;
 
   std::unique_ptr<ThreadedSSLPrivateKey::Delegate> delegate_;
 };
@@ -73,6 +73,6 @@
                  base::Owned(signature)));
 }
 
-ThreadedSSLPrivateKey::~ThreadedSSLPrivateKey() {}
+ThreadedSSLPrivateKey::~ThreadedSSLPrivateKey() = default;
 
 }  // namespace net
diff --git a/net/ssl/token_binding.cc b/net/ssl/token_binding.cc
index fc4ef6ca..d7f0ae7 100644
--- a/net/ssl/token_binding.cc
+++ b/net/ssl/token_binding.cc
@@ -147,7 +147,7 @@
   return OK;
 }
 
-TokenBinding::TokenBinding() {}
+TokenBinding::TokenBinding() = default;
 
 bool ParseTokenBindingMessage(base::StringPiece token_binding_message,
                               std::vector<TokenBinding>* token_bindings) {
diff --git a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
index eb5a6cd..5dab347 100644
--- a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
+++ b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
@@ -255503,7 +255503,7 @@
    "support"
   ],
   "css/css-fonts/font-variant-01.html": [
-   "0d0a249db6c2ddaad1e4de702834020aa4ab45fa",
+   "6803a83b4ab93a9ad442a0e339d536edd85ab5df",
    "reftest"
   ],
   "css/css-fonts/font-variant-02-ref.html": [
@@ -255511,7 +255511,7 @@
    "support"
   ],
   "css/css-fonts/font-variant-02.html": [
-   "4fd6a59d04fde5e82ec12fa4c89bf07c611ddd21",
+   "74980d099860a038f1e42ad62cb7f2eb8cbca02c",
    "reftest"
   ],
   "css/css-fonts/font-variant-03-ref.html": [
@@ -255519,7 +255519,7 @@
    "support"
   ],
   "css/css-fonts/font-variant-03.html": [
-   "78e21fc51d91d4ee0ec8e0838dab863a08aa1f83",
+   "c42d2410101bf0be8832a0f84ce6ee4b75e96a66",
    "reftest"
   ],
   "css/css-fonts/font-variant-04-ref.html": [
@@ -255527,7 +255527,7 @@
    "support"
   ],
   "css/css-fonts/font-variant-04.html": [
-   "0431694dc7064c9af5c1881484796b750b15b63c",
+   "b5417f15f571c21e754df033a597193384cf8610",
    "reftest"
   ],
   "css/css-fonts/font-variant-alternates-01-ref.html": [
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-fonts/font-variant-01.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-fonts/font-variant-01.html
index e73b1d5..ed69967 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/css/css-fonts/font-variant-01.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-fonts/font-variant-01.html
@@ -23,9 +23,9 @@
   }
   .outer {
     font-variant-ligatures: common-ligatures  discretionary-ligatures historical-ligatures contextual;
-    font-variant-position: sub;
+    font-variant-numeric: oldstyle-nums;
     font-variant-caps: small-caps;
-    font-variant-east-asian: jis04;
+    font-variant-east-asian: jis90;
   }
   .child {
     color: green;
@@ -36,6 +36,6 @@
 <p>Test passes if the two lines below are identical, with (in purple) eight check marks (✓),
 and then (in green) three check marks (✓) followed by five crosses (✗). </p>
 <section class="test">
-	<p class="outer">CDGFEJHa<span class="inner child">CDGFEJHa</span></p>
+	<p class="outer">CDGFEJQa<span class="inner child">CDGFEJQa</span></p>
 	<p class="ref">AAAAAAAA<span class="child">AAABBBBB</span></p>
 </section>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-fonts/font-variant-02.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-fonts/font-variant-02.html
index 6e1aecc..acda863 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/css/css-fonts/font-variant-02.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-fonts/font-variant-02.html
@@ -23,9 +23,9 @@
   }
   .outer {
     font-variant-ligatures: common-ligatures  discretionary-ligatures historical-ligatures contextual;
-    font-variant-position: sub;
+    font-variant-numeric: oldstyle-nums;
     font-variant-caps: small-caps;
-    font-variant-east-asian: jis04;
+    font-variant-east-asian: jis90;
   }
   .child {
     color: green;
@@ -36,6 +36,6 @@
 <p>Test passes if the two lines below are identical, with (in purple) eight check marks (✓),
 and then (in green) eight crosses (✗). </p>
 <section class="test">
-	<p class="outer">CDGFEJHa<span class="inner child">CDGFEJHa</span></p>
+	<p class="outer">CDGFEJQa<span class="inner child">CDGFEJQa</span></p>
 	<p class="ref">AAAAAAAA<span class="child">BBBBBBBB</span></p>
 </section>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-fonts/font-variant-03.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-fonts/font-variant-03.html
index 3da212a5..7e130cc 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/css/css-fonts/font-variant-03.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-fonts/font-variant-03.html
@@ -22,7 +22,7 @@
 	  font-variant: normal;
   }
   .outer {
-    font-feature-settings: "liga" on, "clig" on, "calt" on, "hlig" on, "dlig" on, "subs" on, "smcp" on, "jp04" on;
+    font-feature-settings: "liga" on, "clig" on, "calt" on, "hlig" on, "dlig" on, "onum" on, "smcp" on, "jp90" on;
   }
   .child {
     color: green;
@@ -33,6 +33,6 @@
 <p>Test passes if the two lines below are identical, with (in purple) eight check marks (✓),
 and then (in green) eight check marks (✓). </p>
 <section class="test">
-	<p class="outer">CDGFEJHa<span class="inner child">CDGFEJHa</span></p>
+	<p class="outer">CDGFEJQa<span class="inner child">CDGFEJQa</span></p>
 	<p class="ref">AAAAAAAA<span class="child">AAAAAAAA</span></p>
 </section>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-fonts/font-variant-04.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-fonts/font-variant-04.html
index 12aeaf5..be42639 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/css/css-fonts/font-variant-04.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-fonts/font-variant-04.html
@@ -22,7 +22,7 @@
 	  font-variant: none;
   }
   .outer {
-    font-feature-settings: "liga" on, "clig" on, "calt" on, "hlig" on, "dlig" on, "subs" on, "smcp" on, "jp04" on;
+    font-feature-settings: "liga" on, "clig" on, "calt" on, "hlig" on, "dlig" on, "onum" on, "smcp" on, "jp90" on;
   }
   .child {
     color: green;
@@ -33,6 +33,6 @@
 <p>Test passes if the two lines below are identical, with (in purple) eight check marks (✓),
 and then (in green) eight check marks (✓). </p>
 <section class="test">
-	<p class="outer">CDGFEJHa<span class="inner child">CDGFEJHa</span></p>
+	<p class="outer">CDGFEJQa<span class="inner child">CDGFEJQa</span></p>
 	<p class="ref">AAAAAAAA<span class="child">AAAAAAAA</span></p>
 </section>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol.html b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol.html
index a9ceee5a..d090aad 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol.html
@@ -58,12 +58,12 @@
 }, 'an empty url argument should throw SYNTAX_ERR');
 
 test(function () {
-  assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', 'http://%s.com', 'foo') } );
-}, '%s instead of domain name should throw SYNTAX_ERR');
+  assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler('mailto', 'http://%s.com', 'foo') } );
+}, '%s instead of domain name should throw SECURITY_ERR');
 
 test(function () {
-  assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', 'http://%s.example.com', 'foo') } );
-}, '%s instead of subdomain name should throw SYNTAX_ERR');
+  assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler('mailto', 'http://%s.example.com', 'foo') } );
+}, '%s instead of subdomain name should throw SECURITY_ERR');
 
 test(function () {
   assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', location.href + '', 'foo') } );
diff --git a/third_party/WebKit/LayoutTests/http/tests/navigatorcontentutils/register-protocol-handler-expected.txt b/third_party/WebKit/LayoutTests/http/tests/navigatorcontentutils/register-protocol-handler-expected.txt
index 5bfa015a..0578523 100644
--- a/third_party/WebKit/LayoutTests/http/tests/navigatorcontentutils/register-protocol-handler-expected.txt
+++ b/third_party/WebKit/LayoutTests/http/tests/navigatorcontentutils/register-protocol-handler-expected.txt
@@ -37,6 +37,7 @@
 PASS Invalid scheme "tel:sip" falied.
 PASS Invalid url "" threw SyntaxError exception: "Failed to execute 'registerProtocolHandler' on 'Navigator': The url provided ('') does not contain '%s'.".
 PASS Invalid url "%S" threw SyntaxError exception: "Failed to execute 'registerProtocolHandler' on 'Navigator': The url provided ('%S') does not contain '%s'.".
+PASS Invalid url "http://[v8.:::]//url=%s" threw SyntaxError exception: "Failed to execute 'registerProtocolHandler' on 'Navigator': The custom handler URL created by removing '%s' and prepending 'http://127.0.0.1:8000/navigatorcontentutils/register-protocol-handler.html' is invalid.".
 PASS The registeration of URL that has the same origin with the document origin is allowed.
 PASS URL with origin different than document origin threw SecurityError exception: "Failed to execute 'registerProtocolHandler' on 'Navigator': Can only register custom handler in the document's origin.".
 PASS Valid call succeeded.
diff --git a/third_party/WebKit/LayoutTests/http/tests/navigatorcontentutils/register-protocol-handler.html b/third_party/WebKit/LayoutTests/http/tests/navigatorcontentutils/register-protocol-handler.html
index ec1432b..92c094f4a 100644
--- a/third_party/WebKit/LayoutTests/http/tests/navigatorcontentutils/register-protocol-handler.html
+++ b/third_party/WebKit/LayoutTests/http/tests/navigatorcontentutils/register-protocol-handler.html
@@ -63,7 +63,7 @@
         debug('Fail: Invalid scheme "' + scheme + '" allowed. Threw exception: "' + errorMessage + '".');
 });
 
-var invalid_urls = ["", "%S"];
+var invalid_urls = ["", "%S", "http://[v8.:::]//url=%s"];
 invalid_urls.forEach(function (url) {
     var succeeded = false;
     try {
diff --git a/third_party/WebKit/LayoutTests/http/tests/navigatorcontentutils/unregister-protocol-handler-expected.txt b/third_party/WebKit/LayoutTests/http/tests/navigatorcontentutils/unregister-protocol-handler-expected.txt
index b8fa7e5..fb88ce0 100644
--- a/third_party/WebKit/LayoutTests/http/tests/navigatorcontentutils/unregister-protocol-handler-expected.txt
+++ b/third_party/WebKit/LayoutTests/http/tests/navigatorcontentutils/unregister-protocol-handler-expected.txt
@@ -37,6 +37,7 @@
 PASS Invalid scheme "tel:sip" falied.
 PASS Invalid url "" threw SyntaxError exception.Failed to execute 'unregisterProtocolHandler' on 'Navigator': The url provided ('') does not contain '%s'.".
 PASS Invalid url "%S" threw SyntaxError exception.Failed to execute 'unregisterProtocolHandler' on 'Navigator': The url provided ('%S') does not contain '%s'.".
+PASS Invalid url "http://[v8.:::]//url=%s" threw SyntaxError exception.Failed to execute 'unregisterProtocolHandler' on 'Navigator': The custom handler URL created by removing '%s' and prepending 'http://127.0.0.1:8000/navigatorcontentutils/unregister-protocol-handler.html' is invalid.".
 PASS URL with origin different than document origin threw SecurityError exception: "Failed to execute 'unregisterProtocolHandler' on 'Navigator': Can only register custom handler in the document's origin.".
 PASS Valid call succeeded.
 
diff --git a/third_party/WebKit/LayoutTests/http/tests/navigatorcontentutils/unregister-protocol-handler.html b/third_party/WebKit/LayoutTests/http/tests/navigatorcontentutils/unregister-protocol-handler.html
index f3161fd..0adc9bcd 100644
--- a/third_party/WebKit/LayoutTests/http/tests/navigatorcontentutils/unregister-protocol-handler.html
+++ b/third_party/WebKit/LayoutTests/http/tests/navigatorcontentutils/unregister-protocol-handler.html
@@ -62,7 +62,7 @@
         debug('Fail: Invalid scheme "' + scheme + '" allowed. Threw exception: "' + errorMessage + '".');
 });
 
-var invalid_urls = ["", "%S"];
+var invalid_urls = ["", "%S", "http://[v8.:::]//url=%s"];
 invalid_urls.forEach(function (url) {
    var succeeded = false;
    try {
diff --git a/third_party/WebKit/Source/core/html/forms/FormController.cpp b/third_party/WebKit/Source/core/html/forms/FormController.cpp
index 535b3ce..3157e8d7 100644
--- a/third_party/WebKit/Source/core/html/forms/FormController.cpp
+++ b/third_party/WebKit/Source/core/html/forms/FormController.cpp
@@ -410,14 +410,14 @@
 }
 
 void DocumentState::AddControl(HTMLFormControlElementWithState* control) {
-  DCHECK(!control->Next() && !control->Prev());
-  form_controls_.Append(control);
+  auto result = form_controls_.insert(control);
+  DCHECK(result.is_new_entry);
 }
 
 void DocumentState::RemoveControl(HTMLFormControlElementWithState* control) {
-  form_controls_.Remove(control);
-  control->SetPrev(nullptr);
-  control->SetNext(nullptr);
+  auto it = form_controls_.find(control);
+  CHECK(it != form_controls_.end());
+  form_controls_.erase(it);
 }
 
 static String FormStateSignature() {
@@ -433,8 +433,8 @@
   FormKeyGenerator* key_generator = FormKeyGenerator::Create();
   std::unique_ptr<SavedFormStateMap> state_map =
       WTF::WrapUnique(new SavedFormStateMap);
-  for (HTMLFormControlElementWithState* control = form_controls_.Head();
-       control; control = control->Next()) {
+  for (const auto& form_control : form_controls_) {
+    HTMLFormControlElementWithState* control = form_control.Get();
     DCHECK(control->isConnected());
     if (!control->ShouldSaveAndRestoreFormControlState())
       continue;
diff --git a/third_party/WebKit/Source/core/html/forms/FormController.h b/third_party/WebKit/Source/core/html/forms/FormController.h
index c21565d5..7ec8019 100644
--- a/third_party/WebKit/Source/core/html/forms/FormController.h
+++ b/third_party/WebKit/Source/core/html/forms/FormController.h
@@ -25,7 +25,6 @@
 
 #include <memory>
 #include "platform/heap/Handle.h"
-#include "platform/heap/HeapAllocator.h"
 #include "platform/wtf/Allocator.h"
 #include "platform/wtf/Forward.h"
 #include "platform/wtf/ListHashSet.h"
@@ -92,8 +91,9 @@
   Vector<String> ToStateVector();
 
  private:
-  using FormElementList = HeapDoublyLinkedList<HTMLFormControlElementWithState>;
-  FormElementList form_controls_;
+  using FormElementListHashSet =
+      HeapListHashSet<Member<HTMLFormControlElementWithState>, 64>;
+  FormElementListHashSet form_controls_;
 };
 
 class FormController final : public GarbageCollectedFinalized<FormController> {
diff --git a/third_party/WebKit/Source/core/html/forms/HTMLFormControlElementWithState.cpp b/third_party/WebKit/Source/core/html/forms/HTMLFormControlElementWithState.cpp
index 740ae5a..b8dd24f 100644
--- a/third_party/WebKit/Source/core/html/forms/HTMLFormControlElementWithState.cpp
+++ b/third_party/WebKit/Source/core/html/forms/HTMLFormControlElementWithState.cpp
@@ -87,10 +87,4 @@
   return true;
 }
 
-void HTMLFormControlElementWithState::Trace(Visitor* visitor) {
-  visitor->Trace(prev_);
-  visitor->Trace(next_);
-  HTMLFormControlElement::Trace(visitor);
-}
-
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/html/forms/HTMLFormControlElementWithState.h b/third_party/WebKit/Source/core/html/forms/HTMLFormControlElementWithState.h
index 0a4db72c..31320d6 100644
--- a/third_party/WebKit/Source/core/html/forms/HTMLFormControlElementWithState.h
+++ b/third_party/WebKit/Source/core/html/forms/HTMLFormControlElementWithState.h
@@ -27,15 +27,13 @@
 
 #include "core/CoreExport.h"
 #include "core/html/forms/HTMLFormControlElement.h"
-#include "platform/wtf/DoublyLinkedList.h"
 
 namespace blink {
 
 class FormControlState;
 
 class CORE_EXPORT HTMLFormControlElementWithState
-    : public HTMLFormControlElement,
-      public DoublyLinkedListNode<HTMLFormControlElementWithState> {
+    : public HTMLFormControlElement {
  public:
   ~HTMLFormControlElementWithState() override;
 
@@ -48,8 +46,6 @@
   virtual void RestoreFormControlState(const FormControlState&) {}
   void NotifyFormStateChanged();
 
-  void Trace(Visitor*) override;
-
  protected:
   HTMLFormControlElementWithState(const QualifiedName& tag_name, Document&);
 
@@ -57,15 +53,6 @@
   InsertionNotificationRequest InsertedInto(ContainerNode*) override;
   void RemovedFrom(ContainerNode*) override;
   bool IsFormControlElementWithState() const final;
-
- private:
-  // Pointers for DoublyLinkedListNode<HTMLFormControlElementWithState>. This
-  // is used for adding an instance to a list of form controls stored in
-  // DocumentState. Each instance is only added to its containing document's
-  // DocumentState list.
-  friend class WTF::DoublyLinkedListNode<HTMLFormControlElementWithState>;
-  Member<HTMLFormControlElementWithState> prev_;
-  Member<HTMLFormControlElementWithState> next_;
 };
 
 DEFINE_TYPE_CASTS(HTMLFormControlElementWithState,
diff --git a/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp b/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp
index 0241c5d4..a99c5b3 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp
@@ -33,6 +33,7 @@
 #include "core/dom/FlatTreeTraversal.h"
 #include "core/dom/NodeTraversal.h"
 #include "core/dom/QualifiedName.h"
+#include "core/dom/ShadowRoot.h"
 #include "core/dom/Text.h"
 #include "core/dom/UserGestureIndicator.h"
 #include "core/editing/EditingUtilities.h"
@@ -767,6 +768,21 @@
       MediaControlElementsHelper::ToParentMediaElement(node));
 }
 
+bool AXNodeObject::ComputeIsEditableRoot() const {
+  Node* node = GetNode();
+  if (!node)
+    return false;
+  if (IsNativeTextControl())
+    return true;
+  if (IsRootEditableElement(*node)) {
+    // Editable roots created by the user agent are handled by
+    // |IsNativeTextControl| above.
+    ShadowRoot* root = node->ContainingShadowRoot();
+    return !root || root->GetType() != ShadowRootType::kUserAgent;
+  }
+  return false;
+}
+
 bool AXNodeObject::IsEmbeddedObject() const {
   return IsHTMLPlugInElement(GetNode());
 }
diff --git a/third_party/WebKit/Source/modules/accessibility/AXNodeObject.h b/third_party/WebKit/Source/modules/accessibility/AXNodeObject.h
index c14d84c..dff108b 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXNodeObject.h
+++ b/third_party/WebKit/Source/modules/accessibility/AXNodeObject.h
@@ -97,6 +97,7 @@
   bool IsControllingVideoElement() const;
   bool IsMultiline() const override;
   bool IsEditable() const override { return IsNativeTextControl(); }
+  bool ComputeIsEditableRoot() const override;
   bool IsEmbeddedObject() const final;
   bool IsFieldset() const final;
   bool IsHeading() const final;
diff --git a/third_party/WebKit/Source/modules/accessibility/AXObject.cpp b/third_party/WebKit/Source/modules/accessibility/AXObject.cpp
index 0a2d78f..7be775cd 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXObject.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXObject.cpp
@@ -730,9 +730,7 @@
   cached_has_inherited_presentational_role_ =
       !!InheritsPresentationalRoleFrom();
   cached_is_ignored_ = ComputeAccessibilityIsIgnored();
-  cached_is_editable_root_ =
-      GetNode() ? IsNativeTextControl() || IsRootEditableElement(*GetNode())
-                : false;
+  cached_is_editable_root_ = ComputeIsEditableRoot();
   cached_live_region_root_ =
       IsLiveRegion()
           ? const_cast<AXObject*>(this)
diff --git a/third_party/WebKit/Source/modules/accessibility/AXObject.h b/third_party/WebKit/Source/modules/accessibility/AXObject.h
index 491eeaf..d0a0a5a 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXObject.h
+++ b/third_party/WebKit/Source/modules/accessibility/AXObject.h
@@ -617,6 +617,7 @@
   virtual bool AriaHasPopup() const { return false; }
   virtual bool IsEditable() const { return false; }
   bool IsEditableRoot() const;
+  virtual bool ComputeIsEditableRoot() const { return false; }
   virtual bool IsMultiline() const { return false; }
   virtual bool IsRichlyEditable() const { return false; }
   bool AriaCheckedIsPresent() const;
diff --git a/third_party/WebKit/Source/modules/navigatorcontentutils/NavigatorContentUtils.cpp b/third_party/WebKit/Source/modules/navigatorcontentutils/NavigatorContentUtils.cpp
index af04f6d..903bbad 100644
--- a/third_party/WebKit/Source/modules/navigatorcontentutils/NavigatorContentUtils.cpp
+++ b/third_party/WebKit/Source/modules/navigatorcontentutils/NavigatorContentUtils.cpp
@@ -64,8 +64,7 @@
   // the "%s" token and prepending the base url, does not resolve.
   String new_url = url;
   new_url.Remove(index, WTF_ARRAY_LENGTH(kToken) - 1);
-
-  KURL kurl = document.CompleteURL(url);
+  KURL kurl = document.CompleteURL(new_url);
 
   if (kurl.IsEmpty() || !kurl.IsValid()) {
     exception_state.ThrowDOMException(
diff --git a/third_party/WebKit/Source/platform/heap/HeapAllocator.h b/third_party/WebKit/Source/platform/heap/HeapAllocator.h
index 60af8f95..490e6b6 100644
--- a/third_party/WebKit/Source/platform/heap/HeapAllocator.h
+++ b/third_party/WebKit/Source/platform/heap/HeapAllocator.h
@@ -12,7 +12,6 @@
 #include "platform/wtf/Allocator.h"
 #include "platform/wtf/Assertions.h"
 #include "platform/wtf/Deque.h"
-#include "platform/wtf/DoublyLinkedList.h"
 #include "platform/wtf/HashCountedSet.h"
 #include "platform/wtf/HashMap.h"
 #include "platform/wtf/HashSet.h"
@@ -480,23 +479,6 @@
       : Deque<T, inlineCapacity, HeapAllocator>(other) {}
 };
 
-template <typename T>
-class HeapDoublyLinkedList : public DoublyLinkedList<T, Member<T>> {
-  IS_GARBAGE_COLLECTED_TYPE();
-  DISALLOW_NEW();
-
- public:
-  HeapDoublyLinkedList() {
-    static_assert(WTF::IsGarbageCollectedType<T>::value,
-                  "This should only be used for garbage collected types.");
-  }
-
-  void Trace(Visitor* visitor) {
-    visitor->Trace(this->head_);
-    visitor->Trace(this->tail_);
-  }
-};
-
 }  // namespace blink
 
 namespace WTF {
diff --git a/third_party/WebKit/Source/platform/heap/HeapTerminatedArray.h b/third_party/WebKit/Source/platform/heap/HeapTerminatedArray.h
index c422d31..5cd2ec8 100644
--- a/third_party/WebKit/Source/platform/heap/HeapTerminatedArray.h
+++ b/third_party/WebKit/Source/platform/heap/HeapTerminatedArray.h
@@ -59,6 +59,12 @@
   friend class WTF::TerminatedArrayBuilder;
 };
 
+template <typename T>
+class TraceEagerlyTrait<HeapTerminatedArray<T>> {
+ public:
+  static const bool value = TraceEagerlyTrait<T>::value;
+};
+
 }  // namespace blink
 
 #endif  // HeapTerminatedArray_h
diff --git a/third_party/WebKit/Source/platform/heap/HeapTest.cpp b/third_party/WebKit/Source/platform/heap/HeapTest.cpp
index d772ab8..99bf5dd8 100644
--- a/third_party/WebKit/Source/platform/heap/HeapTest.cpp
+++ b/third_party/WebKit/Source/platform/heap/HeapTest.cpp
@@ -6709,62 +6709,4 @@
   EXPECT_TRUE(string.Impl()->HasOneRef());
 }
 
-class DoublyLinkedListNodeImpl
-    : public GarbageCollectedFinalized<DoublyLinkedListNodeImpl>,
-      public DoublyLinkedListNode<DoublyLinkedListNodeImpl> {
- public:
-  DoublyLinkedListNodeImpl() {}
-  static DoublyLinkedListNodeImpl* Create() {
-    return new DoublyLinkedListNodeImpl();
-  }
-
-  static int destructor_calls_;
-  ~DoublyLinkedListNodeImpl() { ++destructor_calls_; }
-
-  void Trace(Visitor* visitor) {
-    visitor->Trace(prev_);
-    visitor->Trace(next_);
-  }
-
- private:
-  friend class WTF::DoublyLinkedListNode<DoublyLinkedListNodeImpl>;
-  Member<DoublyLinkedListNodeImpl> prev_;
-  Member<DoublyLinkedListNodeImpl> next_;
-};
-
-int DoublyLinkedListNodeImpl::destructor_calls_ = 0;
-
-template <typename T>
-class HeapDoublyLinkedListContainer
-    : public GarbageCollected<HeapDoublyLinkedListContainer<T>> {
- public:
-  static HeapDoublyLinkedListContainer<T>* Create() {
-    return new HeapDoublyLinkedListContainer<T>();
-  }
-  HeapDoublyLinkedListContainer<T>() {}
-  HeapDoublyLinkedList<T> list_;
-  void Trace(Visitor* visitor) { visitor->Trace(list_); }
-};
-
-TEST(HeapTest, HeapDoublyLinkedList) {
-  Persistent<HeapDoublyLinkedListContainer<DoublyLinkedListNodeImpl>>
-      container =
-          HeapDoublyLinkedListContainer<DoublyLinkedListNodeImpl>::Create();
-  DoublyLinkedListNodeImpl::destructor_calls_ = 0;
-
-  container->list_.Append(DoublyLinkedListNodeImpl::Create());
-  container->list_.Append(DoublyLinkedListNodeImpl::Create());
-
-  PreciselyCollectGarbage();
-  EXPECT_EQ(DoublyLinkedListNodeImpl::destructor_calls_, 0);
-
-  container->list_.RemoveHead();
-  PreciselyCollectGarbage();
-  EXPECT_EQ(DoublyLinkedListNodeImpl::destructor_calls_, 1);
-
-  container->list_.RemoveHead();
-  PreciselyCollectGarbage();
-  EXPECT_EQ(DoublyLinkedListNodeImpl::destructor_calls_, 2);
-}
-
 }  // namespace blink
diff --git a/third_party/WebKit/Source/platform/heap/TraceTraits.h b/third_party/WebKit/Source/platform/heap/TraceTraits.h
index f2464fe..899966d 100644
--- a/third_party/WebKit/Source/platform/heap/TraceTraits.h
+++ b/third_party/WebKit/Source/platform/heap/TraceTraits.h
@@ -27,10 +27,6 @@
 template <typename T>
 class CrossThreadWeakPersistent;
 template <typename T>
-class HeapDoublyLinkedList;
-template <typename T>
-class HeapTerminatedArray;
-template <typename T>
 class Member;
 template <typename T>
 class TraceEagerlyTrait;
@@ -438,20 +434,6 @@
   static const bool value = TraceEagerlyTrait<T>::value;
 };
 
-template <typename T>
-class TraceEagerlyTrait<HeapTerminatedArray<T>> {
- public:
-  static const bool value = TraceEagerlyTrait<T>::value;
-};
-
-template <typename T>
-class TraceEagerlyTrait<HeapDoublyLinkedList<T>> {
-  STATIC_ONLY(TraceEagerlyTrait);
-
- public:
-  static const bool value = TraceEagerlyTrait<T>::value;
-};
-
 template <typename ValueArg, size_t inlineCapacity>
 class HeapListHashSetAllocator;
 template <typename T, size_t inlineCapacity>
diff --git a/third_party/WebKit/Source/platform/loader/fetch/ResourceLoadScheduler.cpp b/third_party/WebKit/Source/platform/loader/fetch/ResourceLoadScheduler.cpp
index f7b2eda..e6588e7 100644
--- a/third_party/WebKit/Source/platform/loader/fetch/ResourceLoadScheduler.cpp
+++ b/third_party/WebKit/Source/platform/loader/fetch/ResourceLoadScheduler.cpp
@@ -243,16 +243,25 @@
 
 bool ResourceLoadScheduler::IsThrottablePriority(
     ResourceLoadPriority priority) const {
-  if (Platform::Current()->IsRendererSideResourceSchedulerEnabled()) {
-    if (priority >= ResourceLoadPriority::kMedium)
-      return false;
+  if (!Platform::Current()->IsRendererSideResourceSchedulerEnabled())
+    return true;
+
+  if (RuntimeEnabledFeatures::ResourceLoadSchedulerEnabled()) {
+    // If this scheduler is throttled by the associated WebFrameScheduler,
+    // consider every prioritiy as throttable.
+    const auto state = frame_scheduler_throttling_state_;
+    if (state == WebFrameScheduler::ThrottlingState::kThrottled ||
+        state == WebFrameScheduler::ThrottlingState::kStopped) {
+      return true;
+    }
   }
 
-  return true;
+  return priority < ResourceLoadPriority::kMedium;
 }
 
 void ResourceLoadScheduler::OnThrottlingStateChanged(
     WebFrameScheduler::ThrottlingState state) {
+  frame_scheduler_throttling_state_ = state;
   switch (state) {
     case WebFrameScheduler::ThrottlingState::kThrottled:
       if (throttling_history_ == ThrottlingHistory::kInitial)
diff --git a/third_party/WebKit/Source/platform/loader/fetch/ResourceLoadScheduler.h b/third_party/WebKit/Source/platform/loader/fetch/ResourceLoadScheduler.h
index c05b04af..6bddb0e 100644
--- a/third_party/WebKit/Source/platform/loader/fetch/ResourceLoadScheduler.h
+++ b/third_party/WebKit/Source/platform/loader/fetch/ResourceLoadScheduler.h
@@ -187,6 +187,8 @@
     kStopped,
   };
   ThrottlingHistory throttling_history_ = ThrottlingHistory::kInitial;
+  WebFrameScheduler::ThrottlingState frame_scheduler_throttling_state_ =
+      WebFrameScheduler::ThrottlingState::kNotThrottled;
 
   // Holds clients that haven't been granted, and are waiting for a grant.
   HeapHashMap<ClientId, Member<ClientWithPriority>> pending_request_map_;
diff --git a/third_party/WebKit/Source/platform/wtf/DoublyLinkedList.h b/third_party/WebKit/Source/platform/wtf/DoublyLinkedList.h
index 4c2e9a0..5280f77 100644
--- a/third_party/WebKit/Source/platform/wtf/DoublyLinkedList.h
+++ b/third_party/WebKit/Source/platform/wtf/DoublyLinkedList.h
@@ -70,7 +70,7 @@
   return static_cast<const T*>(this)->next_;
 }
 
-template <typename T, typename PointerType = T*>
+template <typename T>
 class DoublyLinkedList {
   USING_FAST_MALLOC(DoublyLinkedList);
 
@@ -90,90 +90,83 @@
   void Append(T*);
   void Remove(T*);
 
- protected:
-  PointerType head_;
-  PointerType tail_;
+ private:
+  T* head_;
+  T* tail_;
 
   DISALLOW_COPY_AND_ASSIGN(DoublyLinkedList);
 };
 
-template <typename T, typename PointerType>
-inline DoublyLinkedList<T, PointerType>::DoublyLinkedList()
-    : head_(nullptr), tail_(nullptr) {
-  static_assert(
-      !IsGarbageCollectedType<T>::value ||
-          !std::is_same<PointerType, T*>::value,
-      "Cannot use DoublyLinkedList<> with garbage collected types, use "
-      "HeapDoublyLinkedList<> instead.");
-}
+template <typename T>
+inline DoublyLinkedList<T>::DoublyLinkedList() : head_(0), tail_(0) {}
 
-template <typename T, typename PointerType>
-inline bool DoublyLinkedList<T, PointerType>::IsEmpty() const {
+template <typename T>
+inline bool DoublyLinkedList<T>::IsEmpty() const {
   return !head_;
 }
 
-template <typename T, typename PointerType>
-inline size_t DoublyLinkedList<T, PointerType>::size() const {
+template <typename T>
+inline size_t DoublyLinkedList<T>::size() const {
   size_t size = 0;
   for (T* node = head_; node; node = node->Next())
     ++size;
   return size;
 }
 
-template <typename T, typename PointerType>
-inline void DoublyLinkedList<T, PointerType>::Clear() {
-  head_ = nullptr;
-  tail_ = nullptr;
+template <typename T>
+inline void DoublyLinkedList<T>::Clear() {
+  head_ = 0;
+  tail_ = 0;
 }
 
-template <typename T, typename PointerType>
-inline T* DoublyLinkedList<T, PointerType>::Head() const {
+template <typename T>
+inline T* DoublyLinkedList<T>::Head() const {
   return head_;
 }
 
-template <typename T, typename PointerType>
-inline T* DoublyLinkedList<T, PointerType>::Tail() const {
+template <typename T>
+inline T* DoublyLinkedList<T>::Tail() const {
   return tail_;
 }
 
-template <typename T, typename PointerType>
-inline void DoublyLinkedList<T, PointerType>::Push(T* node) {
+template <typename T>
+inline void DoublyLinkedList<T>::Push(T* node) {
   if (!head_) {
     DCHECK(!tail_);
     head_ = node;
     tail_ = node;
-    node->SetPrev(nullptr);
-    node->SetNext(nullptr);
+    node->SetPrev(0);
+    node->SetNext(0);
     return;
   }
 
   DCHECK(tail_);
   head_->SetPrev(node);
   node->SetNext(head_);
-  node->SetPrev(nullptr);
+  node->SetPrev(0);
   head_ = node;
 }
 
-template <typename T, typename PointerType>
-inline void DoublyLinkedList<T, PointerType>::Append(T* node) {
+template <typename T>
+inline void DoublyLinkedList<T>::Append(T* node) {
   if (!tail_) {
     DCHECK(!head_);
     head_ = node;
     tail_ = node;
-    node->SetPrev(nullptr);
-    node->SetNext(nullptr);
+    node->SetPrev(0);
+    node->SetNext(0);
     return;
   }
 
   DCHECK(head_);
   tail_->SetNext(node);
   node->SetPrev(tail_);
-  node->SetNext(nullptr);
+  node->SetNext(0);
   tail_ = node;
 }
 
-template <typename T, typename PointerType>
-inline void DoublyLinkedList<T, PointerType>::Remove(T* node) {
+template <typename T>
+inline void DoublyLinkedList<T>::Remove(T* node) {
   if (node->Prev()) {
     DCHECK_NE(node, head_);
     node->Prev()->SetNext(node->Next());
@@ -191,8 +184,8 @@
   }
 }
 
-template <typename T, typename PointerType>
-inline T* DoublyLinkedList<T, PointerType>::RemoveHead() {
+template <typename T>
+inline T* DoublyLinkedList<T>::RemoveHead() {
   T* node = Head();
   if (node)
     Remove(node);
diff --git a/tools/metrics/ukm/ukm.xml b/tools/metrics/ukm/ukm.xml
index 88cc5d7..7c71528 100644
--- a/tools/metrics/ukm/ukm.xml
+++ b/tools/metrics/ukm/ukm.xml
@@ -2093,6 +2093,12 @@
       Number of touch events that were sent to the page.
     </summary>
   </metric>
+  <metric name="WasRecentlyAudible">
+    <summary>
+      Boolean value indicating whether the tab has played audio within the last
+      two seconds.
+    </summary>
+  </metric>
 </event>
 
 </ukm-configuration>
diff --git a/tools/perf/contrib/cluster_telemetry/smoothness_ct.py b/tools/perf/contrib/cluster_telemetry/smoothness_ct.py
new file mode 100644
index 0000000..6efd3c4c
--- /dev/null
+++ b/tools/perf/contrib/cluster_telemetry/smoothness_ct.py
@@ -0,0 +1,37 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+from contrib.cluster_telemetry import ct_benchmarks_util
+from contrib.cluster_telemetry import page_set
+
+from core import perf_benchmark
+from measurements import smoothness
+
+def ScrollToEndOfPage(action_runner):
+  action_runner.Wait(1)
+  with action_runner.CreateGestureInteraction('ScrollAction'):
+    action_runner.ScrollPage()
+
+
+class SmoothnessCT(perf_benchmark.PerfBenchmark):
+  """Measures smoothness performance for Cluster Telemetry."""
+
+  test = smoothness.Smoothness
+
+  @classmethod
+  def Name(cls):
+    return 'smoothness_ct'
+
+  @classmethod
+  def AddBenchmarkCommandLineArgs(cls, parser):
+    ct_benchmarks_util.AddBenchmarkCommandLineArgs(parser)
+
+  @classmethod
+  def ProcessCommandLineArgs(cls, parser, args):
+    ct_benchmarks_util.ValidateCommandLineArgs(parser, args)
+
+  def CreateStorySet(self, options):
+    return page_set.CTPageSet(
+        options.urls_list, options.user_agent, options.archive_data_file,
+        run_page_interaction_callback=ScrollToEndOfPage)
diff --git a/tools/perf/validate_wpr_archives b/tools/perf/validate_wpr_archives
index 563a3a1..8281827 100755
--- a/tools/perf/validate_wpr_archives
+++ b/tools/perf/validate_wpr_archives
@@ -21,6 +21,7 @@
   benchmarks_to_skip = [
       'skpicture_printer_ct',
       'screenshot_ct',
+      'smoothness_ct',
       'repaint_ct',
       'rasterize_and_record_micro_ct',
       'multipage_skpicture_printer_ct',
diff --git a/ui/accessibility/ax_role_properties.cc b/ui/accessibility/ax_role_properties.cc
index 371058f..7540c67 100644
--- a/ui/accessibility/ax_role_properties.cc
+++ b/ui/accessibility/ax_role_properties.cc
@@ -144,9 +144,4 @@
   }
 }
 
-bool IsEditField(ui::AXRole role) {
-  return role == ui::AX_ROLE_TEXT_FIELD || role == ui::AX_ROLE_SEARCH_BOX ||
-         role == ui::AX_ROLE_TEXT_FIELD_WITH_COMBO_BOX;
-}
-
 }  // namespace ui
diff --git a/ui/accessibility/ax_role_properties.h b/ui/accessibility/ax_role_properties.h
index 5d910357..81893bc 100644
--- a/ui/accessibility/ax_role_properties.h
+++ b/ui/accessibility/ax_role_properties.h
@@ -35,9 +35,6 @@
 // Returns true if this node is a menu or related role.
 AX_EXPORT bool IsMenuRelated(ui::AXRole role);
 
-// Returns true if this node is a edit field.
-AX_EXPORT bool IsEditField(ui::AXRole role);
-
 }  // namespace ui
 
 #endif  // UI_ACCESSIBILITY_AX_ROLE_PROPERTIES_H_
diff --git a/ui/accessibility/platform/ax_platform_node_base.cc b/ui/accessibility/platform/ax_platform_node_base.cc
index c37e285..97afb682 100644
--- a/ui/accessibility/platform/ax_platform_node_base.cc
+++ b/ui/accessibility/platform/ax_platform_node_base.cc
@@ -262,43 +262,20 @@
          GetData().role == AX_ROLE_INLINE_TEXT_BOX;
 }
 
-bool AXPlatformNodeBase::IsNativeTextControl() const {
-  const std::string& html_tag = GetStringAttribute(AX_ATTR_HTML_TAG);
-  if (html_tag == "input") {
-    std::string input_type;
-    if (!GetData().GetHtmlAttribute("type", &input_type))
-      return true;
-    return input_type.empty() || input_type == "email" ||
-           input_type == "password" || input_type == "search" ||
-           input_type == "tel" || input_type == "text" || input_type == "url" ||
-           input_type == "number";
-  }
-  return html_tag == "textarea";
+bool AXPlatformNodeBase::IsPlainTextField() const {
+  // We need to check both the role and editable state, because some ARIA text
+  // fields may in fact not be editable, whilst some editable fields might not
+  // have the role.
+  return !GetData().HasState(AX_STATE_RICHLY_EDITABLE) &&
+         (GetData().role == AX_ROLE_TEXT_FIELD ||
+          GetData().role == AX_ROLE_TEXT_FIELD_WITH_COMBO_BOX ||
+          GetData().role == AX_ROLE_SEARCH_BOX ||
+          GetBoolAttribute(AX_ATTR_EDITABLE_ROOT));
 }
 
-bool AXPlatformNodeBase::IsSimpleTextControl() const {
-  // Time fields, color wells and spinner buttons might also use text fields as
-  // constituent parts, but they are not considered text fields as a whole.
-  switch (GetData().role) {
-    case AX_ROLE_TEXT_FIELD_WITH_COMBO_BOX:
-    case AX_ROLE_SEARCH_BOX:
-      return true;
-    case AX_ROLE_TEXT_FIELD:
-      return !GetData().HasState(AX_STATE_RICHLY_EDITABLE);
-    default:
-      return false;
-  }
-}
-
-// Indicates if this object is at the root of a rich edit text control.
-bool AXPlatformNodeBase::IsRichTextControl() {
-  gfx::NativeViewAccessible parent_accessible = GetParent();
-  AXPlatformNodeBase* parent = FromNativeViewAccessible(parent_accessible);
-  if (!parent)
-    return false;
-
-  return GetData().HasState(AX_STATE_RICHLY_EDITABLE) &&
-         (!parent || !parent->GetData().HasState(AX_STATE_RICHLY_EDITABLE));
+bool AXPlatformNodeBase::IsRichTextField() const {
+  return GetBoolAttribute(AX_ATTR_EDITABLE_ROOT) &&
+         GetData().HasState(AX_STATE_RICHLY_EDITABLE);
 }
 
 base::string16 AXPlatformNodeBase::GetInnerText() {
@@ -466,7 +443,7 @@
 }
 
 bool AXPlatformNodeBase::HasCaret() {
-  if (IsSimpleTextControl() && HasIntAttribute(ui::AX_ATTR_TEXT_SEL_START) &&
+  if (IsPlainTextField() && HasIntAttribute(ui::AX_ATTR_TEXT_SEL_START) &&
       HasIntAttribute(ui::AX_ATTR_TEXT_SEL_END)) {
     return true;
   }
@@ -504,10 +481,7 @@
   // implementation details, but we want to expose them as leaves to platform
   // accessibility APIs because screen readers might be confused if they find
   // any children.
-  // Note that if a combo box, search box or text field are not native, they
-  // might present a menu of choices using aria-owns which should not be hidden
-  // from tree.
-  if (IsNativeTextControl() || IsTextOnlyObject())
+  if (IsPlainTextField() || IsTextOnlyObject())
     return true;
 
   // Roles whose children are only presentational according to the ARIA and
@@ -556,8 +530,7 @@
   // Some screen readers like Jaws and VoiceOver require a
   // value to be set in text fields with rich content, even though the same
   // information is available on the children.
-  if (value.empty() && (IsSimpleTextControl() || IsRichTextControl()) &&
-      !IsNativeTextControl())
+  if (value.empty() && IsRichTextField())
     return GetInnerText();
 
   return value;
diff --git a/ui/accessibility/platform/ax_platform_node_base.h b/ui/accessibility/platform/ax_platform_node_base.h
index 32eeb4a..1099e64 100644
--- a/ui/accessibility/platform/ax_platform_node_base.h
+++ b/ui/accessibility/platform/ax_platform_node_base.h
@@ -147,9 +147,8 @@
   ~AXPlatformNodeBase() override;
 
   bool IsTextOnlyObject() const;
-  bool IsNativeTextControl() const;
-  bool IsSimpleTextControl() const;
-  bool IsRichTextControl();
+  bool IsPlainTextField() const;
+  bool IsRichTextField() const;
   bool IsRangeValueSupported() const;
 
   // Get the range value text, which might come from aria-valuetext or
diff --git a/ui/accessibility/platform/ax_platform_node_win.cc b/ui/accessibility/platform/ax_platform_node_win.cc
index b58229d..083abf2 100644
--- a/ui/accessibility/platform/ax_platform_node_win.cc
+++ b/ui/accessibility/platform/ax_platform_node_win.cc
@@ -1070,11 +1070,8 @@
   }
 
   // Last resort (Use innerText)
-  if (result.empty() &&
-      (target->IsSimpleTextControl() || target->IsRichTextControl()) &&
-      !target->IsNativeTextControl()) {
+  if (result.empty() && target->IsRichTextField())
     result = target->GetInnerText();
-  }
 
   *value = SysAllocString(result.c_str());
   DCHECK(*value);
@@ -3021,7 +3018,6 @@
 
 int32_t AXPlatformNodeWin::ComputeIA2State() {
   const AXNodeData& data = GetData();
-
   int32_t ia2_state = IA2_STATE_OPAQUE;
 
   const auto checked_state =
@@ -3040,20 +3036,16 @@
   if (data.HasState(AX_STATE_HORIZONTAL))
     ia2_state |= IA2_STATE_HORIZONTAL;
 
-  const bool is_editable = data.HasState(AX_STATE_EDITABLE);
-  if (is_editable)
+  if (data.HasState(AX_STATE_EDITABLE))
     ia2_state |= IA2_STATE_EDITABLE;
 
-  if (IsRichTextControl() || IsEditField(data.role)) {
-    // Support multi/single line states if root editable or appropriate role.
-    // We support the edit box roles even if the area is not actually editable,
-    // because it is technically feasible for JS to implement the edit box
-    // by controlling selection.
+  if (IsPlainTextField() || IsRichTextField()) {
     if (data.HasState(AX_STATE_MULTILINE)) {
       ia2_state |= IA2_STATE_MULTI_LINE;
     } else {
       ia2_state |= IA2_STATE_SINGLE_LINE;
     }
+    ia2_state |= IA2_STATE_SELECTABLE_TEXT;
   }
 
   if (!GetStringAttribute(AX_ATTR_AUTO_COMPLETE).empty())
@@ -3064,20 +3056,9 @@
 
   switch (data.role) {
     case AX_ROLE_MENU_LIST_POPUP:
-      ia2_state &= ~(IA2_STATE_EDITABLE);
-      break;
     case AX_ROLE_MENU_LIST_OPTION:
       ia2_state &= ~(IA2_STATE_EDITABLE);
       break;
-    case AX_ROLE_TEXT_FIELD:
-    case AX_ROLE_SEARCH_BOX:
-      if (data.HasState(AX_STATE_MULTILINE)) {
-        ia2_state |= IA2_STATE_MULTI_LINE;
-      } else {
-        ia2_state |= IA2_STATE_SINGLE_LINE;
-      }
-      ia2_state |= IA2_STATE_SELECTABLE_TEXT;
-      break;
     default:
       break;
   }
@@ -3421,14 +3402,13 @@
   // object (as opposed to treating it like a native Windows text box).
   // The text-model:a1 attribute is documented here:
   // http://www.linuxfoundation.org/collaborate/workgroups/accessibility/ia2/ia2_implementation_guide
-  if (IsEditField(GetData().role)) {
+  if (IsPlainTextField() || IsRichTextField())
     result.push_back(L"text-model:a1;");
-  }
 
   // Expose input-text type attribute.
   base::string16 type;
   base::string16 html_tag = GetString16Attribute(AX_ATTR_HTML_TAG);
-  if (IsSimpleTextControl() && html_tag == L"input" &&
+  if (IsPlainTextField() && html_tag == L"input" &&
       GetData().GetHtmlAttribute("type", &type)) {
     SanitizeStringAttributeForIA2(type, &type);
     result.push_back(L"text-input-type:" + type);
@@ -3454,7 +3434,7 @@
 AXHypertext AXPlatformNodeWin::ComputeHypertext() {
   AXHypertext result;
 
-  if (IsSimpleTextControl()) {
+  if (IsPlainTextField()) {
     result.hypertext = GetValue();
     return result;
   }
@@ -3462,7 +3442,7 @@
   int child_count = delegate_->GetChildCount();
 
   if (!child_count) {
-    if (IsRichTextControl()) {
+    if (IsRichTextField()) {
       // We don't want to expose any associated label in IA2 Hypertext.
       return result;
     }
@@ -3748,7 +3728,7 @@
 
 base::string16 AXPlatformNodeWin::TextForIAccessibleText() {
   // Special case allows us to get text even in non-HTML case, e.g. browser UI.
-  if (IsSimpleTextControl())
+  if (IsPlainTextField())
     return GetString16Attribute(AX_ATTR_VALUE);
   return GetText();
 }
@@ -3930,10 +3910,10 @@
     AXPlatformNodeWin* child) {
   // TODO(dougt) DCHECK(child.owner()->PlatformGetParent() == owner());
 
-  // Handle the case when we are dealing with a direct text-only child.
-  // (Note that this object might be a platform leaf, e.g. an ARIA searchbox,
-  // Also, direct text-only children should not be present at tree roots and so
-  // no cross-tree traversal is necessary.
+  // Handle the case when we are dealing with a text-only child.
+  // Note that this object might be a platform leaf, e.g. an ARIA searchbox.
+  // Also, text-only children should not be present at tree roots and so no
+  // cross-tree traversal is necessary.
   if (child->IsTextOnlyObject()) {
     int32_t hypertext_offset = 0;
     int32_t index_in_parent = child->delegate_->GetIndexInParent();
@@ -4140,7 +4120,7 @@
                                             int* selection_end) {
   DCHECK(selection_start && selection_end);
 
-  if (IsSimpleTextControl() &&
+  if (IsPlainTextField() &&
       GetIntAttribute(ui::AX_ATTR_TEXT_SEL_START, selection_start) &&
       GetIntAttribute(ui::AX_ATTR_TEXT_SEL_END, selection_end)) {
     return;
diff --git a/ui/accessibility/platform/ax_snapshot_node_android_platform.cc b/ui/accessibility/platform/ax_snapshot_node_android_platform.cc
index c76504d..83e08390 100644
--- a/ui/accessibility/platform/ax_snapshot_node_android_platform.cc
+++ b/ui/accessibility/platform/ax_snapshot_node_android_platform.cc
@@ -42,7 +42,10 @@
 
 // TODO(muyuanli): share with BrowserAccessibility.
 bool IsSimpleTextControl(const AXNode* node, uint32_t state) {
-  return IsEditField(node->data().role) &&
+  return (node->data().role == AX_ROLE_TEXT_FIELD ||
+          node->data().role == AX_ROLE_TEXT_FIELD_WITH_COMBO_BOX ||
+          node->data().role == AX_ROLE_SEARCH_BOX ||
+          node->data().HasBoolAttribute(AX_ATTR_EDITABLE_ROOT)) &&
          !node->data().HasState(AX_STATE_RICHLY_EDITABLE);
 }
 
diff --git a/ui/message_center/views/notification_view_md.h b/ui/message_center/views/notification_view_md.h
index 3c85150..cf2ff5d 100644
--- a/ui/message_center/views/notification_view_md.h
+++ b/ui/message_center/views/notification_view_md.h
@@ -210,6 +210,8 @@
   FRIEND_TEST_ALL_PREFIXES(NotificationViewMDTest, TestIconSizing);
   FRIEND_TEST_ALL_PREFIXES(NotificationViewMDTest, UpdateButtonsStateTest);
   FRIEND_TEST_ALL_PREFIXES(NotificationViewMDTest, UpdateButtonCountTest);
+  FRIEND_TEST_ALL_PREFIXES(NotificationViewMDTest, TestActionButtonClick);
+  FRIEND_TEST_ALL_PREFIXES(NotificationViewMDTest, TestInlineReply);
   FRIEND_TEST_ALL_PREFIXES(NotificationViewMDTest, ExpandLongMessage);
   FRIEND_TEST_ALL_PREFIXES(NotificationViewMDTest, TestAccentColor);
   FRIEND_TEST_ALL_PREFIXES(NotificationViewMDTest, UseImageAsIcon);
diff --git a/ui/message_center/views/notification_view_md_unittest.cc b/ui/message_center/views/notification_view_md_unittest.cc
index dfafa21..6ebc869 100644
--- a/ui/message_center/views/notification_view_md_unittest.cc
+++ b/ui/message_center/views/notification_view_md_unittest.cc
@@ -81,6 +81,11 @@
   void ScrollBy(int dx);
   views::View* GetCloseButton();
 
+  bool expecting_button_click_ = false;
+  bool expecting_reply_submission_ = false;
+  int clicked_button_index_ = -1;
+  base::string16 submitted_reply_string_;
+
  private:
   std::set<std::string> removed_ids_;
 
@@ -123,6 +128,13 @@
   widget_->SetContentsView(notification_view_.get());
   widget_->SetSize(notification_view_->GetPreferredSize());
   widget_->Show();
+  widget_->widget_delegate()->set_can_activate(true);
+  widget_->Activate();
+
+  expecting_button_click_ = false;
+  expecting_reply_submission_ = false;
+  clicked_button_index_ = -1;
+  submitted_reply_string_.clear();
 }
 
 void NotificationViewMDTest::TearDown() {
@@ -146,16 +158,22 @@
 void NotificationViewMDTest::ClickOnNotificationButton(
     const std::string& notification_id,
     int button_index) {
-  // For this test, this method should not be invoked.
-  NOTREACHED();
+  if (!expecting_button_click_) {
+    ADD_FAILURE() << "ClickOnNotificationButton should not be invoked.";
+  }
+  clicked_button_index_ = button_index;
 }
 
 void NotificationViewMDTest::ClickOnNotificationButtonWithReply(
     const std::string& notification_id,
     int button_index,
     const base::string16& reply) {
-  // For this test, this method should not be invoked.
-  NOTREACHED();
+  if (!expecting_reply_submission_) {
+    ADD_FAILURE()
+        << "ClickOnNotificationButtonWithReply should not be invoked.";
+  }
+  clicked_button_index_ = button_index;
+  submitted_reply_string_ = reply;
 }
 
 void NotificationViewMDTest::ClickOnSettingsButton(
@@ -420,6 +438,83 @@
             notification_view()->action_buttons_[0]->state());
 }
 
+TEST_F(NotificationViewMDTest, TestActionButtonClick) {
+  expecting_button_click_ = true;
+
+  notification()->set_buttons(CreateButtons(2));
+  notification_view()->UpdateWithNotification(*notification());
+  widget()->Show();
+
+  ui::test::EventGenerator generator(widget()->GetNativeWindow());
+
+  // Action buttons are hidden by collapsed state.
+  if (!notification_view()->expanded_)
+    notification_view()->ToggleExpanded();
+  EXPECT_TRUE(notification_view()->actions_row_->visible());
+
+  // Now construct a mouse click event 1 pixel inside the boundary of the action
+  // button.
+  gfx::Point cursor_location(1, 1);
+  views::View::ConvertPointToScreen(notification_view()->action_buttons_[1],
+                                    &cursor_location);
+  generator.MoveMouseTo(cursor_location);
+  generator.ClickLeftButton();
+
+  EXPECT_EQ(1, clicked_button_index_);
+}
+
+TEST_F(NotificationViewMDTest, TestInlineReply) {
+  expecting_reply_submission_ = true;
+
+  std::vector<ButtonInfo> buttons = CreateButtons(2);
+  buttons[1].type = ButtonType::TEXT;
+  notification()->set_buttons(buttons);
+  notification_view()->UpdateWithNotification(*notification());
+  widget()->Show();
+
+  ui::test::EventGenerator generator(widget()->GetNativeWindow());
+
+  // Action buttons are hidden by collapsed state.
+  if (!notification_view()->expanded_)
+    notification_view()->ToggleExpanded();
+  EXPECT_TRUE(notification_view()->actions_row_->visible());
+
+  // Now construct a mouse click event 1 pixel inside the boundary of the action
+  // button.
+  gfx::Point cursor_location(1, 1);
+  views::View::ConvertPointToScreen(notification_view()->action_buttons_[1],
+                                    &cursor_location);
+  generator.MoveMouseTo(cursor_location);
+  generator.ClickLeftButton();
+
+  // Nothing should be submitted at this point.
+  EXPECT_EQ(-1, clicked_button_index_);
+
+  // Toggling should hide the inline textfield.
+  EXPECT_TRUE(notification_view()->inline_reply_->visible());
+  notification_view()->ToggleExpanded();
+  notification_view()->ToggleExpanded();
+  EXPECT_FALSE(notification_view()->inline_reply_->visible());
+
+  // Click the button again and focus on the inline textfield.
+  generator.ClickLeftButton();
+  generator.ClickLeftButton();
+  EXPECT_TRUE(notification_view()->inline_reply_->visible());
+  EXPECT_TRUE(notification_view()->inline_reply_->HasFocus());
+
+  // Type the text and submit.
+  ui::KeyboardCode keycodes[] = {ui::VKEY_T, ui::VKEY_E, ui::VKEY_S, ui::VKEY_T,
+                                 ui::VKEY_RETURN};
+
+  for (ui::KeyboardCode keycode : keycodes) {
+    generator.PressKey(keycode, ui::EF_NONE);
+    generator.ReleaseKey(keycode, ui::EF_NONE);
+  }
+
+  EXPECT_EQ(1, clicked_button_index_);
+  EXPECT_EQ(base::ASCIIToUTF16("test"), submitted_reply_string_);
+}
+
 TEST_F(NotificationViewMDTest, SlideOut) {
   ui::ScopedAnimationDurationScaleMode zero_duration_scope(
       ui::ScopedAnimationDurationScaleMode::ZERO_DURATION);