Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(322)

Side by Side Diff: mojo/tools/mopy/android.py

Issue 963713003: Support --origin in android_mojo_shell. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Move atexit.register(StopShell) to StartShell. Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « mojo/tools/apptest_runner.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 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 import atexit 5 import atexit
6 import json 6 import json
7 import logging 7 import logging
8 import os 8 import os
9 import os.path 9 import os.path
10 import random 10 import random
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 atexit.register(httpd.shutdown) 144 atexit.register(httpd.shutdown)
145 145
146 http_thread = threading.Thread(target=httpd.serve_forever) 146 http_thread = threading.Thread(target=httpd.serve_forever)
147 http_thread.daemon = True 147 http_thread.daemon = True
148 http_thread.start() 148 http_thread.start()
149 149
150 print 'local port=', httpd.server_address[1] 150 print 'local port=', httpd.server_address[1]
151 return 'http://127.0.0.1:%d/' % _MapPort(0, httpd.server_address[1]) 151 return 'http://127.0.0.1:%d/' % _MapPort(0, httpd.server_address[1])
152 152
153 153
154 def PrepareShellRun(config): 154 def PrepareShellRun(config, origin=None):
155 """ 155 """ Prepares for StartShell: runs adb as root and installs the apk. If no
156 Prepares for StartShell. Returns an origin arg with the forwarded device port. 156 --origin is specified, local http server will be set up to serve files from
157 the build directory along with port forwarding.
157 158
158 Start an internal http server to serve mojo applications, forward a local port 159 Returns arguments that should be appended to shell argument list."""
159 on the device to this http server, and install the latest mojo shell version.
160 """
161 build_dir = Paths(config).build_dir 160 build_dir = Paths(config).build_dir
161
162 subprocess.check_call([ADB_PATH, 'root']) 162 subprocess.check_call([ADB_PATH, 'root'])
163 apk_path = os.path.join(build_dir, 'apks', 'MojoShell.apk') 163 apk_path = os.path.join(build_dir, 'apks', 'MojoShell.apk')
164 subprocess.check_call( 164 subprocess.check_call(
165 [ADB_PATH, 'install', '-r', apk_path, '-i', MOJO_SHELL_PACKAGE_NAME]) 165 [ADB_PATH, 'install', '-r', apk_path, '-i', MOJO_SHELL_PACKAGE_NAME])
166 166
167 atexit.register(StopShell) 167 extra_shell_args = []
168 origin_url = origin if origin else StartHttpServerForDirectory(build_dir)
169 extra_shell_args.append("--origin=" + origin_url)
168 170
169 return '--origin=' + StartHttpServerForDirectory(build_dir) 171 return extra_shell_args
170 172
171 173
172 def _StartHttpServerForOriginMapping(mapping): 174 def _StartHttpServerForOriginMapping(mapping):
173 """If |mapping| points at a local file starts an http server to serve files 175 """If |mapping| points at a local file starts an http server to serve files
174 from the directory and returns the new mapping. 176 from the directory and returns the new mapping.
175 177
176 This is intended to be called for every --map-origin value.""" 178 This is intended to be called for every --map-origin value."""
177 parts = mapping.split('=') 179 parts = mapping.split('=')
178 if len(parts) != 2: 180 if len(parts) != 2:
179 return mapping 181 return mapping
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 '-W', 215 '-W',
214 '-S', 216 '-S',
215 '-a', 'android.intent.action.VIEW', 217 '-a', 'android.intent.action.VIEW',
216 '-n', '%s/.MojoShellActivity' % MOJO_SHELL_PACKAGE_NAME] 218 '-n', '%s/.MojoShellActivity' % MOJO_SHELL_PACKAGE_NAME]
217 219
218 parameters = [] 220 parameters = []
219 if stdout or on_application_stop: 221 if stdout or on_application_stop:
220 subprocess.check_call([ADB_PATH, 'shell', 'rm', STDOUT_PIPE]) 222 subprocess.check_call([ADB_PATH, 'shell', 'rm', STDOUT_PIPE])
221 parameters.append('--fifo-path=%s' % STDOUT_PIPE) 223 parameters.append('--fifo-path=%s' % STDOUT_PIPE)
222 _ReadFifo(STDOUT_PIPE, stdout, on_application_stop) 224 _ReadFifo(STDOUT_PIPE, stdout, on_application_stop)
223 assert any("--origin=http://127.0.0.1:" in arg for arg in arguments) 225 # The origin has to be specified whether it's local or external.
226 assert any("--origin=" in arg for arg in arguments)
224 parameters += [_StartHttpServerForOriginMappings(arg) for arg in arguments] 227 parameters += [_StartHttpServerForOriginMappings(arg) for arg in arguments]
225 228
226 if parameters: 229 if parameters:
227 encodedParameters = json.dumps(parameters) 230 encodedParameters = json.dumps(parameters)
228 cmd += [ '--es', 'encodedParameters', encodedParameters] 231 cmd += [ '--es', 'encodedParameters', encodedParameters]
229 232
233 atexit.register(StopShell)
230 with open(os.devnull, 'w') as devnull: 234 with open(os.devnull, 'w') as devnull:
231 subprocess.Popen(cmd, stdout=devnull).wait() 235 subprocess.Popen(cmd, stdout=devnull).wait()
232 236
233 237
234 def StopShell(): 238 def StopShell():
235 """ 239 """
236 Stops the mojo shell. 240 Stops the mojo shell.
237 """ 241 """
238 subprocess.check_call( 242 subprocess.check_call(
239 [ADB_PATH, 'shell', 'am', 'force-stop', MOJO_SHELL_PACKAGE_NAME]) 243 [ADB_PATH, 'shell', 'am', 'force-stop', MOJO_SHELL_PACKAGE_NAME])
(...skipping 12 matching lines...) Expand all
252 256
253 Returns the process responsible for reading the logs. 257 Returns the process responsible for reading the logs.
254 """ 258 """
255 logcat = subprocess.Popen([ADB_PATH, 259 logcat = subprocess.Popen([ADB_PATH,
256 'logcat', 260 'logcat',
257 '-s', 261 '-s',
258 ' '.join(LOGCAT_TAGS)], 262 ' '.join(LOGCAT_TAGS)],
259 stdout=sys.stdout) 263 stdout=sys.stdout)
260 atexit.register(_ExitIfNeeded, logcat) 264 atexit.register(_ExitIfNeeded, logcat)
261 return logcat 265 return logcat
OLDNEW
« no previous file with comments | « mojo/tools/apptest_runner.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698