[go: nahoru, domu]

Use TimeDelta for duration values in component update_client

Use TimeDelta to safely represent durations where possible. This should
improve readability & maintainability.

Fixed: 1400441
Change-Id: I70226316d92d26babac05630cecf2b7722bf0ae3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4096993
Reviewed-by: Michael Bai <michaelbai@chromium.org>
Commit-Queue: Noah Rose Ledesma <noahrose@google.com>
Reviewed-by: Joshua Pawlicki <waffles@chromium.org>
Reviewed-by: Rohit Rao <rohitrao@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1082722}
diff --git a/android_webview/nonembedded/component_updater/aw_component_updater_configurator.cc b/android_webview/nonembedded/component_updater/aw_component_updater_configurator.cc
index 5b83d07..482c5f77 100644
--- a/android_webview/nonembedded/component_updater/aw_component_updater_configurator.cc
+++ b/android_webview/nonembedded/component_updater/aw_component_updater_configurator.cc
@@ -41,34 +41,34 @@
 
 AwComponentUpdaterConfigurator::~AwComponentUpdaterConfigurator() = default;
 
-double AwComponentUpdaterConfigurator::InitialDelay() const {
+base::TimeDelta AwComponentUpdaterConfigurator::InitialDelay() const {
   // Initial delay acts as a "registration window" for components, so we should
   // have a reasonable window to allow for all components to complete
   // registration. We are choosing a small window of 10 seconds here because
   // WebView has a short list of components and components registration happens
   // in an android background service so we want to start the update as soon as
   // possible.
-  // TODO(crbug.com/1181094): git rid of dependency in initial delay for
+  // TODO(crbug.com/1181094): get rid of dependency in initial delay for
   // WebView.
-  return 10;
+  return base::Seconds(10);
 }
 
-int AwComponentUpdaterConfigurator::NextCheckDelay() const {
+base::TimeDelta AwComponentUpdaterConfigurator::NextCheckDelay() const {
   return configurator_impl_.NextCheckDelay();
 }
 
-int AwComponentUpdaterConfigurator::OnDemandDelay() const {
+base::TimeDelta AwComponentUpdaterConfigurator::OnDemandDelay() const {
   return configurator_impl_.OnDemandDelay();
 }
 
-int AwComponentUpdaterConfigurator::UpdateDelay() const {
+base::TimeDelta AwComponentUpdaterConfigurator::UpdateDelay() const {
   // No need to have any delays between components updates. In WebView this
   // doesn't run in a browser and shouldn't affect user's experience.
   // Furthermore, this will be a background service that is scheduled by
   // JobScheduler, so we want to do as much work in as little time as possible.
   // However, if we ever invoked installation on-demand, we should be less
   // aggressive here.
-  return 0;
+  return base::Seconds(0);
 }
 
 std::vector<GURL> AwComponentUpdaterConfigurator::UpdateUrl() const {
diff --git a/android_webview/nonembedded/component_updater/aw_component_updater_configurator.h b/android_webview/nonembedded/component_updater/aw_component_updater_configurator.h
index 79efaa6..0961d18 100644
--- a/android_webview/nonembedded/component_updater/aw_component_updater_configurator.h
+++ b/android_webview/nonembedded/component_updater/aw_component_updater_configurator.h
@@ -7,6 +7,7 @@
 
 #include "base/memory/raw_ptr.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/time/time.h"
 #include "base/version.h"
 #include "components/component_updater/configurator_impl.h"
 #include "components/prefs/pref_service.h"
@@ -33,10 +34,10 @@
                                           PrefService* pref_service);
 
   // update_client::Configurator overrides.
-  double InitialDelay() const override;
-  int NextCheckDelay() const override;
-  int OnDemandDelay() const override;
-  int UpdateDelay() const override;
+  base::TimeDelta InitialDelay() const override;
+  base::TimeDelta NextCheckDelay() const override;
+  base::TimeDelta OnDemandDelay() const override;
+  base::TimeDelta UpdateDelay() const override;
   std::vector<GURL> UpdateUrl() const override;
   std::vector<GURL> PingUrl() const override;
   std::string GetProdId() const override;
diff --git a/android_webview/nonembedded/component_updater/aw_component_updater_configurator_unittest.cc b/android_webview/nonembedded/component_updater/aw_component_updater_configurator_unittest.cc
index 7f4951f..33c9ece1 100644
--- a/android_webview/nonembedded/component_updater/aw_component_updater_configurator_unittest.cc
+++ b/android_webview/nonembedded/component_updater/aw_component_updater_configurator_unittest.cc
@@ -10,6 +10,7 @@
 
 #include "base/command_line.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/time/time.h"
 #include "components/component_updater/component_updater_command_line_config_policy.h"
 #include "components/component_updater/component_updater_switches.h"
 #include "components/component_updater/component_updater_url_constants.h"
@@ -55,10 +56,10 @@
   scoped_refptr<update_client::Configurator> config =
       MakeAwComponentUpdaterConfigurator(GetCommandLine(), GetPrefService());
 
-  EXPECT_EQ(config->InitialDelay(), 10);
-  EXPECT_EQ(config->NextCheckDelay(), 5 * 60 * 60);
-  EXPECT_EQ(config->OnDemandDelay(), 30 * 60);
-  EXPECT_EQ(config->UpdateDelay(), 0);
+  EXPECT_EQ(config->InitialDelay(), base::Seconds(10));
+  EXPECT_EQ(config->NextCheckDelay(), base::Hours(5));
+  EXPECT_EQ(config->OnDemandDelay(), base::Minutes(30));
+  EXPECT_EQ(config->UpdateDelay(), base::Seconds(0));
 }
 
 TEST_F(AwComponentUpdaterConfiguratorTest, TestDelaysWithFastUpdate) {
@@ -67,10 +68,10 @@
   scoped_refptr<update_client::Configurator> config =
       MakeAwComponentUpdaterConfigurator(cmdline, GetPrefService());
 
-  EXPECT_EQ(config->InitialDelay(), 10);
-  EXPECT_EQ(config->NextCheckDelay(), 5 * 60 * 60);
-  EXPECT_EQ(config->OnDemandDelay(), 2);
-  EXPECT_EQ(config->UpdateDelay(), 0);
+  EXPECT_EQ(config->InitialDelay(), base::Seconds(10));
+  EXPECT_EQ(config->NextCheckDelay(), base::Hours(5));
+  EXPECT_EQ(config->OnDemandDelay(), base::Seconds(2));
+  EXPECT_EQ(config->UpdateDelay(), base::Seconds(0));
 }
 
 TEST_F(AwComponentUpdaterConfiguratorTest, TestDefaultImpl) {
diff --git a/chrome/browser/component_updater/chrome_component_updater_configurator.cc b/chrome/browser/component_updater/chrome_component_updater_configurator.cc
index edbf8f96..9ee5dd83 100644
--- a/chrome/browser/component_updater/chrome_component_updater_configurator.cc
+++ b/chrome/browser/component_updater/chrome_component_updater_configurator.cc
@@ -14,6 +14,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/path_service.h"
 #include "base/strings/sys_string_conversions.h"
+#include "base/time/time.h"
 #include "base/version.h"
 #include "build/branding_buildflags.h"
 #include "build/build_config.h"
@@ -57,10 +58,10 @@
                      PrefService* pref_service);
 
   // update_client::Configurator overrides.
-  double InitialDelay() const override;
-  int NextCheckDelay() const override;
-  int OnDemandDelay() const override;
-  int UpdateDelay() const override;
+  base::TimeDelta InitialDelay() const override;
+  base::TimeDelta NextCheckDelay() const override;
+  base::TimeDelta OnDemandDelay() const override;
+  base::TimeDelta UpdateDelay() const override;
   std::vector<GURL> UpdateUrl() const override;
   std::vector<GURL> PingUrl() const override;
   std::string GetProdId() const override;
@@ -115,19 +116,19 @@
   DCHECK(pref_service_);
 }
 
-double ChromeConfigurator::InitialDelay() const {
+base::TimeDelta ChromeConfigurator::InitialDelay() const {
   return configurator_impl_.InitialDelay();
 }
 
-int ChromeConfigurator::NextCheckDelay() const {
+base::TimeDelta ChromeConfigurator::NextCheckDelay() const {
   return configurator_impl_.NextCheckDelay();
 }
 
-int ChromeConfigurator::OnDemandDelay() const {
+base::TimeDelta ChromeConfigurator::OnDemandDelay() const {
   return configurator_impl_.OnDemandDelay();
 }
 
-int ChromeConfigurator::UpdateDelay() const {
+base::TimeDelta ChromeConfigurator::UpdateDelay() const {
   return configurator_impl_.UpdateDelay();
 }
 
@@ -275,9 +276,8 @@
 }  // namespace
 
 scoped_refptr<update_client::Configurator>
-MakeChromeComponentUpdaterConfigurator(
-    const base::CommandLine* cmdline,
-    PrefService* pref_service) {
+MakeChromeComponentUpdaterConfigurator(const base::CommandLine* cmdline,
+                                       PrefService* pref_service) {
   return base::MakeRefCounted<ChromeConfigurator>(cmdline, pref_service);
 }
 
diff --git a/chrome/browser/component_updater/chrome_component_updater_configurator_unittest.cc b/chrome/browser/component_updater/chrome_component_updater_configurator_unittest.cc
index a44bd63..886b091 100644
--- a/chrome/browser/component_updater/chrome_component_updater_configurator_unittest.cc
+++ b/chrome/browser/component_updater/chrome_component_updater_configurator_unittest.cc
@@ -8,6 +8,7 @@
 
 #include "base/command_line.h"
 #include "base/memory/ref_counted.h"
+#include "base/time/time.h"
 #include "chrome/browser/component_updater/chrome_component_updater_configurator.h"
 #include "components/component_updater/component_updater_command_line_config_policy.h"
 #include "components/component_updater/component_updater_switches.h"
@@ -64,10 +65,10 @@
   const auto config(
       MakeChromeComponentUpdaterConfigurator(&cmdline, pref_service()));
 
-  CHECK_EQ(10, config->InitialDelay());
-  CHECK_EQ(5 * 60 * 60, config->NextCheckDelay());
-  CHECK_EQ(2, config->OnDemandDelay());
-  CHECK_EQ(10, config->UpdateDelay());
+  CHECK_EQ(base::Seconds(10), config->InitialDelay());
+  CHECK_EQ(base::Hours(5), config->NextCheckDelay());
+  CHECK_EQ(base::Seconds(2), config->OnDemandDelay());
+  CHECK_EQ(base::Seconds(10), config->UpdateDelay());
 }
 
 TEST_F(ChromeComponentUpdaterConfiguratorTest, TestOverrideUrl) {
diff --git a/chrome/browser/extensions/updater/chrome_update_client_config.cc b/chrome/browser/extensions/updater/chrome_update_client_config.cc
index 20db0cb..25e6680 100644
--- a/chrome/browser/extensions/updater/chrome_update_client_config.cc
+++ b/chrome/browser/extensions/updater/chrome_update_client_config.cc
@@ -19,6 +19,7 @@
 #include "base/no_destructor.h"
 #include "base/path_service.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/time/time.h"
 #include "base/version.h"
 #include "chrome/browser/component_updater/component_updater_utils.h"
 #include "chrome/browser/extensions/updater/extension_update_client_command_line_config_policy.h"
@@ -151,19 +152,19 @@
 
 ChromeUpdateClientConfig::~ChromeUpdateClientConfig() = default;
 
-double ChromeUpdateClientConfig::InitialDelay() const {
+base::TimeDelta ChromeUpdateClientConfig::InitialDelay() const {
   return impl_.InitialDelay();
 }
 
-int ChromeUpdateClientConfig::NextCheckDelay() const {
+base::TimeDelta ChromeUpdateClientConfig::NextCheckDelay() const {
   return impl_.NextCheckDelay();
 }
 
-int ChromeUpdateClientConfig::OnDemandDelay() const {
+base::TimeDelta ChromeUpdateClientConfig::OnDemandDelay() const {
   return impl_.OnDemandDelay();
 }
 
-int ChromeUpdateClientConfig::UpdateDelay() const {
+base::TimeDelta ChromeUpdateClientConfig::UpdateDelay() const {
   return impl_.UpdateDelay();
 }
 
diff --git a/chrome/browser/extensions/updater/chrome_update_client_config.h b/chrome/browser/extensions/updater/chrome_update_client_config.h
index 47a0644..d518d3f 100644
--- a/chrome/browser/extensions/updater/chrome_update_client_config.h
+++ b/chrome/browser/extensions/updater/chrome_update_client_config.h
@@ -13,6 +13,7 @@
 #include "base/containers/flat_map.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
+#include "base/time/time.h"
 #include "components/component_updater/configurator_impl.h"
 #include "components/update_client/buildflags.h"
 #include "components/update_client/configurator.h"
@@ -33,7 +34,7 @@
 class CrxDownloaderFactory;
 class NetworkFetcherFactory;
 class ProtocolHandlerFactory;
-}
+}  // namespace update_client
 
 namespace extensions {
 
@@ -59,10 +60,10 @@
   ChromeUpdateClientConfig(const ChromeUpdateClientConfig&) = delete;
   ChromeUpdateClientConfig& operator=(const ChromeUpdateClientConfig&) = delete;
 
-  double InitialDelay() const override;
-  int NextCheckDelay() const override;
-  int OnDemandDelay() const override;
-  int UpdateDelay() const override;
+  base::TimeDelta InitialDelay() const override;
+  base::TimeDelta NextCheckDelay() const override;
+  base::TimeDelta OnDemandDelay() const override;
+  base::TimeDelta UpdateDelay() const override;
   std::vector<GURL> UpdateUrl() const override;
   std::vector<GURL> PingUrl() const override;
   std::string GetProdId() const override;
diff --git a/chrome/updater/app/server/posix/app_server_posix.cc b/chrome/updater/app/server/posix/app_server_posix.cc
index 6224afc..a8c92bc 100644
--- a/chrome/updater/app/server/posix/app_server_posix.cc
+++ b/chrome/updater/app/server/posix/app_server_posix.cc
@@ -27,17 +27,11 @@
   VLOG(2) << "Starting task, " << tasks_running_ << " tasks running";
 }
 
-base::TimeDelta AppServerPosix::ServerKeepAlive() {
-  int seconds = external_constants()->ServerKeepAliveSeconds();
-  VLOG(2) << "ServerKeepAliveSeconds: " << seconds;
-  return base::Seconds(seconds);
-}
-
 void AppServerPosix::TaskCompleted() {
   main_task_runner_->PostDelayedTask(
       FROM_HERE,
       base::BindOnce(&AppServerPosix::AcknowledgeTaskCompletion, this),
-      ServerKeepAlive());
+      external_constants()->ServerKeepAliveTime());
 }
 
 void AppServerPosix::AcknowledgeTaskCompletion() {
diff --git a/chrome/updater/app/server/posix/app_server_posix.h b/chrome/updater/app/server/posix/app_server_posix.h
index 3b8071f..a403777 100644
--- a/chrome/updater/app/server/posix/app_server_posix.h
+++ b/chrome/updater/app/server/posix/app_server_posix.h
@@ -32,7 +32,6 @@
   std::unique_ptr<UpdateServiceInternalStub> active_duty_internal_stub_;
 
  private:
-  base::TimeDelta ServerKeepAlive();
   void MarkTaskStarted();
   void AcknowledgeTaskCompletion();
 
diff --git a/chrome/updater/app/server/win/com_classes_legacy.cc b/chrome/updater/app/server/win/com_classes_legacy.cc
index 1cac6a5..5daa029 100644
--- a/chrome/updater/app/server/win/com_classes_legacy.cc
+++ b/chrome/updater/app/server/win/com_classes_legacy.cc
@@ -789,11 +789,11 @@
 STDMETHODIMP PolicyStatusImpl::get_lastCheckPeriodMinutes(DWORD* minutes) {
   DCHECK(minutes);
 
-  PolicyStatus<int> period = policy_service_->GetLastCheckPeriodMinutes();
+  PolicyStatus<base::TimeDelta> period = policy_service_->GetLastCheckPeriod();
   if (!period)
     return E_FAIL;
 
-  *minutes = period.policy();
+  *minutes = period.policy().InMinutes();
   return S_OK;
 }
 
@@ -1051,7 +1051,7 @@
     IPolicyStatusValue** value) {
   DCHECK(value);
   auto policy_status = PolicyStatusResult<int>::Get(base::BindRepeating(
-      &PolicyService::GetLastCheckPeriodMinutes, policy_service_));
+      &PolicyService::DeprecatedGetLastCheckPeriodMinutes, policy_service_));
   return policy_status.has_value()
              ? PolicyStatusValueImpl::Create(*policy_status, value)
              : E_FAIL;
diff --git a/chrome/updater/check_for_updates_task.cc b/chrome/updater/check_for_updates_task.cc
index 5986fa00..a7fb4b1 100644
--- a/chrome/updater/check_for_updates_task.cc
+++ b/chrome/updater/check_for_updates_task.cc
@@ -30,8 +30,8 @@
 bool ShouldSkipCheck(scoped_refptr<Configurator> config,
                      scoped_refptr<updater::PersistedData> persisted_data) {
   // To spread out synchronized load, sometimes use a higher delay.
-  const base::TimeDelta check_delay = base::Seconds(
-      config->NextCheckDelay() * (base::RandDouble() < 0.1 ? 1.2 : 1));
+  const base::TimeDelta check_delay =
+      config->NextCheckDelay() * (base::RandDouble() < 0.1 ? 1.2 : 1);
 
   // Skip if periodic updates are disabled altogether.
   if (check_delay.is_zero()) {
@@ -96,7 +96,7 @@
                 std::move(closure).Run();
               },
               std::move(callback))),
-      base::Seconds(config_->InitialDelay()));
+      config_->InitialDelay());
 }
 
 }  // namespace updater
diff --git a/chrome/updater/configurator.cc b/chrome/updater/configurator.cc
index beea40b..7608469 100644
--- a/chrome/updater/configurator.cc
+++ b/chrome/updater/configurator.cc
@@ -66,27 +66,27 @@
 }
 Configurator::~Configurator() = default;
 
