Check in generated Dart bindings and add presubmit script

- Add mojom_list_dart_outputs.py script which outputs the path to the generated bindings file, for example:

Given a foo.mojom file with the following:

[DartPackage="mojo_services"]
module mojo;

The output path is: mojo_services/lib/mojo/foo.mojom.dart

- Add check_mojom_dart.py script which verifies that the generated bindings in the source tree are updated with respect to their .mojom sources.

- Fix mojom generate.dart script to guess when the mojo/services import path is needed.
- Fix mojom generate.dart script to better handle case of missing lib/ directory.

---- Example output #1:

$ ./mojo/dart/tools/presubmit/check_mojom_dart.py
Package mojo_services missing mojo_services/lib/mojo/web_socket.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/command_buffer.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/native_viewport.mojom.dart
Package mojo_services missing mojo_services/lib/http_server/http_request.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/view_manager.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/geocoder.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/ui/view_manager.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/http_message.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/url_response_disk_cache.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/surface_id.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/viewport_parameter_listener.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/service_registry.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/ui/layouts.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/ui/view_trees.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/input_event_constants.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/sharing.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/display.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/tcp_server_socket.mojom.dart
Package mojo_services missing mojo_services/lib/keyboard/keyboard.mojom.dart
Package mojo_services missing mojo_services/lib/input/input.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/location_service.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/surfaces.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/host_resolver.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/navigation.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/window_manager_internal.mojom.dart
Package mojo_services missing mojo_services/lib/http_server/http_server.mojom.dart
Package mojo_services missing mojo_services/lib/contacts/contacts.mojom.dart
Package mojo_services missing mojo_services/lib/speech_recognizer/speech_recognizer.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/files/ioctl_terminal.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/http_server.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/http_connection.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/udp_socket.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/input_events.mojom.dart
Package mojo_services missing mojo_services/lib/icu_data/icu_data.mojom.dart
Package mojo_services missing mojo_services/lib/prediction/prediction.mojom.dart
Package mojo_services missing mojo_services/lib/sensors/sensors.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/files/directory.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/gpu.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/files/types.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/url_loader_interceptor.mojom.dart
Package mojo_services missing mojo_services/lib/http_server/http_server_factory.mojom.dart
Package mojo_services missing mojo_services/lib/notifications/notifications.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/gpu_capabilities.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/window_manager.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/quads.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/camera.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/view_manager_constants.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/files/ioctl.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/files/files.mojom.dart
Package mojo_services missing mojo_services/lib/http_server/http_response.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/context_provider.mojom.dart
Package mojo_services missing mojo_services/lib/native_support/process.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/terminal/terminal_client.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/geometry.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/clipboard.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/terminal/terminal.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/url_loader.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/asset_bundle/asset_bundle.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/authenticating_url_loader_interceptor_meta_factory.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/device_info.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/cookie_store.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/location.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/animations.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/ui/views.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/tcp_bound_socket.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/ui/view_provider.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/input_key_codes.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/tcp_connected_socket.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/content_handler.mojom.dart
Package mojo_services missing mojo_services/lib/nfc/nfc.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/network_service.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/files/file.mojom.dart
Package mojo_services missing mojo_services/lib/authentication/authentication.mojom.dart
Package mojo_services missing mojo_services/lib/tracing/tracing.mojom.dart
Package mojo_services missing mojo_services/lib/mojo/net_address.mojom.dart
*** Dart Generated Bindings Check Failed:
You must regenerate bindings for mojo_services.
From the src directory, run:
$ dart mojo/dart/packages/mojom/bin/mojom.dart gen -m mojo/public -r mojo/ --output mojo/dart/packages/
Package mojo missing mojo/lib/mojo/url_response.mojom.dart
Package mojo missing mojo/lib/mojo/interface_control_messages.mojom.dart
Package mojo missing mojo/lib/mojo/http_header.mojom.dart
Package mojo missing mojo/lib/mojo/service_provider.mojom.dart
Package mojo missing mojo/lib/mojo/application.mojom.dart
Package mojo missing mojo/lib/mojo/shell.mojom.dart
Package mojo missing mojo/lib/mojo/url_request.mojom.dart
Package mojo missing mojo/lib/mojo/network_error.mojom.dart
*** Dart Generated Bindings Check Failed:
You must regenerate bindings for mojo.
From the src directory, run:
$ dart mojo/dart/packages/mojom/bin/mojom.dart gen -m mojo/public -r mojo/ --output mojo/dart/packages/

--- Example output #2 (after touching application.mojom):

$ ./mojo/dart/tools/presubmit/check_mojom_dart.py
Package mojo has old mojo/lib/mojo/application.mojom.dart
*** Dart Generated Bindings Check Failed:
You must regenerate bindings for mojo.
From the src directory, run:
$ dart mojo/dart/packages/mojom/bin/mojom.dart gen -m mojo/public -r mojo/ --output mojo/dart/packages/

R=jamesr@chromium.org

Review URL: https://codereview.chromium.org/1449203002 .
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index 30f1151..d2391d0 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -1063,11 +1063,30 @@
   return errors
 
 
+def _CheckDartBindings(input_api, output_api):
+  """Check that generated .mojom.dart files are current"""
+  args = [input_api.python_executable,
+          'mojo/dart/tools/presubmit/check_mojom_dart.py',
+          '--affected-files']
+  files = []
+  for f in input_api.AffectedFiles():
+    files.append(f.LocalPath())
+  args.extend(files)
+  try:
+    input_api.subprocess.check_output(args)
+    return []
+  except input_api.subprocess.CalledProcessError, error:
+    return [output_api.PresubmitError(
+        'Dart bindings need to be updated.',
+        long_text=error.output)]
+
+
 def CheckChangeOnUpload(input_api, output_api):
   results = []
   results.extend(_CommonChecks(input_api, output_api))
   results.extend(_CheckValidHostsInDEPS(input_api, output_api))
   results.extend(_CheckJavaStyle(input_api, output_api))
+  results.extend(_CheckDartBindings(input_api, output_api))
   results.extend(
       input_api.canned_checks.CheckGNFormatted(input_api, output_api))
   return results