Allow to set a fixed port for the development server.

Running on the fixed port enables service cache to store responses
between shell runs.

Fixes domokit/devtools#37

R=tonyg@chromium.org

Review URL: https://codereview.chromium.org/1305293003 .
diff --git a/mojo/devtools/common/devtoolslib/shell_arguments.py b/mojo/devtools/common/devtoolslib/shell_arguments.py
index 53e467f..7e46b01 100644
--- a/mojo/devtools/common/devtoolslib/shell_arguments.py
+++ b/mojo/devtools/common/devtoolslib/shell_arguments.py
@@ -157,7 +157,9 @@
   Returns:
     The updated argument list.
   """
-  server_url = shell.serve_local_directories(dev_server_config.mappings)
+  port = dev_server_config.port if dev_server_config.port else 0
+  server_url = shell.serve_local_directories(dev_server_config.mappings,
+                                             port=port)
   shell_args.append('--map-origin=%s=%s' % (dev_server_config.host, server_url))
   print "Configured %s locally at %s to serve:" % (dev_server_config.host,
                                                    server_url)
diff --git a/mojo/devtools/common/devtoolslib/shell_config.py b/mojo/devtools/common/devtoolslib/shell_config.py
index 227b979..6a93cb0 100644
--- a/mojo/devtools/common/devtoolslib/shell_config.py
+++ b/mojo/devtools/common/devtoolslib/shell_config.py
@@ -48,6 +48,7 @@
   """
   def __init__(self):
     self.host = None
+    self.port = None
     self.mappings = None
 
 
@@ -193,6 +194,7 @@
         for dev_server_spec in config['dev_servers']:
           dev_server_config = DevServerConfig()
           dev_server_config.host = dev_server_spec['host']
+          dev_server_config.port = dev_server_spec.get('port', None)
           dev_server_config.mappings = []
           for prefix, path in dev_server_spec['mappings']:
             dev_server_config.mappings.append((prefix, path))
diff --git a/mojo/devtools/common/remote_adb_setup b/mojo/devtools/common/remote_adb_setup
index d275ff6..df3176d 100755
--- a/mojo/devtools/common/remote_adb_setup
+++ b/mojo/devtools/common/remote_adb_setup
@@ -44,8 +44,10 @@
 # and from the local host to the remote host:
 #   9998: http server for Sky
 #   31840: http server for the local mojo: origin
+#   31839: http server for https://core.mojoapps.io
 ssh -C \
     -R 5037:127.0.0.1:5037 \
     -L 9998:127.0.0.1:9998 \
+    -L 31839:127.0.0.1:31839 \
     -L 31840:127.0.0.1:31840 \
     "$remote_host"
diff --git a/mojoconfig b/mojoconfig
index 8be95fb..1edace8 100644
--- a/mojoconfig
+++ b/mojoconfig
@@ -12,6 +12,11 @@
   'dev_servers': [
     {
       'host': 'https://core.mojoapps.io/',
+      # At this port the server will appear to the shell. That means actually
+      # running on this port when running a Linux shell and being forwarded from
+      # this port when running on Android. Using a fixed port enables caching
+      # server responses between shell runs.
+      'port': 31839,
       # First matching prefix will apply. Within the directiories specified for
       # a prefix, first location that contains the requested path will apply.
       'mappings': [