-double Configurator::InitialDelay() const {
+base::TimeDelta Configurator::InitialDelay() const {
   return base::RandDouble() * external_constants_->InitialDelay();
 }
 
-int Configurator::ServerKeepAliveSeconds() const {
-  return base::clamp(external_constants_->ServerKeepAliveSeconds(), 1,
-                     kServerKeepAliveSeconds);
+base::TimeDelta Configurator::ServerKeepAliveTime() const {
+  return base::clamp(external_constants_->ServerKeepAliveTime(),
+                     base::Seconds(1), kServerKeepAliveTime);
 }
 
-int Configurator::NextCheckDelay() const {
-  PolicyStatus<int> minutes = policy_service_->GetLastCheckPeriodMinutes();
-  CHECK(minutes);
-  return base::Minutes(minutes.policy()).InSeconds();
+base::TimeDelta Configurator::NextCheckDelay() const {
+  PolicyStatus<base::TimeDelta> delay = policy_service_->GetLastCheckPeriod();
+  CHECK(delay);
+  return delay.policy();
 }
 
-int Configurator::OnDemandDelay() const {
-  return 0;
+base::TimeDelta Configurator::OnDemandDelay() const {
+  return base::Seconds(0);
 }
 
-int Configurator::UpdateDelay() const {
-  return 0;
+base::TimeDelta Configurator::UpdateDelay() const {
+  return base::Seconds(0);
 }
 
 std::vector<GURL> Configurator::UpdateUrl() const {
diff --git a/chrome/updater/configurator.h b/chrome/updater/configurator.h
index 28e8be8c..f7cc60f 100644
--- a/chrome/updater/configurator.h
+++ b/chrome/updater/configurator.h
@@ -11,6 +11,7 @@
 
 #include "base/containers/flat_map.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/time/time.h"
 #include "components/update_client/buildflags.h"
 #include "components/update_client/configurator.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
@@ -55,10 +56,10 @@
   Configurator& operator=(const Configurator&) = delete;
 
   // Overrides for update_client::Configurator.
-  double InitialDelay() const override;
-  int NextCheckDelay() const override;
-  int OnDemandDelay() const override;
-  int UpdateDelay() const override;
+  base::TimeDelta InitialDelay() const override;
+  base::TimeDelta NextCheckDelay() const override;
+  base::TimeDelta OnDemandDelay() const override;
+  base::TimeDelta UpdateDelay() const override;
   std::vector<GURL> UpdateUrl() const override;
   std::vector<GURL> PingUrl() const override;
   std::string GetProdId() const override;
@@ -88,7 +89,7 @@
   absl::optional<base::FilePath> GetCrxCachePath() const override;
 #endif
 
-  int ServerKeepAliveSeconds() const;
+  base::TimeDelta ServerKeepAliveTime() const;
   scoped_refptr<PolicyService> GetPolicyService() const;
   crx_file::VerifierFormat GetCrxVerifierFormat() const;
 
diff --git a/chrome/updater/constants.h b/chrome/updater/constants.h
index a91c8f9d..2f17174 100644
--- a/chrome/updater/constants.h
+++ b/chrome/updater/constants.h
@@ -406,8 +406,8 @@
 // The file downloaded to a temporary location could not be moved.
 inline constexpr int kErrorFailedToMoveDownloadedFile = 5;
 
-inline constexpr double kInitialDelay = 60;
-inline constexpr int kServerKeepAliveSeconds = 10;
+inline constexpr base::TimeDelta kInitialDelay = base::Minutes(1);
+inline constexpr base::TimeDelta kServerKeepAliveTime = base::Seconds(10);
 
 // The maximum number of server starts before the updater uninstalls itself
 // while waiting for the first app registration.
diff --git a/chrome/updater/external_constants.h b/chrome/updater/external_constants.h
index 1f66eb0..099c653a 100644
--- a/chrome/updater/external_constants.h
+++ b/chrome/updater/external_constants.h
@@ -9,6 +9,7 @@
 
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/time/time.h"
 #include "base/values.h"
 
 class GURL;
@@ -37,12 +38,12 @@
   // True if client update protocol signing of update checks is enabled.
   virtual bool UseCUP() const = 0;
 
-  // Number of seconds to delay the start of the automated background tasks
+  // Time to delay the start of the automated background tasks
   // such as update checks.
-  virtual double InitialDelay() const = 0;
+  virtual base::TimeDelta InitialDelay() const = 0;
 
-  // Minimum number of of seconds the server needs to stay alive.
-  virtual int ServerKeepAliveSeconds() const = 0;
+  // Minimum amount of time the server needs to stay alive.
+  virtual base::TimeDelta ServerKeepAliveTime() const = 0;
 
   // CRX format verification requirements.
   virtual crx_file::VerifierFormat CrxVerifierFormat() const = 0;
diff --git a/chrome/updater/external_constants_builder.cc b/chrome/updater/external_constants_builder.cc
index 16c2700..219e4b1f 100644
--- a/chrome/updater/external_constants_builder.cc
+++ b/chrome/updater/external_constants_builder.cc
@@ -11,6 +11,7 @@
 
 #include "base/json/json_file_value_serializer.h"
 #include "base/logging.h"
+#include "base/numerics/safe_conversions.h"
 #include "base/time/time.h"
 #include "base/values.h"
 #include "chrome/updater/constants.h"
@@ -73,8 +74,8 @@
 }
 
 ExternalConstantsBuilder& ExternalConstantsBuilder::SetInitialDelay(
-    double initial_delay) {
-  overrides_.Set(kDevOverrideKeyInitialDelay, initial_delay);
+    base::TimeDelta initial_delay) {
+  overrides_.Set(kDevOverrideKeyInitialDelay, initial_delay.InSecondsF());
   return *this;
 }
 
@@ -83,10 +84,10 @@
   return *this;
 }
 
-ExternalConstantsBuilder& ExternalConstantsBuilder::SetServerKeepAliveSeconds(
-    int server_keep_alive_seconds) {
+ExternalConstantsBuilder& ExternalConstantsBuilder::SetServerKeepAliveTime(
+    base::TimeDelta server_keep_alive_time) {
   overrides_.Set(kDevOverrideKeyServerKeepAliveSeconds,
-                 server_keep_alive_seconds);
+                 base::checked_cast<int>(server_keep_alive_time.InSeconds()));
   return *this;
 }
 
@@ -155,7 +156,7 @@
   if (!overrides_.contains(kDevOverrideKeyInitialDelay))
     SetInitialDelay(verifier->InitialDelay());
   if (!overrides_.contains(kDevOverrideKeyServerKeepAliveSeconds))
-    SetServerKeepAliveSeconds(verifier->ServerKeepAliveSeconds());
+    SetServerKeepAliveTime(verifier->ServerKeepAliveTime());
   if (!overrides_.contains(kDevOverrideKeyCrxVerifierFormat))
     SetCrxVerifierFormat(verifier->CrxVerifierFormat());
   if (!overrides_.contains(kDevOverrideKeyGroupPolicies))
diff --git a/chrome/updater/external_constants_builder.h b/chrome/updater/external_constants_builder.h
index e929224..22ed42d 100644
--- a/chrome/updater/external_constants_builder.h
+++ b/chrome/updater/external_constants_builder.h
@@ -44,11 +44,11 @@
   ExternalConstantsBuilder& SetUseCUP(bool use_cup);
   ExternalConstantsBuilder& ClearUseCUP();
 
-  ExternalConstantsBuilder& SetInitialDelay(double initial_delay);
+  ExternalConstantsBuilder& SetInitialDelay(base::TimeDelta initial_delay);
   ExternalConstantsBuilder& ClearInitialDelay();
 
-  ExternalConstantsBuilder& SetServerKeepAliveSeconds(
-      int server_keep_alive_seconds);
+  ExternalConstantsBuilder& SetServerKeepAliveTime(
+      base::TimeDelta server_keep_alive_seconds);
   ExternalConstantsBuilder& ClearServerKeepAliveSeconds();
 
   ExternalConstantsBuilder& SetCrxVerifierFormat(
diff --git a/chrome/updater/external_constants_builder_unittest.cc b/chrome/updater/external_constants_builder_unittest.cc
index e7dc7f11f..1e88983 100644
--- a/chrome/updater/external_constants_builder_unittest.cc
+++ b/chrome/updater/external_constants_builder_unittest.cc
@@ -56,7 +56,7 @@
   EXPECT_EQ(urls[0], GURL(UPDATE_CHECK_URL));
 
   EXPECT_EQ(verifier->InitialDelay(), kInitialDelay);
-  EXPECT_EQ(verifier->ServerKeepAliveSeconds(), kServerKeepAliveSeconds);
+  EXPECT_EQ(verifier->ServerKeepAliveTime(), kServerKeepAliveTime);
   EXPECT_EQ(verifier->GroupPolicies().size(), 0U);
 }
 
@@ -68,8 +68,8 @@
   ExternalConstantsBuilder builder;
   builder.SetUpdateURL(std::vector<std::string>{"https://www.example.com"})
       .SetUseCUP(false)
-      .SetInitialDelay(123)
-      .SetServerKeepAliveSeconds(2)
+      .SetInitialDelay(base::Seconds(123))
+      .SetServerKeepAliveTime(base::Seconds(2))
       .SetGroupPolicies(group_policies);
   EXPECT_TRUE(builder.Overwrite());
 
@@ -83,8 +83,8 @@
   ASSERT_EQ(urls.size(), 1ul);
   EXPECT_EQ(urls[0], GURL("https://www.example.com"));
 
-  EXPECT_EQ(verifier->InitialDelay(), 123);
-  EXPECT_EQ(verifier->ServerKeepAliveSeconds(), 2);
+  EXPECT_EQ(verifier->InitialDelay(), base::Seconds(123));
+  EXPECT_EQ(verifier->ServerKeepAliveTime(), base::Seconds(2));
   EXPECT_EQ(verifier->GroupPolicies().size(), 2U);
 }
 
@@ -107,7 +107,7 @@
   EXPECT_EQ(urls[1], GURL("https://www.example.com"));
 
   EXPECT_EQ(verifier->InitialDelay(), kInitialDelay);
-  EXPECT_EQ(verifier->ServerKeepAliveSeconds(), kServerKeepAliveSeconds);
+  EXPECT_EQ(verifier->ServerKeepAliveTime(), kServerKeepAliveTime);
   EXPECT_EQ(verifier->GroupPolicies().size(), 0U);
 }
 
@@ -117,7 +117,7 @@
                   .SetUpdateURL(std::vector<std::string>{
                       "https://www.google.com", "https://www.example.com"})
                   .SetUseCUP(false)
-                  .SetInitialDelay(123.4)
+                  .SetInitialDelay(base::Seconds(123.4))
                   .ClearUpdateURL()
                   .ClearUseCUP()
                   .ClearInitialDelay()
@@ -135,7 +135,7 @@
   EXPECT_EQ(urls[0], GURL(UPDATE_CHECK_URL));
 
   EXPECT_EQ(verifier->InitialDelay(), kInitialDelay);
-  EXPECT_EQ(verifier->ServerKeepAliveSeconds(), kServerKeepAliveSeconds);
+  EXPECT_EQ(verifier->ServerKeepAliveTime(), kServerKeepAliveTime);
   EXPECT_EQ(verifier->GroupPolicies().size(), 0U);
 }
 
@@ -147,13 +147,13 @@
       ExternalConstantsBuilder()
           .SetUpdateURL(std::vector<std::string>{"https://www.google.com"})
           .SetUseCUP(true)
-          .SetInitialDelay(123.4)
-          .SetServerKeepAliveSeconds(2)
+          .SetInitialDelay(base::Seconds(123.4))
+          .SetServerKeepAliveTime(base::Seconds(2))
           .SetGroupPolicies(group_policies)
           .SetUpdateURL(std::vector<std::string>{"https://www.example.com"})
           .SetUseCUP(false)
-          .SetInitialDelay(937.6)
-          .SetServerKeepAliveSeconds(3)
+          .SetInitialDelay(base::Seconds(937.6))
+          .SetServerKeepAliveTime(base::Seconds(3))
           .Overwrite());
 
   // Only the second set of values should be observed.
