OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/installer/mini_installer/configuration.h" | 5 #include "chrome/installer/mini_installer/configuration.h" |
6 | 6 |
7 #include <windows.h> | 7 #include <windows.h> |
8 #include <shellapi.h> // NOLINT | 8 #include <shellapi.h> // NOLINT |
9 #include <stddef.h> | 9 #include <stddef.h> |
10 | 10 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
50 void Configuration::Clear() { | 50 void Configuration::Clear() { |
51 if (args_ != NULL) { | 51 if (args_ != NULL) { |
52 ::LocalFree(args_); | 52 ::LocalFree(args_); |
53 args_ = NULL; | 53 args_ = NULL; |
54 } | 54 } |
55 chrome_app_guid_ = google_update::kAppGuid; | 55 chrome_app_guid_ = google_update::kAppGuid; |
56 command_line_ = NULL; | 56 command_line_ = NULL; |
57 operation_ = INSTALL_PRODUCT; | 57 operation_ = INSTALL_PRODUCT; |
58 argument_count_ = 0; | 58 argument_count_ = 0; |
59 is_system_level_ = false; | 59 is_system_level_ = false; |
60 is_side_by_side_ = false; | |
61 is_updating_multi_chrome_ = false; | 60 is_updating_multi_chrome_ = false; |
62 has_invalid_switch_ = false; | 61 has_invalid_switch_ = false; |
63 previous_version_ = NULL; | 62 previous_version_ = NULL; |
64 } | 63 } |
65 | 64 |
66 // |command_line| is shared with this instance in the sense that this | 65 // |command_line| is shared with this instance in the sense that this |
67 // instance may refer to it at will throughout its lifetime, yet it will | 66 // instance may refer to it at will throughout its lifetime, yet it will |
68 // not release it. | 67 // not release it. |
69 bool Configuration::ParseCommandLine(const wchar_t* command_line) { | 68 bool Configuration::ParseCommandLine(const wchar_t* command_line) { |
70 command_line_ = command_line; | 69 command_line_ = command_line; |
71 args_ = ::CommandLineToArgvW(command_line_, &argument_count_); | 70 args_ = ::CommandLineToArgvW(command_line_, &argument_count_); |
72 if (!args_) | 71 if (!args_) |
73 return false; | 72 return false; |
74 | 73 |
75 for (int i = 1; i < argument_count_; ++i) { | 74 for (int i = 1; i < argument_count_; ++i) { |
76 if (0 == ::lstrcmpi(args_[i], L"--system-level")) { | 75 if (0 == ::lstrcmpi(args_[i], L"--system-level")) |
77 is_system_level_ = true; | 76 is_system_level_ = true; |
78 #if defined(GOOGLE_CHROME_BUILD) | 77 #if defined(GOOGLE_CHROME_BUILD) |
79 } else if (0 == ::lstrcmpi(args_[i], L"--chrome-sxs")) { | 78 else if (0 == ::lstrcmpi(args_[i], L"--chrome-sxs")) |
80 is_side_by_side_ = true; | |
81 chrome_app_guid_ = google_update::kSxSAppGuid; | 79 chrome_app_guid_ = google_update::kSxSAppGuid; |
82 #endif | 80 #endif |
83 } else if (0 == ::lstrcmpi(args_[i], L"--cleanup")) { | 81 else if (0 == ::lstrcmpi(args_[i], L"--cleanup")) |
84 operation_ = CLEANUP; | 82 operation_ = CLEANUP; |
85 } else if (0 == ::lstrcmpi(args_[i], L"--chrome-frame")) { | 83 else if (0 == ::lstrcmpi(args_[i], L"--chrome-frame")) |
86 has_invalid_switch_ = true; | 84 has_invalid_switch_ = true; |
87 } | |
88 } | 85 } |
89 | 86 |
90 if (!is_system_level_) | 87 if (!is_system_level_) |
91 is_system_level_ = GetGoogleUpdateIsMachineEnvVar(); | 88 is_system_level_ = GetGoogleUpdateIsMachineEnvVar(); |
92 | 89 |
93 is_updating_multi_chrome_ = IsUpdatingMultiChrome(); | 90 is_updating_multi_chrome_ = IsUpdatingMultiChrome(); |
94 | 91 |
95 return true; | 92 return true; |
96 } | 93 } |
97 | 94 |
(...skipping 21 matching lines...) Expand all Loading... |
119 | 116 |
120 // The string must be terminated. | 117 // The string must be terminated. |
121 if (version_string[version_len - 1]) | 118 if (version_string[version_len - 1]) |
122 return; | 119 return; |
123 | 120 |
124 previous_version_ = version_string; | 121 previous_version_ = version_string; |
125 } | 122 } |
126 | 123 |
127 bool Configuration::IsUpdatingMultiChrome() const { | 124 bool Configuration::IsUpdatingMultiChrome() const { |
128 #if defined(GOOGLE_CHROME_BUILD) | 125 #if defined(GOOGLE_CHROME_BUILD) |
129 // SxS/canary does not support multi-install. | 126 // Only primary Chrome installs supported multi-install (not canary/SxS). |
130 if (is_side_by_side_) | 127 if (chrome_app_guid_ != google_update::kAppGuid) |
131 return false; | 128 return false; |
132 | 129 |
133 // Is Chrome already installed as multi-install? | 130 // Is Chrome already installed as multi-install? |
134 const HKEY root = is_system_level_ ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; | 131 const HKEY root = is_system_level_ ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; |
135 StackString<128> value; | 132 StackString<128> value; |
136 RegKey key; | 133 RegKey key; |
137 return (OpenClientsKey(root, google_update::kAppGuid, KEY_QUERY_VALUE, | 134 return (OpenClientsKey(root, chrome_app_guid_, KEY_QUERY_VALUE, &key) == |
138 &key) == ERROR_SUCCESS && | 135 ERROR_SUCCESS && |
139 key.ReadSZValue(kPvRegistryValue, value.get(), value.capacity()) == | 136 key.ReadSZValue(kPvRegistryValue, value.get(), value.capacity()) == |
140 ERROR_SUCCESS && | 137 ERROR_SUCCESS && |
141 value.length() != 0 && | 138 value.length() != 0 && |
142 OpenClientStateKey(root, google_update::kAppGuid, KEY_QUERY_VALUE, | 139 OpenClientStateKey(root, chrome_app_guid_, KEY_QUERY_VALUE, &key) == |
143 &key) == ERROR_SUCCESS && | 140 ERROR_SUCCESS && |
144 key.ReadSZValue(kUninstallArgumentsRegistryValue, value.get(), | 141 key.ReadSZValue(kUninstallArgumentsRegistryValue, value.get(), |
145 value.capacity()) == ERROR_SUCCESS && | 142 value.capacity()) == ERROR_SUCCESS && |
146 value.findi(L"--multi-install") != nullptr); | 143 value.findi(L"--multi-install") != nullptr); |
147 #else | 144 #else |
148 return false; | 145 return false; |
149 #endif | 146 #endif |
150 } | 147 } |
151 | 148 |
152 } // namespace mini_installer | 149 } // namespace mini_installer |
OLD | NEW |