1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file. 4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 5bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#ifndef CHROME_BROWSER_GOOGLE_GOOGLE_UPDATE_H_ 6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#define CHROME_BROWSER_GOOGLE_GOOGLE_UPDATE_H_ 7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#pragma once 8bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 9bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include <string> 10bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 11bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/basictypes.h" 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/ref_counted.h" 13bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#if defined(OS_WIN) 14bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "google_update_idl.h" 15bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#endif 16bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 17bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass MessageLoop; 18bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsennamespace views { 19bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass Window; 20bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 21bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 22bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// The status of the upgrade. UPGRADE_STARTED and UPGRADE_CHECK_STARTED are 23bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// internal states and will not be reported as results to the listener. 24bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenenum GoogleUpdateUpgradeResult { 25bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // The upgrade has started. 26bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen UPGRADE_STARTED = 0, 27bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // A check for upgrade has been initiated. 28bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen UPGRADE_CHECK_STARTED, 29bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // An update is available. 30bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen UPGRADE_IS_AVAILABLE, 31bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // The upgrade happened successfully. 32bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen UPGRADE_SUCCESSFUL, 33bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // No need to upgrade, we are up to date. 34bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen UPGRADE_ALREADY_UP_TO_DATE, 35bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // An error occurred. 36bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen UPGRADE_ERROR, 37bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}; 38bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 39bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenenum GoogleUpdateErrorCode { 40bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // The upgrade completed successfully (or hasn't been started yet). 41bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GOOGLE_UPDATE_NO_ERROR = 0, 42bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Google Update only supports upgrading if Chrome is installed in the default 43bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // location. This error will appear for developer builds and with 44bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // installations unzipped to random locations. 45bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen CANNOT_UPGRADE_CHROME_IN_THIS_DIRECTORY, 46bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Failed to create Google Update JobServer COM class. 47bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GOOGLE_UPDATE_JOB_SERVER_CREATION_FAILED, 48bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Failed to create Google Update OnDemand COM class. 49bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GOOGLE_UPDATE_ONDEMAND_CLASS_NOT_FOUND, 50bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Google Update OnDemand COM class reported an error during a check for 51bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // update (or while upgrading). 52bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GOOGLE_UPDATE_ONDEMAND_CLASS_REPORTED_ERROR, 53bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // A call to GetResults failed. 54bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GOOGLE_UPDATE_GET_RESULT_CALL_FAILED, 55bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // A call to GetVersionInfo failed. 56bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GOOGLE_UPDATE_GET_VERSION_INFO_FAILED, 57bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // An error occurred while upgrading (or while checking for update). 58bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Check the Google Update log in %TEMP% for more details. 59bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GOOGLE_UPDATE_ERROR_UPDATING, 6072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Updates can not be downloaded because the administrator has disabled them. 6172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen GOOGLE_UPDATE_DISABLED_BY_POLICY, 62bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}; 63bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 64bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// The GoogleUpdateStatusListener interface is used by components to receive 65bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// notifications about the results of an Google Update operation. 66bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass GoogleUpdateStatusListener { 67bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 68bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // This function is called when Google Update has finished its operation and 69bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // wants to notify us about the results. |results| represents what the end 70bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // state is, |error_code| represents what error occurred and |version| 71bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // specifies what new version Google Update detected (or installed). This 72bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // value can be a blank string, if the version tag in the Update{} block 73bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // (in Google Update's server config for Chrome) is blank. 74bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void OnReportResults(GoogleUpdateUpgradeResult results, 75bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GoogleUpdateErrorCode error_code, 76bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::wstring& version) = 0; 77bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}; 78bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 79bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen//////////////////////////////////////////////////////////////////////////////// 80bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// 81bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// The Google Update class is responsible for communicating with Google Update 82bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// and get it to perform operations on our behalf (for example, CheckForUpdate). 83bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// This class will report back to its parent via the GoogleUpdateStatusListener 84bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// interface and will delete itself after reporting back. 85bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// 86bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen//////////////////////////////////////////////////////////////////////////////// 87bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass GoogleUpdate : public base::RefCountedThreadSafe<GoogleUpdate> { 88bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 89bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GoogleUpdate(); 90bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 91bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Ask Google Update to see if a new version is available. If the parameter 92bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // |install_if_newer| is true then Google Update will also install that new 93bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // version. 94bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // |window| should point to a foreground window. This is needed to ensure 95bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // that Vista/Windows 7 UAC prompts show up in the foreground. It may also 96bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // be null. 97bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void CheckForUpdate(bool install_if_newer, views::Window* window); 98bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 99bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Pass NULL to clear the listener 100bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void set_status_listener(GoogleUpdateStatusListener* listener) { 101bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen listener_ = listener; 102bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 103bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 104bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private: 105bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen friend class base::RefCountedThreadSafe<GoogleUpdate>; 106bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 107bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual ~GoogleUpdate(); 108bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 109bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// The chromeos implementation is in browser/chromeos/google_update.cpp 110bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 111bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#if defined(OS_WIN) 112bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 113bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // This function reports failure from the Google Update operation to the 114bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // listener. 115bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Note, after this function completes, this object will have deleted itself. 116bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool ReportFailure(HRESULT hr, GoogleUpdateErrorCode error_code, 117bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MessageLoop* main_loop); 118bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 119bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#endif 120bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 121bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // We need to run the update check on another thread than the main thread, and 122bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // therefore CheckForUpdate will delegate to this function. |main_loop| points 123bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // to the message loop that we want the response to come from. 124bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // |window| should point to a foreground window. This is needed to ensure that 125bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Vista/Windows 7 UAC prompts show up in the foreground. It may also be null. 126bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool InitiateGoogleUpdateCheck(bool install_if_newer, views::Window* window, 127bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MessageLoop* main_loop); 128bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 129bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // This function reports the results of the GoogleUpdate operation to the 130bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // listener. If results indicates an error, the error_code will indicate which 131bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // error occurred. 132bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Note, after this function completes, this object will have deleted itself. 133bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void ReportResults(GoogleUpdateUpgradeResult results, 134bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GoogleUpdateErrorCode error_code); 135bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 136bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Which version string Google Update found (if a new one was available). 137bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Otherwise, this will be blank. 138bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::wstring version_available_; 139bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 140bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // The listener who is interested in finding out the result of the operation. 141bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GoogleUpdateStatusListener* listener_; 142bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 143bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DISALLOW_COPY_AND_ASSIGN(GoogleUpdate); 144bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}; 145bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 146bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#endif // CHROME_BROWSER_GOOGLE_GOOGLE_UPDATE_H_ 147