@@ -166,8 +166,8 @@
   ASSERT_EQ(urls.size(), 1ul);
   EXPECT_EQ(urls[0], GURL("https://www.example.com"));
 
-  EXPECT_EQ(verifier->InitialDelay(), 937.6);
-  EXPECT_EQ(verifier->ServerKeepAliveSeconds(), 3);
+  EXPECT_EQ(verifier->InitialDelay(), base::Seconds(937.6));
+  EXPECT_EQ(verifier->ServerKeepAliveTime(), base::Seconds(3));
   EXPECT_EQ(verifier->GroupPolicies().size(), 1U);
 }
 
@@ -181,8 +181,8 @@
   EXPECT_TRUE(
       builder.SetUpdateURL(std::vector<std::string>{"https://www.google.com"})
           .SetUseCUP(false)
-          .SetInitialDelay(123.4)
-          .SetServerKeepAliveSeconds(3)
+          .SetInitialDelay(base::Seconds(123.4))
+          .SetServerKeepAliveTime(base::Seconds(3))
           .SetUpdateURL(std::vector<std::string>{"https://www.example.com"})
           .SetGroupPolicies(group_policies)
           .Overwrite());
@@ -197,16 +197,16 @@
   ASSERT_EQ(urls.size(), 1ul);
   EXPECT_EQ(urls[0], GURL("https://www.example.com"));
 
-  EXPECT_EQ(verifier->InitialDelay(), 123.4);
-  EXPECT_EQ(verifier->ServerKeepAliveSeconds(), 3);
+  EXPECT_EQ(verifier->InitialDelay(), base::Seconds(123.4));
+  EXPECT_EQ(verifier->ServerKeepAliveTime(), base::Seconds(3));
   EXPECT_EQ(verifier->GroupPolicies().size(), 2U);
 
   base::Value::Dict group_policies2;
   group_policies2.Set("b", 2);
 
   // But now we can use the builder again:
-  EXPECT_TRUE(builder.SetInitialDelay(92.3)
-                  .SetServerKeepAliveSeconds(4)
+  EXPECT_TRUE(builder.SetInitialDelay(base::Seconds(92.3))
+                  .SetServerKeepAliveTime(base::Seconds(4))
                   .ClearUpdateURL()
                   .SetGroupPolicies(group_policies2)
                   .Overwrite());
@@ -223,8 +223,8 @@
   EXPECT_EQ(urls2[0], GURL(UPDATE_CHECK_URL));  // Cleared; should be default.
 
   EXPECT_EQ(verifier2->InitialDelay(),
-            92.3);  // Updated; update should be seen.
-  EXPECT_EQ(verifier2->ServerKeepAliveSeconds(), 4);
+            base::Seconds(92.3));  // Updated; update should be seen.
+  EXPECT_EQ(verifier2->ServerKeepAliveTime(), base::Seconds(4));
   EXPECT_EQ(verifier2->GroupPolicies().size(), 1U);
 }
 
@@ -238,8 +238,8 @@
   EXPECT_TRUE(
       builder.SetUpdateURL(std::vector<std::string>{"https://www.google.com"})
           .SetUseCUP(false)
-          .SetInitialDelay(123.4)
-          .SetServerKeepAliveSeconds(3)
+          .SetInitialDelay(base::Seconds(123.4))
+          .SetServerKeepAliveTime(base::Seconds(3))
           .SetUpdateURL(std::vector<std::string>{"https://www.example.com"})
           .SetGroupPolicies(group_policies)
           .Overwrite());
@@ -254,8 +254,8 @@
   ASSERT_EQ(urls.size(), 1ul);
   EXPECT_EQ(urls[0], GURL("https://www.example.com"));
 
-  EXPECT_EQ(verifier->InitialDelay(), 123.4);
-  EXPECT_EQ(verifier->ServerKeepAliveSeconds(), 3);
+  EXPECT_EQ(verifier->InitialDelay(), base::Seconds(123.4));
+  EXPECT_EQ(verifier->ServerKeepAliveTime(), base::Seconds(3));
   EXPECT_EQ(verifier->GroupPolicies().size(), 2U);
 
   // Now we use a new builder to modify just the group policies.
@@ -279,8 +279,8 @@
   urls = verifier2->UpdateURL();
   ASSERT_EQ(urls.size(), 1ul);
   EXPECT_EQ(urls[0], GURL("https://www.example.com"));
