blob: 67179b972f50a4b7c3643461c9ea39d30569e73a [file] [log] [blame]
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UPDATER_BROWSER_UPDATER_CLIENT_H_
#define CHROME_BROWSER_UPDATER_BROWSER_UPDATER_CLIENT_H_
#include <string>
#include "base/callback.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_refptr.h"
#include "base/sequence_checker.h"
#include "base/sequenced_task_runner.h"
#include "chrome/updater/update_service.h"
// Cross-platform client to communicate between the browser and the Chromium
// updater. It helps the browser register to the Chromium updater and invokes
// on-demand updates.
class BrowserUpdaterClient
: public base::RefCountedThreadSafe<BrowserUpdaterClient> {
public:
static scoped_refptr<BrowserUpdaterClient> Create();
BrowserUpdaterClient();
// Registers the browser to the Chromium updater via IPC registration API.
// When registration is completed, it will call RegistrationCompleted().
void Register();
// Begins the process of an on-demand update from the Chromium updater via IPC
// update API. It will periodically get updates via HandleStatusUpdate(). When
// update is completed, it will call UpdateCompleted().
void CheckForUpdate(
base::RepeatingCallback<void(updater::UpdateService::UpdateState)>
version_updater_callback);
protected:
friend class base::RefCountedThreadSafe<BrowserUpdaterClient>;
virtual ~BrowserUpdaterClient();
scoped_refptr<base::SequencedTaskRunner> task_runner() {
return callback_task_runner_;
}
private:
SEQUENCE_CHECKER(sequence_checker_);
// Helper method for Register() to be implemented by each platform to initiate
// the registration.
virtual void BeginRegister(const std::string& brand_code,
const std::string& tag,
const std::string& version,
updater::UpdateService::Callback callback) = 0;
// Helper method for CheckForUpdate() to be implemented by each platform to
// initiate on-demand updates.
virtual void BeginUpdateCheck(
updater::UpdateService::StateChangeCallback state_change,
updater::UpdateService::Callback callback) = 0;
// Handles status updates from the Chromium Updater during an on-demand
// update. The updater::UpdateService::UpdateState is translated into a
// VersionUpdater::StatusCallback.
void HandleStatusUpdate(
base::RepeatingCallback<void(updater::UpdateService::UpdateState)>
callback,
updater::UpdateService::UpdateState update_state);
// Handles status update from Chromium updater when registration is completed.
void RegistrationCompleted(updater::UpdateService::Result result);
// Handles status update from Chromium updater when updates are completed.
void UpdateCompleted(base::RepeatingCallback<
void(updater::UpdateService::UpdateState)> callback,
updater::UpdateService::Result result);
scoped_refptr<base::SequencedTaskRunner> callback_task_runner_;
};
#endif // CHROME_BROWSER_UPDATER_BROWSER_UPDATER_CLIENT_H_