chromium/chrome/browser/upgrade_detector/get_installed_version_win.cc

// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "chrome/browser/upgrade_detector/get_installed_version.h"

#include <utility>

#include "base/functional/bind.h"
#include "base/functional/callback.h"
#include "base/location.h"
#include "base/task/task_traits.h"
#include "base/task/thread_pool.h"
#include "chrome/installer/util/install_util.h"

namespace {

InstalledAndCriticalVersion GetInstalledVersionSynchronous() {
  base::Version installed_version =
      InstallUtil::GetChromeVersion(!InstallUtil::IsPerUserInstall());
  if (installed_version.IsValid()) {
    base::Version critical_version = InstallUtil::GetCriticalUpdateVersion();
    if (critical_version.IsValid()) {
      return InstalledAndCriticalVersion(std::move(installed_version),
                                         std::move(critical_version));
    }
  }
  return InstalledAndCriticalVersion(std::move(installed_version));
}

}  // namespace

void GetInstalledVersion(InstalledVersionCallback callback) {
  base::ThreadPool::PostTaskAndReplyWithResult(
      FROM_HERE,
      {base::TaskPriority::BEST_EFFORT,
       base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN, base::MayBlock()},
      base::BindOnce(&GetInstalledVersionSynchronous), std::move(callback));
}