Index: chrome/test/mini_installer/make_chrome_multi.py |
diff --git a/chrome/test/mini_installer/make_chrome_multi.py b/chrome/test/mini_installer/make_chrome_multi.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8910a45326a1ba97678a42760cfcbef258a1d23f |
--- /dev/null |
+++ b/chrome/test/mini_installer/make_chrome_multi.py |
@@ -0,0 +1,79 @@ |
+# Copyright 2016 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. |
+ |
+"""Makes an existing per-user Chrome appear to be multi-install Chrome. |
+ |
+This script makes minimal mutations to the Windows registry to make ordinary |
+single-install Chrome appear to be multi-install for purposes of testing multi- |
+to single- migrations. |
+""" |
+ |
+import _winreg |
+import argparse |
+import sys |
+ |
+ |
+def MakeChromeMulti(chrome_long_name, chrome_clients_key, |
+ chrome_client_state_key, binaries_clients_key): |
+ # Update the control panel's uninstall string. |
+ key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, |
+ ('Software\\Microsoft\\Windows\\CurrentVersion\\' |
+ 'Uninstall\\%s' % chrome_long_name), 0, |
+ _winreg.KEY_QUERY_VALUE | _winreg.KEY_SET_VALUE | |
+ _winreg.KEY_WOW64_32KEY) |
+ string = _winreg.QueryValueEx(key, 'UninstallString')[0] |
+ string = string.replace('--uninstall', '--uninstall --multi-install --chrome') |
+ _winreg.SetValueEx(key, 'UninstallString', 0, _winreg.REG_SZ, string) |
+ |
+ # Read Chrome's version number. |
+ key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, |
+ chrome_clients_key, 0, |
+ _winreg.KEY_QUERY_VALUE | _winreg.KEY_WOW64_32KEY) |
+ pv = _winreg.QueryValueEx(key, 'pv')[0] |
+ _winreg.CloseKey(key) |
+ |
+ # Write that version for the binaries. |
+ key = _winreg.CreateKeyEx(_winreg.HKEY_CURRENT_USER, |
+ binaries_clients_key, 0, |
+ _winreg.KEY_SET_VALUE | _winreg.KEY_WOW64_32KEY) |
+ _winreg.SetValueEx(key, 'pv', 0, _winreg.REG_SZ, pv) |
+ _winreg.CloseKey(key) |
+ |
+ # Add "--multi-install --chrome" to Chrome's UninstallArguments. |
+ key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, |
+ chrome_client_state_key, 0, |
+ _winreg.KEY_QUERY_VALUE | _winreg.KEY_SET_VALUE | |
+ _winreg.KEY_WOW64_32KEY) |
+ args = _winreg.QueryValueEx(key, 'UninstallArguments')[0] |
+ args += ' --multi-install --chrome' |
+ _winreg.SetValueEx(key, 'UninstallArguments', 0, _winreg.REG_SZ, args) |
+ |
+ |
+def main(): |
+ parser = argparse.ArgumentParser( |
+ description='Transforms single-install Chrome into multi-install.') |
+ parser.add_argument('--chrome-long-name', default='Google Chrome', |
+ help='The full name of the product.') |
+ parser.add_argument('--chrome-clients-key', |
+ default='Software\\Google\\Update\\Clients\\' |
+ '{8A69D345-D564-463c-AFF1-A69D9E530F96}', |
+ help='Chrome\'s Clients registry key path.') |
+ parser.add_argument('--chrome-client-state-key', |
+ default='Software\\Google\\Update\\ClientState\\' |
+ '{8A69D345-D564-463c-AFF1-A69D9E530F96}', |
+ help='Chrome\'s ClientState registry key path.') |
+ parser.add_argument('--binaries-clients-key', |
+ default='Software\\Google\\Update\\Clients\\' |
+ '{4DC8B4CA-1BDA-483e-B5FA-D3C12E15B62D}', |
+ help='Chrome Binaries\' Clients registry key path.') |
+ args = parser.parse_args() |
+ MakeChromeMulti(args.chrome_long_name, |
+ args.chrome_clients_key, |
+ args.chrome_client_state_key, |
+ args.binaries_clients_key) |
+ return 0 |
+ |
+ |
+if __name__ == '__main__': |
+ sys.exit(main()) |