-  EXPECT_EQ(verifier2->InitialDelay(), 123.4);
-  EXPECT_EQ(verifier2->ServerKeepAliveSeconds(), 3);
+  EXPECT_EQ(verifier2->InitialDelay(), base::Seconds(123.4));
+  EXPECT_EQ(verifier2->ServerKeepAliveTime(), base::Seconds(3));
 }
 
 }  // namespace updater
diff --git a/chrome/updater/external_constants_default.cc b/chrome/updater/external_constants_default.cc
index 144215a..b8eba55 100644
--- a/chrome/updater/external_constants_default.cc
+++ b/chrome/updater/external_constants_default.cc
@@ -27,10 +27,10 @@
 
   bool UseCUP() const override { return true; }
 
-  double InitialDelay() const override { return kInitialDelay; }
+  base::TimeDelta InitialDelay() const override { return kInitialDelay; }
 
-  int ServerKeepAliveSeconds() const override {
-    return kServerKeepAliveSeconds;
+  base::TimeDelta ServerKeepAliveTime() const override {
+    return kServerKeepAliveTime;
   }
 
   crx_file::VerifierFormat CrxVerifierFormat() const override {
diff --git a/chrome/updater/external_constants_override.cc b/chrome/updater/external_constants_override.cc
index f838ce89..a4ae77d 100644
--- a/chrome/updater/external_constants_override.cc
+++ b/chrome/updater/external_constants_override.cc
@@ -94,7 +94,7 @@
   return use_cup_value->GetBool();
 }
 
-double ExternalConstantsOverrider::InitialDelay() const {
+base::TimeDelta ExternalConstantsOverrider::InitialDelay() const {
   if (!override_values_.contains(kDevOverrideKeyInitialDelay)) {
     return next_provider_->InitialDelay();
   }
@@ -104,12 +104,12 @@
   CHECK(initial_delay_value->is_double())
       << "Unexpected type of override[" << kDevOverrideKeyInitialDelay
       << "]: " << base::Value::GetTypeName(initial_delay_value->type());
-  return initial_delay_value->GetDouble();
+  return base::Seconds(initial_delay_value->GetDouble());
 }
 
-int ExternalConstantsOverrider::ServerKeepAliveSeconds() const {
+base::TimeDelta ExternalConstantsOverrider::ServerKeepAliveTime() const {
   if (!override_values_.contains(kDevOverrideKeyServerKeepAliveSeconds)) {
-    return next_provider_->ServerKeepAliveSeconds();
+    return next_provider_->ServerKeepAliveTime();
   }
 
   const base::Value* server_keep_alive_seconds_value =
@@ -118,7 +118,7 @@
       << "Unexpected type of override[" << kDevOverrideKeyServerKeepAliveSeconds
       << "]: "
       << base::Value::GetTypeName(server_keep_alive_seconds_value->type());
-  return server_keep_alive_seconds_value->GetInt();
+  return base::Seconds(server_keep_alive_seconds_value->GetInt());
 }
 
 crx_file::VerifierFormat ExternalConstantsOverrider::CrxVerifierFormat() const {
diff --git a/chrome/updater/external_constants_override.h b/chrome/updater/external_constants_override.h
index 0a33d21..98867b2 100644
--- a/chrome/updater/external_constants_override.h
+++ b/chrome/updater/external_constants_override.h
@@ -11,6 +11,7 @@
 
 #include "base/containers/flat_map.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/time/time.h"
 #include "base/values.h"
 #include "chrome/updater/external_constants.h"
 
@@ -19,7 +20,7 @@
 namespace base {
 class TimeDelta;
 class Value;
-}
+}  // namespace base
 
 namespace crx_file {
 enum class VerifierFormat;
@@ -43,8 +44,8 @@
   // Overrides of ExternalConstants:
   std::vector<GURL> UpdateURL() const override;
   bool UseCUP() const override;
-  double InitialDelay() const override;
-  int ServerKeepAliveSeconds() const override;
+  base::TimeDelta InitialDelay() const override;
+  base::TimeDelta ServerKeepAliveTime() const override;
   crx_file::VerifierFormat CrxVerifierFormat() const override;
   base::Value::Dict GroupPolicies() const override;
   base::TimeDelta OverinstallTimeout() const override;
diff --git a/chrome/updater/external_constants_override_unittest.cc b/chrome/updater/external_constants_override_unittest.cc
index 423d851..3c53ce81 100644
--- a/chrome/updater/external_constants_override_unittest.cc
+++ b/chrome/updater/external_constants_override_unittest.cc
@@ -6,6 +6,7 @@
 #include <vector>
 
 #include "base/memory/scoped_refptr.h"
+#include "base/time/time.h"
 #include "base/values.h"
 #include "chrome/updater/constants.h"
 #include "chrome/updater/external_constants.h"
@@ -31,7 +32,7 @@
   EXPECT_TRUE(urls[0].is_valid());
 
   EXPECT_EQ(overrider->InitialDelay(), kInitialDelay);
-  EXPECT_EQ(overrider->ServerKeepAliveSeconds(), kServerKeepAliveSeconds);
+  EXPECT_EQ(overrider->ServerKeepAliveTime(), kServerKeepAliveTime);
   EXPECT_EQ(overrider->GroupPolicies().size(), 0U);
 }
 
@@ -61,8 +62,8 @@
   EXPECT_EQ(urls[1], GURL("https://www.google.com"));
   EXPECT_TRUE(urls[1].is_valid());
 
-  EXPECT_EQ(overrider->InitialDelay(), 137.1);
-  EXPECT_EQ(overrider->ServerKeepAliveSeconds(), 1);
+  EXPECT_EQ(overrider->InitialDelay(), base::Seconds(137.1));
+  EXPECT_EQ(overrider->ServerKeepAliveTime(), base::Seconds(1));
   EXPECT_EQ(overrider->GroupPolicies().size(), 2U);
 }
 
@@ -80,7 +81,7 @@
   // Non-overridden items should fall back to defaults
   EXPECT_TRUE(overrider->UseCUP());
   EXPECT_EQ(overrider->InitialDelay(), kInitialDelay);
-  EXPECT_EQ(overrider->ServerKeepAliveSeconds(), kServerKeepAliveSeconds);
+  EXPECT_EQ(overrider->ServerKeepAliveTime(), kServerKeepAliveTime);
   EXPECT_EQ(overrider->GroupPolicies().size(), 0U);
 }
 
diff --git a/chrome/updater/policy/dm_policy_manager.cc b/chrome/updater/policy/dm_policy_manager.cc
index 93a9cef..88a47f8 100644
--- a/chrome/updater/policy/dm_policy_manager.cc
+++ b/chrome/updater/policy/dm_policy_manager.cc
@@ -11,6 +11,7 @@
 #include "base/enterprise_util.h"
 #include "base/notreached.h"
 #include "base/strings/string_util.h"
+#include "base/time/time.h"
 #include "build/build_config.h"
 #include "chrome/updater/constants.h"
 #include "chrome/updater/policy/manager.h"
@@ -73,11 +74,11 @@
   return std::string("DeviceManagement");
 }
 
-absl::optional<int> DMPolicyManager::GetLastCheckPeriodMinutes() const {
+absl::optional<base::TimeDelta> DMPolicyManager::GetLastCheckPeriod() const {
   if (!omaha_settings_.has_auto_update_check_period_minutes())
     return absl::nullopt;
 
-  return static_cast<int>(omaha_settings_.auto_update_check_period_minutes());
+  return base::Minutes(omaha_settings_.auto_update_check_period_minutes());
 }
 
 absl::optional<UpdatesSuppressedTimes>
diff --git a/chrome/updater/policy/dm_policy_manager.h b/chrome/updater/policy/dm_policy_manager.h
index 483ee8b..ae3c3bd0 100644
--- a/chrome/updater/policy/dm_policy_manager.h
+++ b/chrome/updater/policy/dm_policy_manager.h
@@ -30,7 +30,7 @@
 
   bool HasActiveDevicePolicies() const override;
 
-  absl::optional<int> GetLastCheckPeriodMinutes() const override;
+  absl::optional<base::TimeDelta> GetLastCheckPeriod() const override;
   absl::optional<UpdatesSuppressedTimes> GetUpdatesSuppressedTimes()
       const override;
   absl::optional<std::string> GetDownloadPreferenceGroupPolicy() const override;
diff --git a/chrome/updater/policy/dm_policy_manager_unittest.cc b/chrome/updater/policy/dm_policy_manager_unittest.cc
index 994beaa..32012fa 100644
--- a/chrome/updater/policy/dm_policy_manager_unittest.cc
+++ b/chrome/updater/policy/dm_policy_manager_unittest.cc
@@ -113,7 +113,7 @@
 #endif  // BUILDFLAG(IS_LINUX)
   EXPECT_EQ(policy_manager->source(), "DeviceManagement");
 
-  EXPECT_EQ(policy_manager->GetLastCheckPeriodMinutes(), absl::nullopt);
+  EXPECT_EQ(policy_manager->GetLastCheckPeriod(), absl::nullopt);
   EXPECT_EQ(policy_manager->GetUpdatesSuppressedTimes(), absl::nullopt);
   EXPECT_EQ(policy_manager->GetDownloadPreferenceGroupPolicy(), absl::nullopt);
   EXPECT_EQ(policy_manager->GetProxyMode(), absl::nullopt);
@@ -166,7 +166,7 @@
 #endif  // BUILDFLAG(IS_LINUX)
   EXPECT_EQ(policy_manager->source(), "DeviceManagement");
 
-  EXPECT_EQ(policy_manager->GetLastCheckPeriodMinutes(), 111);
+  EXPECT_EQ(policy_manager->GetLastCheckPeriod(), base::Minutes(111));
 
   absl::optional<UpdatesSuppressedTimes> suppressed_times =
       policy_manager->GetUpdatesSuppressedTimes();
@@ -229,7 +229,7 @@
   EXPECT_EQ(policy_manager->HasActiveDevicePolicies(), base::IsManagedDevice());
   EXPECT_EQ(policy_manager->source(), "DeviceManagement");
 
-  EXPECT_EQ(policy_manager->GetLastCheckPeriodMinutes(), absl::nullopt);
+  EXPECT_EQ(policy_manager->GetLastCheckPeriod(), absl::nullopt);
   EXPECT_EQ(policy_manager->GetUpdatesSuppressedTimes(), absl::nullopt);
   EXPECT_EQ(policy_manager->GetDownloadPreferenceGroupPolicy(), absl::nullopt);
   EXPECT_EQ(policy_manager->GetProxyMode(), absl::nullopt);
diff --git a/chrome/updater/policy/mac/managed_preference_policy_manager.mm b/chrome/updater/policy/mac/managed_preference_policy_manager.mm
index afaf71c..2b5baea0 100644
--- a/chrome/updater/policy/mac/managed_preference_policy_manager.mm
+++ b/chrome/updater/policy/mac/managed_preference_policy_manager.mm
@@ -10,6 +10,7 @@
 #include "base/mac/scoped_cftyperef.h"
 #include "base/mac/scoped_nsobject.h"
 #include "base/strings/sys_string_conversions.h"
+#include "base/time/time.h"
 #include "chrome/updater/constants.h"
 #include "chrome/updater/policy/mac/managed_preference_policy_manager_impl.h"
 #include "chrome/updater/policy/manager.h"
@@ -33,7 +34,7 @@
 
   bool HasActiveDevicePolicies() const override;
 
-  absl::optional<int> GetLastCheckPeriodMinutes() const override;
+  absl::optional<base::TimeDelta> GetLastCheckPeriod() const override;
   absl::optional<UpdatesSuppressedTimes> GetUpdatesSuppressedTimes()
       const override;
   absl::optional<std::string> GetDownloadPreferenceGroupPolicy() const override;
@@ -73,11 +74,12 @@
   return base::SysNSStringToUTF8([impl_ source]);
 }
 
