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. 4 5 #ifndef CHROME_INSTALLER_GCAPI_GCAPI_H_ 6 #define CHROME_INSTALLER_GCAPI_GCAPI_H_ 7 8 #include <windows.h> 9 10 // Error conditions for GoogleChromeCompatibilityCheck(). 11 #define GCCC_ERROR_USERLEVELALREADYPRESENT (1 << 0) 12 #define GCCC_ERROR_SYSTEMLEVELALREADYPRESENT (1 << 1) 13 #define GCCC_ERROR_ACCESSDENIED (1 << 2) 14 #define GCCC_ERROR_OSNOTSUPPORTED (1 << 3) 15 #define GCCC_ERROR_ALREADYOFFERED (1 << 4) 16 #define GCCC_ERROR_INTEGRITYLEVEL (1 << 5) 17 18 // Error conditions for CanReactivateChrome(). 19 #define REACTIVATE_ERROR_NOTINSTALLED (1 << 0) 20 #define REACTIVATE_ERROR_NOTDORMANT (1 << 1) 21 #define REACTIVATE_ERROR_ALREADY_REACTIVATED (1 << 2) 22 #define REACTIVATE_ERROR_INVALID_INPUT (1 << 3) 23 #define REACTIVATE_ERROR_REACTIVATION_FAILED (1 << 4) 24 25 // Flags to indicate how GCAPI is invoked 26 #define GCAPI_INVOKED_STANDARD_SHELL (1 << 0) 27 #define GCAPI_INVOKED_UAC_ELEVATION (1 << 1) 28 29 #ifdef __cplusplus 30 extern "C" { 31 #endif 32 33 // The minimum number of days an installation can be dormant before reactivation 34 // may be offered. 35 const int kReactivationMinDaysDormant = 50; 36 37 // This function returns TRUE if Google Chrome should be offered. 38 // If the return is FALSE, the |reasons| DWORD explains why. If you don't care 39 // for the reason, you can pass NULL for |reasons|. 40 // |set_flag| indicates whether a flag should be set indicating that Chrome was 41 // offered within the last six months; if passed FALSE, this method will not 42 // set the flag even if Chrome can be offered. If passed TRUE, this method 43 // will set the flag only if Chrome can be offered. 44 // |shell_mode| should be set to one of GCAPI_INVOKED_STANDARD_SHELL or 45 // GCAPI_INVOKED_UAC_ELEVATION depending on whether this method is invoked 46 // from an elevated or non-elevated process. 47 BOOL __stdcall GoogleChromeCompatibilityCheck(BOOL set_flag, 48 int shell_mode, 49 DWORD* reasons); 50 51 // This function launches Google Chrome after a successful install. Make 52 // sure COM library is NOT initialized before you call this function (so if 53 // you called CoInitialize, call CoUninitialize before calling this function). 54 BOOL __stdcall LaunchGoogleChrome(); 55 56 // This function launches Google Chrome after a successful install, ensuring 57 // that any windows that it makes are shunted to the background. Make sure COM 58 // library is NOT initialized before you call this function (so if you called 59 // CoInitialize, call CoUninitialize before calling this function). 60 BOOL __stdcall LaunchGoogleChromeInBackground(); 61 62 // This function launches Google Chrome after a successful install at the given 63 // x,y coordinates with size height,length. Pass -1 for x and y to avoid moving 64 // the window. Pass -1 for width and height to avoid resizing the window. Set 65 // in_background to true to move Google Chrome behind all other windows or false 66 // to have it appear at the default z-order. Make sure that COM is NOT 67 // initialized before you call this function (so if you called CoInitialize, 68 // call CoUninitialize before calling this function). This call is synchronous, 69 // meaning it waits for Chrome to launch and appear to resize it before 70 // returning. 71 BOOL __stdcall LaunchGoogleChromeWithDimensions(int x, 72 int y, 73 int width, 74 int height, 75 bool in_background); 76 77 // This function returns the number of days since Google Chrome was last run by 78 // the current user. If both user-level and machine-wide installations are 79 // present on the system, it will return the lowest last-run-days count of 80 // the two. 81 // Returns -1 if Chrome is not installed, the last run date is in the future, 82 // or we are otherwise unable to determine how long since Chrome was last 83 // launched. 84 int __stdcall GoogleChromeDaysSinceLastRun(); 85 86 // Returns true if a vendor with the specified |brand_code| may offer 87 // reactivation at this time. Returns false if the vendor may not offer 88 // reactivation at this time, and places one of the REACTIVATE_ERROR_XXX values 89 // in |error_code| if |error_code| is non-null. 90 // |shell_mode| should be set to one of GCAPI_INVOKED_STANDARD_SHELL or 91 // GCAPI_INVOKED_UAC_ELEVATION depending on whether this method is invoked 92 // from an elevated or non-elevated process. 93 BOOL __stdcall CanOfferReactivation(const wchar_t* brand_code, 94 int shell_mode, 95 DWORD* error_code); 96 97 // Attempts to reactivate Chrome for the specified |brand_code|. Returns false 98 // if reactivation fails, and places one of the REACTIVATE_ERROR_XXX values 99 // in |error_code| if |error_code| is non-null. 100 // |shell_mode| should be set to one of GCAPI_INVOKED_STANDARD_SHELL or 101 // GCAPI_INVOKED_UAC_ELEVATION depending on whether this method is invoked 102 // from an elevated or non-elevated process. 103 BOOL __stdcall ReactivateChrome(wchar_t* brand_code, 104 int shell_mode, 105 DWORD* error_code); 106 107 // Function pointer type declarations to use with GetProcAddress. 108 typedef BOOL (__stdcall *GCCC_CompatibilityCheck)(BOOL, int, DWORD *); 109 typedef BOOL (__stdcall *GCCC_LaunchGC)(); 110 typedef BOOL (__stdcall *GCCC_LaunchGoogleChromeInBackground)(); 111 typedef BOOL (__stdcall *GCCC_LaunchGCWithDimensions)(int, int, int, int, bool); 112 typedef int (__stdcall *GCCC_GoogleChromeDaysSinceLastRun)(); 113 typedef BOOL (__stdcall *GCCC_CanOfferReactivation)(const wchar_t*, 114 int, 115 DWORD*); 116 typedef BOOL (__stdcall *GCCC_ReactivateChrome)(const wchar_t*, 117 int, 118 DWORD*); 119 120 #ifdef __cplusplus 121 } // extern "C" 122 #endif 123 124 #endif // CHROME_INSTALLER_GCAPI_GCAPI_H_ 125