Version 1.14.0-dev.7.2

Cherry-pick 4f54e6aee5027c4303591842dcae6b0f5d2eb4f9 to dev
Cherry-pick 89121bf530b1b25686597f5b1e03c16de9ae3023 to dev
diff --git a/runtime/bin/process.h b/runtime/bin/process.h
index b6babd3..bd40086 100644
--- a/runtime/bin/process.h
+++ b/runtime/bin/process.h
@@ -148,7 +148,7 @@
 
 class SignalInfo {
  public:
-  SignalInfo(int fd, int signal, SignalInfo* next)
+  SignalInfo(intptr_t fd, intptr_t signal, SignalInfo* next)
       : fd_(fd),
         signal_(signal),
         // SignalInfo is expected to be created when in a isolate.
@@ -171,14 +171,14 @@
     }
   }
 
-  int fd() const { return fd_; }
-  int signal() const { return signal_; }
+  intptr_t fd() const { return fd_; }
+  intptr_t signal() const { return signal_; }
   Dart_Port port() const { return port_; }
   SignalInfo* next() const { return next_; }
 
  private:
-  int fd_;
-  int signal_;
+  intptr_t fd_;
+  intptr_t signal_;
   // The port_ is used to identify what isolate the signal-info belongs to.
   Dart_Port port_;
   SignalInfo* next_;
diff --git a/runtime/bin/vmservice/loader.dart b/runtime/bin/vmservice/loader.dart
index 6bc8c45..9b7355e 100644
--- a/runtime/bin/vmservice/loader.dart
+++ b/runtime/bin/vmservice/loader.dart
@@ -64,12 +64,16 @@
 
 void _loadDataUri(SendPort sp, int id, Uri uri) {
   try {
-    if (uri.data.mimeType != "application/dart") {
-      throw "MIME-type must be application/dart";
+    var mime = uri.data.mimeType;
+    if ((mime != "application/dart") &&
+        (mime != "text/plain")) {
+      throw "MIME-type must be application/dart or text/plain: $mime given.";
     }
-    if (uri.data.charset != "utf-8") {
+    var charset = uri.data.charset;
+    if ((charset != "utf-8") &&
+        (charset != "US-ASCII")) {
       // The C++ portion of the embedder assumes UTF-8.
-      throw "Only utf-8 encoding is supported";
+      throw "Only utf-8 or US-ASCII encodings are supported: $charset given.";
     }
     _sendResourceResponse(sp, id, uri.data.contentAsBytes());
   } catch (e) {
@@ -262,7 +266,7 @@
     if (traceLoading) {
       _log("Error loading packages: $e\n$s");
     }
-    sp.send("Uncaught error ($e) loading packags file.");
+    sp.send("Uncaught error ($e) loading packages file.");
   }
 }
 
@@ -364,6 +368,26 @@
   return false;
 }
 
+_loadPackagesData(sp, traceLoading, resource){
+  try {
+    var data = resource.data;
+    var mime = data.mimeType;
+    if (mime != "text/plain") {
+      throw "MIME-type must be text/plain: $mime given.";
+    }
+    var charset = data.charset;
+    if ((charset != "utf-8") &&
+        (charset != "US-ASCII")) {
+      // The C++ portion of the embedder assumes UTF-8.
+      throw "Only utf-8 or US-ASCII encodings are supported: $charset given.";
+    }
+    _parsePackagesFile(sp, traceLoading, resource, data.contentAsBytes());
+  } catch (e) {
+    sp.send("Uncaught error ($e) loading packages data.");
+  }
+}
+
+
 _handlePackagesRequest(SendPort sp,
                        bool traceLoading,
                        int id,
@@ -402,6 +426,8 @@
         if (!exists) {
           sp.send("Packages file '$resource' not found.");
         }
+      } else if (resource.scheme == 'data') {
+        _loadPackagesData(sp, traceLoading, resource);
       } else {
         sp.send("Unknown scheme (${resource.scheme}) for package file at "
                 "'$resource'.");
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index f0bc1ef..f5163a0 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -57,11 +57,6 @@
 # Data uri's not supported by dart2js or the analyzer.
 dart/data_uri*test: Skip
 
-[ ($runtime == vm || $runtime == dart_precompiled) ]
-dart/data_uri_import_test/wrongmime: RuntimeError, OK # VM is more restrictive than the browser
-dart/data_uri_import_test/nomime: RuntimeError, OK
-dart/data_uri_import_test/nocharset: RuntimeError, OK
-
 [ $arch == mips ]
 cc/StaticNonNullSumCallCodegen: Crash, Pass # Issue 17440
 cc/ArrayLengthMaxElements: Crash  # Issue 23275
diff --git a/tests/isolate/scenarios/package_data_uri_spec/package_resolve_test.dart b/tests/isolate/scenarios/package_data_uri_spec/package_resolve_test.dart
new file mode 100644
index 0000000..8884d4e
--- /dev/null
+++ b/tests/isolate/scenarios/package_data_uri_spec/package_resolve_test.dart
@@ -0,0 +1,60 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:io';
+import 'dart:isolate';
+
+final PACKAGE_URI = "package:foo/bar.dart";
+final PACKAGE_PATH = "file:///no/such/directory/bar.dart";
+
+final PACKAGE_SPEC = """
+# This is the content of a .packages file.
+foo:file:///no/such/directory/
+""";
+
+
+main([args, port]) async {
+  if (port != null) {
+    testPackageResolution(port);
+    return;
+  }
+  var data = new Uri.dataFromString(PACKAGE_SPEC);
+  var p = new RawReceivePort();
+  Isolate.spawnUri(Platform.script,
+                   [],
+                   p.sendPort,
+                   packageConfig: data);
+  p.handler = (msg) {
+    p.close();
+    if (msg is! List) {
+      print(msg.runtimeType);
+      throw "Failure return from spawned isolate:\n\n$msg";
+    }
+    if (msg[0] != data.toString()) {
+      throw "Bad package config in child isolate: ${msg[0]}\n"
+            "Expected: $data";
+    }
+    if (msg[1] != PACKAGE_PATH) {
+      throw "Package path not matching: ${msg[1]}";
+    }
+    print("SUCCESS");
+  };
+  print("Spawning isolate's package root: ${await Isolate.packageRoot}");
+}
+
+testPackageResolution(port) async {
+  try {
+    var packageRootStr = Platform.packageRoot;
+    var packageConfigStr = Platform.packageConfig;
+    var packageConfig = await Isolate.packageConfig;
+    var resolvedPkg = await Isolate.resolvePackageUri(Uri.parse(PACKAGE_URI));
+    print("Spawned isolate's package root flag: $packageRootStr");
+    print("Spawned isolate's package config flag: $packageConfigStr");
+    print("Spawned isolate's loaded package config: $packageConfig");
+    print("Spawned isolate's resolved package path: $resolvedPkg");
+    port.send([packageConfig?.toString(), resolvedPkg?.toString()]);
+  } catch (e, s) {
+    port.send("$e\n$s\n");
+  }
+}
diff --git a/tools/VERSION b/tools/VERSION
index 3964b63..4c7a8a0 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -28,4 +28,4 @@
 MINOR 14
 PATCH 0
 PRERELEASE 7
-PRERELEASE_PATCH 1
+PRERELEASE_PATCH 2