Version 1.14.0-dev.7.1
Cherry-pick a72ddf3a9d4eaa023e966cb39b52c4d78bb2186c to dev
Cherry-pick 82aeb1997ed6f9d84c117fb3f1636b5966ec2f62 to dev
Cherry-pick 9240052ebb59111bdcb58ed06b4a878347b8932f to dev
Cherry-pick 87c1bb4b39473fc59eb1cb6c04fc7c3fef8417ab to dev
Cherry-pick b508064e9e12bda7e454c24c326bc1601d382947 to dev
Cherry-pick ca1d105c5a110d356801a517d79550bff338a9bb to dev
Cherry-pick 0083cf8439be3d7c1aefbae4a541e63e1078e6c6 to dev
Cherry-pick 7b75f2dbb7642732f15ec3f810f91f8a6db3e4f6 to dev
Cherry-pick 28412d153e93c9421b1bfc6b304960d7de408169 to dev
Cherry-pick 04debc9c829cd5f7a34cdd03e7cd6682fa2e6cca to dev
Cherry-pick 6c2c928244450424e0f019c0e5ac5d85057684b5 to dev
Cherry-pick b2a186c2dd1b9407712382ac6e57396c7a57964b to dev
Cherry-pick a3e42b6f7b114e6600e0687872536a6be4caebf6 to dev
Cherry-pick 3dcef185d65c5bbe98162624ef4ddc49571702e2 to dev
Cherry-pick 4e35dd3b05ac9b05c9987d3b870b5e7ee10cb217 to dev
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 308dfa5..a3fffad 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -23,8 +23,14 @@
embedder for every generated random value.
* `dart:io`
- * `Platform` added an `isiOS` getter and `Platform.operatingSystem` may now
+ * `Platform` added an `isIOS` getter and `Platform.operatingSystem` may now
return `ios`.
+ * Added support for WebSocket compression as standardized in RFC 7692. By
+ default compression is turned on for all WebSocket connections. The
+ optionally named parameter `compression` on the methods `WebSocket.connect`,
+ `WebSocket.fromUpgradedSocket`, and `WebSocketTransformer.upgrade` and on
+ the `WebSocketTransformer` constructor is used to select the compression
+ options.
### Tool changes
diff --git a/pkg/analyzer/lib/file_system/physical_file_system.dart b/pkg/analyzer/lib/file_system/physical_file_system.dart
index 18694c0..e7a83a4 100644
--- a/pkg/analyzer/lib/file_system/physical_file_system.dart
+++ b/pkg/analyzer/lib/file_system/physical_file_system.dart
@@ -114,7 +114,7 @@
String readAsStringSync() {
try {
io.File file = _entry as io.File;
- return file.readAsStringSync();
+ return FileBasedSource.fileReadMode(file.readAsStringSync());
} on io.FileSystemException catch (exception) {
throw new FileSystemException(exception.path, exception.message);
}
diff --git a/runtime/bin/platform_patch.dart b/runtime/bin/platform_patch.dart
index 50439c5..577bbb6 100644
--- a/runtime/bin/platform_patch.dart
+++ b/runtime/bin/platform_patch.dart
@@ -26,4 +26,19 @@
=> VMLibraryHooks.packageRootString;
/* patch */ static String _packageConfig()
=> VMLibraryHooks.packageConfigString;
+
+ // This script singleton is written to by the embedder if applicable.
+ /* patch */ static void set _nativeScript(String path) {
+ if (path.startsWith('http:') ||
+ path.startsWith('https:') ||
+ path.startsWith('package:') ||
+ path.startsWith('dart:') ||
+ path.startsWith('data:') ||
+ path.startsWith('file:')) {
+ script = Uri.parse(path);
+ } else {
+ script = Uri.base.resolveUri(new Uri.file(path));
+ }
+ VMLibraryHooks.platformScript = script;
+ }
}
diff --git a/runtime/lib/internal_patch.dart b/runtime/lib/internal_patch.dart
index bba7c38..3089830 100644
--- a/runtime/lib/internal_patch.dart
+++ b/runtime/lib/internal_patch.dart
@@ -28,6 +28,8 @@
static var packageRootUriFuture;
static var packageConfigUriFuture;
static var resolvePackageUriFuture;
+
+ static var platformScript;
}
patch class CodeUnits {
diff --git a/runtime/lib/isolate.cc b/runtime/lib/isolate.cc
index dd93fbe..773bac4 100644
--- a/runtime/lib/isolate.cc
+++ b/runtime/lib/isolate.cc
@@ -212,16 +212,17 @@
}
-DEFINE_NATIVE_ENTRY(Isolate_spawnFunction, 9) {
+DEFINE_NATIVE_ENTRY(Isolate_spawnFunction, 10) {
GET_NON_NULL_NATIVE_ARGUMENT(SendPort, port, arguments->NativeArgAt(0));
- GET_NON_NULL_NATIVE_ARGUMENT(Instance, closure, arguments->NativeArgAt(1));
- GET_NON_NULL_NATIVE_ARGUMENT(Instance, message, arguments->NativeArgAt(2));
- GET_NON_NULL_NATIVE_ARGUMENT(Bool, paused, arguments->NativeArgAt(3));
- GET_NATIVE_ARGUMENT(Bool, fatalErrors, arguments->NativeArgAt(4));
- GET_NATIVE_ARGUMENT(SendPort, onExit, arguments->NativeArgAt(5));
- GET_NATIVE_ARGUMENT(SendPort, onError, arguments->NativeArgAt(6));
- GET_NATIVE_ARGUMENT(String, packageRoot, arguments->NativeArgAt(7));
- GET_NATIVE_ARGUMENT(String, packageConfig, arguments->NativeArgAt(8));
+ GET_NON_NULL_NATIVE_ARGUMENT(String, script_uri, arguments->NativeArgAt(1));
+ GET_NON_NULL_NATIVE_ARGUMENT(Instance, closure, arguments->NativeArgAt(2));
+ GET_NON_NULL_NATIVE_ARGUMENT(Instance, message, arguments->NativeArgAt(3));
+ GET_NON_NULL_NATIVE_ARGUMENT(Bool, paused, arguments->NativeArgAt(4));
+ GET_NATIVE_ARGUMENT(Bool, fatalErrors, arguments->NativeArgAt(5));
+ GET_NATIVE_ARGUMENT(SendPort, onExit, arguments->NativeArgAt(6));
+ GET_NATIVE_ARGUMENT(SendPort, onError, arguments->NativeArgAt(7));
+ GET_NATIVE_ARGUMENT(String, packageRoot, arguments->NativeArgAt(8));
+ GET_NATIVE_ARGUMENT(String, packageConfig, arguments->NativeArgAt(9));
if (closure.IsClosure()) {
Function& func = Function::Handle();
@@ -235,11 +236,6 @@
// Get the parent function so that we get the right function name.
func = func.parent_function();
- // Get the script URI so that we know what script to load.
- const Library& root_lib = Library::Handle(zone,
- isolate->object_store()->root_library());
- const String& script_uri = String::Handle(zone, root_lib.url());
-
const char* utf8_package_root =
packageRoot.IsNull() ? NULL : String2UTF8(packageRoot);
const char* utf8_package_config =
diff --git a/runtime/lib/isolate_patch.dart b/runtime/lib/isolate_patch.dart
index de652ac..09ae531 100644
--- a/runtime/lib/isolate_patch.dart
+++ b/runtime/lib/isolate_patch.dart
@@ -300,7 +300,8 @@
static bool _packageSupported() =>
(VMLibraryHooks.packageRootUriFuture != null) &&
- (VMLibraryHooks.packageConfigUriFuture != null);
+ (VMLibraryHooks.packageConfigUriFuture != null) &&
+ (VMLibraryHooks.resolvePackageUriFuture != null);
/* patch */ static Future<Isolate> spawn(
void entryPoint(message), var message,
@@ -318,7 +319,17 @@
packageConfig = (await Isolate.packageConfig)?.toString();
}
- _spawnFunction(readyPort.sendPort, entryPoint, message,
+ var script = VMLibraryHooks.platformScript;
+ if (script == null) {
+ // We do not have enough information to support spawning the new
+ // isolate.
+ throw new UnsupportedError("Isolate.spawn");
+ }
+ if (script.scheme == "package") {
+ script = await Isolate.resolvePackageUri(script);
+ }
+
+ _spawnFunction(readyPort.sendPort, script.toString(), entryPoint, message,
paused, errorsAreFatal, onExit, onError,
packageRoot, packageConfig);
return await _spawnCommon(readyPort);
@@ -365,7 +376,7 @@
}
}
try {
- // Resolve the uri agains the current isolate's root Uri first.
+ // Resolve the uri against the current isolate's root Uri first.
var spawnedUri = _rootUri.resolveUri(uri);
// Inherit this isolate's package resolution setup if not overridden.
@@ -378,6 +389,21 @@
}
}
+ // Ensure to resolve package: URIs being handed in as parameters.
+ if (packageRoot != null) {
+ // Avoid calling resolvePackageUri if not stricly necessary in case
+ // the API is not supported.
+ if (packageRoot.scheme == "package") {
+ packageRoot = await Isolate.resolvePackageUri(packageRoot);
+ }
+ } else if (packageConfig != null) {
+ // Avoid calling resolvePackageUri if not strictly necessary in case
+ // the API is not supported.
+ if (packageConfig.scheme == "package") {
+ packageConfig = await Isolate.resolvePackageUri(packageConfig);
+ }
+ }
+
// The VM will invoke [_startIsolate] and not `main`.
readyPort = new RawReceivePort();
var packageRootString = packageRoot?.toString();
@@ -394,7 +420,7 @@
if (readyPort != null) {
readyPort.close();
}
- return await new Future<Isolate>.error(e, st);
+ rethrow;
}
}
@@ -436,7 +462,8 @@
static const _ERROR_FATAL = 9;
- static void _spawnFunction(SendPort readyPort, Function topLevelFunction,
+ static void _spawnFunction(SendPort readyPort, String uri,
+ Function topLevelFunction,
var message, bool paused, bool errorsAreFatal,
SendPort onExit, SendPort onError,
String packageRoot, String packageConfig)
diff --git a/runtime/vm/bootstrap_natives.h b/runtime/vm/bootstrap_natives.h
index 036f460..8803755 100644
--- a/runtime/vm/bootstrap_natives.h
+++ b/runtime/vm/bootstrap_natives.h
@@ -311,7 +311,7 @@
V(Int32x4_setFlagZ, 2) \
V(Int32x4_setFlagW, 2) \
V(Int32x4_select, 3) \
- V(Isolate_spawnFunction, 9) \
+ V(Isolate_spawnFunction, 10) \
V(Isolate_spawnUri, 12) \
V(Isolate_getPortAndCapabilitiesOfCurrentIsolate, 0) \
V(Isolate_getCurrentRootUriStr, 0) \
diff --git a/runtime/vm/flow_graph_compiler_arm.cc b/runtime/vm/flow_graph_compiler_arm.cc
index c1eb50c..abd8b65 100644
--- a/runtime/vm/flow_graph_compiler_arm.cc
+++ b/runtime/vm/flow_graph_compiler_arm.cc
@@ -275,12 +275,11 @@
const Class& type_class = Class::ZoneHandle(zone(), type.type_class());
ASSERT((type_class.NumTypeArguments() > 0) || type_class.IsSignatureClass());
const Register kInstanceReg = R0;
- Error& malformed_error = Error::Handle(zone());
+ Error& bound_error = Error::Handle(zone());
const Type& int_type = Type::Handle(zone(), Type::IntType());
- const bool smi_is_ok =
- int_type.IsSubtypeOf(type, &malformed_error, Heap::kOld);
+ const bool smi_is_ok = int_type.IsSubtypeOf(type, &bound_error, Heap::kOld);
// Malformed type should have been handled at graph construction time.
- ASSERT(smi_is_ok || malformed_error.IsNull());
+ ASSERT(smi_is_ok || bound_error.IsNull());
__ tst(kInstanceReg, Operand(kSmiTagMask));
if (smi_is_ok) {
__ b(is_instance_lbl, EQ);
diff --git a/runtime/vm/flow_graph_compiler_arm64.cc b/runtime/vm/flow_graph_compiler_arm64.cc
index f21941f..359c89c 100644
--- a/runtime/vm/flow_graph_compiler_arm64.cc
+++ b/runtime/vm/flow_graph_compiler_arm64.cc
@@ -267,12 +267,11 @@
const Class& type_class = Class::ZoneHandle(zone(), type.type_class());
ASSERT((type_class.NumTypeArguments() > 0) || type_class.IsSignatureClass());
const Register kInstanceReg = R0;
- Error& malformed_error = Error::Handle(zone());
+ Error& bound_error = Error::Handle(zone());
const Type& int_type = Type::Handle(zone(), Type::IntType());
- const bool smi_is_ok =
- int_type.IsSubtypeOf(type, &malformed_error, Heap::kOld);
+ const bool smi_is_ok = int_type.IsSubtypeOf(type, &bound_error, Heap::kOld);
// Malformed type should have been handled at graph construction time.
- ASSERT(smi_is_ok || malformed_error.IsNull());
+ ASSERT(smi_is_ok || bound_error.IsNull());
__ tsti(kInstanceReg, Immediate(kSmiTagMask));
if (smi_is_ok) {
__ b(is_instance_lbl, EQ);
diff --git a/runtime/vm/flow_graph_compiler_ia32.cc b/runtime/vm/flow_graph_compiler_ia32.cc
index e3b0fcf..b2272fe9 100644
--- a/runtime/vm/flow_graph_compiler_ia32.cc
+++ b/runtime/vm/flow_graph_compiler_ia32.cc
@@ -279,12 +279,11 @@
const Class& type_class = Class::ZoneHandle(zone(), type.type_class());
ASSERT((type_class.NumTypeArguments() > 0) || type_class.IsSignatureClass());
const Register kInstanceReg = EAX;
- Error& malformed_error = Error::Handle(zone());
+ Error& bound_error = Error::Handle(zone());
const Type& int_type = Type::Handle(zone(), Type::IntType());
- const bool smi_is_ok =
- int_type.IsSubtypeOf(type, &malformed_error, Heap::kOld);
+ const bool smi_is_ok = int_type.IsSubtypeOf(type, &bound_error, Heap::kOld);
// Malformed type should have been handled at graph construction time.
- ASSERT(smi_is_ok || malformed_error.IsNull());
+ ASSERT(smi_is_ok || bound_error.IsNull());
__ testl(kInstanceReg, Immediate(kSmiTagMask));
if (smi_is_ok) {
__ j(ZERO, is_instance_lbl);
diff --git a/runtime/vm/flow_graph_compiler_mips.cc b/runtime/vm/flow_graph_compiler_mips.cc
index 83919f5..f98bb67 100644
--- a/runtime/vm/flow_graph_compiler_mips.cc
+++ b/runtime/vm/flow_graph_compiler_mips.cc
@@ -267,12 +267,11 @@
const Class& type_class = Class::ZoneHandle(zone(), type.type_class());
ASSERT((type_class.NumTypeArguments() > 0) || type_class.IsSignatureClass());
const Register kInstanceReg = A0;
- Error& malformed_error = Error::Handle(zone());
+ Error& bound_error = Error::Handle(zone());
const Type& int_type = Type::Handle(zone(), Type::IntType());
- const bool smi_is_ok =
- int_type.IsSubtypeOf(type, &malformed_error, Heap::kOld);
+ const bool smi_is_ok = int_type.IsSubtypeOf(type, &bound_error, Heap::kOld);
// Malformed type should have been handled at graph construction time.
- ASSERT(smi_is_ok || malformed_error.IsNull());
+ ASSERT(smi_is_ok || bound_error.IsNull());
__ andi(CMPRES1, kInstanceReg, Immediate(kSmiTagMask));
if (smi_is_ok) {
__ beq(CMPRES1, ZR, is_instance_lbl);
diff --git a/runtime/vm/flow_graph_compiler_x64.cc b/runtime/vm/flow_graph_compiler_x64.cc
index 4a7c7ab..e54b1eb 100644
--- a/runtime/vm/flow_graph_compiler_x64.cc
+++ b/runtime/vm/flow_graph_compiler_x64.cc
@@ -276,12 +276,11 @@
const Class& type_class = Class::ZoneHandle(zone(), type.type_class());
ASSERT((type_class.NumTypeArguments() > 0) || type_class.IsSignatureClass());
const Register kInstanceReg = RAX;
- Error& malformed_error = Error::Handle(zone());
+ Error& bound_error = Error::Handle(zone());
const Type& int_type = Type::Handle(zone(), Type::IntType());
- const bool smi_is_ok =
- int_type.IsSubtypeOf(type, &malformed_error, Heap::kOld);
+ const bool smi_is_ok = int_type.IsSubtypeOf(type, &bound_error, Heap::kOld);
// Malformed type should have been handled at graph construction time.
- ASSERT(smi_is_ok || malformed_error.IsNull());
+ ASSERT(smi_is_ok || bound_error.IsNull());
__ testq(kInstanceReg, Immediate(kSmiTagMask));
if (smi_is_ok) {
__ j(ZERO, is_instance_lbl);
diff --git a/runtime/vm/intermediate_language.h b/runtime/vm/intermediate_language.h
index 876a015..0a40848 100644
--- a/runtime/vm/intermediate_language.h
+++ b/runtime/vm/intermediate_language.h
@@ -3194,7 +3194,8 @@
}
virtual bool AttributesEqual(Instruction* other) const {
IfThenElseInstr* other_if_then_else = other->AsIfThenElse();
- return comparison()->AttributesEqual(other_if_then_else->comparison()) &&
+ return (comparison()->tag() == other_if_then_else->comparison()->tag()) &&
+ comparison()->AttributesEqual(other_if_then_else->comparison()) &&
(if_true_ == other_if_then_else->if_true_) &&
(if_false_ == other_if_then_else->if_false_);
}
diff --git a/runtime/vm/isolate_test.cc b/runtime/vm/isolate_test.cc
index 1caee52..4bf156d 100644
--- a/runtime/vm/isolate_test.cc
+++ b/runtime/vm/isolate_test.cc
@@ -77,8 +77,7 @@
EXPECT_VALID(result);
// Run until all ports to isolate are closed.
result = Dart_RunLoop();
- EXPECT_ERROR(result,
- "Isolate spawn is not supported by this Dart implementation");
+ EXPECT_ERROR(result, "Unsupported operation: Isolate.spawn");
EXPECT(Dart_ErrorHasException(result));
Dart_Handle exception_result = Dart_ErrorGetException(result);
EXPECT_VALID(exception_result);
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 4e43f45..730d560 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -3876,6 +3876,12 @@
if (!interface.IsFinalized()) {
// We may be checking bounds at finalization time and can encounter
// a still unfinalized interface.
+ if (interface.IsBeingFinalized()) {
+ // Interface is part of a still unfinalized recursive type graph.
+ // Skip it. The caller will create a bounded type to be checked at
+ // runtime if this type test returns false at compile time.
+ continue;
+ }
ClassFinalizer::FinalizeType(
thsi, interface, ClassFinalizer::kCanonicalize);
interfaces.SetAt(i, interface);
@@ -15513,8 +15519,8 @@
} else if (bound.IsType()) {
const Class& cls = Class::Handle(zone, Type::Cast(bound).type_class());
bound_name = cls.Name();
+ pieces.Add(bound_name);
if (Type::Cast(bound).arguments() != TypeArguments::null()) {
- pieces.Add(bound_name);
pieces.Add(Symbols::OptimizedOut());
}
} else {
@@ -15727,6 +15733,11 @@
if (Equals(other)) {
return true;
}
+ // Redundant check if other type is equal to the upper bound of this type.
+ if (IsBoundedType() &&
+ AbstractType::Handle(BoundedType::Cast(*this).bound()).Equals(other)) {
+ return true;
+ }
return false; // TODO(regis): We should return "maybe after instantiation".
}
// Type parameters cannot be handled by Class::TypeTest().
@@ -16144,6 +16155,13 @@
for (intptr_t i = 0; i < from_index; i++) {
type_arg = type_args.TypeAt(i);
other_type_arg = other_type_args.TypeAt(i);
+ // Ignore bounds of bounded types.
+ while (type_arg.IsBoundedType()) {
+ type_arg = BoundedType::Cast(type_arg).type();
+ }
+ while (other_type_arg.IsBoundedType()) {
+ other_type_arg = BoundedType::Cast(other_type_arg).type();
+ }
ASSERT(type_arg.IsEquivalent(other_type_arg, trail));
}
}
@@ -16973,13 +16991,20 @@
// Instantiated upper_bound may not be finalized. See comment above.
}
if (bound_error->IsNull()) {
- if (!type_param.CheckBound(bounded_type, upper_bound, bound_error) &&
- bound_error->IsNull()) {
+ if (bounded_type.IsBeingFinalized() ||
+ upper_bound.IsBeingFinalized() ||
+ (!type_param.CheckBound(bounded_type, upper_bound, bound_error) &&
+ bound_error->IsNull())) {
// We cannot determine yet whether the bounded_type is below the
- // upper_bound, because one or both of them is still uninstantiated.
- ASSERT(!bounded_type.IsInstantiated() || !upper_bound.IsInstantiated());
- // Postpone bound check by returning a new BoundedType with partially
- // instantiated bounded_type and upper_bound, but keeping type_param.
+ // upper_bound, because one or both of them is still being finalized or
+ // uninstantiated.
+ ASSERT(bounded_type.IsBeingFinalized() ||
+ upper_bound.IsBeingFinalized() ||
+ !bounded_type.IsInstantiated() ||
+ !upper_bound.IsInstantiated());
+ // Postpone bound check by returning a new BoundedType with unfinalized
+ // or partially instantiated bounded_type and upper_bound, but keeping
+ // type_param.
bounded_type = BoundedType::New(bounded_type, upper_bound, type_param);
}
}
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 5d3c509..d67b06a 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -5318,7 +5318,7 @@
virtual bool IsRecursive() const;
virtual RawAbstractType* InstantiateFrom(
const TypeArguments& instantiator_type_arguments,
- Error* malformed_error,
+ Error* bound_error,
TrailPtr trail = NULL,
Heap::Space space = Heap::kNew) const;
virtual RawAbstractType* CloneUnfinalized() const;
diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
index 981b84b..47cb001 100644
--- a/runtime/vm/parser.cc
+++ b/runtime/vm/parser.cc
@@ -12679,7 +12679,7 @@
Array::New(element_list.length(), Heap::kOld));
const_list.SetTypeArguments(
TypeArguments::Handle(Z, list_type_arguments.Canonicalize()));
- Error& malformed_error = Error::Handle(Z);
+ Error& bound_error = Error::Handle(Z);
for (int i = 0; i < element_list.length(); i++) {
AstNode* elem = element_list[i];
// Arguments have been evaluated to a literal value already.
@@ -12691,10 +12691,10 @@
!elem->AsLiteralNode()->literal().IsInstanceOf(
element_type,
TypeArguments::Handle(Z),
- &malformed_error))) {
- // If the failure is due to a malformed type error, display it instead.
- if (!malformed_error.IsNull()) {
- ReportError(malformed_error);
+ &bound_error))) {
+ // If the failure is due to a bound error, display it instead.
+ if (!bound_error.IsNull()) {
+ ReportError(bound_error);
} else {
ReportError(elem->AsLiteralNode()->token_pos(),
"list literal element at index %d must be "
@@ -12905,7 +12905,7 @@
Array& key_value_array =
Array::ZoneHandle(Z, Array::New(kv_pairs_list.length(), Heap::kOld));
AbstractType& arg_type = Type::Handle(Z);
- Error& malformed_error = Error::Handle(Z);
+ Error& bound_error = Error::Handle(Z);
for (int i = 0; i < kv_pairs_list.length(); i++) {
AstNode* arg = kv_pairs_list[i];
// Arguments have been evaluated to a literal value already.
@@ -12924,10 +12924,10 @@
!arg->AsLiteralNode()->literal().IsInstanceOf(
arg_type,
Object::null_type_arguments(),
- &malformed_error))) {
- // If the failure is due to a malformed type error, display it.
- if (!malformed_error.IsNull()) {
- ReportError(malformed_error);
+ &bound_error))) {
+ // If the failure is due to a bound error, display it.
+ if (!bound_error.IsNull()) {
+ ReportError(bound_error);
} else {
ReportError(arg->AsLiteralNode()->token_pos(),
"map literal %s at index %d must be "
@@ -13541,13 +13541,13 @@
new_object = new(Z) LiteralNode(new_pos, const_instance);
if (!type_bound.IsNull()) {
ASSERT(!type_bound.IsMalformed());
- Error& malformed_error = Error::Handle(Z);
+ Error& bound_error = Error::Handle(Z);
ASSERT(!is_top_level_); // We cannot check unresolved types.
if (!const_instance.IsInstanceOf(type_bound,
TypeArguments::Handle(Z),
- &malformed_error)) {
+ &bound_error)) {
type_bound = ClassFinalizer::NewFinalizedMalformedType(
- malformed_error,
+ bound_error,
script_,
new_pos,
"const factory result is not an instance of '%s'",
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index 2e82f34..88d2b88 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -37865,6 +37865,7 @@
'INPUT::align',
'INPUT::alt',
'INPUT::autocomplete',
+ 'INPUT::autofocus',
'INPUT::checked',
'INPUT::disabled',
'INPUT::inputmode',
diff --git a/sdk/lib/html/dartium/html_dartium.dart b/sdk/lib/html/dartium/html_dartium.dart
index 6b85ade..3ef584b 100644
--- a/sdk/lib/html/dartium/html_dartium.dart
+++ b/sdk/lib/html/dartium/html_dartium.dart
@@ -45222,6 +45222,7 @@
'INPUT::align',
'INPUT::alt',
'INPUT::autocomplete',
+ 'INPUT::autofocus',
'INPUT::checked',
'INPUT::disabled',
'INPUT::inputmode',
diff --git a/sdk/lib/io/platform.dart b/sdk/lib/io/platform.dart
index 7cd20a1..326597f 100644
--- a/sdk/lib/io/platform.dart
+++ b/sdk/lib/io/platform.dart
@@ -117,7 +117,7 @@
/**
* Returns true if the operating system is iOS.
*/
- static final bool isiOS = (_operatingSystem == "ios");
+ static final bool isIOS = (_operatingSystem == "ios");
/**
* Get the environment for this process.
diff --git a/sdk/lib/io/platform_impl.dart b/sdk/lib/io/platform_impl.dart
index f4d7a24..d7e722f 100644
--- a/sdk/lib/io/platform_impl.dart
+++ b/sdk/lib/io/platform_impl.dart
@@ -46,20 +46,6 @@
static String get operatingSystem => _operatingSystem();
static Uri script;
- // This script singleton is written to by the embedder if applicable.
- static void set _nativeScript(String path) {
- if (path.startsWith('http:') ||
- path.startsWith('https:') ||
- path.startsWith('package:') ||
- path.startsWith('dart:') ||
- path.startsWith('data:') ||
- path.startsWith('file:')) {
- script = Uri.parse(path);
- } else {
- script = Uri.base.resolveUri(new Uri.file(path));
- }
- }
-
static String get localHostname {
var result = _localHostname();
if (result is OSError) {
diff --git a/sdk/lib/io/websocket.dart b/sdk/lib/io/websocket.dart
index edb5b6d..183714f 100644
--- a/sdk/lib/io/websocket.dart
+++ b/sdk/lib/io/websocket.dart
@@ -116,7 +116,14 @@
info = "; client_max_window_bits=$size";
} else {
// Client request. Specify default
- info = "; client_max_window_bits";
+ if (clientMaxWindowBits == null) {
+ info = "; client_max_window_bits";
+ } else {
+ info = "; client_max_window_bits=$clientMaxWindowBits";
+ }
+ if (serverMaxWindowBits != null) {
+ info += "; server_max_window_bits=$serverMaxWindowBits";
+ }
}
return info;
@@ -139,14 +146,14 @@
info.headerValue = _WebSocketImpl.PER_MESSAGE_DEFLATE;
if (clientNoContextTakeover &&
- (requested != null &&
- requested.parameters.containsKey(_clientNoContextTakeover))) {
+ (requested == null || (requested != null &&
+ requested.parameters.containsKey(_clientNoContextTakeover)))) {
info.headerValue += "; client_no_context_takeover";
}
if (serverNoContextTakeover &&
- (requested != null &&
- requested.parameters.containsKey(_serverNoContextTakeover))) {
+ (requested == null || (requested != null &&
+ requested.parameters.containsKey(_serverNoContextTakeover)))) {
info.headerValue += "; server_no_context_takeover";
}
diff --git a/sdk/lib/io/websocket_impl.dart b/sdk/lib/io/websocket_impl.dart
index 879d05e..2aa894c 100644
--- a/sdk/lib/io/websocket_impl.dart
+++ b/sdk/lib/io/websocket_impl.dart
@@ -133,13 +133,16 @@
throw new WebSocketException("Protocol error");
}
- if ((byte & RSV1) != 0) {
- _compressed = true;
- } else {
- _compressed = false;
- }
_opcode = (byte & OPCODE);
+ if (_opcode != _WebSocketOpcode.CONTINUATION) {
+ if ((byte & RSV1) != 0) {
+ _compressed = true;
+ } else {
+ _compressed = false;
+ }
+ }
+
if (_opcode <= _WebSocketOpcode.BINARY) {
if (_opcode == _WebSocketOpcode.CONTINUATION) {
if (_currentMessageType == _WebSocketMessageType.NONE) {
@@ -478,9 +481,11 @@
response.headers.add("Sec-WebSocket-Extensions", info.headerValue);
var serverNoContextTakeover =
- hv.parameters.containsKey(_serverNoContextTakeover);
+ (hv.parameters.containsKey(_serverNoContextTakeover) &&
+ compression.serverNoContextTakeover);
var clientNoContextTakeover =
- hv.parameters.containsKey(_clientNoContextTakeover);
+ (hv.parameters.containsKey(_clientNoContextTakeover) &&
+ compression.clientNoContextTakeover);
var deflate = new _WebSocketPerMessageDeflate(
serverNoContextTakeover: serverNoContextTakeover,
clientNoContextTakeover: clientNoContextTakeover,
@@ -567,28 +572,24 @@
data.addAll(const [0x00, 0x00, 0xff, 0xff]);
decoder.process(data, 0, data.length);
- var reuse =
- !(serverSide ? clientNoContextTakeover : serverNoContextTakeover);
var result = [];
var out;
- while ((out = decoder.processed(flush: reuse)) != null) {
+ while ((out = decoder.processed()) != null) {
result.addAll(out);
}
- decoder.processed(flush: reuse);
-
- if (!reuse) {
+ if ((serverSide && clientNoContextTakeover) ||
+ (!serverSide && serverNoContextTakeover)) {
decoder.end();
decoder = null;
}
+
return new Uint8List.fromList(result);
}
List<int> processOutgoingMessage(List<int> msg) {
_ensureEncoder();
- var reuse =
- !(serverSide ? serverNoContextTakeover : clientNoContextTakeover);
var result = [];
Uint8List buffer;
var out;
@@ -607,11 +608,12 @@
encoder.process(buffer, 0, buffer.length);
- while ((out = encoder.processed(flush: reuse)) != null) {
+ while ((out = encoder.processed()) != null) {
result.addAll(out);
}
- if (serverSide ? serverNoContextTakeover : clientNoContextTakeover) {
+ if ((!serverSide && clientNoContextTakeover) ||
+ (serverSide && serverNoContextTakeover)) {
encoder.end();
encoder = null;
}
diff --git a/tests/co19/co19-dartium.status b/tests/co19/co19-dartium.status
index ad67b18..f97f79d 100644
--- a/tests/co19/co19-dartium.status
+++ b/tests/co19/co19-dartium.status
@@ -76,6 +76,7 @@
Language/Expressions/Instance_Creation/Const/abstract_class_t01: Fail # Issue 22007
Language/Expressions/Instance_Creation/Const/abstract_class_t03: Fail # Issue 22007
Language/Expressions/Property_Extraction/Named_Constructor_Extraction/not_class_t01: RuntimeError # Please triage this failure.
+Language/Expressions/Spawning_an_Isolate/new_isolate_t01: RuntimeError, OK # Uses Isolate.spawn.
Language/Libraries_and_Scripts/Imports/namespace_changes_t10: RuntimeError # Please triage this failure.
Language/Libraries_and_Scripts/Parts/compilation_t02: Skip # Please triage this failure.
Language/Libraries_and_Scripts/Parts/syntax_t05: Skip # Times out flakily. Issue 20881
@@ -814,9 +815,72 @@
LibTest/isolate/Isolate/spawnUri_A01_t05: RuntimeError # Dart issue 15974
LibTest/isolate/Isolate/spawnUri_A02_t01: RuntimeError # Dart issue 15974
LibTest/isolate/Isolate/spawnUri_A02_t04: Skip # Dart issue 15974
-LibTest/isolate/Isolate/spawn_A01_t03: Skip # co19-roll r667: Please triage this failure
-LibTest/isolate/Isolate/spawn_A01_t04: Skip # co19-roll r667: Please triage this failure
+LibTest/isolate/Isolate/spawn_A01_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/Isolate/spawn_A01_t02: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/Isolate/spawn_A01_t05: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/Isolate/spawn_A01_t03: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/Isolate/spawn_A01_t04: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/RawReceivePort/RawReceivePort_A01_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/RawReceivePort/RawReceivePort_A01_t02: RuntimeError, OK # Uses Isolate.spawn.
LibTest/isolate/RawReceivePort/close_A01_t01: Pass, RuntimeError # Issue 13921, co19 issue for false pass https://github.com/dart-lang/co19/issues/13
+LibTest/isolate/RawReceivePort/handler_A01_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/RawReceivePort/sendPort_A01_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/any_A01_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/any_A01_t02: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/asBroadcastStream_A01_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/asBroadcastStream_A01_t03: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/asBroadcastStream_A01_t04: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/asBroadcastStream_A04_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/asBroadcastStream_A04_t02: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/asBroadcastStream_A04_t03: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/contains_A01_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/distinct_A01_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/distinct_A01_t02: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/drain_A02_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/drain_A02_t02: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/elementAt_A01_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/elementAt_A03_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/every_A01_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/expand_A01_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/firstWhere_A01_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/firstWhere_A02_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/firstWhere_A03_t02: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/first_A01_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/first_A02_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/first_A02_t02: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/fold_A01_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/fold_A01_t02: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/forEach_A01_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/isEmpty_A01_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/join_A01_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/join_A01_t02: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/lastWhere_A02_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/lastWhere_A04_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/last_A01_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/last_A02_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/length_A01_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/listen_A01_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/map_A01_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/pipe_A01_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/reduce_A01_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/reduce_A01_t02: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/reduce_A01_t03: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/singleWhere_A01_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/singleWhere_A02_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/single_A01_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/single_A02_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/skipWhile_A01_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/skip_A01_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/takeWhile_A01_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/take_A01_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/take_A01_t02: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/take_A01_t03: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/toList_A01_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/toSet_A01_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/transform_A01_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/transform_A01_t02: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/where_A01_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/ReceivePort/where_A01_t02: RuntimeError, OK # Uses Isolate.spawn.
LibTest/isolate/ReceivePort/asBroadcastStream_A01_t02: Pass, RuntimeError # Issue 13921, co19 issue for false pass https://github.com/dart-lang/co19/issues/13
LibTest/isolate/ReceivePort/asBroadcastStream_A02_t01: RuntimeError # Issue 13921
LibTest/isolate/ReceivePort/asBroadcastStream_A03_t01: Pass, RuntimeError # Issue 13921, co19 issue for false pass https://github.com/dart-lang/co19/issues/13
@@ -825,7 +889,11 @@
LibTest/isolate/ReceivePort/close_A01_t01: Pass, RuntimeError # Issue 13921, co19 issue for false pass https://github.com/dart-lang/co19/issues/13
LibTest/isolate/ReceivePort/close_A02_t01: Pass, RuntimeError # Issue 13921, co19 issue for false pass https://github.com/dart-lang/co19/issues/13
LibTest/isolate/ReceivePort/sendPort_A01_t01: RuntimeError # Issue 13921
-LibTest/isolate/SendPort/send_A01_t04: RuntimeError # co19-roll r706. Please triage this failure.
+LibTest/isolate/SendPort/send_A01_t01: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/SendPort/send_A01_t02: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/SendPort/send_A01_t03: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/SendPort/send_A01_t04: RuntimeError, OK # Uses Isolate.spawn.
+LibTest/isolate/SendPort/send_A02_t01: RuntimeError, OK # Uses Isolate.spawn.
LibTest/isolate/SendPort/send_A02_t04: Fail # Issue 13921
LibTest/isolate/SendPort/send_A02_t05: Fail # Issue 13921
LibTest/isolate/SendPort/send_A02_t06: Fail # Issue 13921
diff --git a/tests/html/html.status b/tests/html/html.status
index cf4c69a..cf5e043 100644
--- a/tests/html/html.status
+++ b/tests/html/html.status
@@ -59,6 +59,8 @@
# Dartium seems to lose the data from the dispatchEvent.
keyboard_event_test: Fail # Issue 13902
fileapi_test/getFile: Pass, Fail # Issue 20488
+async_test: RuntimeError, OK # Uses Isolate.spawn.
+isolates_test: RuntimeError, OK # Uses Isolate.spawn.
[ $compiler == none && ($runtime == drt || $runtime == dartium ) && $mode == debug ]
websocket_test/websocket: Skip # Issue 17666
diff --git a/tests/isolate/isolate.status b/tests/isolate/isolate.status
index 5bfd88e..e11f91a 100644
--- a/tests/isolate/isolate.status
+++ b/tests/isolate/isolate.status
@@ -20,7 +20,7 @@
message3_test/int32x4: Crash, Timeout # Issue 21818
-[ ($compiler == none || $compiler == precompiler) && $runtime == ContentShellOnAndroid ]
+[ ($compiler == none) && $runtime == ContentShellOnAndroid ]
*: Skip # Isolate tests are timing out flakily on Android content_shell. Issue 19795
[ $compiler == dart2js && $runtime == safarimobilesim ]
@@ -81,26 +81,25 @@
[ $compiler == dart2js && $runtime == chromeOnAndroid ]
unresolved_ports_test: Pass, Timeout # Issue 15610
-[ ($compiler == none || $compiler == precompiler) && $runtime == drt ]
+[ ($compiler == none) && $runtime == drt ]
spawn_uri_nested_vm_test: Skip # Issue 14463
[ $jscl ]
spawn_uri_multi_test/none: RuntimeError # Issue 13544
-[ ($compiler == none || $compiler == precompiler) && $runtime == ContentShellOnAndroid ]
+[ ($compiler == none) && $runtime == ContentShellOnAndroid ]
nested_spawn2_test: Skip # Issue 19127: This test is timing out.
-[ ($compiler == none || $compiler == precompiler) && ($runtime == dartium || $runtime == ContentShellOnAndroid) ]
+[ ($compiler == none) && ($runtime == dartium || $runtime == ContentShellOnAndroid) ]
spawn_uri_nested_vm_test: Skip # Issue 14479: This test is timing out.
-[ ($compiler == none || $compiler == precompiler) && $runtime == dartium && $arch == x64 ]
+[ ($compiler == none) && $runtime == dartium && $arch == x64 ]
isolate/spawn_uri_multi_test/01: Skip # Times out. Issue 24795
-[ ($compiler == none || $compiler == precompiler) && ( $runtime == dartium || $runtime == drt || $runtime == ContentShellOnAndroid) ]
+[ ($compiler == none) && ( $runtime == dartium || $runtime == drt || $runtime == ContentShellOnAndroid) ]
typed_message_test: Skip # Issue 13921, 14400
isolate_stress_test: Skip # Issue 13921 Dom isolates don't support spawnFunction
object_leak_test: Skip # Issue 13921 Dom isolates don't support spawnFunction
-simple_message_test/none: Fail, OK # Issue 13921 Dom isolates don't support spawnFunction
spawn_uri_missing_from_isolate_test: Skip # Issue 17649
spawn_uri_missing_test: SkipSlow # Times out.
kill3_test: Fail, OK # 13921 Dom isolates don't support spawnFunction
@@ -115,6 +114,32 @@
error_exit_at_spawnuri_test: SkipByDesign # 13921 Dom isolates don't support spawnFunction
error_at_spawnuri_test: SkipByDesign # 13921 Dom isolates don't support spawnFunction
exit_at_spawnuri_test: SkipByDesign # 13921 Dom isolates don't support spawnFunction
+issue_21398_parent_isolate2_test/01: SkipByDesign # Uses spawnFunction
+compile_time_error_test/none: RuntimeError, OK # Uses Isolate.spawn.
+function_send_test: RuntimeError, OK # Uses Isolate.spawn.
+handle_error2_test: RuntimeError, OK # Uses Isolate.spawn.
+handle_error3_test: RuntimeError, OK # Uses Isolate.spawn.
+handle_error_test: RuntimeError, OK # Uses Isolate.spawn.
+isolate_current_test: RuntimeError, OK # Uses Isolate.spawn.
+isolate_import_test/none: RuntimeError, OK # Uses Isolate.spawn.
+issue_21398_parent_isolate1_test: RuntimeError, OK # Uses Isolate.spawn.
+issue_21398_parent_isolate_test: RuntimeError, OK # Uses Isolate.spawn.
+kill2_test: RuntimeError, OK # Uses Isolate.spawn.
+kill_self_test: RuntimeError, OK # Uses Isolate.spawn.
+kill_test: RuntimeError, OK # Uses Isolate.spawn.
+message3_test/byteBuffer: RuntimeError, OK # Uses Isolate.spawn.
+message3_test/constInstance: RuntimeError, OK # Uses Isolate.spawn.
+message3_test/constList: RuntimeError, OK # Uses Isolate.spawn.
+message3_test/constList_identical: RuntimeError, OK # Uses Isolate.spawn.
+message3_test/constMap: RuntimeError, OK # Uses Isolate.spawn.
+message3_test/fun: RuntimeError, OK # Uses Isolate.spawn.
+message3_test/none: RuntimeError, OK # Uses Isolate.spawn.
+message_enum_test: RuntimeError, OK # Uses Isolate.spawn.
+ondone_test: RuntimeError, OK # Uses Isolate.spawn.
+pause_test: RuntimeError, OK # Uses Isolate.spawn.
+simple_message_test/none: RuntimeError, OK # Uses Isolate.spawn.
+start_paused_test: RuntimeError, OK # Uses Isolate.spawn.
+message3_test/int32x4: RuntimeError, OK # Uses Isolate.spawn.
[ $compiler == dart2analyzer ]
@@ -126,7 +151,7 @@
package_config_test: SkipByDesign # Uses Isolate.packageConfig
package_resolve_test: SkipByDesign # Uses Isolate.resolvePackageUri
spawn_uri_fail_test: SkipByDesign # Uses dart:io.
-scenarios/*: SkipByDesign # Use automatic package resolution and .dart URIs.
+scenarios/*: SkipByDesign # Use automatic package resolution, spawnFunction and .dart URIs.
[ ($noopt || $compiler == precompiler) ]
# Imports dart:mirrors
diff --git a/tests/isolate/scenarios/automatic_resolution_root/package_resolve_test.dart b/tests/isolate/scenarios/automatic_resolution_root/package_resolve_test.dart
index 15eaa3e..889763c 100644
--- a/tests/isolate/scenarios/automatic_resolution_root/package_resolve_test.dart
+++ b/tests/isolate/scenarios/automatic_resolution_root/package_resolve_test.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// 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.
diff --git a/tests/isolate/scenarios/automatic_resolution_spec/package_resolve_test.dart b/tests/isolate/scenarios/automatic_resolution_spec/package_resolve_test.dart
index e34c5b3..67b4d1e 100644
--- a/tests/isolate/scenarios/automatic_resolution_spec/package_resolve_test.dart
+++ b/tests/isolate/scenarios/automatic_resolution_spec/package_resolve_test.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// 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.
diff --git a/tests/isolate/scenarios/package_relative_root/package_relative_root_test.dart b/tests/isolate/scenarios/package_relative_root/package_relative_root_test.dart
new file mode 100644
index 0000000..a3a8533
--- /dev/null
+++ b/tests/isolate/scenarios/package_relative_root/package_relative_root_test.dart
@@ -0,0 +1,62 @@
+// 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.
+
+// PackageRoot=none
+
+import 'dart:io';
+import 'dart:isolate';
+
+import "package:foo/foo.dart";
+import "package:bar/bar.dart";
+
+var CONFIG_URI = "package:bar/spawned_packages/";
+
+main([args, port]) async {
+ if (port != null) {
+ testCorrectBarPackage(port);
+ return;
+ }
+ var p = new RawReceivePort();
+ Isolate.spawnUri(Platform.script,
+ [],
+ p.sendPort,
+ packageRoot: Uri.parse(CONFIG_URI));
+ p.handler = (msg) {
+ p.close();
+ if (msg is! List) {
+ print(msg.runtimeType);
+ throw "Failure return from spawned isolate:\n\n$msg";
+ }
+ if (msg[0] != "Foo") {
+ throw "Bad package config in child isolate: ${msg[0]}\n"
+ "Expected: 'Foo'";
+ }
+ if (msg[1] != "Bar2") {
+ throw "Package path not matching: ${msg[1]}\n"
+ "Expected: 'Bar2'";
+ }
+ print("SUCCESS");
+ };
+ if (Bar.value != "Bar1") {
+ throw "Spawning isolate package:bar invalid.";
+ }
+ print("Spawned isolate resolved $CONFIG_URI to: "
+ "${await Isolate.resolvePackageUri(Uri.parse(CONFIG_URI))}");
+}
+
+testCorrectBarPackage(port) async {
+ try {
+ var packageRootStr = Platform.packageRoot;
+ var packageConfigStr = Platform.packageConfig;
+ var packageConfig = await Isolate.packageConfig;
+ var resolvedPkg = await Isolate.resolvePackageUri(Uri.parse(CONFIG_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([Foo.value, Bar.value]);
+ } catch (e, s) {
+ port.send("$e\n$s\n");
+ }
+}
diff --git a/tests/isolate/scenarios/package_relative_root/packages/bar/bar.dart b/tests/isolate/scenarios/package_relative_root/packages/bar/bar.dart
new file mode 100644
index 0000000..7fb99e2
--- /dev/null
+++ b/tests/isolate/scenarios/package_relative_root/packages/bar/bar.dart
@@ -0,0 +1,3 @@
+class Bar {
+ static var value = "Bar1";
+}
diff --git a/tests/isolate/scenarios/package_relative_root/packages/bar/spawned_packages/bar/bar.dart b/tests/isolate/scenarios/package_relative_root/packages/bar/spawned_packages/bar/bar.dart
new file mode 100644
index 0000000..cd6723a
--- /dev/null
+++ b/tests/isolate/scenarios/package_relative_root/packages/bar/spawned_packages/bar/bar.dart
@@ -0,0 +1,3 @@
+class Bar {
+ static var value = "Bar2";
+}
diff --git a/tests/isolate/scenarios/package_relative_root/packages/bar/spawned_packages/foo/foo.dart b/tests/isolate/scenarios/package_relative_root/packages/bar/spawned_packages/foo/foo.dart
new file mode 100644
index 0000000..ba907d1
--- /dev/null
+++ b/tests/isolate/scenarios/package_relative_root/packages/bar/spawned_packages/foo/foo.dart
@@ -0,0 +1,3 @@
+class Foo {
+ static var value = "Foo";
+}
diff --git a/tests/isolate/scenarios/package_relative_root/packages/foo/foo.dart b/tests/isolate/scenarios/package_relative_root/packages/foo/foo.dart
new file mode 100644
index 0000000..ba907d1
--- /dev/null
+++ b/tests/isolate/scenarios/package_relative_root/packages/foo/foo.dart
@@ -0,0 +1,3 @@
+class Foo {
+ static var value = "Foo";
+}
diff --git a/tests/isolate/scenarios/package_relative_spec/.packages b/tests/isolate/scenarios/package_relative_spec/.packages
new file mode 100644
index 0000000..d7a0d92
--- /dev/null
+++ b/tests/isolate/scenarios/package_relative_spec/.packages
@@ -0,0 +1,4 @@
+# This is the package spec for the spawning isolate.
+
+foo:foo_package/
+bar:bar1_package/
diff --git a/tests/isolate/scenarios/package_relative_spec/bar1_package/bar.dart b/tests/isolate/scenarios/package_relative_spec/bar1_package/bar.dart
new file mode 100644
index 0000000..7fb99e2
--- /dev/null
+++ b/tests/isolate/scenarios/package_relative_spec/bar1_package/bar.dart
@@ -0,0 +1,3 @@
+class Bar {
+ static var value = "Bar1";
+}
diff --git a/tests/isolate/scenarios/package_relative_spec/bar1_package/package.config b/tests/isolate/scenarios/package_relative_spec/bar1_package/package.config
new file mode 100644
index 0000000..b580fe3
--- /dev/null
+++ b/tests/isolate/scenarios/package_relative_spec/bar1_package/package.config
@@ -0,0 +1,4 @@
+# This is the package spec for the spawned isolate.
+
+foo:../foo_package/
+bar:../bar2_package/
diff --git a/tests/isolate/scenarios/package_relative_spec/bar2_package/bar.dart b/tests/isolate/scenarios/package_relative_spec/bar2_package/bar.dart
new file mode 100644
index 0000000..cd6723a
--- /dev/null
+++ b/tests/isolate/scenarios/package_relative_spec/bar2_package/bar.dart
@@ -0,0 +1,3 @@
+class Bar {
+ static var value = "Bar2";
+}
diff --git a/tests/isolate/scenarios/package_relative_spec/foo_package/foo.dart b/tests/isolate/scenarios/package_relative_spec/foo_package/foo.dart
new file mode 100644
index 0000000..ba907d1
--- /dev/null
+++ b/tests/isolate/scenarios/package_relative_spec/foo_package/foo.dart
@@ -0,0 +1,3 @@
+class Foo {
+ static var value = "Foo";
+}
diff --git a/tests/isolate/scenarios/package_relative_spec/package_relative_spec_test.dart b/tests/isolate/scenarios/package_relative_spec/package_relative_spec_test.dart
new file mode 100644
index 0000000..e22d3ef
--- /dev/null
+++ b/tests/isolate/scenarios/package_relative_spec/package_relative_spec_test.dart
@@ -0,0 +1,62 @@
+// 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.
+
+// PackageRoot=none
+
+import 'dart:io';
+import 'dart:isolate';
+
+import "package:foo/foo.dart";
+import "package:bar/bar.dart";
+
+var CONFIG_URI = "package:bar/package.config";
+
+main([args, port]) async {
+ if (port != null) {
+ testCorrectBarPackage(port);
+ return;
+ }
+ var p = new RawReceivePort();
+ Isolate.spawnUri(Platform.script,
+ [],
+ p.sendPort,
+ packageConfig: Uri.parse(CONFIG_URI));
+ p.handler = (msg) {
+ p.close();
+ if (msg is! List) {
+ print(msg.runtimeType);
+ throw "Failure return from spawned isolate:\n\n$msg";
+ }
+ if (msg[0] != "Foo") {
+ throw "Bad package config in child isolate: ${msg[0]}\n"
+ "Expected: 'Foo'";
+ }
+ if (msg[1] != "Bar2") {
+ throw "Package path not matching: ${msg[1]}\n"
+ "Expected: 'Bar2'";
+ }
+ print("SUCCESS");
+ };
+ if (Bar.value != "Bar1") {
+ throw "Spawning isolate package:bar invalid.";
+ }
+ print("Spawned isolate resolved $CONFIG_URI to: "
+ "${await Isolate.resolvePackageUri(Uri.parse(CONFIG_URI))}");
+}
+
+testCorrectBarPackage(port) async {
+ try {
+ var packageRootStr = Platform.packageRoot;
+ var packageConfigStr = Platform.packageConfig;
+ var packageConfig = await Isolate.packageConfig;
+ var resolvedPkg = await Isolate.resolvePackageUri(Uri.parse(CONFIG_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([Foo.value, Bar.value]);
+ } catch (e, s) {
+ port.send("$e\n$s\n");
+ }
+}
diff --git a/tests/language/language.status b/tests/language/language.status
index ec744b7..65a750e 100644
--- a/tests/language/language.status
+++ b/tests/language/language.status
@@ -71,6 +71,7 @@
[ ($compiler == none || $compiler == precompiler) && ( $runtime == dartium || $runtime == drt || $runtime == ContentShellOnAndroid) ]
issue13474_test: Pass, Fail # Issue 14651.
config_import_test: Fail # Issue 14651.
+vm/optimized_guarded_field_isolates_test: RuntimeError, OK # Uses Isolate.spawn.
main_test/01: Fail # Issue 20028
main_test/02: Fail # Issue 20028
main_test/04: Fail # Issue 20028
diff --git a/tests/language/regress_25389_part.dart b/tests/language/regress_25389_part.dart
new file mode 100644
index 0000000..c14d2b1
--- /dev/null
+++ b/tests/language/regress_25389_part.dart
@@ -0,0 +1,15 @@
+// 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.
+
+part of regress_25389;
+
+abstract class ComponentState<S extends ComponentState> {}
+
+abstract class AbstractListEditorState<D,
+ S extends AbstractListEditorState<D, S>> extends ComponentState<S> {}
+
+class IssueListEditorState
+ extends AbstractListEditorState<String, IssueListEditorState>
+ implements ComponentState<IssueListEditorState> {}
+
diff --git a/tests/language/regress_25389_test.dart b/tests/language/regress_25389_test.dart
new file mode 100644
index 0000000..8bcd79a
--- /dev/null
+++ b/tests/language/regress_25389_test.dart
@@ -0,0 +1,15 @@
+// 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.
+// VMOptions=--error-on-bad-type
+
+library regress_25389;
+
+part 'regress_25389_part.dart';
+
+main() {
+ new IssueListEditorState();
+}
+
+abstract class AbstractListEditor<D, S extends AbstractListEditorState<D, S>> {}
+
diff --git a/tests/standalone/io/web_socket_compression_test.dart b/tests/standalone/io/web_socket_compression_test.dart
index b1fd13f..912b855 100644
--- a/tests/standalone/io/web_socket_compression_test.dart
+++ b/tests/standalone/io/web_socket_compression_test.dart
@@ -171,13 +171,15 @@
});
}
- void testReturnHeaders(String headerValue, String expected) {
+ void testReturnHeaders(String headerValue, String expected, {
+ CompressionOptions serverCompression: CompressionOptions.DEFAULT}) {
asyncStart();
createServer().then((server) {
server.listen((request) {
// Stuff
Expect.isTrue(WebSocketTransformer.isUpgradeRequest(request));
- WebSocketTransformer.upgrade(request).then((webSocket) {
+ WebSocketTransformer.upgrade(request, compression: serverCompression)
+ .then((webSocket) {
webSocket.listen((message) {
Expect.equals("Hello World", message);
@@ -216,6 +218,47 @@
}); // End createServer
}
+ void testClientRequestHeaders(CompressionOptions compression) {
+ asyncStart();
+ createServer().then((server) {
+ server.listen((request) {
+ var extensionHeader = request.headers.value('Sec-WebSocket-Extensions');
+ var hv = HeaderValue.parse(extensionHeader);
+ Expect.equals(compression.serverNoContextTakeover,
+ hv.parameters.containsKey('server_no_context_takeover'));
+ Expect.equals(compression.clientNoContextTakeover,
+ hv.parameters.containsKey('client_no_context_takeover'));
+ Expect.equals(compression.serverMaxWindowBits?.toString(),
+ hv.parameters['server_max_window_bits']);
+ Expect.equals(compression.clientMaxWindowBits?.toString(),
+ hv.parameters['client_max_window_bits']);
+
+ WebSocketTransformer.upgrade(request).then((webSocket) {
+ webSocket.listen((message) {
+ Expect.equals('Hello World', message);
+
+ webSocket.add(message);
+ webSocket.close();
+ });
+ });
+ });
+
+ var url = '${secure ? "wss" : "ws"}://$HOST_NAME:${server.port}/';
+
+ WebSocket.connect(url, compression: compression).then((websocket) {
+ var future = websocket.listen((message) {
+ Expect.equals('Hello World', message);
+ websocket.close();
+ }).asFuture();
+ websocket.add('Hello World');
+ return future;
+ }).then((_) {
+ server.close();
+ asyncEnd();
+ });
+ });
+ }
+
void runTests() {
// No compression or takeover
testCompressionSupport();
@@ -237,9 +280,39 @@
"permessage-deflate; client_max_window_bits=15");
// Ensure max_window_bits resize appropriately.
testReturnHeaders('permessage-deflate; server_max_window_bits=10',
- "permessage-deflate;"
+ "permessage-deflate;"
" server_max_window_bits=10;"
" client_max_window_bits=10");
+ // Don't provider context takeover if requested but not enabled.
+ // Default is not enabled.
+ testReturnHeaders('permessage-deflate; client_max_window_bits;'
+ 'client_no_context_takeover',
+ 'permessage-deflate; client_max_window_bits=15');
+ // Enable context Takeover and provide if requested.
+ var compression = new CompressionOptions(clientNoContextTakeover: true,
+ serverNoContextTakeover: true);
+ testReturnHeaders('permessage-deflate; client_max_window_bits; '
+ 'client_no_context_takeover',
+ 'permessage-deflate; client_no_context_takeover; '
+ 'client_max_window_bits=15',
+ serverCompression: compression);
+ // Enable context takeover and don't provide if not requested
+ compression = new CompressionOptions(clientNoContextTakeover: true,
+ serverNoContextTakeover: true);
+ testReturnHeaders('permessage-deflate; client_max_window_bits; ',
+ 'permessage-deflate; client_max_window_bits=15',
+ serverCompression: compression);
+
+ compression = CompressionOptions.DEFAULT;
+ testClientRequestHeaders(compression);
+ compression = new CompressionOptions(clientNoContextTakeover: true,
+ serverNoContextTakeover: true);
+ testClientRequestHeaders(compression);
+ compression = new CompressionOptions(clientNoContextTakeover: true,
+ serverNoContextTakeover: true,
+ clientMaxWindowBits: 8,
+ serverMaxWindowBits: 8);
+ testClientRequestHeaders(compression);
}
}
diff --git a/tests/standalone/standalone.status b/tests/standalone/standalone.status
index 19b2d431..590489e 100644
--- a/tests/standalone/standalone.status
+++ b/tests/standalone/standalone.status
@@ -47,6 +47,8 @@
io/socket_many_connections_test: Skip
[ ($compiler == none || $compiler == precompiler) && ($runtime == drt || $runtime == dartium || $runtime == ContentShellOnAndroid) ]
+typed_array_test: RuntimeError, OK # Uses Isolate.spawn
+typed_array_int64_uint64_test: RuntimeError, OK # Uses Isolate.spawn
typed_data_isolate_test: SkipByDesign # This test uses dart:io
io/*: SkipByDesign # Don't run tests using dart:io in the browser
package/*: Skip # Do not run those in Dartium.
diff --git a/tools/VERSION b/tools/VERSION
index c28a186..3964b63 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -28,4 +28,4 @@
MINOR 14
PATCH 0
PRERELEASE 7
-PRERELEASE_PATCH 0
+PRERELEASE_PATCH 1
diff --git a/tools/dom/src/Html5NodeValidator.dart b/tools/dom/src/Html5NodeValidator.dart
index 2bbaf41..01ce4f8 100644
--- a/tools/dom/src/Html5NodeValidator.dart
+++ b/tools/dom/src/Html5NodeValidator.dart
@@ -239,6 +239,7 @@
'INPUT::align',
'INPUT::alt',
'INPUT::autocomplete',
+ 'INPUT::autofocus',
'INPUT::checked',
'INPUT::disabled',
'INPUT::inputmode',