Support source maps in precompiled mode and support extended source maps.

BUG=
R=nweiz@google.com

Review URL: https://codereview.chromium.org//2557183002 .
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8daef33..adeab17 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.12.17+3
+
+* Internal changes only.
+
 ## 0.12.17+2
 
 * Fix Dartium debugging on Windows.
diff --git a/lib/src/runner/browser/platform.dart b/lib/src/runner/browser/platform.dart
index 23968c6..31dc749 100644
--- a/lib/src/runner/browser/platform.dart
+++ b/lib/src/runner/browser/platform.dart
@@ -241,6 +241,19 @@
       if (browser.isJS) {
         if (_precompiled(suiteConfig, path)) {
           if (_precompiledPaths.add(suiteConfig.precompiledPath)) {
+            if (!suiteConfig.jsTrace) {
+              var jsPath = p.join(suiteConfig.precompiledPath,
+                  p.relative(path + ".browser_test.dart.js", from: _root));
+
+              var sourceMapPath = '${jsPath}.map';
+              if (new File(sourceMapPath).existsSync()) {
+                _mappers[path] = new StackTraceMapper(
+                    new File(sourceMapPath).readAsStringSync(),
+                    mapUrl: p.toUri(sourceMapPath),
+                    packageResolver: await PackageResolver.current.asSync,
+                    sdkRoot: p.toUri(sdkDir));
+              }
+            }
             _precompiledCascade ??= new shelf.Cascade();
             _precompiledCascade = _precompiledCascade.add(
                 createStaticHandler(suiteConfig.precompiledPath));
diff --git a/lib/src/util/stack_trace_mapper.dart b/lib/src/util/stack_trace_mapper.dart
index 04390fa..2299f47 100644
--- a/lib/src/util/stack_trace_mapper.dart
+++ b/lib/src/util/stack_trace_mapper.dart
@@ -17,11 +17,11 @@
   /// The URI of the SDK root from which dart2js loaded its sources.
   final Uri _sdkRoot;
 
-  StackTraceMapper(String contents, {Uri mapUrl,
-        SyncPackageResolver packageResolver, Uri sdkRoot})
-    : _mapping = parse(contents, mapUrl: mapUrl),
-      _packageResolver = packageResolver,
-      _sdkRoot = sdkRoot;
+  StackTraceMapper(String contents,
+      {Uri mapUrl, SyncPackageResolver packageResolver, Uri sdkRoot})
+      : _mapping = parseExtended(contents, mapUrl: mapUrl),
+        _packageResolver = packageResolver,
+        _sdkRoot = sdkRoot;
 
   /// Converts [trace] into a Dart stack trace.
   StackTrace mapStackTrace(StackTrace trace) =>
diff --git a/pubspec.yaml b/pubspec.yaml
index 6095ac4..df8f9fa 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: test
-version: 0.12.17+2
+version: 0.12.17+3
 author: Dart Team <misc@dartlang.org>
 description: A library for writing dart unit tests.
 homepage: https://github.com/dart-lang/test
@@ -22,8 +22,8 @@
   shelf_packages_handler: '^1.0.0'
   shelf_static: '^0.2.0'
   shelf_web_socket: '^0.2.0'
-  source_map_stack_trace: '^1.1.0'
-  source_maps: '^0.10.1'
+  source_map_stack_trace: '^1.1.4'
+  source_maps: '^0.10.2'
   source_span: '^1.0.0'
   stack_trace: '^1.2.1'
   stream_channel: '^1.3.1'