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',
