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