-absl::optional<int> ManagedPreferencePolicyManager::GetLastCheckPeriodMinutes()
-    const {
+absl::optional<base::TimeDelta>
+ManagedPreferencePolicyManager::GetLastCheckPeriod() const {
   int minutes = [impl_ lastCheckPeriodMinutes];
-  return minutes != kPolicyNotSet ? absl::optional<int>(minutes)
-                                  : absl::nullopt;
+  return minutes != kPolicyNotSet
+             ? absl::optional<base::TimeDelta>(base::Minutes(minutes))
+             : absl::nullopt;
 }
 
 absl::optional<UpdatesSuppressedTimes>
diff --git a/chrome/updater/policy/manager.cc b/chrome/updater/policy/manager.cc
index f3fc379..c7057e2 100644
--- a/chrome/updater/policy/manager.cc
+++ b/chrome/updater/policy/manager.cc
@@ -63,7 +63,7 @@
 
   bool HasActiveDevicePolicies() const override;
 
-  absl::optional<int> GetLastCheckPeriodMinutes() const override;
+  absl::optional<base::TimeDelta> GetLastCheckPeriod() const override;
   absl::optional<UpdatesSuppressedTimes> GetUpdatesSuppressedTimes()
       const override;
   absl::optional<std::string> GetDownloadPreferenceGroupPolicy() const override;
@@ -97,9 +97,9 @@
   return std::string("default");
 }
 
-absl::optional<int> DefaultValuesPolicyManager::GetLastCheckPeriodMinutes()
+absl::optional<base::TimeDelta> DefaultValuesPolicyManager::GetLastCheckPeriod()
     const {
-  return kDefaultLastCheckPeriod.InMinutes();
+  return kDefaultLastCheckPeriod;
 }
 
 absl::optional<UpdatesSuppressedTimes>
diff --git a/chrome/updater/policy/manager.h b/chrome/updater/policy/manager.h
index 59fa1c8..32b5d31 100644
--- a/chrome/updater/policy/manager.h
+++ b/chrome/updater/policy/manager.h
@@ -9,6 +9,7 @@
 #include <string>
 #include <vector>
 
+#include "base/time/time.h"
 #include "chrome/updater/constants.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
@@ -55,9 +56,9 @@
   virtual bool HasActiveDevicePolicies() const = 0;
 
   // Returns the policy for how often the Updater should check for updates.
-  // Returns the time interval between update checks in minutes.
+  // Returns the time interval between update checks.
   // 0 indicates updates are disabled.
-  virtual absl::optional<int> GetLastCheckPeriodMinutes() const = 0;
+  virtual absl::optional<base::TimeDelta> GetLastCheckPeriod() const = 0;
 
   // For domain-joined machines, checks the current time against the times that
   // updates are suppressed.
diff --git a/chrome/updater/policy/policy_manager.cc b/chrome/updater/policy/policy_manager.cc
index 73c38b4e..baa8f43 100644
--- a/chrome/updater/policy/policy_manager.cc
+++ b/chrome/updater/policy/policy_manager.cc
@@ -88,8 +88,12 @@
   return std::string("DictValuePolicy");
 }
 
-absl::optional<int> PolicyManager::GetLastCheckPeriodMinutes() const {
-  return policies_.FindInt(kAutoUpdateCheckPeriodOverrideMinutes);
+absl::optional<base::TimeDelta> PolicyManager::GetLastCheckPeriod() const {
+  absl::optional<int> minutes =
+      policies_.FindInt(kAutoUpdateCheckPeriodOverrideMinutes);
+  if (!minutes)
+    return absl::nullopt;
+  return base::Minutes(*minutes);
 }
 
 absl::optional<UpdatesSuppressedTimes>
diff --git a/chrome/updater/policy/policy_manager.h b/chrome/updater/policy/policy_manager.h
index b759d375..5073aa9 100644
--- a/chrome/updater/policy/policy_manager.h
+++ b/chrome/updater/policy/policy_manager.h
@@ -30,7 +30,7 @@
 
   bool HasActiveDevicePolicies() const override;
 
-  absl::optional<int> GetLastCheckPeriodMinutes() const override;
+  absl::optional<base::TimeDelta> GetLastCheckPeriod() const override;
   absl::optional<UpdatesSuppressedTimes> GetUpdatesSuppressedTimes()
       const override;
   absl::optional<std::string> GetDownloadPreferenceGroupPolicy() const override;
diff --git a/chrome/updater/policy/policy_manager_unittest.cc b/chrome/updater/policy/policy_manager_unittest.cc
index 2c61be2..8a2f646 100644
--- a/chrome/updater/policy/policy_manager_unittest.cc
+++ b/chrome/updater/policy/policy_manager_unittest.cc
@@ -27,7 +27,7 @@
 
   EXPECT_EQ(policy_manager->source(), "DictValuePolicy");
 
-  EXPECT_EQ(policy_manager->GetLastCheckPeriodMinutes(), absl::nullopt);
+  EXPECT_EQ(policy_manager->GetLastCheckPeriod(), absl::nullopt);
   EXPECT_EQ(policy_manager->GetUpdatesSuppressedTimes(), absl::nullopt);
   EXPECT_EQ(policy_manager->GetDownloadPreferenceGroupPolicy(), absl::nullopt);
   EXPECT_EQ(policy_manager->GetPackageCacheSizeLimitMBytes(), absl::nullopt);
@@ -85,7 +85,7 @@
 
   EXPECT_TRUE(policy_manager->HasActiveDevicePolicies());
 
-  EXPECT_EQ(policy_manager->GetLastCheckPeriodMinutes(), 480);
+  EXPECT_EQ(policy_manager->GetLastCheckPeriod(), base::Minutes(480));
 
   absl::optional<UpdatesSuppressedTimes> suppressed_times =
       policy_manager->GetUpdatesSuppressedTimes();
@@ -163,7 +163,7 @@
 
   EXPECT_TRUE(policy_manager->HasActiveDevicePolicies());
 
-  EXPECT_EQ(policy_manager->GetLastCheckPeriodMinutes(), absl::nullopt);
+  EXPECT_EQ(policy_manager->GetLastCheckPeriod(), absl::nullopt);
   EXPECT_EQ(policy_manager->GetUpdatesSuppressedTimes(), absl::nullopt);
   EXPECT_EQ(policy_manager->GetDownloadPreferenceGroupPolicy(), absl::nullopt);
   EXPECT_EQ(policy_manager->GetPackageCacheSizeLimitMBytes(), absl::nullopt);
diff --git a/chrome/updater/policy/service.cc b/chrome/updater/policy/service.cc
index ce7a1c8a..f598a95 100644
--- a/chrome/updater/policy/service.cc
+++ b/chrome/updater/policy/service.cc
@@ -18,6 +18,7 @@
 #include "base/ranges/algorithm.h"
 #include "base/sequence_checker.h"
 #include "base/strings/string_util.h"
+#include "base/time/time.h"
 #include "build/build_config.h"
 #include "chrome/updater/constants.h"
 #include "chrome/updater/external_constants.h"
@@ -129,10 +130,10 @@
   return base::JoinString(sources, ";");
 }
 
-PolicyStatus<int> PolicyService::GetLastCheckPeriodMinutes() const {
+PolicyStatus<base::TimeDelta> PolicyService::GetLastCheckPeriod() const {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   return QueryPolicy(
-      base::BindRepeating(&PolicyManagerInterface::GetLastCheckPeriodMinutes));
+      base::BindRepeating(&PolicyManagerInterface::GetLastCheckPeriod));
 }
 
 PolicyStatus<UpdatesSuppressedTimes> PolicyService::GetUpdatesSuppressedTimes()
@@ -228,6 +229,16 @@
       base::BindRepeating(&PolicyManagerInterface::GetForceInstallApps));
 }
 
