| OLD | NEW |
| (Empty) |
| 1 #!/usr/bin/env python | |
| 2 # Copyright 2014 The Chromium Authors. All rights reserved. | |
| 3 # Use of this source code is governed by a BSD-style license that can be | |
| 4 # found in the LICENSE file. | |
| 5 | |
| 6 import argparse | |
| 7 import logging | |
| 8 import sys | |
| 9 | |
| 10 from devtoolslib.android_shell import AndroidShell | |
| 11 from devtoolslib.linux_shell import LinuxShell | |
| 12 from devtoolslib import paths | |
| 13 from devtoolslib import shell_arguments | |
| 14 | |
| 15 USAGE = ("mojo_shell " | |
| 16 "[--args-for=<mojo-app>] " | |
| 17 "[--content-handlers=<handlers>] " | |
| 18 "[--enable-external-applications] " | |
| 19 "[--disable-cache] " | |
| 20 "[--enable-multiprocess] " | |
| 21 "[--url-mappings=from1=to1,from2=to2] " | |
| 22 "[<mojo-app>] " | |
| 23 """ | |
| 24 | |
| 25 A <mojo-app> is a Mojo URL or a Mojo URL and arguments within quotes. | |
| 26 Example: mojo_shell "mojo:js_standalone test.js". | |
| 27 <url-lib-path> is searched for shared libraries named by mojo URLs. | |
| 28 The value of <handlers> is a comma separated list like: | |
| 29 text/html,mojo:html_viewer,application/javascript,mojo:js_content_handler | |
| 30 """) | |
| 31 | |
| 32 _DEFAULT_WINDOW_MANAGER = "mojo:kiosk_wm" | |
| 33 | |
| 34 | |
| 35 def main(): | |
| 36 logging.basicConfig() | |
| 37 | |
| 38 parser = argparse.ArgumentParser(usage=USAGE) | |
| 39 | |
| 40 # Arguments indicating the configuration we are targeting. | |
| 41 parser.add_argument('--android', help='Run on Android', | |
| 42 action='store_true') | |
| 43 debug_group = parser.add_mutually_exclusive_group() | |
| 44 debug_group.add_argument('--debug', help='Debug build (default)', | |
| 45 default=True, action='store_true') | |
| 46 debug_group.add_argument('--release', help='Release build', default=False, | |
| 47 dest='debug', action='store_false') | |
| 48 parser.add_argument('--target-cpu', help='CPU architecture to run for.', | |
| 49 choices=['x64', 'x86', 'arm']) | |
| 50 | |
| 51 # Arguments configuring the shell run. | |
| 52 parser.add_argument('--origin', help='Origin for mojo: URLs.') | |
| 53 parser.add_argument('--window-manager', default=_DEFAULT_WINDOW_MANAGER, | |
| 54 help='Window manager app to be mapped as ' | |
| 55 'mojo:window_manager. By default it is ' + | |
| 56 _DEFAULT_WINDOW_MANAGER) | |
| 57 parser.add_argument('--no-debugger', action="store_true", | |
| 58 help='Do not spawn mojo:debugger.') | |
| 59 parser.add_argument('--sky', | |
| 60 help='Loads the given Sky file.') | |
| 61 parser.add_argument('-v', '--verbose', action="store_true", | |
| 62 help="Increase output verbosity") | |
| 63 | |
| 64 # Android-only arguments. | |
| 65 parser.add_argument('--target-device', | |
| 66 help='(android-only) Device to run on.') | |
| 67 parser.add_argument('--logcat-tags', | |
| 68 help='(android-only) Comma-separated list of additional ' | |
| 69 'logcat tags to display on the console.') | |
| 70 | |
| 71 # Desktop-only arguments. | |
| 72 parser.add_argument('--use-osmesa', action='store_true', | |
| 73 help='(linux-only) Configure the native viewport service ' | |
| 74 'for off-screen rendering.') | |
| 75 | |
| 76 launcher_args, args = parser.parse_known_args() | |
| 77 mojo_paths, _ = paths.infer_mojo_paths(launcher_args.android, | |
| 78 launcher_args.debug, | |
| 79 launcher_args.target_cpu) | |
| 80 if mojo_paths: | |
| 81 adb_path = mojo_paths['adb'] | |
| 82 shell_binary_path = mojo_paths['shell'] | |
| 83 local_origin_path = mojo_paths['build'] | |
| 84 if launcher_args.verbose: | |
| 85 print 'Running within a Mojo checkout:' | |
| 86 print ' - using the locally built shell at ' + shell_binary_path | |
| 87 print ' - using the default origin of ' + local_origin_path | |
| 88 else: | |
| 89 if launcher_args.android: | |
| 90 adb_path = 'adb' | |
| 91 shell_binary_path = None | |
| 92 local_origin_path = '.' | |
| 93 if launcher_args.verbose: | |
| 94 print 'Running outside a Mojo checkout:' | |
| 95 print ' - using the shell already installed on the device' | |
| 96 print ' - using the current working directory as default origin' | |
| 97 else: | |
| 98 print 'Running outside a Mojo checkout is not supported on Linux yet.' | |
| 99 return 1 | |
| 100 | |
| 101 if launcher_args.android: | |
| 102 verbose_pipe = sys.stdout if launcher_args.verbose else None | |
| 103 | |
| 104 shell = AndroidShell(adb_path, launcher_args.target_device, | |
| 105 logcat_tags=launcher_args.logcat_tags, | |
| 106 verbose_pipe=verbose_pipe) | |
| 107 device_status, error = shell.CheckDevice() | |
| 108 if not device_status: | |
| 109 print 'Device check failed: ' + error | |
| 110 return 1 | |
| 111 if shell_binary_path: | |
| 112 shell.InstallApk(shell_binary_path) | |
| 113 | |
| 114 args = shell_arguments.RewriteMapOriginParameters(shell, args) | |
| 115 if not launcher_args.origin: | |
| 116 args.extend(shell_arguments.ConfigureLocalOrigin(shell, | |
| 117 local_origin_path)) | |
| 118 else: | |
| 119 shell = LinuxShell(shell_binary_path) | |
| 120 if launcher_args.use_osmesa: | |
| 121 args.append('--args-for=mojo:native_viewport_service --use-osmesa') | |
| 122 | |
| 123 if launcher_args.origin: | |
| 124 args.append('--origin=' + launcher_args.origin) | |
| 125 args = shell_arguments.AppendToArgument(args, '--url-mappings=', | |
| 126 'mojo:window_manager=%s' % | |
| 127 launcher_args.window_manager) | |
| 128 if not launcher_args.no_debugger: | |
| 129 args.extend(shell_arguments.ConfigureDebugger(shell)) | |
| 130 | |
| 131 if launcher_args.sky: | |
| 132 if not mojo_paths: | |
| 133 print 'Running with --sky is not supported outside of the Mojo checkout.' | |
| 134 # See https://github.com/domokit/devtools/issues/27. | |
| 135 return 1 | |
| 136 args.extend(shell_arguments.ConfigureSky(shell, mojo_paths['root'], | |
| 137 mojo_paths['sky_packages'], | |
| 138 launcher_args.sky)) | |
| 139 | |
| 140 if launcher_args.verbose: | |
| 141 print "Shell arguments: " + str(args) | |
| 142 | |
| 143 shell.Run(args) | |
| 144 return 0 | |
| 145 | |
| 146 | |
| 147 if __name__ == "__main__": | |
| 148 sys.exit(main()) | |
| OLD | NEW |