// Copyright 2010-2020, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//     * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

// The custom actions created for installing the IME.

#ifndef MOZC_WIN32_CUSTOM_ACTION_CUSTOM_ACTION_H_
#define MOZC_WIN32_CUSTOM_ACTION_CUSTOM_ACTION_H_

// clang-format off
#include <windows.h>
#include <msi.h>
// clang-format on

// Ensures that "ALL APPLICATION PACKAGES" group has read/execute accesses
// to server, renderer, and TIP DLL files.
UINT __stdcall EnsureAllApplicationPackagesPermisssions(MSIHANDLE msi_handle);

// Makes ieuser.exe update the cache of the elevation policies.
UINT __stdcall CallIERefreshElevationPolicy(MSIHANDLE msi_handle);

// Install Mozc as an IME.
UINT __stdcall InstallIME(MSIHANDLE msi_handle);

// A rollback custom action for InstallIME.
UINT __stdcall InstallIMERollback(MSIHANDLE msi_handle);

// Unregister Mozc from IMEs.
UINT __stdcall UninstallIME(MSIHANDLE msi_handle);

// A rollback custom action for UninstallIME.
UINT __stdcall UninstallIMERollback(MSIHANDLE msi_handle);

// Install Mozc as a TIP.
UINT __stdcall RegisterTIP(MSIHANDLE msi_handle);

// A rollback custom action for RegisterTIP.
UINT __stdcall RegisterTIPRollback(MSIHANDLE msi_handle);

// Install Mozc as a TIP.
UINT __stdcall UnregisterTIP(MSIHANDLE msi_handle);

// A rollback custom action for UnregisterTIP.
UINT __stdcall UnregisterTIPRollback(MSIHANDLE msi_handle);

// Opens the uninstall survey page with the default browser.
UINT __stdcall OpenUninstallSurveyPage(MSIHANDLE msi_handle);

// Shuts down mozc_server.exe and mozc_renderer.exe to remove their files.
UINT __stdcall ShutdownServer(MSIHANDLE msi_handle);

// Restores the IME environment for the current user.  See the comment in
// uninstall_helper.h for details.
UINT __stdcall RestoreUserIMEEnvironment(MSIHANDLE msi_handle);

// Ensures that Mozc is disabled for the service account.  See the comment in
// uninstall_helper.h for details.
UINT __stdcall EnsureIMEIsDisabledForServiceAccount(MSIHANDLE msi_handle);

// Hides the cancel button on a progress dialog shown by the installer.
UINT __stdcall HideCancelButton(MSIHANDLE msi_handle);

// Check the installation condition and write the result code to the registry
// for Omaha if any error occurs.
UINT __stdcall InitialInstallation(MSIHANDLE msi_handle);

// Write the success code to the registry for Omaha.
UINT __stdcall InitialInstallationCommit(MSIHANDLE msi_handle);

// Saves omaha's ap value for WriteApValue, WriteApValueRollback, and
// RestoreServiceState.
// Since they are executed as deferred customs actions and most properties
// cannot be accessible from a deferred custom action, it is necessary to store
// these data explictly to CustomCationData.
UINT __stdcall SaveCustomActionData(MSIHANDLE msi_handle);

// Restore the settings of the cache service as it was.
// This custom action may start the cache service if needed.
UINT __stdcall RestoreServiceState(MSIHANDLE msi_handle);

// Ensure the cache service stopped. You have to stop the cache service before
// you replace the GoogleIMEJaCacheService.exe.
UINT __stdcall StopCacheService(MSIHANDLE msi_handle);

// Writes omaha's ap value for changing the user's channel.
UINT __stdcall WriteApValue(MSIHANDLE msi_handle);

// A rollback custom action for WriteApValue.
UINT __stdcall WriteApValueRollback(MSIHANDLE msi_handle);

#endif  // MOZC_WIN32_CUSTOM_ACTION_CUSTOM_ACTION_H_