+PolicyStatus<int> PolicyService::DeprecatedGetLastCheckPeriodMinutes() const {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  return QueryPolicy(
+      base::BindRepeating(&PolicyManagerInterface::GetLastCheckPeriod)
+          .Then(base::BindRepeating([](absl::optional<base::TimeDelta> period) {
+            return period ? absl::optional<int>(period->InMinutes())
+                          : absl::nullopt;
+          })));
+}
+
 template <typename T>
 PolicyStatus<T> PolicyService::QueryPolicy(
     const base::RepeatingCallback<absl::optional<T>(
diff --git a/chrome/updater/policy/service.h b/chrome/updater/policy/service.h
index f9c38bd..6fc8189 100644
--- a/chrome/updater/policy/service.h
+++ b/chrome/updater/policy/service.h
@@ -13,6 +13,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/sequence_checker.h"
+#include "base/time/time.h"
 #include "chrome/updater/external_constants.h"
 #include "chrome/updater/policy/manager.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
@@ -95,7 +96,7 @@
 
   std::string source() const;
 
-  PolicyStatus<int> GetLastCheckPeriodMinutes() const;
+  PolicyStatus<base::TimeDelta> GetLastCheckPeriod() const;
   PolicyStatus<UpdatesSuppressedTimes> GetUpdatesSuppressedTimes() const;
   PolicyStatus<std::string> GetDownloadPreferenceGroupPolicy() const;
   PolicyStatus<int> GetPackageCacheSizeLimitMBytes() const;
@@ -112,6 +113,10 @@
   PolicyStatus<std::string> GetProxyServer() const;
   PolicyStatus<std::vector<std::string>> GetForceInstallApps() const;
 
+  // DEPRECATED: Prefer |GetLastCheckPeriod|. This function should only be used
+  // in legacy interfaces where a PolicyStatus<int> is required.
+  PolicyStatus<int> DeprecatedGetLastCheckPeriodMinutes() const;
+
  protected:
   virtual ~PolicyService();
 
diff --git a/chrome/updater/policy/service_unittest.cc b/chrome/updater/policy/service_unittest.cc
index 4271e66..d6db71e 100644
--- a/chrome/updater/policy/service_unittest.cc
+++ b/chrome/updater/policy/service_unittest.cc
@@ -8,6 +8,7 @@
 #include <vector>
 
 #include "base/memory/ref_counted.h"
+#include "base/time/time.h"
 #include "chrome/updater/policy/manager.h"
 #include "chrome/updater/policy/service.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -27,7 +28,7 @@
   bool HasActiveDevicePolicies() const override {
     return has_active_device_policies_;
   }
-  absl::optional<int> GetLastCheckPeriodMinutes() const override {
+  absl::optional<base::TimeDelta> GetLastCheckPeriod() const override {
     return absl::nullopt;
   }
   absl::optional<UpdatesSuppressedTimes> GetUpdatesSuppressedTimes()
@@ -123,9 +124,10 @@
       policy_service->GetTargetVersionPrefix("");
   EXPECT_FALSE(version_prefix);
 
-  PolicyStatus<int> last_check = policy_service->GetLastCheckPeriodMinutes();
+  PolicyStatus<base::TimeDelta> last_check =
+      policy_service->GetLastCheckPeriod();
   ASSERT_TRUE(last_check);
-  EXPECT_EQ(last_check.policy(), 270);
+  EXPECT_EQ(last_check.policy(), base::Minutes(270));
 
   PolicyStatus<int> app_installs =
       policy_service->GetPolicyForAppInstalls("test1");
diff --git a/chrome/updater/policy/win/group_policy_manager_unittest.cc b/chrome/updater/policy/win/group_policy_manager_unittest.cc
index b537853e2..cfe4174 100644
--- a/chrome/updater/policy/win/group_policy_manager_unittest.cc
+++ b/chrome/updater/policy/win/group_policy_manager_unittest.cc
@@ -9,6 +9,7 @@
 
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/test_reg_util_win.h"
+#include "base/time/time.h"
 #include "base/win/registry.h"
 #include "base/win/win_util.h"
 #include "chrome/updater/util/win_util.h"
@@ -53,7 +54,7 @@
 
   EXPECT_EQ(policy_manager->source(), "GroupPolicy");
 
-  EXPECT_EQ(policy_manager->GetLastCheckPeriodMinutes(), absl::nullopt);
+  EXPECT_EQ(policy_manager->GetLastCheckPeriod(), absl::nullopt);
   EXPECT_EQ(policy_manager->GetUpdatesSuppressedTimes(), absl::nullopt);
   EXPECT_EQ(policy_manager->GetDownloadPreferenceGroupPolicy(), absl::nullopt);
   EXPECT_EQ(policy_manager->GetPackageCacheSizeLimitMBytes(), absl::nullopt);
@@ -122,7 +123,7 @@
   EXPECT_EQ(policy_manager->HasActiveDevicePolicies(),
             base::win::IsEnrolledToDomain());
 
-  EXPECT_EQ(policy_manager->GetLastCheckPeriodMinutes(), 480);
+  EXPECT_EQ(policy_manager->GetLastCheckPeriod(), base::Minutes(480));
 
   absl::optional<UpdatesSuppressedTimes> suppressed_times =
       policy_manager->GetUpdatesSuppressedTimes();
@@ -192,7 +193,7 @@
   std::unique_ptr<PolicyManagerInterface> policy_manager =
       std::make_unique<GroupPolicyManager>();
 
-  EXPECT_EQ(policy_manager->GetLastCheckPeriodMinutes(), absl::nullopt);
+  EXPECT_EQ(policy_manager->GetLastCheckPeriod(), absl::nullopt);
   EXPECT_EQ(policy_manager->GetUpdatesSuppressedTimes(), absl::nullopt);
   EXPECT_EQ(policy_manager->GetDownloadPreferenceGroupPolicy(), absl::nullopt);
   EXPECT_EQ(policy_manager->GetPackageCacheSizeLimitMBytes(), absl::nullopt);
diff --git a/chrome/updater/test/integration_tests_linux.cc b/chrome/updater/test/integration_tests_linux.cc
index 0c8f390..6e9f2db 100644
--- a/chrome/updater/test/integration_tests_linux.cc
+++ b/chrome/updater/test/integration_tests_linux.cc
@@ -136,8 +136,8 @@
   ASSERT_TRUE(ExternalConstantsBuilder()
                   .SetUpdateURL({url.spec()})
                   .SetUseCUP(false)
-                  .SetInitialDelay(0.1)
-                  .SetServerKeepAliveSeconds(1)
+                  .SetInitialDelay(base::Milliseconds(100))
+                  .SetServerKeepAliveTime(base::Seconds(1))
                   .SetCrxVerifierFormat(crx_file::VerifierFormat::CRX3)
                   .SetOverinstallTimeout(TestTimeouts::action_timeout())
                   .Modify());
diff --git a/chrome/updater/test/integration_tests_mac.mm b/chrome/updater/test/integration_tests_mac.mm
index e8fed4d..a8d8a1a 100644
--- a/chrome/updater/test/integration_tests_mac.mm
+++ b/chrome/updater/test/integration_tests_mac.mm
@@ -118,8 +118,8 @@
   ASSERT_TRUE(ExternalConstantsBuilder()
                   .SetUpdateURL(std::vector<std::string>{url.spec()})
                   .SetUseCUP(false)
-                  .SetInitialDelay(0.1)
-                  .SetServerKeepAliveSeconds(1)
+                  .SetInitialDelay(base::Milliseconds(100))
+                  .SetServerKeepAliveTime(base::Seconds(1))
                   .SetCrxVerifierFormat(crx_file::VerifierFormat::CRX3)
                   .SetOverinstallTimeout(TestTimeouts::action_timeout())
                   .Modify());
diff --git a/chrome/updater/test/integration_tests_win.cc b/chrome/updater/test/integration_tests_win.cc
index 87f63d6..ce9df3e 100644
--- a/chrome/updater/test/integration_tests_win.cc
+++ b/chrome/updater/test/integration_tests_win.cc
@@ -634,7 +634,7 @@
   ASSERT_TRUE(ExternalConstantsBuilder()
                   .SetUpdateURL(std::vector<std::string>{url.spec()})
                   .SetUseCUP(false)
-                  .SetInitialDelay(0.1)
+                  .SetInitialDelay(base::Milliseconds(100))
                   .SetCrxVerifierFormat(crx_file::VerifierFormat::CRX3)
                   .SetOverinstallTimeout(base::Seconds(11))
                   .Modify());
diff --git a/components/component_updater/component_updater_command_line_config_policy.cc b/components/component_updater/component_updater_command_line_config_policy.cc
index 296650d..0c73487 100644
--- a/components/component_updater/component_updater_command_line_config_policy.cc
+++ b/components/component_updater/component_updater_command_line_config_policy.cc
@@ -99,7 +99,7 @@
       GetSwitchArgument(switch_values, kInitialDelay);
   double initial_delay_seconds = 0;
   if (base::StringToDouble(initial_delay, &initial_delay_seconds))
-    initial_delay_ = initial_delay_seconds;
+    initial_delay_ = base::Seconds(initial_delay_seconds);
 }
 
 bool ComponentUpdaterCommandLineConfigPolicy::BackgroundDownloadsEnabled()
@@ -127,7 +127,7 @@
   return url_source_override_;
 }
 
-double ComponentUpdaterCommandLineConfigPolicy::InitialDelay() const {
+base::TimeDelta ComponentUpdaterCommandLineConfigPolicy::InitialDelay() const {
   return initial_delay_;
 }
 
diff --git a/components/component_updater/component_updater_command_line_config_policy.h b/components/component_updater/component_updater_command_line_config_policy.h
index 5a080ea..6c16b4e37a 100644
--- a/components/component_updater/component_updater_command_line_config_policy.h
+++ b/components/component_updater/component_updater_command_line_config_policy.h
@@ -5,6 +5,7 @@
 #ifndef COMPONENTS_COMPONENT_UPDATER_COMPONENT_UPDATER_COMMAND_LINE_CONFIG_POLICY_H_
 #define COMPONENTS_COMPONENT_UPDATER_COMPONENT_UPDATER_COMMAND_LINE_CONFIG_POLICY_H_
 
+#include "base/time/time.h"
 #include "components/update_client/command_line_config_policy.h"
 #include "url/gurl.h"
 
@@ -35,7 +36,7 @@
   bool PingsEnabled() const override;
   bool TestRequest() const override;
   GURL UrlSourceOverride() const override;
-  double InitialDelay() const override;
+  base::TimeDelta InitialDelay() const override;
 
  private:
   bool background_downloads_enabled_ = false;
@@ -44,9 +45,8 @@
   bool pings_enabled_ = true;
   bool test_request_ = false;
 
-  // If non-zero, time interval in seconds until the first component
-  // update check.
-  double initial_delay_ = 0;
+  // If non-zero, time interval until the first component update check.
+  base::TimeDelta initial_delay_ = base::Seconds(0);
 
   GURL url_source_override_;
 };
diff --git a/components/component_updater/component_updater_service.cc b/components/component_updater/component_updater_service.cc
index ac782a3..eaeeadd 100644
--- a/components/component_updater/component_updater_service.cc
+++ b/components/component_updater/component_updater_service.cc
@@ -150,8 +150,7 @@
           << config_->NextCheckDelay() << " seconds. ";
 
   scheduler_->Schedule(
-      base::Seconds(config_->InitialDelay()),
-      base::Seconds(config_->NextCheckDelay()),
+      config_->InitialDelay(), config_->NextCheckDelay(),
       base::BindRepeating(
           base::IgnoreResult(&CrxUpdateService::CheckForUpdates),
           base::Unretained(this)),
@@ -342,7 +341,7 @@
   if (component_state && !component_state->last_check.is_null()) {
     base::TimeDelta delta =
         base::TimeTicks::Now() - component_state->last_check;
-    if (delta < base::Seconds(config_->OnDemandDelay()))
+    if (delta < config_->OnDemandDelay())
       return false;
   }
 
diff --git a/components/component_updater/configurator_impl.cc b/components/component_updater/configurator_impl.cc
index 648c533..6e03a7d 100644
--- a/components/component_updater/configurator_impl.cc
+++ b/components/component_updater/configurator_impl.cc
@@ -14,6 +14,7 @@
 #include "base/feature_list.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
+#include "base/time/time.h"
 #include "base/version.h"
 #include "build/build_config.h"
 #include "components/component_updater/component_updater_switches.h"
@@ -31,14 +32,6 @@
 
 namespace component_updater {
 
-namespace {
-
-// Default time constants.
-const int kDelayOneMinute = 60;
-const int kDelayOneHour = kDelayOneMinute * 60;
-
-}  // namespace
-
 ConfiguratorImpl::ConfiguratorImpl(
     const update_client::CommandLineConfigPolicy& config_policy,
     bool require_encryption)
@@ -57,22 +50,22 @@
 
 ConfiguratorImpl::~ConfiguratorImpl() = default;
 
-double ConfiguratorImpl::InitialDelay() const {
-  if (initial_delay_)
+base::TimeDelta ConfiguratorImpl::InitialDelay() const {
+  if (!initial_delay_.is_zero())
     return initial_delay_;
-  return fast_update_ ? 10 : kDelayOneMinute;
+  return fast_update_ ? base::Seconds(10) : base::Minutes(1);
 }
 
-int ConfiguratorImpl::NextCheckDelay() const {
-  return 5 * kDelayOneHour;
+base::TimeDelta ConfiguratorImpl::NextCheckDelay() const {
+  return base::Hours(5);
 }
 
-int ConfiguratorImpl::OnDemandDelay() const {
-  return fast_update_ ? 2 : (30 * kDelayOneMinute);
+base::TimeDelta ConfiguratorImpl::OnDemandDelay() const {
+  return fast_update_ ? base::Seconds(2) : base::Minutes(30);
 }
 
-int ConfiguratorImpl::UpdateDelay() const {
-  return fast_update_ ? 10 : (15 * kDelayOneMinute);
+base::TimeDelta ConfiguratorImpl::UpdateDelay() const {
+  return fast_update_ ? base::Seconds(10) : base::Minutes(15);
 }
 
 std::vector<GURL> ConfiguratorImpl::UpdateUrl() const {
diff --git a/components/component_updater/configurator_impl.h b/components/component_updater/configurator_impl.h
index 0dbfd96..9a31551 100644
--- a/components/component_updater/configurator_impl.h
+++ b/components/component_updater/configurator_impl.h
@@ -10,6 +10,7 @@
 #include <vector>
 
 #include "base/containers/flat_map.h"
+#include "base/time/time.h"
 #include "components/update_client/configurator.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "url/gurl.h"
@@ -21,7 +22,7 @@
 namespace update_client {
 class CommandLineConfigPolicy;
 class ProtocolHandlerFactory;
-}
+}  // namespace update_client
 
 namespace component_updater {
 
@@ -37,19 +38,18 @@
 
   ~ConfiguratorImpl();
 
-  // Delay in seconds from calling Start() to the first update check.
-  double InitialDelay() const;
+  // Delay from calling Start() to the first update check.
+  base::TimeDelta InitialDelay() const;
 
-  // Delay in seconds to every subsequent update check. 0 means don't check.
-  int NextCheckDelay() const;
+  // Delay to every subsequent update check. 0 means don't check.
+  base::TimeDelta NextCheckDelay() const;
 
-  // Minimum delta time in seconds before an on-demand check is allowed for the
-  // same component.
-  int OnDemandDelay() const;
+  // Minimum delta time before an on-demand check is allowed for the same
+  // component.
+  base::TimeDelta OnDemandDelay() const;
 
-  // The time delay in seconds between applying updates for different
-  // components.
-  int UpdateDelay() const;
+  // The time delay between applying updates for different components.
+  base::TimeDelta UpdateDelay() const;
 
   // The URLs for the update checks. The URLs are tried in order, the first one
   // that succeeds wins.
@@ -107,7 +107,7 @@
   const bool pings_enabled_;
   const bool require_encryption_;
   const GURL url_source_override_;
-  const double initial_delay_;
+  const base::TimeDelta initial_delay_;
 };
 
 }  // namespace component_updater
diff --git a/components/component_updater/configurator_impl_unittest.cc b/components/component_updater/configurator_impl_unittest.cc
index 58145277..ad6a5b6 100644
--- a/components/component_updater/configurator_impl_unittest.cc
+++ b/components/component_updater/configurator_impl_unittest.cc
@@ -6,6 +6,7 @@
 
 #include "base/command_line.h"
 #include "base/test/scoped_command_line.h"
+#include "base/time/time.h"
 #include "components/component_updater/component_updater_command_line_config_policy.h"
 #include "components/component_updater/component_updater_switches.h"
 #include "components/component_updater/configurator_impl.h"
@@ -14,13 +15,6 @@
 
 namespace component_updater {
 
-namespace {
-
-const int kDelayOneMinute = 60;
-const int kDelayOneHour = kDelayOneMinute * 60;
-
-}  // namespace
-
 class ComponentUpdaterConfiguratorImplTest : public testing::Test {
  public:
   ComponentUpdaterConfiguratorImplTest() = default;
@@ -38,19 +32,19 @@
   base::CommandLine cmdline(base::CommandLine::NO_PROGRAM);
   std::unique_ptr<ConfiguratorImpl> config = std::make_unique<ConfiguratorImpl>(
       ComponentUpdaterCommandLineConfigPolicy(&cmdline), false);
-  CHECK_EQ(kDelayOneMinute, config->InitialDelay());
-  CHECK_EQ(5 * kDelayOneHour, config->NextCheckDelay());
-  CHECK_EQ(30 * kDelayOneMinute, config->OnDemandDelay());
-  CHECK_EQ(15 * kDelayOneMinute, config->UpdateDelay());
+  CHECK_EQ(base::Minutes(1), config->InitialDelay());
+  CHECK_EQ(base::Hours(5), config->NextCheckDelay());
+  CHECK_EQ(base::Minutes(30), config->OnDemandDelay());
+  CHECK_EQ(base::Minutes(15), config->UpdateDelay());
 
   // Test the fast-update timings.
   cmdline.AppendSwitchASCII("--component-updater", "fast-update");
   config = std::make_unique<ConfiguratorImpl>(
       ComponentUpdaterCommandLineConfigPolicy(&cmdline), false);
-  CHECK_EQ(10, config->InitialDelay());
-  CHECK_EQ(5 * kDelayOneHour, config->NextCheckDelay());
-  CHECK_EQ(2, config->OnDemandDelay());
-  CHECK_EQ(10, config->UpdateDelay());
+  CHECK_EQ(base::Seconds(10), config->InitialDelay());
+  CHECK_EQ(base::Hours(5), config->NextCheckDelay());
+  CHECK_EQ(base::Seconds(2), config->OnDemandDelay());
+  CHECK_EQ(base::Seconds(10), config->UpdateDelay());
 }
 
 TEST_F(ComponentUpdaterConfiguratorImplTest, FastUpdateWithCustomPolicy) {
@@ -72,10 +66,10 @@
 
   std::unique_ptr<ConfiguratorImpl> config = std::make_unique<ConfiguratorImpl>(
       DefaultCommandLineConfigPolicy(), false);
-  CHECK_EQ(kDelayOneMinute, config->InitialDelay());
-  CHECK_EQ(5 * kDelayOneHour, config->NextCheckDelay());
-  CHECK_EQ(30 * kDelayOneMinute, config->OnDemandDelay());
-  CHECK_EQ(15 * kDelayOneMinute, config->UpdateDelay());
+  CHECK_EQ(base::Minutes(1), config->InitialDelay());
+  CHECK_EQ(base::Hours(5), config->NextCheckDelay());
+  CHECK_EQ(base::Minutes(30), config->OnDemandDelay());
+  CHECK_EQ(base::Minutes(15), config->UpdateDelay());
 
   // Test the fast-update timings.
   class FastUpdateCommandLineConfigurator
@@ -87,16 +81,16 @@
   };
   config = std::make_unique<ConfiguratorImpl>(
       FastUpdateCommandLineConfigurator(), false);
-  CHECK_EQ(10, config->InitialDelay());
-  CHECK_EQ(5 * kDelayOneHour, config->NextCheckDelay());
-  CHECK_EQ(2, config->OnDemandDelay());
-  CHECK_EQ(10, config->UpdateDelay());
+  CHECK_EQ(base::Seconds(10), config->InitialDelay());
+  CHECK_EQ(base::Hours(5), config->NextCheckDelay());
+  CHECK_EQ(base::Seconds(2), config->OnDemandDelay());
+  CHECK_EQ(base::Seconds(10), config->UpdateDelay());
 }
 
 TEST_F(ComponentUpdaterConfiguratorImplTest, InitialDelay) {
   std::unique_ptr<ConfiguratorImpl> config = std::make_unique<ConfiguratorImpl>(
       update_client::CommandLineConfigPolicy(), false);
-  CHECK_EQ(kDelayOneMinute, config->InitialDelay());
+  CHECK_EQ(base::Minutes(1), config->InitialDelay());
 
   class CommandLineConfigPolicy
       : public update_client::CommandLineConfigPolicy {
@@ -110,15 +104,15 @@
     bool PingsEnabled() const override { return false; }
     bool TestRequest() const override { return false; }
     GURL UrlSourceOverride() const override { return GURL(); }
-    double InitialDelay() const override { return initial_delay_; }
+    base::TimeDelta InitialDelay() const override { return initial_delay_; }
 
     void set_fast_update(bool fast_update) { fast_update_ = fast_update; }
-    void set_initial_delay(double initial_delay) {
+    void set_initial_delay(base::TimeDelta initial_delay) {
       initial_delay_ = initial_delay;
     }
 
    private:
-    double initial_delay_ = 0;
+    base::TimeDelta initial_delay_ = base::Seconds(0);
     bool fast_update_ = false;
   };
 
@@ -126,21 +120,21 @@
     CommandLineConfigPolicy clcp;
     clcp.set_fast_update(true);
     config = std::make_unique<ConfiguratorImpl>(clcp, false);
-    CHECK_EQ(10, config->InitialDelay());
+    CHECK_EQ(base::Seconds(10), config->InitialDelay());
   }
 
   {
     CommandLineConfigPolicy clcp;
     clcp.set_fast_update(false);
     config = std::make_unique<ConfiguratorImpl>(clcp, false);
-    CHECK_EQ(kDelayOneMinute, config->InitialDelay());
+    CHECK_EQ(base::Minutes(1), config->InitialDelay());
   }
 
   {
     CommandLineConfigPolicy clcp;
-    clcp.set_initial_delay(2 * kDelayOneMinute);
+    clcp.set_initial_delay(base::Minutes(2));
     config = std::make_unique<ConfiguratorImpl>(clcp, false);
-    CHECK_EQ(2 * kDelayOneMinute, config->InitialDelay());
+    CHECK_EQ(base::Minutes(2), config->InitialDelay());
   }
 
   {
@@ -151,7 +145,7 @@
                                     "initial-delay=3.14");
     config = std::make_unique<ConfiguratorImpl>(
         ComponentUpdaterCommandLineConfigPolicy(command_line), false);
-    CHECK_EQ(3.14, config->InitialDelay());
+    CHECK_EQ(base::Seconds(3.14), config->InitialDelay());
   }
 }
 
@@ -168,7 +162,7 @@
     bool PingsEnabled() const override { return false; }
     bool TestRequest() const override { return test_request_; }
     GURL UrlSourceOverride() const override { return GURL(); }
-    double InitialDelay() const override { return 0; }
+    base::TimeDelta InitialDelay() const override { return base::Seconds(0); }
 
     void set_test_request(bool test_request) { test_request_ = test_request; }
 
diff --git a/components/update_client/command_line_config_policy.cc b/components/update_client/command_line_config_policy.cc
index 8eaafe35..f418ff2 100644
--- a/components/update_client/command_line_config_policy.cc
+++ b/components/update_client/command_line_config_policy.cc
@@ -4,6 +4,7 @@
 
 #include "components/update_client/command_line_config_policy.h"
 
+#include "base/time/time.h"
 #include "build/build_config.h"
 #include "url/gurl.h"
 
@@ -37,8 +38,8 @@
   return GURL();
 }
 
-double CommandLineConfigPolicy::InitialDelay() const {
-  return 0;
+base::TimeDelta CommandLineConfigPolicy::InitialDelay() const {
+  return base::Seconds(0);
 }
 
 }  // namespace update_client
diff --git a/components/update_client/command_line_config_policy.h b/components/update_client/command_line_config_policy.h
index 6f096e8..c20cd3d 100644
--- a/components/update_client/command_line_config_policy.h
+++ b/components/update_client/command_line_config_policy.h
@@ -5,6 +5,7 @@
 #ifndef COMPONENTS_UPDATE_CLIENT_COMMAND_LINE_CONFIG_POLICY_H_
 #define COMPONENTS_UPDATE_CLIENT_COMMAND_LINE_CONFIG_POLICY_H_
 
+#include "base/time/time.h"
 class GURL;
 
 namespace update_client {
@@ -32,9 +33,8 @@
   // The override URL for updates. Can be empty.
   virtual GURL UrlSourceOverride() const;
 
-  // If non-zero, time interval in seconds until the first component
-  // update check.
-  virtual double InitialDelay() const;
+  // If non-zero, time interval until the first component update check.
+  virtual base::TimeDelta InitialDelay() const;
 
   virtual ~CommandLineConfigPolicy() = default;
 };
diff --git a/components/update_client/component.cc b/components/update_client/component.cc
index e1785f6..77d2dbf 100644
--- a/components/update_client/component.cc
+++ b/components/update_client/component.cc
@@ -646,7 +646,7 @@
   const base::TimeDelta update_cost(base::TimeTicks::Now() - update_begin_);
   DCHECK_GE(update_cost, base::TimeDelta());
   const base::TimeDelta max_update_delay =
-      base::Seconds(update_context_->config->UpdateDelay());
+      update_context_->config->UpdateDelay();
   return std::min(update_cost, max_update_delay);
 }
 
diff --git a/components/update_client/configurator.h b/components/update_client/configurator.h
index 438fd33b..becd2a9 100644
--- a/components/update_client/configurator.h
+++ b/components/update_client/configurator.h
@@ -14,6 +14,7 @@
 #include "base/containers/flat_map.h"
 #include "base/files/file_path.h"
 #include "base/memory/ref_counted.h"
+#include "base/time/time.h"
 #include "components/update_client/buildflags.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
@@ -43,19 +44,19 @@
 // behavior of the component updater.
 class Configurator : public base::RefCountedThreadSafe<Configurator> {
  public:
-  // Delay in seconds from calling Start() to the first update check.
-  virtual double InitialDelay() const = 0;
+  // Delay from calling Start() to the first update check.
+  virtual base::TimeDelta InitialDelay() const = 0;
 
-  // Delay in seconds to every subsequent update check. 0 means don't check.
-  virtual int NextCheckDelay() const = 0;
+  // Delay to every subsequent update check. 0 means don't check.
+  virtual base::TimeDelta NextCheckDelay() const = 0;
 
-  // Minimum delta time in seconds before an on-demand check is allowed
+  // Minimum delta time before an on-demand check is allowed
   // for the same component.
-  virtual int OnDemandDelay() const = 0;
+  virtual base::TimeDelta OnDemandDelay() const = 0;
 
-  // The time delay in seconds between applying updates for different
+  // The time delay between applying updates for different
   // components.
-  virtual int UpdateDelay() const = 0;
+  virtual base::TimeDelta UpdateDelay() const = 0;
 
   // The URLs for the update checks. The URLs are tried in order, the first one
   // that succeeds wins. Since some components cannot be updated over HTTP,
diff --git a/components/update_client/test_configurator.cc b/components/update_client/test_configurator.cc
index f453249..6b15c57c 100644
--- a/components/update_client/test_configurator.cc
+++ b/components/update_client/test_configurator.cc
@@ -14,6 +14,7 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/path_service.h"
 #include "base/threading/thread_task_runner_handle.h"
+#include "base/time/time.h"
 #include "base/version.h"
 #include "components/prefs/pref_service.h"
 #include "components/services/patch/in_process_file_patcher.h"
@@ -65,20 +66,20 @@
 
 TestConfigurator::~TestConfigurator() = default;
 
-double TestConfigurator::InitialDelay() const {
+base::TimeDelta TestConfigurator::InitialDelay() const {
   return initial_time_;
 }
 
-int TestConfigurator::NextCheckDelay() const {
-  return 1;
+base::TimeDelta TestConfigurator::NextCheckDelay() const {
+  return base::Seconds(1);
 }
 
-int TestConfigurator::OnDemandDelay() const {
+base::TimeDelta TestConfigurator::OnDemandDelay() const {
   return ondemand_time_;
 }
 
-int TestConfigurator::UpdateDelay() const {
-  return 1;
+base::TimeDelta TestConfigurator::UpdateDelay() const {
+  return base::Seconds(1);
 }
 
 std::vector<GURL> TestConfigurator::UpdateUrl() const {
@@ -190,12 +191,12 @@
 }
 #endif
 
-void TestConfigurator::SetOnDemandTime(int seconds) {
-  ondemand_time_ = seconds;
+void TestConfigurator::SetOnDemandTime(base::TimeDelta time) {
+  ondemand_time_ = time;
 }
 
-void TestConfigurator::SetInitialDelay(double seconds) {
-  initial_time_ = seconds;
+void TestConfigurator::SetInitialDelay(base::TimeDelta delay) {
+  initial_time_ = delay;
 }
 
 void TestConfigurator::SetEnabledCupSigning(bool enabled_cup_signing) {
diff --git a/components/update_client/test_configurator.h b/components/update_client/test_configurator.h
index 8147483..eb37ff8c 100644
--- a/components/update_client/test_configurator.h
+++ b/components/update_client/test_configurator.h
@@ -16,6 +16,7 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
+#include "base/time/time.h"
 #include "components/update_client/buildflags.h"
 #include "components/update_client/configurator.h"
 #include "services/network/test/test_url_loader_factory.h"
@@ -78,10 +79,10 @@
   TestConfigurator& operator=(const TestConfigurator&) = delete;
 
   // Overrides for Configurator.
-  double InitialDelay() const override;
-  int NextCheckDelay() const override;
-  int OnDemandDelay() const override;
-  int UpdateDelay() const override;
+  base::TimeDelta InitialDelay() const override;
+  base::TimeDelta NextCheckDelay() const override;
+  base::TimeDelta OnDemandDelay() const override;
+  base::TimeDelta UpdateDelay() const override;
   std::vector<GURL> UpdateUrl() const override;
   std::vector<GURL> PingUrl() const override;
   std::string GetProdId() const override;
@@ -109,8 +110,8 @@
   absl::optional<base::FilePath> GetCrxCachePath() const override;
 #endif
 
-  void SetOnDemandTime(int seconds);
-  void SetInitialDelay(double seconds);
+  void SetOnDemandTime(base::TimeDelta seconds);
+  void SetInitialDelay(base::TimeDelta seconds);
   void SetDownloadPreference(const std::string& download_preference);
   void SetEnabledCupSigning(bool use_cup_signing);
   void SetUpdateCheckUrl(const GURL& url);
@@ -131,8 +132,8 @@
 
   class TestPatchService;
 
-  double initial_time_{0};
-  int ondemand_time_{0};
+  base::TimeDelta initial_time_ = base::Seconds(0);
+  base::TimeDelta ondemand_time_ = base::Seconds(0);
   std::string download_preference_;
   bool enabled_cup_signing_;
   raw_ptr<PrefService> pref_service_;  // Not owned by this class.
diff --git a/ios/chrome/browser/component_updater/ios_component_updater_configurator.mm b/ios/chrome/browser/component_updater/ios_component_updater_configurator.mm
index dc7a331..52a0975 100644
--- a/ios/chrome/browser/component_updater/ios_component_updater_configurator.mm
+++ b/ios/chrome/browser/component_updater/ios_component_updater_configurator.mm
@@ -43,10 +43,10 @@
   explicit IOSConfigurator(const base::CommandLine* cmdline);
 
   // update_client::Configurator overrides.
-  double InitialDelay() const override;
-  int NextCheckDelay() const override;
-  int OnDemandDelay() const override;
-  int UpdateDelay() const override;
+  base::TimeDelta InitialDelay() const override;
+  base::TimeDelta NextCheckDelay() const override;
+  base::TimeDelta OnDemandDelay() const override;
+  base::TimeDelta UpdateDelay() const override;
   std::vector<GURL> UpdateUrl() const override;
   std::vector<GURL> PingUrl() const override;
   std::string GetProdId() const override;
@@ -92,19 +92,19 @@
     : configurator_impl_(ComponentUpdaterCommandLineConfigPolicy(cmdline),
                          false) {}
 
-double IOSConfigurator::InitialDelay() const {
+base::TimeDelta IOSConfigurator::InitialDelay() const {
   return configurator_impl_.InitialDelay();
 }
 
-int IOSConfigurator::NextCheckDelay() const {
+base::TimeDelta IOSConfigurator::NextCheckDelay() const {
   return configurator_impl_.NextCheckDelay();
 }
 
-int IOSConfigurator::OnDemandDelay() const {
+base::TimeDelta IOSConfigurator::OnDemandDelay() const {
   return configurator_impl_.OnDemandDelay();
 }
 
-int IOSConfigurator::UpdateDelay() const {
+base::TimeDelta IOSConfigurator::UpdateDelay() const {
   return configurator_impl_.UpdateDelay();
 }
 
diff --git a/ios/web_view/internal/component_updater/web_view_component_updater_configurator.mm b/ios/web_view/internal/component_updater/web_view_component_updater_configurator.mm
index d5fdf58..2e625d1 100644
--- a/ios/web_view/internal/component_updater/web_view_component_updater_configurator.mm
+++ b/ios/web_view/internal/component_updater/web_view_component_updater_configurator.mm
@@ -3,31 +3,32 @@
 // found in the LICENSE file.
 
 #import "ios/web_view/internal/component_updater/web_view_component_updater_configurator.h"
+#import "base/time/time.h"
 
-#include <stdint.h>
+#import <stdint.h>
 
-#include <memory>
-#include <string>
-#include <vector>
+#import <memory>
+#import <string>
+#import <vector>
 
-#include "base/containers/flat_map.h"
-#include "base/version.h"
-#include "components/component_updater/component_updater_command_line_config_policy.h"
-#include "components/component_updater/configurator_impl.h"
-#include "components/services/patch/in_process_file_patcher.h"
-#include "components/services/unzip/in_process_unzipper.h"
-#include "components/update_client/activity_data_service.h"
-#include "components/update_client/crx_downloader_factory.h"
-#include "components/update_client/net/network_chromium.h"
-#include "components/update_client/patch/patch_impl.h"
-#include "components/update_client/patcher.h"
-#include "components/update_client/protocol_handler.h"
-#include "components/update_client/unzip/unzip_impl.h"
-#include "components/update_client/unzipper.h"
-#include "components/update_client/update_query_params.h"
-#include "ios/web_view/internal/app/application_context.h"
-#include "services/network/public/cpp/shared_url_loader_factory.h"
-#include "third_party/abseil-cpp/absl/types/optional.h"
+#import "base/containers/flat_map.h"
+#import "base/version.h"
+#import "components/component_updater/component_updater_command_line_config_policy.h"
+#import "components/component_updater/configurator_impl.h"
+#import "components/services/patch/in_process_file_patcher.h"
+#import "components/services/unzip/in_process_unzipper.h"
+#import "components/update_client/activity_data_service.h"
+#import "components/update_client/crx_downloader_factory.h"
+#import "components/update_client/net/network_chromium.h"
+#import "components/update_client/patch/patch_impl.h"
+#import "components/update_client/patcher.h"
+#import "components/update_client/protocol_handler.h"
+#import "components/update_client/unzip/unzip_impl.h"
+#import "components/update_client/unzipper.h"
+#import "components/update_client/update_query_params.h"
+#import "ios/web_view/internal/app/application_context.h"
+#import "services/network/public/cpp/shared_url_loader_factory.h"
+#import "third_party/abseil-cpp/absl/types/optional.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
@@ -45,10 +46,10 @@
   explicit WebViewConfigurator(const base::CommandLine* cmdline);
 
   // update_client::Configurator overrides.
-  double InitialDelay() const override;
-  int NextCheckDelay() const override;
-  int OnDemandDelay() const override;
-  int UpdateDelay() const override;
+  base::TimeDelta InitialDelay() const override;
+  base::TimeDelta NextCheckDelay() const override;
+  base::TimeDelta OnDemandDelay() const override;
+  base::TimeDelta UpdateDelay() const override;
   std::vector<GURL> UpdateUrl() const override;
   std::vector<GURL> PingUrl() const override;
   std::string GetProdId() const override;
@@ -95,19 +96,19 @@
           component_updater::ComponentUpdaterCommandLineConfigPolicy(cmdline),
           /*require_encryption=*/false) {}
 
-double WebViewConfigurator::InitialDelay() const {
+base::TimeDelta WebViewConfigurator::InitialDelay() const {
   return configurator_impl_.InitialDelay();
 }
 
-int WebViewConfigurator::NextCheckDelay() const {
+base::TimeDelta WebViewConfigurator::NextCheckDelay() const {
   return configurator_impl_.NextCheckDelay();
 }
 
-int WebViewConfigurator::OnDemandDelay() const {
+base::TimeDelta WebViewConfigurator::OnDemandDelay() const {
   return configurator_impl_.OnDemandDelay();
 }
 
-int WebViewConfigurator::UpdateDelay() const {
+base::TimeDelta WebViewConfigurator::UpdateDelay() const {
   return configurator_impl_.UpdateDelay();
 }