summaryrefslogtreecommitdiffstats
path: root/cloud_print
diff options
context:
space:
mode:
authorvitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-23 05:48:38 +0000
committervitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-23 05:48:38 +0000
commitf41da18890d075d126fbef0fc1f4e5b973d2d802 (patch)
treee16f0d51350c2719cc88b2c12ef647c945561be6 /cloud_print
parentde9f3e4cb330674fa2247199316e886588facad5 (diff)
downloadchromium_src-f41da18890d075d126fbef0fc1f4e5b973d2d802.zip
chromium_src-f41da18890d075d126fbef0fc1f4e5b973d2d802.tar.gz
chromium_src-f41da18890d075d126fbef0fc1f4e5b973d2d802.tar.bz2
Moved more installer related code to cloud_print/common.
R=gene Review URL: https://chromiumcodereview.appspot.com/14358018 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@195734 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cloud_print')
-rw-r--r--cloud_print/cloud_print.gyp11
-rw-r--r--cloud_print/common/common.gyp21
-rw-r--r--cloud_print/common/win/install_utils.cc35
-rw-r--r--cloud_print/common/win/install_utils.h6
-rw-r--r--cloud_print/service/service.gyp1
-rw-r--r--cloud_print/virtual_driver/win/install/setup.cc33
-rw-r--r--cloud_print/virtual_driver/win/install/virtual_driver_install.gyp2
7 files changed, 64 insertions, 45 deletions
diff --git a/cloud_print/cloud_print.gyp b/cloud_print/cloud_print.gyp
index d5740bd..561a51d 100644
--- a/cloud_print/cloud_print.gyp
+++ b/cloud_print/cloud_print.gyp
@@ -105,16 +105,5 @@
},
},
},
- {
- 'target_name': 'cloud_print_install_lib',
- 'type': 'static_library',
- 'dependencies': [
- '<(DEPTH)/base/base.gyp:base',
- ],
- 'sources': [
- '<(DEPTH)/cloud_print/common/win/install_utils.cc',
- '<(DEPTH)/cloud_print/common/win/install_utils.h',
- ],
- },
],
}
diff --git a/cloud_print/common/common.gyp b/cloud_print/common/common.gyp
new file mode 100644
index 0000000..6d33c08
--- /dev/null
+++ b/cloud_print/common/common.gyp
@@ -0,0 +1,21 @@
+# Copyright 2013 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+{
+ 'variables': {
+ 'chromium_code': 1,
+ },
+ 'targets': [
+ {
+ 'target_name': 'cloud_print_install_lib',
+ 'type': 'static_library',
+ 'dependencies': [
+ '<(DEPTH)/base/base.gyp:base',
+ ],
+ 'sources': [
+ '<(DEPTH)/cloud_print/common/win/install_utils.cc',
+ '<(DEPTH)/cloud_print/common/win/install_utils.h',
+ ],
+ },
+ ],
+}
diff --git a/cloud_print/common/win/install_utils.cc b/cloud_print/common/win/install_utils.cc
index 2fdf718..15c55b2 100644
--- a/cloud_print/common/win/install_utils.cc
+++ b/cloud_print/common/win/install_utils.cc
@@ -7,9 +7,11 @@
#include <windows.h>
#include "base/command_line.h"
+#include "base/file_util.h"
#include "base/file_version_info_win.h"
#include "base/files/file_path.h"
#include "base/path_service.h"
+#include "base/process_util.h"
#include "base/win/registry.h"
namespace cloud_print {
@@ -30,7 +32,9 @@ const wchar_t kRegValueInstallerResultUIString[] = L"InstallerResultUIString";
const wchar_t kUninstallKey[] =
L"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\";
const wchar_t kInstallLocation[] = L"InstallLocation";
+const wchar_t kUninstallString[] = L"UninstallString";
const wchar_t kDisplayVersion[] = L"DisplayVersion";
+const wchar_t kDisplayIcon[] = L"DisplayIcon";
const wchar_t kDisplayName[] = L"DisplayName";
const wchar_t kPublisher[] = L"Publisher";
const wchar_t kNoModify[] = L"NoModify";
@@ -118,7 +122,7 @@ void CreateUninstallKey(const string16& uninstall_id,
CommandLine uninstall_command(unstall_binary);
uninstall_command.AppendSwitch(uninstall_switch);
- key.WriteValue(kUninstallKey,
+ key.WriteValue(kUninstallString,
uninstall_command.GetCommandLineString().c_str());
key.WriteValue(kInstallLocation,
unstall_binary.DirName().value().c_str());
@@ -137,6 +141,7 @@ void CreateUninstallKey(const string16& uninstall_id,
LOG(ERROR) << "Unable to get version string";
}
key.WriteValue(kDisplayName, product_name.c_str());
+ key.WriteValue(kDisplayIcon, unstall_binary.value().c_str());
key.WriteValue(kNoModify, 1);
key.WriteValue(kNoRepair, 1);
}
@@ -159,5 +164,33 @@ base::FilePath GetInstallLocation(const string16& uninstall_id) {
return base::FilePath(install_path_value);
}
+void DeleteProgramDir(const std::string& delete_switch) {
+ base::FilePath installer_source;
+ if (!PathService::Get(base::FILE_EXE, &installer_source))
+ return;
+ // Deletes only subdirs of program files.
+ if (!IsProgramsFilesParent(installer_source))
+ return;
+ base::FilePath temp_path;
+ if (!file_util::CreateTemporaryFile(&temp_path))
+ return;
+ file_util::CopyFile(installer_source, temp_path);
+ file_util::DeleteAfterReboot(temp_path);
+ CommandLine command_line(temp_path);
+ command_line.AppendSwitchPath(delete_switch, installer_source.DirName());
+ base::LaunchOptions options;
+ base::ProcessHandle process_handle;
+ if (!base::LaunchProcess(command_line, options, &process_handle)) {
+ LOG(ERROR) << "Unable to launch child uninstall.";
+ }
+}
+
+bool IsProgramsFilesParent(const base::FilePath& path) {
+ base::FilePath program_files;
+ if (!PathService::Get(base::DIR_PROGRAM_FILESX86, &program_files))
+ return false;
+ return program_files.IsParent(path);
+}
+
} // namespace cloud_print
diff --git a/cloud_print/common/win/install_utils.h b/cloud_print/common/win/install_utils.h
index 054e787..e4387d4 100644
--- a/cloud_print/common/win/install_utils.h
+++ b/cloud_print/common/win/install_utils.h
@@ -34,6 +34,12 @@ void DeleteUninstallKey(const string16& uninstall_id);
// Returns install location retrieved from control panel uninstall key.
base::FilePath GetInstallLocation(const string16& uninstall_id);
+// Returns install location retrieved from control panel uninstall key.
+void DeleteProgramDir(const std::string& delete_switch);
+
+// Returns true if path is part of program files.
+bool IsProgramsFilesParent(const base::FilePath& path);
+
} // namespace cloud_print
#endif // CLOUD_PRINT_COMMON_INSTALL_UTILS_H_
diff --git a/cloud_print/service/service.gyp b/cloud_print/service/service.gyp
index 7cbde1b..9b5bb5bef 100644
--- a/cloud_print/service/service.gyp
+++ b/cloud_print/service/service.gyp
@@ -127,6 +127,7 @@
'win/service_resources.gypi'
],
'dependencies': [
+ '<(DEPTH)/cloud_print/common/common.gyp:cloud_print_install_lib',
'cloud_print_service_lib',
],
'msvs_settings': {
diff --git a/cloud_print/virtual_driver/win/install/setup.cc b/cloud_print/virtual_driver/win/install/setup.cc
index fbc297e..4cde7a9 100644
--- a/cloud_print/virtual_driver/win/install/setup.cc
+++ b/cloud_print/virtual_driver/win/install/setup.cc
@@ -453,44 +453,13 @@ HRESULT UnregisterVirtualDriver() {
return hr;
}
-HRESULT DeleteProgramDir(const base::FilePath& installer_source, bool wait) {
- base::FilePath temp_path;
- if (file_util::CreateTemporaryFile(&temp_path)) {
- file_util::CopyFile(installer_source, temp_path);
- file_util::DeleteAfterReboot(temp_path);
- CommandLine command_line(temp_path);
- command_line.AppendSwitchPath(kDelete, installer_source.DirName());
- base::LaunchOptions options;
- options.wait = wait;
- base::ProcessHandle process_handle;
- if (!base::LaunchProcess(command_line, options, &process_handle)) {
- LOG(ERROR) << "Unable to launch child uninstall.";
- return HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED);
- }
- if (wait) {
- int exit_code = -1;
- base::TerminationStatus status =
- base::GetTerminationStatus(process_handle, &exit_code);
- if (status == base::TERMINATION_STATUS_NORMAL_TERMINATION) {
- return exit_code;
- } else {
- LOG(ERROR) << "Improper termination of uninstall. " << status;
- return E_FAIL;
- }
- }
- }
- return S_OK;
-}
-
HRESULT DoUninstall() {
DeleteGoogleUpdateKeys(kGoogleUpdateProductId);
HRESULT result = UnregisterVirtualDriver();
if (FAILED(result))
return result;
DeleteUninstallKey(kUninstallId);
- base::FilePath installer_source;
- if (PathService::Get(base::FILE_EXE, &installer_source))
- return DeleteProgramDir(installer_source, false);
+ DeleteProgramDir(kDelete);
return S_OK;
}
diff --git a/cloud_print/virtual_driver/win/install/virtual_driver_install.gyp b/cloud_print/virtual_driver/win/install/virtual_driver_install.gyp
index 35c2b66..6180806 100644
--- a/cloud_print/virtual_driver/win/install/virtual_driver_install.gyp
+++ b/cloud_print/virtual_driver/win/install/virtual_driver_install.gyp
@@ -22,7 +22,7 @@
'dependencies': [
'../virtual_driver.gyp:virtual_driver_lib',
'<(DEPTH)/base/base.gyp:base',
- '<(DEPTH)/cloud_print/cloud_print.gyp:cloud_print_install_lib',
+ '<(DEPTH)/cloud_print/common/common.gyp:cloud_print_install_lib',
'<(DEPTH)/cloud_print/cloud_print.gyp:cloud_print_version_resources',
'virtual_driver_setup_resources',
],