1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
|
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_GOOGLE_GOOGLE_UPDATE_WIN_H_
#define CHROME_BROWSER_GOOGLE_GOOGLE_UPDATE_WIN_H_
#include <wrl/client.h>
#include <optional>
#include <string>
#include "base/functional/callback_forward.h"
#include "base/memory/weak_ptr.h"
#include "chrome/updater/app/server/win/updater_legacy_idl.h"
#include "ui/gfx/native_widget_types.h"
namespace base {
class SingleThreadTaskRunner;
} // namespace base
// These values are used for a histogram. Do not reorder.
enum GoogleUpdateErrorCode {
// The upgrade completed successfully (or hasn't been started yet).
GOOGLE_UPDATE_NO_ERROR = 0,
// Google Update only supports upgrading if Chrome is installed in the default
// location. This error will appear for developer builds and with
// installations unzipped to random locations.
CANNOT_UPGRADE_CHROME_IN_THIS_DIRECTORY = 1,
// Failed to create Google Update JobServer COM class. DEPRECATED.
// GOOGLE_UPDATE_JOB_SERVER_CREATION_FAILED = 2,
// Failed to create Google Update OnDemand COM class.
GOOGLE_UPDATE_ONDEMAND_CLASS_NOT_FOUND = 3,
// Google Update OnDemand COM class reported an error during a check for
// update (or while upgrading).
GOOGLE_UPDATE_ONDEMAND_CLASS_REPORTED_ERROR = 4,
// A call to GetResults failed. DEPRECATED.
// GOOGLE_UPDATE_GET_RESULT_CALL_FAILED = 5,
// A call to GetVersionInfo failed. DEPRECATED
// GOOGLE_UPDATE_GET_VERSION_INFO_FAILED = 6,
// An error occurred while upgrading (or while checking for update).
// Check the Google Update log in %TEMP% for more details.
GOOGLE_UPDATE_ERROR_UPDATING = 7,
// Updates can not be downloaded because the administrator has disabled all
// types of updating.
GOOGLE_UPDATE_DISABLED_BY_POLICY = 8,
// Updates can not be downloaded because the administrator has disabled
// manual (on-demand) updates. Automatic background updates are allowed.
GOOGLE_UPDATE_DISABLED_BY_POLICY_AUTO_ONLY = 9,
NUM_ERROR_CODES
};
// A delegate by which a caller of BeginUpdateCheck is notified of the status
// and results of an update check.
class UpdateCheckDelegate {
public:
virtual ~UpdateCheckDelegate() = default;
// Invoked following a successful update check. |new_version|, if not empty,
// indicates the new version that is available. Otherwise (if |new_version| is
// empty), Chrome is up to date. This method will only be invoked when
// BeginUpdateCheck is called with |install_update_if_possible| == false.
virtual void OnUpdateCheckComplete(const std::u16string& new_version) = 0;
// Invoked zero or more times during an upgrade. |progress|, a number between
// 0 and 100 (inclusive), is an estimation as to what percentage of the
// upgrade has completed. |new_version| indicates the version that is being
// download and installed. This method will only be invoked when
// BeginUpdateCheck is called with |install_update_if_possible| == true.
virtual void OnUpgradeProgress(int progress,
const std::u16string& new_version) = 0;
// Invoked following a successful upgrade. |new_version| indicates the version
// to which Chrome was updated. This method will only be invoked when
// BeginUpdateCheck is called with |install_update_if_possible| == true.
virtual void OnUpgradeComplete(const std::u16string& new_version) = 0;
// Invoked following an unrecoverable error, indicated by |error_code|.
// |html_error_message|, if not empty, must be a localized string containing
// all information required by users to act on the error as well as for
// support staff to diagnose it (i.e. |error_code| and any other related
// state information). |new_version|, if not empty, indicates the version
// to which an upgrade attempt was made.
virtual void OnError(GoogleUpdateErrorCode error_code,
const std::u16string& html_error_message,
const std::u16string& new_version) = 0;
protected:
UpdateCheckDelegate() = default;
};
// Begins an asynchronous update check. If a new version is
// available and |install_update_if_possible| is true, the new version will be
// automatically downloaded and installed. |elevation_window| is the window
// which should own any necessary elevation UI. Methods on |delegate| will be
// invoked on the caller's thread to provide feedback on the operation, with
// messages localized to |locale| if possible.
void BeginUpdateCheck(const std::string& locale,
bool install_update_if_possible,
gfx::AcceleratedWidget elevation_window,
const base::WeakPtr<UpdateCheckDelegate>& delegate);
// The state from a completed update check.
struct UpdateState {
UpdateState();
UpdateState(const UpdateState&);
UpdateState(UpdateState&&);
UpdateState& operator=(UpdateState&&);
~UpdateState();
// GOOGLE_UPDATE_NO_ERROR if the last check or update succeeded; otherwise,
// the nature of the failure.
GoogleUpdateErrorCode error_code = GOOGLE_UPDATE_NO_ERROR;
// The next version available or an empty string if either no update is
// available or an error occurred before the new version was discovered.
std::u16string new_version;
// S_OK if the last check or update succeeded; otherwise, the failing error
// from Google Update or COM.
HRESULT hresult = S_OK;
// If present, the process exit code from the failed run of the installer.
std::optional<int> installer_exit_code;
};
// Returns the state from the most recent completed update check or no value if
// no such check has taken place.
std::optional<UpdateState> GetLastUpdateState();
// A type of callback supplied by tests to provide a custom IGoogleUpdate3Web
// implementation (see src/google_update/google_update_idl.idl).
using GoogleUpdate3ClassFactory = base::RepeatingCallback<HRESULT(
Microsoft::WRL::ComPtr<IGoogleUpdate3Web>*)>;
// For use by tests that wish to provide a custom IGoogleUpdate3Web
// implementation independent of Google Update's.
void SetGoogleUpdateFactoryForTesting(
GoogleUpdate3ClassFactory google_update_factory);
void SetUpdateDriverTaskRunnerForTesting(
base::SingleThreadTaskRunner* task_runner);
#endif // CHROME_BROWSER_GOOGLE_GOOGLE_UPDATE_WIN_H_
|