xref: /aosp_15_r20/external/autotest/client/bin/autologin.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
1#!/usr/bin/python
2#
3# Copyright 2016 The Chromium OS Authors. All rights reserved.
4# Use of this source code is governed by a BSD-style license that can be
5# found in the LICENSE file.
6
7'''Make Chrome automatically log in.'''
8
9# This sets up import paths for autotest.
10import common
11import argparse
12import getpass
13import sys
14
15from autotest_lib.client.common_lib.cros import chrome
16
17
18def main(args):
19    '''The main function.
20
21    @param args: list of string args passed to program
22    '''
23
24    parser = argparse.ArgumentParser(description=__doc__)
25    parser.add_argument('-a', '--arc', action='store_true',
26                        help='Enable ARC and wait for it to start.')
27    parser.add_argument('--arc_timeout', type=int, default=None,
28                        help='Enable ARC and wait for it to start.')
29    parser.add_argument('-d', '--dont_override_profile', action='store_true',
30                        help='Keep files from previous sessions.')
31    parser.add_argument('-u', '--username',
32                        help='Log in as provided username.')
33    parser.add_argument('--enable_default_apps', action='store_true',
34                        help='Enable default applications.')
35    parser.add_argument('-p', '--password',
36                        help='Log in with provided password.')
37    parser.add_argument('-w', '--no-startup-window', action='store_true',
38                        help='Prevent startup window from opening (no doodle).')
39    parser.add_argument('--no-arc-syncs', action='store_true',
40                        help='Prevent ARC sync behavior as much as possible.')
41    parser.add_argument('--toggle_ndk',
42                        action='append_const',
43                        dest='feature',
44                        const='ArcNativeBridgeExperiment',
45                        help='Toggle the translation from houdini to ndk')
46    parser.add_argument('-f',
47                        '--feature',
48                        action='append',
49                        help='Enables the specified Chrome feature flag')
50    parser.add_argument('--url', help='Navigate to URL.')
51    args = parser.parse_args(args)
52
53    if args.password:
54        password = args.password
55    elif args.username:
56        password = getpass.getpass()
57
58    browser_args = []
59    if args.no_startup_window:
60        browser_args.append('--no-startup-window')
61    if args.feature:
62        browser_args.append('--enable-features=%s' % ','.join(args.feature))
63
64    # Avoid calling close() on the Chrome object; this keeps the session active.
65    cr = chrome.Chrome(
66        extra_browser_args=browser_args,
67        arc_mode=('enabled' if args.arc else None),
68        arc_timeout=args.arc_timeout,
69        disable_app_sync=args.no_arc_syncs,
70        disable_play_auto_install=args.no_arc_syncs,
71        username=args.username,
72        password=(password if args.username else None),
73        gaia_login=(args.username is not None),
74        disable_default_apps=(not args.enable_default_apps),
75        dont_override_profile=args.dont_override_profile)
76    if args.url:
77        tab = cr.browser.tabs[0]
78        tab.Navigate(args.url)
79
80
81if __name__ == '__main__':
82    sys.exit(main(sys.argv[1:]))
83