Index: goopdate/app_manager.h |
diff --git a/goopdate/app_manager.h b/goopdate/app_manager.h |
deleted file mode 100644 |
index 12e862bd1411c3e13965ca40f555cc87c4cd14fb..0000000000000000000000000000000000000000 |
--- a/goopdate/app_manager.h |
+++ /dev/null |
@@ -1,254 +0,0 @@ |
-// Copyright 2007-2010 Google Inc. |
-// |
-// Licensed under the Apache License, Version 2.0 (the "License"); |
-// you may not use this file except in compliance with the License. |
-// You may obtain a copy of the License at |
-// |
-// http://www.apache.org/licenses/LICENSE-2.0 |
-// |
-// Unless required by applicable law or agreed to in writing, software |
-// distributed under the License is distributed on an "AS IS" BASIS, |
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
-// See the License for the specific language governing permissions and |
-// limitations under the License. |
-// ======================================================================== |
- |
-#ifndef OMAHA_GOOPDATE_APP_MANAGER_H_ |
-#define OMAHA_GOOPDATE_APP_MANAGER_H_ |
- |
-#include <windows.h> |
-#include <atlstr.h> |
-#include <vector> |
-#include "base/basictypes.h" |
-#include "omaha/base/synchronized.h" |
- |
-namespace omaha { |
- |
-class App; |
-class RegKey; |
- |
-typedef std::vector<CString> AppIdVector; |
- |
-// Manages the persistence of application state in the registry. |
-// All functions that operate on model objects assume the call is protected by |
-// the model lock. |
-// All public functions hold a registry access lock for the duration of registry |
-// accesses in that function. Unless otherwise noted, read operations may return |
-// inconsistent/unstable state in some cases. Examples include: |
-// * The app installer is running and modifying the registry (not all installers |
-// acquire this lock before modifying the registry). |
-// * Omaha is in the process of installing an app, and the read occurred between |
-// registry operations (i.e. after WritePreInstallData() but before |
-// WriteAppPersistentData(). |
-// If your operation absolutely needs consistent/stable state, use the functions |
-// that ensure this. |
-// All write functions assume that the lock returned by |
-// GetRegistryStableStateLock() is held. Reads do not require this lock to be |
-// held. |
-class AppManager { |
- public: |
- // These values are a public API. Do not remove or move existing values. |
- enum InstallerResult { |
- INSTALLER_RESULT_SUCCESS = 0, |
- INSTALLER_RESULT_FAILED_CUSTOM_ERROR = 1, |
- INSTALLER_RESULT_FAILED_MSI_ERROR = 2, |
- INSTALLER_RESULT_FAILED_SYSTEM_ERROR = 3, |
- INSTALLER_RESULT_EXIT_CODE = 4, |
- INSTALLER_RESULT_DEFAULT = INSTALLER_RESULT_EXIT_CODE, |
- INSTALLER_RESULT_MAX, |
- }; |
- |
- static HRESULT CreateInstance(bool is_machine); |
- static void DeleteInstance(); |
- |
- static AppManager* Instance(); |
- |
- // Reads the "pv" value from Google\Update\Clients\{app_guid}, and is used by |
- // the Update3WebControl. This method does not take any locks, and is not |
- // recommended for use in any other scenario. |
- static HRESULT ReadAppVersionNoLock(bool is_machine, const GUID& app_guid, |
- CString* version); |
- |
- bool IsAppRegistered(const GUID& app_guid) const; |
- bool IsAppUninstalled(const GUID& app_guid) const; |
- |
- // Adds all registered products to bundle. |
- HRESULT GetRegisteredApps(AppIdVector* app_ids) const; |
- |
- // Adds all uninstalled products to bundle. |
- HRESULT GetUninstalledApps(AppIdVector* app_ids) const; |
- |
- // Adds all OEM installed apps that user has accepted EULA either explicitly |
- // or implicitly. |
- HRESULT GetOemInstalledAndEulaAcceptedApps(AppIdVector* app_ids) const; |
- |
- // TODO(omaha3): Consider moving these two RegistrationUpdateHook functions |
- // out of this class. Instead, AppManager should expose a function to obtain |
- // the hook for each app. |
- |
- // CoCreates and runs the HookClsid for app_id. |
- HRESULT RunRegistrationUpdateHook(const CString& app_id) const; |
- |
- // CoCreates and runs HookClsids for registered products. |
- HRESULT RunAllRegistrationUpdateHooks() const; |
- |
- // Populates the app object with the persisted state stored in the registry. |
- HRESULT ReadAppPersistentData(App* app); |
- |
- // Populates the app object with the install time diff based on the install |
- // time stored in the registry. |
- // If the app is registered or has pv value, app's install time diff will be |
- // calculated based on InstallTime value from the registry, or 0 if the value |
- // is not there. For other cases, the install time diff will be -1 day. |
- void ReadAppInstallTimeDiff(App* app); |
- |
- // Populates the app object with the persisted state for an uninstalled app |
- // stored in the registry. |
- HRESULT ReadUninstalledAppPersistentData(App* app); |
- |
- // Sets dynamic install parameters that the installer or app may use. |
- // Call this method before calling the installer. |
- HRESULT WritePreInstallData(const App& app); |
- |
- // Reads Installer Result API values the installer may have written to the |
- // registry. Clears all values after reading. |
- void ReadInstallerResultApiValues(const GUID& app_guid, |
- InstallerResult* installer_result, |
- DWORD* installer_error, |
- DWORD* installer_extra_code1, |
- CString* installer_result_uistring, |
- CString* installer_success_launch_cmd); |
- |
- // Clears the Installer Result API values from the registry. |
- void ClearInstallerResultApiValues(const GUID& app_guid); |
- |
- // Reads the values the app wrote to the Clients key and stores them in the |
- // app object. Replaces existing values. |
- HRESULT ReadInstallerRegistrationValues(App* app); |
- |
- // Updates relevant values of the app object in the registry after a |
- // successful update check, which is either a "noupdate" response or an update |
- // available even if it will not be applied. |
- void PersistSuccessfulUpdateCheckResponse(const App& app, |
- bool is_update_available); |
- |
- // Persists relevant values of the app object in the registry after a |
- // successful install. |
- void PersistSuccessfulInstall(const App& app); |
- |
- // Copies product version and language from client key to client state key. |
- // Returns S_OK when the client key does not exist. |
- HRESULT SynchronizeClientState(const GUID& app_guid); |
- |
- // Updates application state after an update check request has been |
- // successfully sent to the server. |
- HRESULT PersistUpdateCheckSuccessfullySent( |
- const App& app, |
- int elapsed_seconds_since_day_start); |
- |
- // TODO(omaha3): Most of these methods should be eliminated or moved (i.e. to |
- // App) since we only want to write the registry in one or two functions. |
- // Can't make them all private in the meantime because unit tests use them. |
- |
- // Clears the OEM-installed flag for the apps. |
- void ClearOemInstalled(const AppIdVector& app_ids); |
- |
- // Obtains usage stats information from the stored information about update |
- // available events for the app. |
- void ReadUpdateAvailableStats(const GUID& app_guid, |
- DWORD* update_responses, |
- DWORD64* time_since_first_response_ms); |
- |
- // Removes the ClientState and ClientStateMedium keys for the application. |
- HRESULT RemoveClientState(const GUID& app_guid); |
- |
- // Returns a reference to the lock that ensures the registry is in a stable |
- // state (i.e. no app is being installed). Acquire this lock before calling |
- // read functions if you require a consistent/stable snapshot of the system |
- // (for example, to determine whether Omaha should install). Because this |
- // lock is held throughout app install, the Lock() call could block for |
- // seconds or more. |
- Lockable& GetRegistryStableStateLock() { return registry_stable_state_lock_; } |
- |
- // Gets the time since InstallTime was written. Returns 0 if InstallTime |
- // could not be read. This could occur if the app is not already installed or |
- // there is no valid install time in the registry, which can occur for apps |
- // installed before installtime was implemented. |
- uint32 GetInstallTimeDiffSec(const GUID& app_guid) const; |
- |
-#if 0 |
- HRESULT RegisterProduct(const GUID& product_guid, |
- const CString& product_name); |
- HRESULT UnregisterProduct(const GUID& product_guid); |
-#endif |
- |
- bool IsAppRegistered(const CString& app_id) const; |
- bool IsAppUninstalled(const CString& app_id) const; |
- bool IsAppOemInstalledAndEulaAccepted(const CString& app_id) const; |
- |
- private: |
- explicit AppManager(bool is_machine); |
- ~AppManager() {} |
- |
- bool InitializeRegistryLock(); |
- |
- CString GetClientKeyName(const GUID& app_guid) const; |
- CString GetClientStateKeyName(const GUID& app_guid) const; |
- CString GetClientStateMediumKeyName(const GUID& app_guid) const; |
- |
- // Opens the app's Client key for read access. |
- HRESULT OpenClientKey(const GUID& app_guid, RegKey* client_key) const; |
- // Opens the app's ClientState key with the specified access. |
- HRESULT OpenClientStateKey(const GUID& app_guid, |
- REGSAM sam_desired, |
- RegKey* client_state_key) const; |
- // Creates the app's ClientState key. |
- HRESULT CreateClientStateKey(const GUID& app_guid, RegKey* client_state_key); |
- |
- // Write the TT Token with what the server returned. |
- HRESULT SetTTToken(const App& app); |
- |
- // Stores information about the update available event for the app. |
- // Call each time an update is available. |
- void UpdateUpdateAvailableStats(const GUID& app_guid); |
- |
- HRESULT ClearInstallationId(const App& app); |
- |
- // Writes the day start time when last active ping/roll call happened to |
- // registry. |
- void SetLastPingDayStartTime(const App& app, |
- int elapsed_seconds_since_day_start); |
- |
- bool IsRegistryStableStateLockedByCaller() const { |
- return ::GetCurrentThreadId() == registry_stable_state_lock_.GetOwner(); |
- } |
- |
- const bool is_machine_; |
- |
- // Locks. |
- // If it is going to be acquired, registry_stable_state_lock_ should always be |
- // acquired before registry_access_lock_. |
- // registry_access_lock_ is only ever acquired by this class and app |
- // installers. |
- |
- // Ensures that each function's access is on a stable snapshot of the |
- // registry, excluding values modified by the installer. |
- GLock registry_access_lock_; |
- |
- // Ensures the registry is in a stable state (i.e. all apps are fully |
- // installed and no installer is running that might be modifying the |
- // registry.) Uninstalls are still an issue unless the app uninstaller informs |
- // Omaha that it is uninstalling the app. |
- LLock registry_stable_state_lock_; |
- |
- static AppManager* instance_; |
- |
- friend class RunRegistrationUpdateHooksFunc; |
- friend class AppManagerTestBase; |
- |
- DISALLOW_COPY_AND_ASSIGN(AppManager); |
-}; |
- |
-} // namespace omaha |
- |
-#endif // OMAHA_GOOPDATE_APP_MANAGER_H_ |