| #!/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 argparse | 
 | import logging | 
 | import sys | 
 |  | 
 | from devtoolslib import shell_arguments | 
 | from devtoolslib import shell_config | 
 |  | 
 | _DESCRIPTION = """Runner for Mojo applications. | 
 |  | 
 | Any arguments not recognized by the script will be passed on as shell arguments. | 
 |  | 
 | Important shell arguments include: | 
 |   "--args-for=<mojo-app-url> <arguments>" | 
 |   "--content-handlers=<handlers>" | 
 |   "--disable-cache" | 
 |   "--enable-multiprocess" | 
 |   "--wait-for-debugger" | 
 |   "<mojo-app-url>" | 
 |   "<mojo-app-url> <arguments>" | 
 |  | 
 | The value of <handlers> is a comma separated list like: | 
 | text/html,mojo:html_viewer,application/javascript,mojo:js_content_handler | 
 | """ | 
 |  | 
 | # Port on which the mojo:debugger http server will be available on the host | 
 | # machine. | 
 | _MOJO_DEBUGGER_PORT = 7777 | 
 | _DEFAULT_WM = 'mojo:kiosk_wm' | 
 |  | 
 | _WM_URL = 'mojo:window_manager' | 
 | _DEBUGGER_URL = 'https://core.mojoapps.io/debugger.mojo' | 
 |  | 
 |  | 
 | def _configure_debugger(shell): | 
 |   """Configures debugger.mojo to run and sets up port forwarding for its http | 
 |   server if the shell is running on a device. | 
 |  | 
 |   Returns: | 
 |     Arguments that need to be appended to the shell argument list in order to | 
 |     run with the debugger. | 
 |   """ | 
 |   shell.forward_host_port_to_shell(_MOJO_DEBUGGER_PORT) | 
 |   return ['%s %d' % (_DEBUGGER_URL, _MOJO_DEBUGGER_PORT)] | 
 |  | 
 |  | 
 | def main(): | 
 |   logging.basicConfig() | 
 |  | 
 |   parser = argparse.ArgumentParser( | 
 |       formatter_class=argparse.RawDescriptionHelpFormatter, | 
 |       description=_DESCRIPTION) | 
 |   shell_config.add_shell_arguments(parser) | 
 |  | 
 |   parser.add_argument('--embed', type=str, | 
 |                       help='Url to be embedded in the window manager.') | 
 |   parser.add_argument('--window-manager', default=_DEFAULT_WM, | 
 |                       help='Window manager app to be mapped as ' | 
 |                       'mojo:window_manager. By default it is ' + | 
 |                       _DEFAULT_WM) | 
 |   parser.add_argument('--debugger', action="store_true", | 
 |                       help='Run debugger.mojo along with the app.') | 
 |  | 
 |   script_args, shell_args = parser.parse_known_args() | 
 |  | 
 |   try: | 
 |     config = shell_config.get_shell_config(script_args) | 
 |     shell, shell_args = shell_arguments.get_shell(config, shell_args) | 
 |   except shell_config.ShellConfigurationException as e: | 
 |     print e | 
 |     return 1 | 
 |  | 
 |   shell_args = shell_arguments.append_to_argument(shell_args, '--url-mappings=', | 
 |                                                   '%s=%s' % (_WM_URL, | 
 |                                                   script_args.window_manager)) | 
 |  | 
 |   if script_args.embed: | 
 |     shell_args.append('%s %s' % (script_args.window_manager, script_args.embed)) | 
 |  | 
 |   if script_args.debugger: | 
 |     if script_args.verbose: | 
 |       print 'Spawning mojo:debugger, use `mojo_debug` to inspect the shell.' | 
 |       print 'Note that mojo:debugger will prevent the shell from terminating,' | 
 |       print '  pass --no-debugger to skip spawning mojo:debugger.' | 
 |     shell_args.extend(_configure_debugger(shell)) | 
 |  | 
 |   if script_args.verbose: | 
 |     print "Shell arguments: " + str(shell_args) | 
 |  | 
 |   shell.run(shell_args) | 
 |   return 0 | 
 |  | 
 |  | 
 | if __name__ == "__main__": | 
 |   sys.exit(main()) |