Index: mojo/tools/mopy/android.py |
diff --git a/mojo/tools/mopy/android.py b/mojo/tools/mopy/android.py |
deleted file mode 100755 |
index 039693edc130f89afc02a3033025564ad0d0c36f..0000000000000000000000000000000000000000 |
--- a/mojo/tools/mopy/android.py |
+++ /dev/null |
@@ -1,208 +0,0 @@ |
-#!/usr/bin/env python |
-# Copyright 2014 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. |
- |
-import atexit |
-import logging |
-import os |
-import os.path |
-import subprocess |
-import sys |
-import threading |
-import time |
- |
-import SimpleHTTPServer |
-import SocketServer |
- |
-from mopy.config import Config |
-from mopy.paths import Paths |
- |
-sys.path.insert(0, os.path.join(Paths().src_root, 'build', 'android')) |
-from pylib import android_commands |
-from pylib import constants |
-from pylib import forwarder |
- |
- |
-# Tags used by the mojo shell application logs. |
-LOGCAT_TAGS = [ |
- 'AndroidHandler', |
- 'MojoFileHelper', |
- 'MojoMain', |
- 'MojoShellActivity', |
- 'MojoShellApplication', |
- 'chromium', |
-] |
- |
-MOJO_SHELL_PACKAGE_NAME = 'org.chromium.mojo.shell' |
- |
- |
-class Context(object): |
- """ |
- The context object allowing to run multiple runs of the shell. |
- """ |
- def __init__(self, device, device_port): |
- self.device = device |
- self.device_port = device_port |
- |
- |
-class _SilentTCPServer(SocketServer.TCPServer): |
- """ |
- A TCPServer that won't display any error, unless debugging is enabled. This is |
- useful because the client might stop while it is fetching an URL, which causes |
- spurious error messages. |
- """ |
- def handle_error(self, request, client_address): |
- """ |
- Override the base class method to have conditional logging. |
- """ |
- if logging.getLogger().isEnabledFor(logging.DEBUG): |
- super(_SilentTCPServer, self).handle_error(request, client_address) |
- |
- |
-def _GetHandlerClassForPath(base_path): |
- class RequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): |
- """ |
- Handler for SocketServer.TCPServer that will serve the files from |
- |base_path| directory over http. |
- """ |
- |
- def translate_path(self, path): |
- path_from_current = ( |
- SimpleHTTPServer.SimpleHTTPRequestHandler.translate_path(self, path)) |
- return os.path.join(base_path, os.path.relpath(path_from_current)) |
- |
- def log_message(self, *_): |
- """ |
- Override the base class method to disable logging. |
- """ |
- pass |
- |
- return RequestHandler |
- |
- |
-def _ExitIfNeeded(process): |
- """ |
- Exits |process| if it is still alive. |
- """ |
- if process.poll() is None: |
- process.kill() |
- |
- |
-def _ReadFifo(context, fifo_path, pipe, on_fifo_closed): |
- """ |
- Reads |fifo_path| on the device and write the contents to |pipe|. Calls |
- |on_fifo_closed| when the fifo is closed. This method will block until |
- |fifo_path| exists. |
- """ |
- def Run(): |
- while not context.device.FileExistsOnDevice(fifo_path): |
- time.sleep(1) |
- stdout_cat = subprocess.Popen([constants.GetAdbPath(), |
- 'shell', |
- 'cat', |
- fifo_path], |
- stdout=pipe) |
- atexit.register(_ExitIfNeeded, stdout_cat) |
- stdout_cat.wait() |
- if on_fifo_closed: |
- on_fifo_closed() |
- |
- thread = threading.Thread(target=Run, name="StdoutRedirector") |
- thread.start() |
- |
- |
-def PrepareShellRun(config): |
- """ |
- Returns a context allowing a shell to be run. |
- |
- This will start an internal http server to serve mojo applications, forward a |
- local port on the device to this http server and install the current version |
- of the mojo shell. |
- """ |
- build_dir = Paths(config).build_dir |
- constants.SetOutputDirectort(build_dir) |
- |
- httpd = _SilentTCPServer(('127.0.0.1', 0), _GetHandlerClassForPath(build_dir)) |
- atexit.register(httpd.shutdown) |
- host_port = httpd.server_address[1] |
- |
- http_thread = threading.Thread(target=httpd.serve_forever) |
- http_thread.daemon = True |
- http_thread.start() |
- |
- device = android_commands.AndroidCommands( |
- android_commands.GetAttachedDevices()[0]) |
- device.EnableAdbRoot() |
- |
- device.ManagedInstall(os.path.join(build_dir, 'apks', 'MojoShell.apk'), |
- keep_data=True, |
- package_name=MOJO_SHELL_PACKAGE_NAME) |
- |
- atexit.register(forwarder.Forwarder.UnmapAllDevicePorts, device) |
- forwarder.Forwarder.Map([(0, host_port)], device) |
- context = Context(device, |
- forwarder.Forwarder.DevicePortForHostPort(host_port)) |
- |
- atexit.register(StopShell, context) |
- return context |
- |
- |
-def StartShell(context, arguments, stdout=None, on_application_stop=None): |
- """ |
- Starts the mojo shell, passing it the given arguments. |
- |
- If stdout is not None, it should be a valid argument for subprocess.Popen. |
- """ |
- STDOUT_PIPE = "/data/data/%s/stdout.fifo" % MOJO_SHELL_PACKAGE_NAME |
- |
- cmd = ('am start' |
- ' -W' |
- ' -S' |
- ' -a android.intent.action.VIEW' |
- ' -n %s/.MojoShellActivity' % MOJO_SHELL_PACKAGE_NAME) |
- |
- parameters = ['--origin=http://127.0.0.1:%d/' % context.device_port] |
- if stdout or on_application_stop: |
- context.device.RunShellCommand('rm %s' % STDOUT_PIPE) |
- parameters.append('--fifo-path=%s' % STDOUT_PIPE) |
- _ReadFifo(context, STDOUT_PIPE, stdout, on_application_stop) |
- parameters += arguments |
- cmd += ' --esa parameters \"%s\"' % ','.join(parameters) |
- |
- context.device.RunShellCommand(cmd) |
- |
- |
-def StopShell(context): |
- """ |
- Stops the mojo shell. |
- """ |
- context.device.RunShellCommand('am force-stop %s' % MOJO_SHELL_PACKAGE_NAME) |
- |
-def CleanLogs(context): |
- """ |
- Cleans the logs on the device. |
- """ |
- context.device.RunShellCommand('logcat -c') |
- |
- |
-def ShowLogs(): |
- """ |
- Displays the log for the mojo shell. |
- |
- Returns the process responsible for reading the logs. |
- """ |
- logcat = subprocess.Popen([constants.GetAdbPath(), |
- 'logcat', |
- '-s', |
- ' '.join(LOGCAT_TAGS)], |
- stdout=sys.stdout) |
- atexit.register(_ExitIfNeeded, logcat) |
- return logcat |
- |
- |
-def GetFilePath(filename): |
- """ |
- Returns a path suitable for the application to create a file. |
- """ |
- return '/data/data/%s/files/%s' % (MOJO_SHELL_PACKAGE_NAME, filename) |