OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 import argparse | |
7 import logging | |
8 import sys | 6 import sys |
9 import os.path | |
10 import subprocess | |
11 | |
12 import devtools | |
13 devtools.add_lib_to_path() | |
14 from devtoolslib.android_shell import AndroidShell | |
15 from devtoolslib.linux_shell import LinuxShell | |
16 from devtoolslib import shell_arguments | |
17 | |
18 from mopy.config import Config | |
19 from mopy.paths import Paths | |
20 | |
21 USAGE = ("mojo_shell.py " | |
22 "[--args-for=<mojo-app>] " | |
23 "[--content-handlers=<handlers>] " | |
24 "[--enable-external-applications] " | |
25 "[--disable-cache] " | |
26 "[--enable-multiprocess] " | |
27 "[--url-mappings=from1=to1,from2=to2] " | |
28 "[<mojo-app>] " | |
29 """ | |
30 | |
31 A <mojo-app> is a Mojo URL or a Mojo URL and arguments within quotes. | |
32 Example: mojo_shell "mojo:js_standalone test.js". | |
33 <url-lib-path> is searched for shared libraries named by mojo URLs. | |
34 The value of <handlers> is a comma separated list like: | |
35 text/html,mojo:html_viewer,application/javascript,mojo:js_content_handler | |
36 """) | |
37 | |
38 _DEFAULT_WINDOW_MANAGER = "mojo:kiosk_wm" | |
39 _SKY_SERVER_PORT = 9998 | |
40 | 7 |
41 | 8 |
42 def main(): | 9 def main(): |
43 logging.basicConfig() | 10 print 'Good news, the shell runner has moved! Please use: ' |
44 | 11 print '' |
45 parser = argparse.ArgumentParser(usage=USAGE) | 12 print ' mojo/devtools/common/mojo_shell' |
46 | 13 print '' |
47 # Arguments indicating the configuration we are targeting. | 14 print 'as you would use mojo_shell.py before.' |
48 parser.add_argument('--android', help='Run on Android', | 15 return -1 |
49 action='store_true') | |
50 debug_group = parser.add_mutually_exclusive_group() | |
51 debug_group.add_argument('--debug', help='Debug build (default)', | |
52 default=True, action='store_true') | |
53 debug_group.add_argument('--release', help='Release build', default=False, | |
54 dest='debug', action='store_false') | |
55 parser.add_argument('--target-cpu', help='CPU architecture to run for.', | |
56 choices=['x64', 'x86', 'arm']) | |
57 | |
58 # Arguments configuring the shell run. | |
59 parser.add_argument('--origin', help='Origin for mojo: URLs.') | |
60 parser.add_argument('--window-manager', default=_DEFAULT_WINDOW_MANAGER, | |
61 help='Window manager app to be mapped as ' | |
62 'mojo:window_manager. By default it is ' + | |
63 _DEFAULT_WINDOW_MANAGER) | |
64 parser.add_argument('--no-debugger', action="store_true", | |
65 help='Do not spawn mojo:debugger.') | |
66 parser.add_argument('--sky', | |
67 help='Loads the given Sky file.') | |
68 parser.add_argument('-v', '--verbose', action="store_true", | |
69 help="Increase output verbosity") | |
70 | |
71 # Android-only arguments. | |
72 parser.add_argument('--target-device', | |
73 help='(android-only) Device to run on.') | |
74 parser.add_argument('--logcat-tags', | |
75 help='(android-only) Comma-separated list of additional ' | |
76 'logcat tags to display on the console.') | |
77 | |
78 # Desktop-only arguments. | |
79 parser.add_argument('--use-osmesa', action='store_true', | |
80 help='(linux-only) Configure the native viewport service ' | |
81 'for off-screen rendering.') | |
82 | |
83 launcher_args, args = parser.parse_known_args() | |
84 if launcher_args.android: | |
85 config = Config(target_os=Config.OS_ANDROID, | |
86 target_cpu=launcher_args.target_cpu, | |
87 is_debug=launcher_args.debug) | |
88 paths = Paths(config) | |
89 verbose_pipe = sys.stdout if launcher_args.verbose else None | |
90 | |
91 shell = AndroidShell(paths.adb_path, launcher_args.target_device, | |
92 logcat_tags=launcher_args.logcat_tags, | |
93 verbose_pipe=verbose_pipe) | |
94 device_status, error = shell.CheckDevice() | |
95 if not device_status: | |
96 print 'Device check failed: ' + error | |
97 return 1 | |
98 shell.InstallApk(paths.target_mojo_shell_path) | |
99 | |
100 args = shell_arguments.RewriteMapOriginParameters(shell, args) | |
101 if not launcher_args.origin: | |
102 args.extend(shell_arguments.ConfigureLocalOrigin(shell, paths.build_dir)) | |
103 else: | |
104 config = Config(target_os=Config.OS_LINUX, | |
105 target_cpu=launcher_args.target_cpu, | |
106 is_debug=launcher_args.debug) | |
107 paths = Paths(config) | |
108 shell = LinuxShell(paths.mojo_shell_path) | |
109 if launcher_args.use_osmesa: | |
110 args.append('--args-for=mojo:native_viewport_service --use-osmesa') | |
111 | |
112 if launcher_args.origin: | |
113 args.append('--origin=' + launcher_args.origin) | |
114 args = shell_arguments.AppendToArgument(args, '--url-mappings=', | |
115 'mojo:window_manager=%s' % | |
116 launcher_args.window_manager) | |
117 if not launcher_args.no_debugger: | |
118 args.extend(shell_arguments.ConfigureDebugger(shell)) | |
119 | |
120 if launcher_args.sky: | |
121 # Configure a server to serve the checkout root at / (so that Sky examples | |
122 # are accessible using a root-relative path) and Sky packages at /packages. | |
123 # This is independent from the server that potentially serves the origin | |
124 # directory containing the mojo: apps. | |
125 packages_local_path = os.path.join(paths.build_dir, 'gen', 'dart-pkg', | |
126 'packages') | |
127 additional_mappings = [ | |
128 ('packages/', packages_local_path), | |
129 ] | |
130 server_url = shell.ServeLocalDirectory(paths.src_root, | |
131 port=_SKY_SERVER_PORT, additional_mappings=additional_mappings) | |
132 | |
133 # Configure the content type mappings for the sky_viewer. This is needed | |
134 # only for the Sky apps that do not declare mojo:sky_viewer in a shebang, | |
135 # and it is unfortunate as it configures the shell to map all items of the | |
136 # application/dart content-type as Sky apps. | |
137 # TODO(ppi): drop this part once we can rely on the Sky files declaring | |
138 # correct shebang. | |
139 args = shell_arguments.AppendToArgument(args, '--content-handlers=', | |
140 'text/sky,mojo:sky_viewer') | |
141 args = shell_arguments.AppendToArgument(args, '--content-handlers=', | |
142 'application/dart,mojo:sky_viewer') | |
143 | |
144 # Configure the window manager to embed the sky_viewer. | |
145 sky_url = server_url + launcher_args.sky | |
146 args.append('mojo:window_manager %s' % sky_url) | |
147 | |
148 if launcher_args.verbose: | |
149 print "Shell arguments: " + str(args) | |
150 | |
151 shell.Run(args) | |
152 return 0 | |
153 | |
154 | 16 |
155 if __name__ == "__main__": | 17 if __name__ == "__main__": |
156 sys.exit(main()) | 18 sys.exit(main()) |
OLD | NEW |