Index: chrome/installer/mini_installer/mini_installer.cc |
diff --git a/chrome/installer/mini_installer/mini_installer.cc b/chrome/installer/mini_installer/mini_installer.cc |
index ea3add30b6f5757ce3321e9b3c7738b29e6ae08e..3cd054fda674d6ea09a70b5df3c57a999199b2eb 100644 |
--- a/chrome/installer/mini_installer/mini_installer.cc |
+++ b/chrome/installer/mini_installer/mini_installer.cc |
@@ -23,6 +23,7 @@ |
#include <windows.h> |
#include <shellapi.h> |
+#include <wchar.h> |
tommi (sloooow) - chröme
2012/07/12 08:11:31
out of curiosity, why is this needed?
erikwright (departed)
2012/07/16 20:13:11
Extreme IWYU. Obviously too extreme.
Done.
grt (UTC plus 2)
2012/07/23 11:31:12
If you added it because the type wchar_t is used i
|
#include "chrome/installer/mini_installer/appid.h" |
#include "chrome/installer/mini_installer/configuration.h" |
@@ -159,6 +160,7 @@ void SetInstallerFlags(const Configuration& configuration) { |
const REGSAM key_access = KEY_QUERY_VALUE | KEY_SET_VALUE; |
const HKEY root_key = |
configuration.is_system_level() ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; |
+ // This is ignored if multi-install is true. |
const wchar_t* app_guid = |
configuration.has_chrome_frame() ? |
google_update::kChromeFrameAppGuid : |
@@ -228,34 +230,34 @@ bool GetSetupExePathFromRegistry(const Configuration& configuration, |
const HKEY root_key = |
configuration.is_system_level() ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; |
RegKey key; |
- bool succeeded = false; |
- |
- // If this is a multi install, first try looking in the binaries for the path. |
- if (configuration.is_multi_install() && |
- OpenClientStateKey(root_key, google_update::kMultiInstallAppGuid, |
- KEY_QUERY_VALUE, &key)) { |
- succeeded = (key.ReadValue(kUninstallRegistryValueName, path, |
- size) == ERROR_SUCCESS); |
- } |
+ const int kMaxGuids = 10; |
grt (UTC plus 2)
2012/07/12 18:37:10
why not 4?
erikwright (departed)
2012/07/16 20:13:11
Done.
|
+ const wchar_t* app_guids[kMaxGuids] = {0}; |
grt (UTC plus 2)
2012/07/12 18:37:10
{0} -> {}
erikwright (departed)
2012/07/16 20:13:11
Done.
|
+ size_t guid_count = 0; |
+ |
+ // If this is a multi install, first try looking in the binaries for the path |
grt (UTC plus 2)
2012/07/12 18:37:10
"path" -> "path."
erikwright (departed)
2012/07/16 20:13:11
Done.
|
+ if (configuration.is_multi_install()) |
+ app_guids[guid_count++] = google_update::kMultiInstallAppGuid; |
// Failing that, look in Chrome Frame's client state key --chrome-frame was |
grt (UTC plus 2)
2012/07/12 18:37:10
"state key" -> "state key if"
erikwright (departed)
2012/07/16 20:13:11
Done.
|
// specified. |
- if (!succeeded && configuration.has_chrome_frame() && |
- OpenClientStateKey(root_key, google_update::kChromeFrameAppGuid, |
- KEY_QUERY_VALUE, &key)) { |
- succeeded = (key.ReadValue(kUninstallRegistryValueName, path, |
- size) == ERROR_SUCCESS); |
+ if (guid_count < kMaxGuids && configuration.has_chrome_frame()) |
+ app_guids[guid_count++] = google_update::kChromeFrameAppGuid; |
+ // Make a last-ditch effort to look in the Chrome and App Host client state |
+ // keys. |
+ if (guid_count < kMaxGuids) |
+ app_guids[guid_count++] = configuration.chrome_app_guid(); |
+ if (guid_count < kMaxGuids && configuration.has_app_host()) |
+ app_guids[guid_count++] = google_update::kChromeAppHostAppGuid; |
+ |
+ for (size_t i = 0; i < guid_count; ++i) { |
+ if (!OpenClientStateKey(root_key, app_guids[i], KEY_QUERY_VALUE, &key)) |
+ continue; |
+ |
+ if (key.ReadValue(kUninstallRegistryValueName, path, size) == ERROR_SUCCESS) |
+ return true; |
} |
- // Make a last-ditch effort to look in Chrome's client state key. |
- if (!succeeded && |
- OpenClientStateKey(root_key, configuration.chrome_app_guid(), |
- KEY_QUERY_VALUE, &key)) { |
- succeeded = (key.ReadValue(kUninstallRegistryValueName, path, |
- size) == ERROR_SUCCESS); |
- } |
- |
- return succeeded; |
+ return false; |
} |
// Calls CreateProcess with good default parameters and waits for the process |