1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CHROME_BROWSER_GOOGLE_GOOGLE_UPDATE_WIN_H_
6 #define CHROME_BROWSER_GOOGLE_GOOGLE_UPDATE_WIN_H_
8 #include "base/basictypes.h"
9 #include "base/memory/ref_counted.h"
10 #include "base/strings/string16.h"
11 #include "google_update/google_update_idl.h"
21 // The status of the upgrade. UPGRADE_STARTED and UPGRADE_CHECK_STARTED are
22 // internal states and will not be reported as results to the listener.
23 // These values are used for a histogram. Do not reorder.
24 enum GoogleUpdateUpgradeResult
{
25 // The upgrade has started.
27 // A check for upgrade has been initiated.
28 UPGRADE_CHECK_STARTED
= 1,
29 // An update is available.
30 UPGRADE_IS_AVAILABLE
= 2,
31 // The upgrade happened successfully.
32 UPGRADE_SUCCESSFUL
= 3,
33 // No need to upgrade, Chrome is up to date.
34 UPGRADE_ALREADY_UP_TO_DATE
= 4,
40 // These values are used for a histogram. Do not reorder.
41 enum GoogleUpdateErrorCode
{
42 // The upgrade completed successfully (or hasn't been started yet).
43 GOOGLE_UPDATE_NO_ERROR
= 0,
44 // Google Update only supports upgrading if Chrome is installed in the default
45 // location. This error will appear for developer builds and with
46 // installations unzipped to random locations.
47 CANNOT_UPGRADE_CHROME_IN_THIS_DIRECTORY
= 1,
48 // Failed to create Google Update JobServer COM class.
49 GOOGLE_UPDATE_JOB_SERVER_CREATION_FAILED
= 2,
50 // Failed to create Google Update OnDemand COM class.
51 GOOGLE_UPDATE_ONDEMAND_CLASS_NOT_FOUND
= 3,
52 // Google Update OnDemand COM class reported an error during a check for
53 // update (or while upgrading).
54 GOOGLE_UPDATE_ONDEMAND_CLASS_REPORTED_ERROR
= 4,
55 // A call to GetResults failed.
56 GOOGLE_UPDATE_GET_RESULT_CALL_FAILED
= 5,
57 // A call to GetVersionInfo failed.
58 GOOGLE_UPDATE_GET_VERSION_INFO_FAILED
= 6,
59 // An error occurred while upgrading (or while checking for update).
60 // Check the Google Update log in %TEMP% for more details.
61 GOOGLE_UPDATE_ERROR_UPDATING
= 7,
62 // Updates can not be downloaded because the administrator has disabled all
64 GOOGLE_UPDATE_DISABLED_BY_POLICY
= 8,
65 // Updates can not be downloaded because the administrator has disabled
66 // manual (on-demand) updates. Automatic background updates are allowed.
67 GOOGLE_UPDATE_DISABLED_BY_POLICY_AUTO_ONLY
= 9,
71 // The GoogleUpdateStatusListener interface is used by components to receive
72 // notifications about the results of an Google Update operation.
73 class GoogleUpdateStatusListener
{
75 // This function is called when Google Update has finished its operation and
76 // wants to notify us about the results. |results| represents what the end
77 // state is, |error_code| represents what error occurred, |error_message| is a
78 // string version of the same (might be blank) and |version| specifies what
79 // new version Google Update detected (or installed). This value can be a
80 // blank string, if the version tag in the Update{} block (in Google Update's
81 // server config for Chrome) is blank.
82 virtual void OnReportResults(GoogleUpdateUpgradeResult results
,
83 GoogleUpdateErrorCode error_code
,
84 const base::string16
& error_message
,
85 const base::string16
& version
) = 0;
88 ////////////////////////////////////////////////////////////////////////////////
90 // The Google Update class is responsible for communicating with Google Update
91 // and get it to perform operations on our behalf (for example, CheckForUpdate).
92 // This class will report back to its parent via the GoogleUpdateStatusListener
93 // interface and will delete itself after reporting back.
95 ////////////////////////////////////////////////////////////////////////////////
96 class GoogleUpdate
: public base::RefCountedThreadSafe
<GoogleUpdate
> {
100 // Ask Google Update to see if a new version is available. If the parameter
101 // |install_if_newer| is true then Google Update will also install that new
103 // |window| should point to a foreground window. This is needed to ensure
104 // that Vista/Windows 7 UAC prompts show up in the foreground. It may also
106 void CheckForUpdate(bool install_if_newer
, HWND window
);
108 // Pass NULL to clear the listener
109 void set_status_listener(GoogleUpdateStatusListener
* listener
) {
110 listener_
= listener
;
114 friend class base::RefCountedThreadSafe
<GoogleUpdate
>;
116 virtual ~GoogleUpdate();
118 // This function reports failure from the Google Update operation to the
120 // Note, after this function completes, this object will have deleted itself.
121 bool ReportFailure(HRESULT hr
, GoogleUpdateErrorCode error_code
,
122 const base::string16
& error_message
,
123 base::MessageLoop
* main_loop
);
125 // The update check needs to run on another thread than the main thread, and
126 // therefore CheckForUpdate will delegate to this function. |main_loop| points
127 // to the message loop that the response must come from.
128 // |window| should point to a foreground window. This is needed to ensure that
129 // Vista/Windows 7 UAC prompts show up in the foreground. It may also be null.
130 void InitiateGoogleUpdateCheck(bool install_if_newer
, HWND window
,
131 base::MessageLoop
* main_loop
);
133 // This function reports the results of the GoogleUpdate operation to the
134 // listener. If results indicates an error, the |error_code| and
135 // |error_message| will indicate which error occurred.
136 // Note, after this function completes, this object will have deleted itself.
137 void ReportResults(GoogleUpdateUpgradeResult results
,
138 GoogleUpdateErrorCode error_code
,
139 const base::string16
& error_message
);
141 // Which version string Google Update found (if a new one was available).
142 // Otherwise, this will be blank.
143 base::string16 version_available_
;
145 // The listener who is interested in finding out the result of the operation.
146 GoogleUpdateStatusListener
* listener_
;
148 DISALLOW_COPY_AND_ASSIGN(GoogleUpdate
);
151 #endif // CHROME_BROWSER_GOOGLE_GOOGLE_UPDATE_WIN_H_