diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3ebd535..638c5fd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -15,6 +15,18 @@
     the last release to contain the Resource class.
 
 * `dart:io`
+  * **Breaking:** Secure networking has changed, replacing the NSS library
+    with the BoringSSL library. `SecureSocket`, `SecureServerSocket`,
+    `RawSecureSocket`,`RawSecureServerSocket`, `HttpClient`, and `HttpServer`
+    now all use a `SecurityContext` object which contains the certificates
+    and keys used for secure TLS (SSL) networking.
+
+    This is a breaking change for server applications and for some client
+    applications. Certificates and keys are loaded into the `SecurityContext`
+    from PEM files, instead of from an NSS certificate database. Information
+    about how to change applications that use secure networking is at
+    https://www.dartlang.org/server/tls-ssl.html
+
   * `HttpClient` no longer sends URI fragments in the request. This is not
     allowed by the HTTP protocol.
     The `HttpServer` still gracefully receives fragments, but discards them
diff --git a/pkg/analyzer/lib/src/context/context.dart b/pkg/analyzer/lib/src/context/context.dart
index 1a8fdf8..4f2c08d 100644
--- a/pkg/analyzer/lib/src/context/context.dart
+++ b/pkg/analyzer/lib/src/context/context.dart
@@ -1043,13 +1043,17 @@
   @override
   bool isClientLibrary(Source librarySource) {
     CacheEntry entry = _cache.get(librarySource);
-    return _referencesDartHtml(librarySource) && entry.getValue(IS_LAUNCHABLE);
+    return entry != null &&
+        _referencesDartHtml(librarySource) &&
+        entry.getValue(IS_LAUNCHABLE);
   }
 
   @override
   bool isServerLibrary(Source librarySource) {
     CacheEntry entry = _cache.get(librarySource);
-    return !_referencesDartHtml(librarySource) && entry.getValue(IS_LAUNCHABLE);
+    return entry != null &&
+        !_referencesDartHtml(librarySource) &&
+        entry.getValue(IS_LAUNCHABLE);
   }
 
   @override
diff --git a/pkg/analyzer/test/src/context/context_test.dart b/pkg/analyzer/test/src/context/context_test.dart
index f95e3dc..f0d2110 100644
--- a/pkg/analyzer/test/src/context/context_test.dart
+++ b/pkg/analyzer/test/src/context/context_test.dart
@@ -1428,6 +1428,11 @@
     expect(context.isClientLibrary(source), isFalse);
   }
 
+  void test_isClientLibrary_unknown() {
+    Source source = newSource("/test.dart");
+    expect(context.isClientLibrary(source), isFalse);
+  }
+
   void test_isServerLibrary_dart() {
     Source source = addSource(
         "/test.dart",
@@ -1447,6 +1452,11 @@
     expect(context.isServerLibrary(source), isFalse);
   }
 
+  void test_isServerLibrary_unknown() {
+    Source source = newSource("/test.dart");
+    expect(context.isServerLibrary(source), isFalse);
+  }
+
   void test_parseCompilationUnit_errors() {
     Source source = addSource("/lib.dart", "library {");
     CompilationUnit compilationUnit = context.parseCompilationUnit(source);
diff --git a/pkg/compiler/lib/src/diagnostics/messages.dart b/pkg/compiler/lib/src/diagnostics/messages.dart
index ce8b6a7..900ef01 100644
--- a/pkg/compiler/lib/src/diagnostics/messages.dart
+++ b/pkg/compiler/lib/src/diagnostics/messages.dart
@@ -277,6 +277,8 @@
   INVALID_USE_OF_SUPER,
   JS_INTEROP_CLASS_CANNOT_EXTEND_DART_CLASS,
   JS_INTEROP_CLASS_NON_EXTERNAL_MEMBER,
+  JS_OBJECT_LITERAL_CONSTRUCTOR_WITH_POSITIONAL_ARGUMENTS,
+  JS_INTEROP_METHOD_WITH_NAMED_ARGUMENTS,
   LIBRARY_NAME_MISMATCH,
   LIBRARY_NOT_FOUND,
   LIBRARY_NOT_SUPPORTED,
@@ -2171,6 +2173,51 @@
               }
               """]),
 
+      MessageKind.JS_INTEROP_METHOD_WITH_NAMED_ARGUMENTS:
+        const MessageTemplate(
+          MessageKind.JS_INTEROP_METHOD_WITH_NAMED_ARGUMENTS,
+          "Js-interop method '#{method}' has named arguments but is not "
+          "a factory constructor of an @anonymous @JS class.",
+          howToFix: "Remove all named arguments from js-interop method or "
+                    "in the case of a factory constructor annotate the class "
+                    "as @anonymous.",
+          examples: const [
+              """
+              import 'package:js/js.dart';
+
+              @JS()
+              class Foo {
+                external bar(foo, {baz});
+              }
+
+              main() {
+                new Foo().bar(4, baz: 5);
+              }
+              """]),
+
+      MessageKind.JS_OBJECT_LITERAL_CONSTRUCTOR_WITH_POSITIONAL_ARGUMENTS:
+        const MessageTemplate(
+          MessageKind.JS_OBJECT_LITERAL_CONSTRUCTOR_WITH_POSITIONAL_ARGUMENTS,
+          "Parameter '#{parameter}' in anonymous js-interop class '#{cls}' "
+          "object literal constructor is positional instead of named."
+          ".",
+          howToFix: "Make all arguments in external factory object literal "
+                    "constructors named.",
+          examples: const [
+              """
+              import 'package:js/js.dart';
+
+              @anonymous
+              @JS()
+              class Foo {
+                external factory Foo(foo, {baz});
+              }
+
+              main() {
+                new Foo(5, baz: 5);
+              }
+              """]),
+
       MessageKind.LIBRARY_NOT_FOUND:
         const MessageTemplate(MessageKind.LIBRARY_NOT_FOUND,
           "Library not found '#{resolvedUri}'."),
diff --git a/pkg/compiler/lib/src/js_backend/backend.dart b/pkg/compiler/lib/src/js_backend/backend.dart
index 1e4e925..892f819 100644
--- a/pkg/compiler/lib/src/js_backend/backend.dart
+++ b/pkg/compiler/lib/src/js_backend/backend.dart
@@ -332,6 +332,7 @@
   ClassElement irRepresentationClass;
 
   ClassElement jsAnnotationClass;
+  ClassElement jsAnonymousClass;
 
   Element getInterceptorMethod;
 
@@ -2066,6 +2067,7 @@
         typedArrayOfIntClass = findClass('NativeTypedArrayOfInt');
       } else if (uri == PACKAGE_JS) {
         jsAnnotationClass = find(library, 'JS');
+        jsAnonymousClass = find(library, '_Anonymous');
       }
       annotations.onLibraryScanned(library);
     });
diff --git a/pkg/compiler/lib/src/js_backend/js_interop_analysis.dart b/pkg/compiler/lib/src/js_backend/js_interop_analysis.dart
index 777a368..e6cce5b 100644
--- a/pkg/compiler/lib/src/js_backend/js_interop_analysis.dart
+++ b/pkg/compiler/lib/src/js_backend/js_interop_analysis.dart
@@ -23,6 +23,7 @@
         FieldElement,
         FunctionElement,
         LibraryElement,
+        ParameterElement,
         MetadataAnnotation;
 
 import '../js/js.dart' as jsAst;
@@ -79,11 +80,39 @@
     }
   }
 
+  bool hasAnonymousAnnotation(Element element) {
+    if (backend.jsAnonymousClass == null) return false;
+    return element.metadata.any((MetadataAnnotation annotation) {
+      ConstantValue constant = backend.compiler.constants.getConstantValue(
+          annotation.constant);
+      if (constant == null ||
+          constant is! ConstructedConstantValue) return false;
+      ConstructedConstantValue constructedConstant = constant;
+      return constructedConstant.type.element ==
+          backend.jsAnonymousClass;
+    });
+  }
+
+  void _checkFunctionParameters(FunctionElement fn) {
+    if (fn.hasFunctionSignature &&
+        fn.functionSignature.optionalParametersAreNamed) {
+      backend.reporter.reportErrorMessage(fn,
+          MessageKind.JS_INTEROP_METHOD_WITH_NAMED_ARGUMENTS, {
+            'method': fn.name
+          });
+    }
+  }
+
   void processJsInteropAnnotationsInLibrary(LibraryElement library) {
     processJsInteropAnnotation(library);
     library.implementation.forEachLocalMember((Element element) {
       processJsInteropAnnotation(element);
-      if (!element.isClass || !element.isJsInterop) return;
+      if (!element.isJsInterop) return;
+      if (element is FunctionElement) {
+        _checkFunctionParameters(element);
+      }
+
+      if (!element.isClass) return;
 
       ClassElement classElement = element;
 
@@ -104,12 +133,30 @@
             classElement.isJsInterop &&
             member is FunctionElement) {
           FunctionElement fn = member;
-          if (!fn.isExternal && !fn.isAbstract) {
+          if (!fn.isExternal && !fn.isAbstract && !fn.isConstructor &&
+              !fn.isStatic) {
             backend.reporter.reportErrorMessage(
                 fn,
                 MessageKind.JS_INTEROP_CLASS_NON_EXTERNAL_MEMBER,
                 {'cls': classElement.name, 'member': member.name});
           }
+
+          if (fn.isFactoryConstructor && hasAnonymousAnnotation(classElement)) {
+              fn.functionSignature.orderedForEachParameter(
+                  (ParameterElement parameter) {
+                if (!parameter.isNamed) {
+                  backend.reporter.reportErrorMessage(parameter,
+                    MessageKind
+                        .JS_OBJECT_LITERAL_CONSTRUCTOR_WITH_POSITIONAL_ARGUMENTS,
+                    {
+                      'parameter': parameter.name,
+                      'cls': classElement.name
+                    });
+              }
+            });
+          } else {
+            _checkFunctionParameters(fn);
+          }
         }
       });
     });
diff --git a/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart b/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
index 01d3f3846..687bea3 100644
--- a/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
+++ b/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
@@ -27,7 +27,9 @@
 import '../../closure.dart' show
     ClosureFieldElement;
 import '../../dart_types.dart' show
-    DartType;
+    DartType,
+    FunctionType,
+    TypedefType;
 import '../../elements/elements.dart' show
     ClassElement,
     Element,
@@ -35,6 +37,7 @@
     FieldElement,
     FunctionElement,
     FunctionSignature,
+    GetterElement,
     LibraryElement,
     MethodElement,
     Name,
@@ -404,10 +407,50 @@
               }
             }
 
+            // Generating stubs for direct calls and stubs for call-through
+            // of getters that happen to be functions.
+            bool isFunctionLike = false;
+            FunctionType functionType = null;
+
             if (member.isFunction) {
+              FunctionElement fn = member;
+              functionType = fn.type;
+            } else if (member.isGetter) {
+              if (_compiler.trustTypeAnnotations) {
+                GetterElement getter = member;
+                DartType returnType = getter.type.returnType;
+                if (returnType.isFunctionType) {
+                  functionType = returnType;
+                } else if (returnType.treatAsDynamic ||
+                    _compiler.types.isSubtype(returnType,
+                        backend.coreTypes.functionType)) {
+                  if (returnType.isTypedef) {
+                    TypedefType typedef = returnType;
+                    // TODO(jacobr): can we just use typdef.unaliased instead?
+                    functionType = typedef.element.functionSignature.type;
+                  } else {
+                    // Other misc function type such as coreTypes.Function.
+                    // Allow any number of arguments.
+                    isFunctionLike = true;
+                  }
+                }
+              } else {
+                isFunctionLike = true;
+              }
+            } // TODO(jacobr): handle field elements.
+
+            if (isFunctionLike || functionType != null) {
+              int minArgs;
+              int maxArgs;
+              if (functionType != null) {
+                minArgs = functionType.parameterTypes.length;
+                maxArgs = minArgs + functionType.optionalParameterTypes.length;
+              } else {
+                minArgs = 0;
+                maxArgs = 32767;
+              }
               var selectors =
                   _compiler.codegenWorld.invocationsByName(member.name);
-              FunctionElement fn = member;
               // Named arguments are not yet supported. In the future we
               // may want to map named arguments to an object literal containing
               // all named arguments.
@@ -415,16 +458,23 @@
                 for (var selector in selectors.keys) {
                   // Check whether the arity matches this member.
                   var argumentCount = selector.argumentCount;
-                  if (argumentCount > fn.parameters.length) break;
-                  if (argumentCount < fn.parameters.length &&
-                      !fn.parameters[argumentCount].isOptional) break;
+                  // JS interop does not support named arguments.
+                  if (selector.namedArgumentCount > 0) break;
+                  if (argumentCount < minArgs) break;
+                  if (argumentCount > maxArgs) break;
                   var stubName = namer.invocationName(selector);
                   if (!stubNames.add(stubName.key)) break;
-                  var candidateParameterNames =
-                      'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLOMOPQRSTUVWXYZ';
                   var parameters = new List<String>.generate(argumentCount,
-                      (i) => candidateParameterNames[i]);
+                      (i) => 'p$i');
 
+                  // We intentionally generate the same stub method for direct
+                  // calls and call-throughs of getters so that calling a
+                  // getter that returns a function behaves the same as calling
+                  // a method. This is helpful as many typed JavaScript APIs
+                  // specify member functions with getters that return
+                  // functions. The behavior of this solution matches JavaScript
+                  // behavior implicitly binding this only when JavaScript
+                  // would.
                   interceptorClass.callStubs.add(_buildStubMethod(
                       stubName,
                       js.js('function(receiver, #) { return receiver.#(#) }',
diff --git a/pkg/compiler/lib/src/ssa/builder.dart b/pkg/compiler/lib/src/ssa/builder.dart
index bb00a26..0258d7d 100644
--- a/pkg/compiler/lib/src/ssa/builder.dart
+++ b/pkg/compiler/lib/src/ssa/builder.dart
@@ -5846,6 +5846,12 @@
     }
   }
 
+  bool _hasNamedParameters(FunctionElement function) {
+    FunctionSignature params = function.functionSignature;
+    return params.optionalParameterCount > 0
+        && params.optionalParametersAreNamed;
+  }
+
   HForeignCode invokeJsInteropFunction(Element element,
                                        List<HInstruction> arguments,
                                        SourceInformation sourceInformation) {
@@ -5853,9 +5859,10 @@
     nativeEmitter.nativeMethods.add(element);
     String templateString;
 
-    if (element.isFactoryConstructor) {
-      // Treat factory constructors as syntactic sugar for creating object
-      // literals.
+    if (element.isFactoryConstructor &&
+        backend.jsInteropAnalysis.hasAnonymousAnnotation(element.contextClass)) {
+      // Factory constructor that is syntactic sugar for creating a JavaScript
+      // object literal.
       ConstructorElement constructor = element;
       FunctionSignature params = constructor.functionSignature;
       int i = 0;
@@ -5866,13 +5873,6 @@
         // TODO(jacobr): throw if parameter names do not match names of property
         // names in the class.
         assert (parameter.isNamed);
-        if (!parameter.isNamed) {
-          reporter.reportErrorMessage(
-              parameter, MessageKind.GENERIC,
-              {'text': 'All arguments to external constructors of JavaScript '
-                       'interop classes must be named as these constructors '
-                       'are syntactic sugar for object literals.'});
-        }
         HInstruction argument = arguments[i];
         if (argument != null) {
           filteredArguments.add(argument);
@@ -5911,10 +5911,14 @@
     } else if (element.isSetter) {
       codeTemplate = js.js.parseForeignJS("# = #");
     } else {
+      FunctionElement function = element;
+      FunctionSignature params = function.functionSignature;
+
       var argsStub = <String>[];
       for (int i = 0; i < arguments.length; i++) {
         argsStub.add('#');
       }
+
       if (element.isConstructor) {
         codeTemplate = js.js.parseForeignJS("new #(${argsStub.join(",")})");
       } else {
diff --git a/pkg/js/lib/js.dart b/pkg/js/lib/js.dart
index 4cb53c5..17b1ded 100644
--- a/pkg/js/lib/js.dart
+++ b/pkg/js/lib/js.dart
@@ -18,3 +18,15 @@
   final String name;
   const JS([this.name]);
 }
+
+class _Anonymous {
+  const _Anonymous();
+}
+
+/// A metadata annotation that indicates that a @JS annotated class is
+/// structural and does not have a known JavaScript prototype.
+///
+/// Factory constructors for anonymous JavaScript classes desugar to creating
+/// JavaScript object literals with name-value pairs corresponding to the
+/// parameter names and values.
+const _Anonymous anonymous = const _Anonymous();
diff --git a/runtime/lib/mirrors.cc b/runtime/lib/mirrors.cc
index 7edb1c0..d33b754 100644
--- a/runtime/lib/mirrors.cc
+++ b/runtime/lib/mirrors.cc
@@ -278,6 +278,7 @@
   kind_flags |= ((is_ctor && func.is_redirecting())
                  << Mirrors::kRedirectingCtor);
   kind_flags |= ((is_ctor && func.IsFactory()) << Mirrors::kFactoryCtor);
+  kind_flags |= (func.is_external() << Mirrors::kExternal);
   args.SetAt(5, Smi::Handle(Smi::New(kind_flags)));
 
   return CreateMirror(Symbols::_LocalMethodMirror(), args);
diff --git a/runtime/lib/mirrors.h b/runtime/lib/mirrors.h
index dc09109..40bd5d5 100644
--- a/runtime/lib/mirrors.h
+++ b/runtime/lib/mirrors.h
@@ -20,6 +20,7 @@
     V(kGenerativeCtor)                                                         \
     V(kRedirectingCtor)                                                        \
     V(kFactoryCtor)                                                            \
+    V(kExternal)                                                               \
 
   // These offsets much be kept in sync with those in mirrors_impl.dart.
   enum KindShifts {
diff --git a/runtime/lib/mirrors_impl.dart b/runtime/lib/mirrors_impl.dart
index 0c7b0bb..8b099c9 100644
--- a/runtime/lib/mirrors_impl.dart
+++ b/runtime/lib/mirrors_impl.dart
@@ -1372,6 +1372,7 @@
   static const kGenerativeCtor = 5;
   static const kRedirectingCtor = 6;
   static const kFactoryCtor = 7;
+  static const kExternal = 8;
 
   // These offsets much be kept in sync with those in mirrors.h.
   bool get isAbstract =>               0 != (_kindFlags & (1 << kAbstract));
@@ -1382,6 +1383,7 @@
   bool get isGenerativeConstructor =>  0 != (_kindFlags & (1 << kGenerativeCtor));
   bool get isRedirectingConstructor => 0 != (_kindFlags & (1 << kRedirectingCtor));
   bool get isFactoryConstructor =>     0 != (_kindFlags & (1 << kFactoryCtor));
+  bool get isExternal =>               0 != (_kindFlags & (1 << kExternal));
 
   static const _operators = const ["%", "&", "*", "+", "-", "/", "<", "<<",
       "<=", "==", ">", ">=", ">>", "[]", "[]=", "^", "|", "~", "unary-", "~/"];
diff --git a/sdk/lib/html/dartium/html_dartium.dart b/sdk/lib/html/dartium/html_dartium.dart
index 244b4b4..d1f0c7b 100644
--- a/sdk/lib/html/dartium/html_dartium.dart
+++ b/sdk/lib/html/dartium/html_dartium.dart
@@ -530,6 +530,7 @@
   'XPathNSResolver': () => XPathNSResolver,
   'XPathResult': () => XPathResult,
   'XSLTProcessor': () => XsltProcessor,
+
 };
 
 // TODO(leafp): We may want to move this elsewhere if html becomes
@@ -621,6 +622,7 @@
 }
 
 // FIXME: Can we make this private?
+@Deprecated("Internal Use Only")
 final htmlBlinkFunctionMap = {
   'Animation': () => Animation.internalCreateAnimation,
   'AnimationEffect': () => AnimationEffect.internalCreateAnimationEffect,
@@ -1302,6 +1304,7 @@
     return new AnchorElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AnchorElement.internal_() : super.internal_();
 
   /**
@@ -1496,6 +1499,7 @@
     return new Animation.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Animation.internal_() : super.internal_();
 
 
@@ -1523,6 +1527,7 @@
     return new AnimationEffect.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AnimationEffect.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -1555,6 +1560,7 @@
     return new AnimationEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AnimationEvent.internal_() : super.internal_();
 
 
@@ -1590,6 +1596,7 @@
     return new AnimationNode.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AnimationNode.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -1660,6 +1667,7 @@
     return new AnimationPlayer.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AnimationPlayer.internal_() : super.internal_();
 
 
@@ -1761,6 +1769,7 @@
     return new AnimationPlayerEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AnimationPlayerEvent.internal_() : super.internal_();
 
 
@@ -1798,6 +1807,7 @@
     return new AnimationTimeline.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AnimationTimeline.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -1931,6 +1941,7 @@
     return new ApplicationCache.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ApplicationCache.internal_() : super.internal_();
 
 
@@ -2042,6 +2053,7 @@
     return new ApplicationCacheErrorEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ApplicationCacheErrorEvent.internal_() : super.internal_();
 
 
@@ -2103,6 +2115,7 @@
     return new AreaElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AreaElement.internal_() : super.internal_();
 
   /**
@@ -2264,6 +2277,7 @@
     return new AudioElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AudioElement.internal_() : super.internal_();
 
   /**
@@ -2303,6 +2317,7 @@
     return new AudioTrack.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AudioTrack.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -2368,6 +2383,7 @@
     return new AudioTrackList.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AudioTrackList.internal_() : super.internal_();
 
 
@@ -2417,6 +2433,7 @@
     return new AutocompleteErrorEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AutocompleteErrorEvent.internal_() : super.internal_();
 
 
@@ -2452,6 +2469,7 @@
     return new BRElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   BRElement.internal_() : super.internal_();
 
   /**
@@ -2486,6 +2504,7 @@
     return new BarProp.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   BarProp.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -2523,6 +2542,7 @@
     return new BaseElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   BaseElement.internal_() : super.internal_();
 
   /**
@@ -2574,6 +2594,7 @@
     return new BatteryManager.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   BatteryManager.internal_() : super.internal_();
 
 
@@ -2617,6 +2638,7 @@
     return new BeforeUnloadEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   BeforeUnloadEvent.internal_() : super.internal_();
 
 
@@ -2648,6 +2670,7 @@
     return new Blob.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Blob.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -2717,6 +2740,7 @@
     return new Body.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Body.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -2900,6 +2924,7 @@
     return new BodyElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   BodyElement.internal_() : super.internal_();
 
   /**
@@ -3002,6 +3027,7 @@
     return new ButtonElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ButtonElement.internal_() : super.internal_();
 
   /**
@@ -3146,6 +3172,7 @@
     return new CDataSection.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   CDataSection.internal_() : super.internal_();
 
 
@@ -3173,6 +3200,7 @@
     return new CacheStorage.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   CacheStorage.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -3228,6 +3256,7 @@
     return new Canvas2DContextAttributes.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Canvas2DContextAttributes.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -3301,6 +3330,7 @@
     return new CanvasElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   CanvasElement.internal_() : super.internal_();
 
   /**
@@ -3477,6 +3507,7 @@
     return new CanvasGradient.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   CanvasGradient.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -3545,6 +3576,7 @@
     return new CanvasPattern.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   CanvasPattern.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -3579,6 +3611,7 @@
     return new CanvasRenderingContext2D.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   CanvasRenderingContext2D.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -4368,6 +4401,7 @@
     return new CharacterData.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   CharacterData.internal_() : super.internal_();
 
 
@@ -4473,6 +4507,7 @@
     return new CircularGeofencingRegion.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   CircularGeofencingRegion.internal_() : super.internal_();
 
 
@@ -4525,6 +4560,7 @@
     return new CloseEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   CloseEvent.internal_() : super.internal_();
 
 
@@ -4571,6 +4607,7 @@
     return new Comment.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Comment.internal_() : super.internal_();
 
 }
@@ -4609,6 +4646,7 @@
     return new CompositionEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   CompositionEvent.internal_() : super.internal_();
 
 
@@ -4659,6 +4697,7 @@
     return new Console.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Console.internal_() : super.internal_();
 
 
@@ -4691,6 +4730,7 @@
     return new ConsoleBase.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ConsoleBase.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -4842,6 +4882,7 @@
     return new ContentElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ContentElement.internal_() : super.internal_();
 
   /**
@@ -4889,6 +4930,7 @@
     return new Coordinates.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Coordinates.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -4946,6 +4988,7 @@
     return new Credential.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Credential.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -4990,6 +5033,7 @@
     return new CredentialsContainer.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   CredentialsContainer.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -5054,6 +5098,7 @@
     return new Crypto.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Crypto.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -5095,6 +5140,7 @@
     return new CryptoKey.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   CryptoKey.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -5145,6 +5191,7 @@
     return new Css.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Css.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -5184,6 +5231,7 @@
     return new CssCharsetRule.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   CssCharsetRule.internal_() : super.internal_();
 
 
@@ -5223,6 +5271,7 @@
     return new CssFilterRule.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   CssFilterRule.internal_() : super.internal_();
 
 
@@ -5254,6 +5303,7 @@
     return new CssFontFaceRule.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   CssFontFaceRule.internal_() : super.internal_();
 
 
@@ -5285,6 +5335,7 @@
     return new CssImportRule.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   CssImportRule.internal_() : super.internal_();
 
 
@@ -5325,6 +5376,7 @@
     return new CssKeyframeRule.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   CssKeyframeRule.internal_() : super.internal_();
 
 
@@ -5368,6 +5420,7 @@
     return new CssKeyframesRule.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   CssKeyframesRule.internal_() : super.internal_();
 
 
@@ -5430,6 +5483,7 @@
     return new CssMediaRule.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   CssMediaRule.internal_() : super.internal_();
 
 
@@ -5473,6 +5527,7 @@
     return new CssPageRule.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   CssPageRule.internal_() : super.internal_();
 
 
@@ -5511,6 +5566,7 @@
     return new CssRule.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   CssRule.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -5710,6 +5766,7 @@
     return new CssStyleDeclaration.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   CssStyleDeclaration.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -8907,6 +8964,7 @@
     return new CssStyleRule.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   CssStyleRule.internal_() : super.internal_();
 
 
@@ -8946,6 +9004,7 @@
     return new CssStyleSheet.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   CssStyleSheet.internal_() : super.internal_();
 
 
@@ -9009,6 +9068,7 @@
     return new CssSupportsRule.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   CssSupportsRule.internal_() : super.internal_();
 
 
@@ -9053,6 +9113,7 @@
     return new CssViewportRule.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   CssViewportRule.internal_() : super.internal_();
 
 
@@ -9118,6 +9179,7 @@
     return new CustomEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   CustomEvent.internal_() : super.internal_();
 
 
@@ -9157,6 +9219,7 @@
     return new DListElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DListElement.internal_() : super.internal_();
 
   /**
@@ -9198,6 +9261,7 @@
     return new DataListElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DataListElement.internal_() : super.internal_();
 
   /**
@@ -9238,6 +9302,7 @@
     return new DataTransfer.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DataTransfer.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -9327,6 +9392,7 @@
     return new DataTransferItem.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DataTransferItem.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -9385,6 +9451,7 @@
     return new DataTransferItemList.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DataTransferItemList.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -9478,6 +9545,7 @@
     return new DedicatedWorkerGlobalScope.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DedicatedWorkerGlobalScope.internal_() : super.internal_();
 
 
@@ -9516,6 +9584,7 @@
     return new DeprecatedStorageInfo.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DeprecatedStorageInfo.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -9581,6 +9650,7 @@
     return new DeprecatedStorageQuota.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DeprecatedStorageQuota.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -9639,6 +9709,7 @@
     return new DetailsElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DetailsElement.internal_() : super.internal_();
 
   /**
@@ -9684,6 +9755,7 @@
     return new DeviceAcceleration.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DeviceAcceleration.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -9726,6 +9798,7 @@
     return new DeviceLightEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DeviceLightEvent.internal_() : super.internal_();
 
 
@@ -9760,6 +9833,7 @@
     return new DeviceMotionEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DeviceMotionEvent.internal_() : super.internal_();
 
 
@@ -9816,6 +9890,7 @@
     return new DeviceOrientationEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DeviceOrientationEvent.internal_() : super.internal_();
 
 
@@ -9864,6 +9939,7 @@
     return new DeviceRotationRate.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DeviceRotationRate.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -9906,6 +9982,7 @@
     return new DialogElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DialogElement.internal_() : super.internal_();
 
   /**
@@ -10005,6 +10082,7 @@
     return new DirectoryEntry.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DirectoryEntry.internal_() : super.internal_();
 
 
@@ -10104,6 +10182,7 @@
     return new DirectoryReader.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DirectoryReader.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -10176,6 +10255,7 @@
     return new DivElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DivElement.internal_() : super.internal_();
 
   /**
@@ -10260,6 +10340,7 @@
     return new Document.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Document.internal_() : super.internal_();
 
 
@@ -11198,6 +11279,7 @@
     return new DocumentFragment.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DocumentFragment.internal_() : super.internal_();
 
 
@@ -11267,6 +11349,7 @@
     return new DomError.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DomError.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -11324,14 +11407,17 @@
     return new DomException._internalWrap();
   }
 
+  @Deprecated("Internal Use Only")
   js.JsObject blink_jsObject;
 
   factory DomException._internalWrap() {
     return new DomException.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DomException.internal_() { }
 
+  @Deprecated("Internal Use Only")
   DomException.jsInterop(String m) {
     var name_index = m.indexOf(': ');
     if (name_index < 0) {
@@ -11378,6 +11464,7 @@
     return new DomImplementation.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DomImplementation.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -11423,6 +11510,7 @@
     return new DomIterator.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DomIterator.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -11472,6 +11560,7 @@
     return new DomMatrix.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DomMatrix.internal_() : super.internal_();
 
 
@@ -11778,6 +11867,7 @@
     return new DomMatrixReadOnly.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DomMatrixReadOnly.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -11996,6 +12086,7 @@
     return new DomParser.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DomParser.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -12052,6 +12143,7 @@
     return new DomPoint.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DomPoint.internal_() : super.internal_();
 
 
@@ -12128,6 +12220,7 @@
     return new DomPointReadOnly.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DomPointReadOnly.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -12271,6 +12364,7 @@
     return new DomRectReadOnly.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DomRectReadOnly.internal_() { }
 
 
@@ -12338,6 +12432,7 @@
     return new DomSettableTokenList.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DomSettableTokenList.internal_() : super.internal_();
 
 
@@ -12376,6 +12471,7 @@
     return new DomStringList.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DomStringList.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -12508,6 +12604,7 @@
     return new DomTokenList.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DomTokenList.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -15516,6 +15613,7 @@
     return new Element.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Element.internal_() : super.internal_();
 
 
@@ -16407,6 +16505,7 @@
     return new EmbedElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   EmbedElement.internal_() : super.internal_();
 
   /**
@@ -16513,6 +16612,7 @@
     return new Entry.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Entry.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -16694,6 +16794,7 @@
     return new ErrorEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ErrorEvent.internal_() : super.internal_();
 
 
@@ -16790,6 +16891,7 @@
     return new Event.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Event.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -16982,6 +17084,7 @@
     return new EventSource.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   EventSource.internal_() : super.internal_();
 
 
@@ -17166,6 +17269,7 @@
     return new EventTarget.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   EventTarget.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -17234,6 +17338,7 @@
     return new ExtendableEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ExtendableEvent.internal_() : super.internal_();
 
 
@@ -17273,6 +17378,7 @@
     return new FederatedCredential.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FederatedCredential.internal_() : super.internal_();
 
 
@@ -17306,6 +17412,7 @@
     return new FetchEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FetchEvent.internal_() : super.internal_();
 
 
@@ -17353,6 +17460,7 @@
     return new FieldSetElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FieldSetElement.internal_() : super.internal_();
 
   /**
@@ -17434,6 +17542,7 @@
     return new File.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   File.internal_() : super.internal_();
 
 
@@ -17495,6 +17604,7 @@
     return new FileEntry.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FileEntry.internal_() : super.internal_();
 
 
@@ -17558,6 +17668,7 @@
     return new FileError.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FileError.internal_() : super.internal_();
 
 
@@ -17636,6 +17747,7 @@
     return new FileList.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FileList.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -17794,6 +17906,7 @@
     return new FileReader.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FileReader.internal_() : super.internal_();
 
 
@@ -17896,6 +18009,7 @@
     return new FileStream.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FileStream.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -17932,6 +18046,7 @@
     return new FileSystem.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FileSystem.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -18045,6 +18160,7 @@
     return new FileWriter.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FileWriter.internal_() : super.internal_();
 
 
@@ -18157,6 +18273,7 @@
     return new FocusEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FocusEvent.internal_() : super.internal_();
 
 
@@ -18215,6 +18332,7 @@
     return new FontFace.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FontFace.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -18330,6 +18448,7 @@
     return new FontFaceSet.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FontFaceSet.internal_() : super.internal_();
 
 
@@ -18414,6 +18533,7 @@
     return new FontFaceSetLoadEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FontFaceSetLoadEvent.internal_() : super.internal_();
 
 
@@ -18456,6 +18576,7 @@
     return new FormData.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FormData.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -18500,6 +18621,7 @@
     return new FormElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FormElement.internal_() : super.internal_();
 
   /**
@@ -18642,6 +18764,7 @@
     return new Gamepad.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Gamepad.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -18697,6 +18820,7 @@
     return new GamepadButton.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   GamepadButton.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -18737,6 +18861,7 @@
     return new GamepadEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   GamepadEvent.internal_() : super.internal_();
 
 
@@ -18769,6 +18894,7 @@
     return new Geofencing.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Geofencing.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -18813,6 +18939,7 @@
     return new GeofencingRegion.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   GeofencingRegion.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -18916,6 +19043,7 @@
     return new Geolocation.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Geolocation.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -18972,6 +19100,7 @@
     return new Geoposition.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Geoposition.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -19548,6 +19677,7 @@
     return new HRElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   HRElement.internal_() : super.internal_();
 
   /**
@@ -19600,6 +19730,7 @@
     return new HashChangeEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   HashChangeEvent.internal_() : super.internal_();
 
 
@@ -19646,6 +19777,7 @@
     return new HeadElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   HeadElement.internal_() : super.internal_();
 
   /**
@@ -19695,6 +19827,7 @@
     return new Headers.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Headers.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -19772,6 +19905,7 @@
     return new HeadingElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   HeadingElement.internal_() : super.internal_();
 
   /**
@@ -19812,6 +19946,7 @@
     return new History.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   History.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -19875,6 +20010,7 @@
     return new HtmlCollection.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   HtmlCollection.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -19961,6 +20097,7 @@
     return new HtmlDocument.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   HtmlDocument.internal_() : super.internal_();
 
 
@@ -20770,6 +20907,7 @@
     return new HtmlElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   HtmlElement.internal_() : super.internal_();
 
   /**
@@ -21190,6 +21328,7 @@
     return new HtmlFormControlsCollection.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   HtmlFormControlsCollection.internal_() : super.internal_();
 
 
@@ -21225,6 +21364,7 @@
     return new HtmlHtmlElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   HtmlHtmlElement.internal_() : super.internal_();
 
   /**
@@ -21258,6 +21398,7 @@
     return new HtmlOptionsCollection.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   HtmlOptionsCollection.internal_() : super.internal_();
 
 
@@ -21669,6 +21810,7 @@
     return new HttpRequest.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   HttpRequest.internal_() : super.internal_();
 
 
@@ -22083,6 +22225,7 @@
     return new HttpRequestEventTarget.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   HttpRequestEventTarget.internal_() : super.internal_();
 
 
@@ -22162,6 +22305,7 @@
     return new HttpRequestUpload.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   HttpRequestUpload.internal_() : super.internal_();
 
 
@@ -22193,6 +22337,7 @@
     return new IFrameElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   IFrameElement.internal_() : super.internal_();
 
   /**
@@ -22298,6 +22443,7 @@
     return new ImageBitmap.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ImageBitmap.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -22353,6 +22499,7 @@
     return new ImageData.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ImageData.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -22401,6 +22548,7 @@
     return new ImageElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ImageElement.internal_() : super.internal_();
 
   /**
@@ -22537,6 +22685,7 @@
     return new InjectedScriptHost.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   InjectedScriptHost.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -22601,6 +22750,7 @@
     return new InputElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   InputElement.internal_() : super.internal_();
 
   /**
@@ -23622,6 +23772,7 @@
     return new InputMethodContext.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   InputMethodContext.internal_() : super.internal_();
 
 
@@ -23673,6 +23824,7 @@
     return new InstallEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   InstallEvent.internal_() : super.internal_();
 
 
@@ -23726,6 +23878,7 @@
     return new KeyboardEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   KeyboardEvent.internal_() : super.internal_();
 
 
@@ -23826,6 +23979,7 @@
     return new KeygenElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   KeygenElement.internal_() : super.internal_();
 
   /**
@@ -23939,6 +24093,7 @@
     return new LIElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   LIElement.internal_() : super.internal_();
 
   /**
@@ -23984,6 +24139,7 @@
     return new LabelElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   LabelElement.internal_() : super.internal_();
 
   /**
@@ -24037,6 +24193,7 @@
     return new LegendElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   LegendElement.internal_() : super.internal_();
 
   /**
@@ -24076,6 +24233,7 @@
     return new LinkElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   LinkElement.internal_() : super.internal_();
 
   /**
@@ -24203,6 +24361,7 @@
     return new LocalCredential.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   LocalCredential.internal_() : super.internal_();
 
 
@@ -24232,6 +24391,7 @@
     return new Location.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Location.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -24379,6 +24539,7 @@
     return new MapElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MapElement.internal_() : super.internal_();
 
   /**
@@ -24432,6 +24593,7 @@
     return new MediaController.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MediaController.internal_() : super.internal_();
 
 
@@ -24535,6 +24697,7 @@
     return new MediaDeviceInfo.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MediaDeviceInfo.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -24651,6 +24814,7 @@
     return new MediaElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MediaElement.internal_() : super.internal_();
 
   /**
@@ -25014,6 +25178,7 @@
     return new MediaError.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MediaError.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -25070,6 +25235,7 @@
     return new MediaKeyError.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MediaKeyError.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -25134,6 +25300,7 @@
     return new MediaKeyEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MediaKeyEvent.internal_() : super.internal_();
 
 
@@ -25191,6 +25358,7 @@
     return new MediaKeyMessageEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MediaKeyMessageEvent.internal_() : super.internal_();
 
 
@@ -25228,6 +25396,7 @@
     return new MediaKeyNeededEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MediaKeyNeededEvent.internal_() : super.internal_();
 
 
@@ -25266,6 +25435,7 @@
     return new MediaKeySession.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MediaKeySession.internal_() : super.internal_();
 
 
@@ -25336,6 +25506,7 @@
     return new MediaKeys.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MediaKeys.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -25386,6 +25557,7 @@
     return new MediaList.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MediaList.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -25445,6 +25617,7 @@
     return new MediaQueryList.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MediaQueryList.internal_() : super.internal_();
 
 
@@ -25494,6 +25667,7 @@
     return new MediaQueryListEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MediaQueryListEvent.internal_() : super.internal_();
 
 
@@ -25541,6 +25715,7 @@
     return new MediaSource.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MediaSource.internal_() : super.internal_();
 
 
@@ -25657,6 +25832,7 @@
     return new MediaStream.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MediaStream.internal_() : super.internal_();
 
 
@@ -25758,6 +25934,7 @@
     return new MediaStreamEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MediaStreamEvent.internal_() : super.internal_();
 
 
@@ -25825,6 +26002,7 @@
     return new MediaStreamTrack.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MediaStreamTrack.internal_() : super.internal_();
 
 
@@ -25921,6 +26099,7 @@
     return new MediaStreamTrackEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MediaStreamTrackEvent.internal_() : super.internal_();
 
 
@@ -25965,6 +26144,7 @@
     return new MemoryInfo.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MemoryInfo.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -26020,6 +26200,7 @@
     return new MenuElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MenuElement.internal_() : super.internal_();
 
   /**
@@ -26074,6 +26255,7 @@
     return new MenuItemElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MenuItemElement.internal_() : super.internal_();
 
   /**
@@ -26157,6 +26339,7 @@
     return new MessageChannel.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MessageChannel.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -26205,6 +26388,7 @@
     return new MessageEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MessageEvent.internal_() : super.internal_();
 
 
@@ -26264,6 +26448,7 @@
     return new MessagePort.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MessagePort.internal_() : super.internal_();
 
 
@@ -26312,6 +26497,7 @@
     return new MetaElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MetaElement.internal_() : super.internal_();
 
   /**
@@ -26370,6 +26556,7 @@
     return new Metadata.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Metadata.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -26426,6 +26613,7 @@
     return new MeterElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MeterElement.internal_() : super.internal_();
 
   /**
@@ -26537,6 +26725,7 @@
     return new MidiAccess.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MidiAccess.internal_() : super.internal_();
 
 
@@ -26589,6 +26778,7 @@
     return new MidiConnectionEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MidiConnectionEvent.internal_() : super.internal_();
 
 
@@ -26632,6 +26822,7 @@
     return new MidiInput.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MidiInput.internal_() : super.internal_();
 
 
@@ -26664,6 +26855,7 @@
     return new MidiInputMap.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MidiInputMap.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -26725,6 +26917,7 @@
     return new MidiMessageEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MidiMessageEvent.internal_() : super.internal_();
 
 
@@ -26762,6 +26955,7 @@
     return new MidiOutput.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MidiOutput.internal_() : super.internal_();
 
 
@@ -26798,6 +26992,7 @@
     return new MidiOutputMap.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MidiOutputMap.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -26869,6 +27064,7 @@
     return new MidiPort.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MidiPort.internal_() : super.internal_();
 
 
@@ -26921,6 +27117,7 @@
     return new MimeType.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MimeType.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -26966,6 +27163,7 @@
     return new MimeTypeArray.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MimeTypeArray.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -27058,6 +27256,7 @@
     return new ModElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ModElement.internal_() : super.internal_();
 
   /**
@@ -27121,6 +27320,7 @@
     return new MouseEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MouseEvent.internal_() : super.internal_();
 
 
@@ -27312,6 +27512,7 @@
     return new MutationObserver.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MutationObserver.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -27423,6 +27624,7 @@
     return new MutationRecord.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MutationRecord.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -27541,6 +27743,7 @@
     return new Navigator.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Navigator.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -27871,6 +28074,7 @@
     return new NavigatorUserMediaError.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   NavigatorUserMediaError.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -27935,6 +28139,7 @@
     return new NetworkInformation.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   NetworkInformation.internal_() : super.internal_();
 
 
@@ -28237,6 +28442,7 @@
     return new Node.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Node.internal_() : super.internal_();
 
 
@@ -28580,6 +28786,7 @@
     return new NodeFilter.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   NodeFilter.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -28653,6 +28860,7 @@
     return new NodeIterator.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   NodeIterator.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -28709,6 +28917,7 @@
     return new NodeList.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   NodeList.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -28853,6 +29062,7 @@
     return new Notification.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Notification.internal_() : super.internal_();
 
 
@@ -28972,6 +29182,7 @@
     return new OListElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   OListElement.internal_() : super.internal_();
 
   /**
@@ -29037,6 +29248,7 @@
     return new ObjectElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ObjectElement.internal_() : super.internal_();
 
   /**
@@ -29167,6 +29379,7 @@
     return new OptGroupElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   OptGroupElement.internal_() : super.internal_();
 
   /**
@@ -29220,6 +29433,7 @@
     return new OptionElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   OptionElement.internal_() : super.internal_();
 
   /**
@@ -29308,6 +29522,7 @@
     return new OutputElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   OutputElement.internal_() : super.internal_();
 
   /**
@@ -29406,6 +29621,7 @@
     return new OverflowEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   OverflowEvent.internal_() : super.internal_();
 
 
@@ -29459,6 +29675,7 @@
     return new PageTransitionEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PageTransitionEvent.internal_() : super.internal_();
 
 
@@ -29494,6 +29711,7 @@
     return new ParagraphElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ParagraphElement.internal_() : super.internal_();
 
   /**
@@ -29532,6 +29750,7 @@
     return new ParamElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ParamElement.internal_() : super.internal_();
 
   /**
@@ -29641,6 +29860,7 @@
     return new Path2D.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Path2D.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -29741,6 +29961,7 @@
     return new Performance.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Performance.internal_() : super.internal_();
 
 
@@ -29854,6 +30075,7 @@
     return new PerformanceEntry.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PerformanceEntry.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -29901,6 +30123,7 @@
     return new PerformanceMark.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PerformanceMark.internal_() : super.internal_();
 
 
@@ -29930,6 +30153,7 @@
     return new PerformanceMeasure.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PerformanceMeasure.internal_() : super.internal_();
 
 
@@ -29957,6 +30181,7 @@
     return new PerformanceNavigation.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PerformanceNavigation.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -30012,6 +30237,7 @@
     return new PerformanceResourceTiming.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PerformanceResourceTiming.internal_() : super.internal_();
 
 
@@ -30090,6 +30316,7 @@
     return new PerformanceTiming.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PerformanceTiming.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -30204,6 +30431,7 @@
     return new PictureElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PictureElement.internal_() : super.internal_();
 
   /**
@@ -30237,6 +30465,7 @@
     return new Plugin.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Plugin.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -30294,6 +30523,7 @@
     return new PluginArray.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PluginArray.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -30390,6 +30620,7 @@
     return new PluginPlaceholderElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PluginPlaceholderElement.internal_() : super.internal_();
 
   /**
@@ -30442,6 +30673,7 @@
     return new PopStateEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PopStateEvent.internal_() : super.internal_();
 
 
@@ -30483,6 +30715,7 @@
     return new PositionError.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PositionError.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -30546,6 +30779,7 @@
     return new PreElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PreElement.internal_() : super.internal_();
 
   /**
@@ -30580,6 +30814,7 @@
     return new Presentation.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Presentation.internal_() : super.internal_();
 
 
@@ -30608,6 +30843,7 @@
     return new ProcessingInstruction.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ProcessingInstruction.internal_() : super.internal_();
 
 
@@ -30652,6 +30888,7 @@
     return new ProgressElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ProgressElement.internal_() : super.internal_();
 
   /**
@@ -30713,6 +30950,7 @@
     return new ProgressEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ProgressEvent.internal_() : super.internal_();
 
 
@@ -30753,6 +30991,7 @@
     return new PushEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PushEvent.internal_() : super.internal_();
 
 
@@ -30785,6 +31024,7 @@
     return new PushManager.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PushManager.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -30819,6 +31059,7 @@
     return new PushRegistration.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PushRegistration.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -30862,6 +31103,7 @@
     return new QuoteElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   QuoteElement.internal_() : super.internal_();
 
   /**
@@ -30939,6 +31181,7 @@
     return new Range.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Range.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -31136,6 +31379,7 @@
     return new ReadableStream.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ReadableStream.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -31191,6 +31435,7 @@
     return new RelatedEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   RelatedEvent.internal_() : super.internal_();
 
 
@@ -31234,6 +31479,7 @@
     return new ResourceProgressEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ResourceProgressEvent.internal_() : super.internal_();
 
 
@@ -31307,6 +31553,7 @@
     return new RtcDataChannel.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   RtcDataChannel.internal_() : super.internal_();
 
 
@@ -31450,6 +31697,7 @@
     return new RtcDataChannelEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   RtcDataChannelEvent.internal_() : super.internal_();
 
 
@@ -31493,6 +31741,7 @@
     return new RtcDtmfSender.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   RtcDtmfSender.internal_() : super.internal_();
 
 
@@ -31560,6 +31809,7 @@
     return new RtcDtmfToneChangeEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   RtcDtmfToneChangeEvent.internal_() : super.internal_();
 
 
@@ -31600,6 +31850,7 @@
     return new RtcIceCandidate.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   RtcIceCandidate.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -31655,6 +31906,7 @@
     return new RtcIceCandidateEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   RtcIceCandidateEvent.internal_() : super.internal_();
 
 
@@ -31796,6 +32048,7 @@
     return new RtcPeerConnection.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   RtcPeerConnection.internal_() : super.internal_();
 
 
@@ -31993,6 +32246,7 @@
     return new RtcSessionDescription.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   RtcSessionDescription.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -32039,6 +32293,7 @@
     return new RtcStatsReport.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   RtcStatsReport.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -32097,6 +32352,7 @@
     return new RtcStatsResponse.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   RtcStatsResponse.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -32142,6 +32398,7 @@
     return new Screen.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Screen.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -32215,6 +32472,7 @@
     return new ScreenOrientation.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ScreenOrientation.internal_() : super.internal_();
 
 
@@ -32271,6 +32529,7 @@
     return new ScriptElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ScriptElement.internal_() : super.internal_();
 
   /**
@@ -32380,6 +32639,7 @@
     return new SecurityPolicyViolationEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   SecurityPolicyViolationEvent.internal_() : super.internal_();
 
 
@@ -32449,6 +32709,7 @@
     return new SelectElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   SelectElement.internal_() : super.internal_();
 
   /**
@@ -32621,6 +32882,7 @@
     return new Selection.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Selection.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -32774,6 +33036,7 @@
     return new ServiceWorkerClient.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ServiceWorkerClient.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -32813,6 +33076,7 @@
     return new ServiceWorkerClients.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ServiceWorkerClients.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -32849,6 +33113,7 @@
     return new ServiceWorkerContainer.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ServiceWorkerContainer.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -32908,6 +33173,7 @@
     return new ServiceWorkerGlobalScope.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ServiceWorkerGlobalScope.internal_() : super.internal_();
 
 
@@ -32977,6 +33243,7 @@
     return new ServiceWorkerRegistration.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ServiceWorkerRegistration.internal_() : super.internal_();
 
 
@@ -33036,6 +33303,7 @@
     return new ShadowElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ShadowElement.internal_() : super.internal_();
 
   /**
@@ -33079,6 +33347,7 @@
     return new ShadowRoot.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ShadowRoot.internal_() : super.internal_();
 
 
@@ -33206,6 +33475,7 @@
     return new SharedWorker.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   SharedWorker.internal_() : super.internal_();
 
 
@@ -33259,6 +33529,7 @@
     return new SharedWorkerGlobalScope.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   SharedWorkerGlobalScope.internal_() : super.internal_();
 
 
@@ -33299,6 +33570,7 @@
     return new SourceBuffer.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   SourceBuffer.internal_() : super.internal_();
 
 
@@ -33403,6 +33675,7 @@
     return new SourceBufferList.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   SourceBufferList.internal_() : super.internal_();
 
 
@@ -33488,6 +33761,7 @@
     return new SourceElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   SourceElement.internal_() : super.internal_();
 
   /**
@@ -33575,6 +33849,7 @@
     return new SourceInfo.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   SourceInfo.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -33628,6 +33903,7 @@
     return new SpanElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   SpanElement.internal_() : super.internal_();
 
   /**
@@ -33668,6 +33944,7 @@
     return new SpeechGrammar.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   SpeechGrammar.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -33720,6 +33997,7 @@
     return new SpeechGrammarList.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   SpeechGrammarList.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -33940,6 +34218,7 @@
     return new SpeechRecognition.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   SpeechRecognition.internal_() : super.internal_();
 
 
@@ -34079,6 +34358,7 @@
     return new SpeechRecognitionAlternative.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   SpeechRecognitionAlternative.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -34119,6 +34399,7 @@
     return new SpeechRecognitionError.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   SpeechRecognitionError.internal_() : super.internal_();
 
 
@@ -34157,6 +34438,7 @@
     return new SpeechRecognitionEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   SpeechRecognitionEvent.internal_() : super.internal_();
 
 
@@ -34202,6 +34484,7 @@
     return new SpeechRecognitionResult.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   SpeechRecognitionResult.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -34245,6 +34528,7 @@
     return new SpeechSynthesis.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   SpeechSynthesis.internal_() : super.internal_();
 
 
@@ -34306,6 +34590,7 @@
     return new SpeechSynthesisEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   SpeechSynthesisEvent.internal_() : super.internal_();
 
 
@@ -34423,6 +34708,7 @@
     return new SpeechSynthesisUtterance.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   SpeechSynthesisUtterance.internal_() : super.internal_();
 
 
@@ -34534,6 +34820,7 @@
     return new SpeechSynthesisVoice.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   SpeechSynthesisVoice.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -34659,6 +34946,7 @@
     return new Storage.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Storage.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -34764,6 +35052,7 @@
     return new StorageEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   StorageEvent.internal_() : super.internal_();
 
 
@@ -34816,6 +35105,7 @@
     return new StorageInfo.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   StorageInfo.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -34856,6 +35146,7 @@
     return new StorageQuota.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   StorageQuota.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -34937,6 +35228,7 @@
     return new StyleElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   StyleElement.internal_() : super.internal_();
 
   /**
@@ -34999,6 +35291,7 @@
     return new StyleMedia.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   StyleMedia.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -35035,6 +35328,7 @@
     return new StyleSheet.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   StyleSheet.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -35100,6 +35394,7 @@
     return new TableCaptionElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   TableCaptionElement.internal_() : super.internal_();
 
   /**
@@ -35137,6 +35432,7 @@
     return new TableCellElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   TableCellElement.internal_() : super.internal_();
 
   /**
@@ -35202,6 +35498,7 @@
     return new TableColElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   TableColElement.internal_() : super.internal_();
 
   /**
@@ -35265,6 +35562,7 @@
     return new TableElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   TableElement.internal_() : super.internal_();
 
   /**
@@ -35382,6 +35680,7 @@
     return new TableRowElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   TableRowElement.internal_() : super.internal_();
 
   /**
@@ -35447,6 +35746,7 @@
     return new TableSectionElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   TableSectionElement.internal_() : super.internal_();
 
   /**
@@ -35501,6 +35801,7 @@
     return new TemplateElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   TemplateElement.internal_() : super.internal_();
 
   /**
@@ -35557,6 +35858,7 @@
     return new Text.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Text.internal_() : super.internal_();
 
 
@@ -35601,6 +35903,7 @@
     return new TextAreaElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   TextAreaElement.internal_() : super.internal_();
 
   /**
@@ -35847,6 +36150,7 @@
     return new TextEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   TextEvent.internal_() : super.internal_();
 
 
@@ -35881,6 +36185,7 @@
     return new TextMetrics.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   TextMetrics.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -35981,6 +36286,7 @@
     return new TextTrack.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   TextTrack.internal_() : super.internal_();
 
 
@@ -36091,6 +36397,7 @@
     return new TextTrackCue.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   TextTrackCue.internal_() : super.internal_();
 
 
@@ -36165,6 +36472,7 @@
     return new TextTrackCueList.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   TextTrackCueList.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -36269,6 +36577,7 @@
     return new TextTrackList.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   TextTrackList.internal_() : super.internal_();
 
 
@@ -36365,6 +36674,7 @@
     return new TimeRanges.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   TimeRanges.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -36415,6 +36725,7 @@
     return new Timing.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Timing.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -36538,6 +36849,7 @@
     return new TitleElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   TitleElement.internal_() : super.internal_();
 
   /**
@@ -36570,6 +36882,7 @@
     return new Touch.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Touch.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -36705,6 +37018,7 @@
     return new TouchEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   TouchEvent.internal_() : super.internal_();
 
 
@@ -36777,6 +37091,7 @@
     return new TouchList.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   TouchList.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -36872,6 +37187,7 @@
     return new TrackElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   TrackElement.internal_() : super.internal_();
 
   /**
@@ -36983,6 +37299,7 @@
     return new TrackEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   TrackEvent.internal_() : super.internal_();
 
 
@@ -37014,6 +37331,7 @@
     return new TransitionEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   TransitionEvent.internal_() : super.internal_();
 
 
@@ -37053,6 +37371,7 @@
     return new TreeWalker.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   TreeWalker.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -37145,6 +37464,7 @@
     return new UIEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   UIEvent.internal_() : super.internal_();
 
 
@@ -37235,6 +37555,7 @@
     return new UListElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   UListElement.internal_() : super.internal_();
 
   /**
@@ -37268,6 +37589,7 @@
     return new UnknownElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   UnknownElement.internal_() : super.internal_();
 
   /**
@@ -37300,6 +37622,7 @@
     return new Url.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Url.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -37657,6 +37980,7 @@
     return new ValidityState.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ValidityState.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -37727,6 +38051,7 @@
     return new VideoElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   VideoElement.internal_() : super.internal_();
 
   /**
@@ -37827,6 +38152,7 @@
     return new VideoPlaybackQuality.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   VideoPlaybackQuality.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -37876,6 +38202,7 @@
     return new VideoTrack.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   VideoTrack.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -37941,6 +38268,7 @@
     return new VideoTrackList.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   VideoTrackList.internal_() : super.internal_();
 
 
@@ -38011,6 +38339,7 @@
     return new VttCue.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   VttCue.internal_() : super.internal_();
 
 
@@ -38129,6 +38458,7 @@
     return new VttRegion.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   VttRegion.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -38243,6 +38573,7 @@
     return new VttRegionList.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   VttRegionList.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -38382,6 +38713,7 @@
     return new WebSocket.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   WebSocket.internal_() : super.internal_();
 
 
@@ -38555,6 +38887,7 @@
     return new WheelEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   WheelEvent.internal_() : super.internal_();
 
 
@@ -38896,6 +39229,7 @@
     return new Window.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Window.internal_() : super.internal_();
 
 
@@ -40374,6 +40708,7 @@
     return new Worker.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Worker.internal_() : super.internal_();
 
 
@@ -40424,6 +40759,7 @@
     return new WorkerConsole.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   WorkerConsole.internal_() : super.internal_();
 
 
@@ -40463,6 +40799,7 @@
     return new WorkerGlobalScope.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   WorkerGlobalScope.internal_() : super.internal_();
 
 
@@ -40635,6 +40972,7 @@
     return new WorkerPerformance.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   WorkerPerformance.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -40681,6 +41019,7 @@
     return new XPathEvaluator.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   XPathEvaluator.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -40723,6 +41062,7 @@
     return new XPathExpression.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   XPathExpression.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -40757,6 +41097,7 @@
     return new XPathNSResolver.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   XPathNSResolver.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -40791,6 +41132,7 @@
     return new XPathResult.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   XPathResult.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -40897,6 +41239,7 @@
     return new XmlDocument.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   XmlDocument.internal_() : super.internal_();
 
 
@@ -40931,6 +41274,7 @@
     return new XmlSerializer.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   XmlSerializer.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -40973,6 +41317,7 @@
     return new XsltProcessor.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   XsltProcessor.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -41037,6 +41382,7 @@
     return new _Attr.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _Attr.internal_() : super.internal_();
 
 
@@ -41103,6 +41449,7 @@
     return new _CSSPrimitiveValue.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _CSSPrimitiveValue.internal_() : super.internal_();
 
 
@@ -41132,6 +41479,7 @@
     return new _CSSUnknownRule.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _CSSUnknownRule.internal_() : super.internal_();
 
 
@@ -41160,6 +41508,7 @@
     return new _CSSValue.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _CSSValue.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -41189,6 +41538,7 @@
     return new _Cache.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _Cache.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -41320,6 +41670,7 @@
     return new _ClientRect.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _ClientRect.internal_() { }
 
 
@@ -41406,6 +41757,7 @@
     return new _ClientRectList.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _ClientRectList.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -41490,6 +41842,7 @@
     return new _Counter.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _Counter.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -41518,6 +41871,7 @@
     return new _CssRuleList.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _CssRuleList.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -41603,6 +41957,7 @@
     return new _CssValueList.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _CssValueList.internal_() : super.internal_();
 
 
@@ -41686,6 +42041,7 @@
     return new _DOMFileSystemSync.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _DOMFileSystemSync.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -41717,6 +42073,7 @@
     return new _DirectoryEntrySync.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _DirectoryEntrySync.internal_() : super.internal_();
 
 
@@ -41745,6 +42102,7 @@
     return new _DirectoryReaderSync.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _DirectoryReaderSync.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -41774,6 +42132,7 @@
     return new _DocumentType.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _DocumentType.internal_() : super.internal_();
 
 
@@ -41824,6 +42183,7 @@
     return new _DomRect.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _DomRect.internal_() : super.internal_();
 
 
@@ -41892,6 +42252,7 @@
     return new _EntrySync.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _EntrySync.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -41923,6 +42284,7 @@
     return new _FileEntrySync.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _FileEntrySync.internal_() : super.internal_();
 
 
@@ -41957,6 +42319,7 @@
     return new _FileReaderSync.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _FileReaderSync.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -41987,6 +42350,7 @@
     return new _FileWriterSync.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _FileWriterSync.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -42017,6 +42381,7 @@
     return new _GamepadList.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _GamepadList.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -42101,6 +42466,7 @@
     return new _HTMLAllCollection.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _HTMLAllCollection.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -42136,6 +42502,7 @@
     return new _HTMLAppletElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _HTMLAppletElement.internal_() : super.internal_();
 
   /**
@@ -42171,6 +42538,7 @@
     return new _HTMLDirectoryElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _HTMLDirectoryElement.internal_() : super.internal_();
 
   /**
@@ -42206,6 +42574,7 @@
     return new _HTMLFontElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _HTMLFontElement.internal_() : super.internal_();
 
   /**
@@ -42241,6 +42610,7 @@
     return new _HTMLFrameElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _HTMLFrameElement.internal_() : super.internal_();
 
   /**
@@ -42274,6 +42644,7 @@
     return new _HTMLFrameSetElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _HTMLFrameSetElement.internal_() : super.internal_();
 
   /**
@@ -42318,6 +42689,7 @@
     return new _HTMLMarqueeElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _HTMLMarqueeElement.internal_() : super.internal_();
 
   /**
@@ -42359,6 +42731,7 @@
     return new _MutationEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _MutationEvent.internal_() : super.internal_();
 
 
@@ -42387,6 +42760,7 @@
     return new _NamedNodeMap.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _NamedNodeMap.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -42498,6 +42872,7 @@
     return new _PagePopupController.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _PagePopupController.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -42528,6 +42903,7 @@
     return new _RGBColor.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _RGBColor.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -42554,6 +42930,7 @@
     return new _RadioNodeList.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _RadioNodeList.internal_() : super.internal_();
 
 
@@ -42582,6 +42959,7 @@
     return new _Rect.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _Rect.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -42632,6 +43010,7 @@
     return new _Request.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _Request.internal_() : super.internal_();
 
 
@@ -42724,6 +43103,7 @@
     return new _Response.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _Response.internal_() : super.internal_();
 
 
@@ -42750,6 +43130,7 @@
     return new _ServiceWorker.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _ServiceWorker.internal_() : super.internal_();
 
 
@@ -42781,6 +43162,7 @@
     return new _SpeechRecognitionResultList.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _SpeechRecognitionResultList.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -42863,6 +43245,7 @@
     return new _StyleSheetList.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _StyleSheetList.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -42950,6 +43333,7 @@
     return new _SubtleCrypto.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _SubtleCrypto.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -42981,6 +43365,7 @@
     return new _WebKitCSSFilterValue.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _WebKitCSSFilterValue.internal_() : super.internal_();
 
 
@@ -43018,6 +43403,7 @@
     return new _WebKitCSSMatrix.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _WebKitCSSMatrix.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -43049,6 +43435,7 @@
     return new _WebKitCSSTransformValue.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _WebKitCSSTransformValue.internal_() : super.internal_();
 
 
@@ -43110,6 +43497,7 @@
     return new _WorkerLocation.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _WorkerLocation.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -43149,6 +43537,7 @@
     return new _WorkerNavigator.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _WorkerNavigator.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -43190,6 +43579,7 @@
     return new _XMLHttpRequestProgressEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _XMLHttpRequestProgressEvent.internal_() : super.internal_();
 
 
@@ -47487,6 +47877,7 @@
    *               all blink_jsObject.  Then needed private wrap/unwrap_jso
    *               functions that delegate to a public wrap/unwrap_jso.
    */
+  @Deprecated("Internal Use Only")
   js.JsObject blink_jsObject;
 
   /** The parent KeyboardEvent that this KeyEvent is wrapping and "fixing". */
diff --git a/sdk/lib/indexed_db/dartium/indexed_db_dartium.dart b/sdk/lib/indexed_db/dartium/indexed_db_dartium.dart
index fcb4e1d..6272bbf 100644
--- a/sdk/lib/indexed_db/dartium/indexed_db_dartium.dart
+++ b/sdk/lib/indexed_db/dartium/indexed_db_dartium.dart
@@ -178,6 +178,7 @@
     return new Cursor.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Cursor.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -250,6 +251,7 @@
     return new CursorWithValue.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   CursorWithValue.internal_() : super.internal_();
 
 
@@ -346,6 +348,7 @@
     return new Database.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Database.internal_() : super.internal_();
 
 
@@ -540,6 +543,7 @@
     return new IdbFactory.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   IdbFactory.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -692,6 +696,7 @@
     return new Index.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Index.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -782,6 +787,7 @@
     return new KeyRange.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   KeyRange.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -980,6 +986,7 @@
     return new ObjectStore.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ObjectStore.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -1145,6 +1152,7 @@
     return new OpenDBRequest.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   OpenDBRequest.internal_() : super.internal_();
 
 
@@ -1203,6 +1211,7 @@
     return new Request.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Request.internal_() : super.internal_();
 
 
@@ -1317,6 +1326,7 @@
     return new Transaction.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Transaction.internal_() : super.internal_();
 
 
@@ -1380,6 +1390,7 @@
     return new VersionChangeEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   VersionChangeEvent.internal_() : super.internal_();
 
 
diff --git a/sdk/lib/io/http.dart b/sdk/lib/io/http.dart
index dd71559..deae6dc 100644
--- a/sdk/lib/io/http.dart
+++ b/sdk/lib/io/http.dart
@@ -94,7 +94,7 @@
  * Use [bindSecure] to create an HTTPS server.
  *
  * The server presents a certificate to the client. The certificate
- * chain and the private key are set in the SecurityContext
+ * chain and the private key are set in the [SecurityContext]
  * object that is passed to [bindSecure].
  *
  *     import 'dart:io';
@@ -123,8 +123,8 @@
  *           });
  *     }
  *
- *  The certificates and keys are pem files, which can be created and
- *  managed with the tools in OpenSSL and BoringSSL.
+ *  The certificates and keys are PEM files, which can be created and
+ *  managed with the tools in OpenSSL.
  *
  * ## Connect to a server socket
  *
@@ -237,13 +237,12 @@
    * value of [:0:] (the default) a reasonable value will be chosen by
    * the system.
    *
-   * The optional argument [shared] specify whether additional binds
-   * to the same `address`, `port` and `v6Only` combination is
-   * possible from the same Dart process. If `shared` is `true` and
-   * additional binds are performed, then the incoming connections
-   * will be distributed between that set of `HttpServer`s. One way of
-   * using this is to have number of isolates between which incoming
-   * connections are distributed.
+   * The optional argument [shared] specifies whether additional HttpServer
+   * objects can bind to the same combination of `address`, `port` and `v6Only`.
+   * If `shared` is `true` and more `HttpServer`s from this isolate or other
+   * isolates are bound to the port, then the incoming connections will be
+   * distributed among all the bound `HttpServer`s. Connections can be
+   * distributed over multiple isolates this way.
    */
   static Future<HttpServer> bind(address,
                                  int port,
@@ -278,18 +277,18 @@
    * value of [:0:] (the default) a reasonable value will be chosen by
    * the system.
    *
-   * The certificate with nickname or distinguished name (DN) [certificateName]
-   * is looked up in the certificate database, and is used as the server
-   * certificate. If [requestClientCertificate] is true, the server will
+   * If [requestClientCertificate] is true, the server will
    * request clients to authenticate with a client certificate.
+   * The server will advertise the names of trusted issuers of client
+   * certificates, getting them from [context], where they have been
+   * set using [SecurityContext.setClientAuthorities].
    *
-   * The optional argument [shared] specify whether additional binds
-   * to the same `address`, `port` and `v6Only` combination is
-   * possible from the same Dart process. If `shared` is `true` and
-   * additional binds are performed, then the incoming connections
-   * will be distributed between that set of `HttpServer`s. One way of
-   * using this is to have number of isolates between which incoming
-   * connections are distributed.
+   * The optional argument [shared] specifies whether additional HttpServer
+   * objects can bind to the same combination of `address`, `port` and `v6Only`.
+   * If `shared` is `true` and more `HttpServer`s from this isolate or other
+   * isolates are bound to the port, then the incoming connections will be
+   * distributed among all the bound `HttpServer`s. Connections can be
+   * distributed over multiple isolates this way.
    */
 
   static Future<HttpServer> bindSecure(address,
@@ -297,7 +296,6 @@
                                        SecurityContext context,
                                        {int backlog: 0,
                                         bool v6Only: false,
-                                        String certificateName,
                                         bool requestClientCertificate: false,
                                         bool shared: false})
       => _HttpServer.bindSecure(address,
@@ -305,7 +303,6 @@
                                 context,
                                 backlog,
                                 v6Only,
-                                certificateName,
                                 requestClientCertificate,
                                 shared);
 
@@ -1244,6 +1241,19 @@
  * The future for [HttpClientRequest] is created by methods such as
  * [getUrl] and [open].
  *
+ * ## HTTPS connections
+ *
+ * An HttpClient can make HTTPS requests, connecting to a server using
+ * the TLS (SSL) secure networking protocol. Calling [getUrl] with an
+ * https: scheme will work automatically, if the server's certificate is
+ * signed by a root CA (certificate authority) on the default list of
+ * well-known trusted CAs, compiled by Mozilla.
+ *
+ * To add a custom trusted certificate authority, or to send a client
+ * certificate to servers that request one, pass a [SecurityContext] object
+ * as the optional [context] argument to the `HttpClient` constructor.
+ * The desired security options can be set on the [SecurityContext] object.
+ *
  * ## Headers
  *
  * All HttpClient requests set the following header by default:
diff --git a/sdk/lib/io/http_impl.dart b/sdk/lib/io/http_impl.dart
index 2bae836..d002f30 100644
--- a/sdk/lib/io/http_impl.dart
+++ b/sdk/lib/io/http_impl.dart
@@ -2224,7 +2224,6 @@
                                        SecurityContext context,
                                        int backlog,
                                        bool v6Only,
-                                       String certificate_name,
                                        bool requestClientCertificate,
                                        bool shared) {
     return SecureServerSocket.bind(
diff --git a/sdk/lib/io/secure_server_socket.dart b/sdk/lib/io/secure_server_socket.dart
index 04ec9e0..2fbc5b1 100644
--- a/sdk/lib/io/secure_server_socket.dart
+++ b/sdk/lib/io/secure_server_socket.dart
@@ -41,25 +41,25 @@
    * the system.
    *
    * Incoming client connections are promoted to secure connections, using
-   * the server certificate given by [certificateName].
+   * the server certificate and key set in [context].
    *
    * [address] must be given as a numeric address, not a host name.
    *
    * To request or require that clients authenticate by providing an SSL (TLS)
    * client certificate, set the optional parameter [requestClientCertificate]
    * or [requireClientCertificate] to true.  Requiring a certificate implies
-   * requesting a certificate, so one doesn't need to set both to true.
+   * requesting a certificate, so setting both is redundant.
    * To check whether a client certificate was received, check
    * SecureSocket.peerCertificate after connecting.  If no certificate
    * was received, the result will be null.
    *
-   * The optional argument [shared] specify whether additional binds
-   * to the same `address`, `port` and `v6Only` combination is
-   * possible from the same Dart process. If `shared` is `true` and
-   * additional binds are performed, then the incoming connections
-   * will be distributed between that set of
-   * `SecureServerSocket`s. One way of using this is to have number of
-   * isolates between which incoming connections are distributed.
+   * The optional argument [shared] specifies whether additional
+   * SecureServerSocket objects can bind to the same combination of `address`,
+   * `port` and `v6Only`.  If `shared` is `true` and more `SecureServerSocket`s
+   * from this isolate or other isolates are bound to the port, then the
+   * incoming connections will be distributed among all the bound
+   * `SecureServerSocket`s. Connections can be distributed over multiple
+   * isolates this way.
    */
   static Future<SecureServerSocket> bind(
       address,
@@ -170,16 +170,10 @@
    * the system.
    *
    * Incoming client connections are promoted to secure connections,
-   * using the server certificate given by [certificateName].
+   * using the server certificate and key set in [context].
    *
    * [address] must be given as a numeric address, not a host name.
    *
-   * [certificateName] is the nickname or the distinguished name (DN) of
-   * the certificate in the certificate database. It is looked up in the
-   * NSS certificate database set by SecureSocket.setCertificateDatabase.
-   * If [certificateName] contains "CN=", it is assumed to be a distinguished
-   * name.  Otherwise, it is looked up as a nickname.
-   *
    * To request or require that clients authenticate by providing an SSL (TLS)
    * client certificate, set the optional parameters requestClientCertificate or
    * requireClientCertificate to true.  Require implies request, so one doesn't
@@ -187,13 +181,13 @@
    * check SecureSocket.peerCertificate after connecting.  If no certificate
    * was received, the result will be null.
    *
-   * The optional argument [shared] specify whether additional binds
-   * to the same `address`, `port` and `v6Only` combination is
-   * possible from the same Dart process. If `shared` is `true` and
-   * additional binds are performed, then the incoming connections
-   * will be distributed between that set of
-   * `RawSecureServerSocket`s. One way of using this is to have number
-   * of isolates between which incoming connections are distributed.
+   * The optional argument [shared] specifies whether additional
+   * RawSecureServerSocket objects can bind to the same combination of
+   * `address`, `port` and `v6Only`.  If `shared` is `true` and more
+   * `RawSecureServerSocket`s from this isolate or other isolates are bound to
+   * the port, then the incoming connections will be distributed among all the
+   * bound `RawSecureServerSocket`s. Connections can be distributed over
+   * multiple isolates this way.
    */
   static Future<RawSecureServerSocket> bind(
       address,
diff --git a/sdk/lib/io/secure_socket.dart b/sdk/lib/io/secure_socket.dart
index 5e417e5..cf8dec0 100644
--- a/sdk/lib/io/secure_socket.dart
+++ b/sdk/lib/io/secure_socket.dart
@@ -14,7 +14,7 @@
   external factory SecureSocket._(RawSecureSocket rawSocket);
 
   /**
-   * Constructs a new secure client socket and connect it to the given
+   * Constructs a new secure client socket and connects it to the given
    * [host] on port [port]. The returned Future will complete with a
    * [SecureSocket] that is connected and ready for subscription.
    *
@@ -167,24 +167,24 @@
  * RawSecureSocket provides a secure (SSL or TLS) network connection.
  * Client connections to a server are provided by calling
  * RawSecureSocket.connect.  A secure server, created with
- * RawSecureServerSocket, also returns RawSecureSocket objects representing
+ * [RawSecureServerSocket], also returns RawSecureSocket objects representing
  * the server end of a secure connection.
  * The certificate provided by the server is checked
  * using the trusted certificates set in the SecurityContext object.
- * The default SecurityContext object contains a built-in set of trusted
+ * The default [SecurityContext] object contains a built-in set of trusted
  * root certificates for well-known certificate authorities.
  */
 abstract class RawSecureSocket implements RawSocket {
   /**
    * Constructs a new secure client socket and connect it to the given
-   * host on the given port. The returned Future is completed with the
+   * host on the given port. The returned [Future] is completed with the
    * RawSecureSocket when it is connected and ready for subscription.
    *
-   * The certificate provided by the server is checked
-   * using the trusted certificates set in the SecurityContext object
-   * If a certificate and key are set on the client, using useCertificateChain
-   * and usePrivateKey, and the server asks for a client certificate,
-   * then that client certificate is sent to the server.
+   * The certificate provided by the server is checked using the trusted
+   * certificates set in the SecurityContext object If a certificate and key are
+   * set on the client, using [SecurityContext.useCertificateChain] and
+   * [SecurityContext.usePrivateKey], and the server asks for a client
+   * certificate, then that client certificate is sent to the server.
    *
    * [onBadCertificate] is an optional handler for unverifiable certificates.
    * The handler receives the [X509Certificate], and can inspect it and
diff --git a/sdk/lib/io/security_context.dart b/sdk/lib/io/security_context.dart
index 47234ff..48e8111 100644
--- a/sdk/lib/io/security_context.dart
+++ b/sdk/lib/io/security_context.dart
@@ -21,6 +21,16 @@
  */
 abstract class SecurityContext {
   external factory SecurityContext();
+
+  /**
+   * Secure networking classes with an optional `context` parameter
+   * use the [defaultContext] object if the parameter is omitted.
+   * This object can also be accessed, and modified, directly.
+   * Each isolate has a different [defaultContext] object.
+   * The [defaultContext] object uses a list of well-known trusted
+   * certificate authorities as its trusted roots.  This list is
+   * taken from Mozilla, who maintains it as part of Firefox.
+   */
   external static SecurityContext get defaultContext;
 
   /**
diff --git a/sdk/lib/io/socket.dart b/sdk/lib/io/socket.dart
index 6464ab4a..4da5bb8 100644
--- a/sdk/lib/io/socket.dart
+++ b/sdk/lib/io/socket.dart
@@ -224,13 +224,12 @@
    * value of [:0:] (the default) a reasonable value will be chosen by
    * the system.
    *
-   * The optional argument [shared] specify whether additional binds
-   * to the same `address`, `port` and `v6Only` combination is
-   * possible from the same Dart process. If `shared` is `true` and
-   * additional binds are performed, then the incoming connections
-   * will be distributed between that set of `RawServerSocket`s. One
-   * way of using this is to have number of isolates between which
-   * incoming connections are distributed.
+   * The optional argument [shared] specifies whether additional RawServerSocket
+   * objects can bind to the same combination of `address`, `port` and `v6Only`.
+   * If `shared` is `true` and more `RawServerSocket`s from this isolate or
+   * other isolates are bound to the port, then the incoming connections will be
+   * distributed among all the bound `RawServerSocket`s. Connections can be
+   * distributed over multiple isolates this way.
    */
   external static Future<RawServerSocket> bind(address,
                                                int port,
@@ -294,13 +293,12 @@
    * value of [:0:] (the default) a reasonable value will be chosen by
    * the system.
    *
-   * The optional argument [shared] specify whether additional binds
-   * to the same `address`, `port` and `v6Only` combination is
-   * possible from the same Dart process. If `shared` is `true` and
-   * additional binds are performed, then the incoming connections
-   * will be distributed between that set of `ServerSocket`s. One way
-   * of using this is to have number of isolates between which
-   * incoming connections are distributed.
+   * The optional argument [shared] specifies whether additional ServerSocket
+   * objects can bind to the same combination of `address`, `port` and `v6Only`.
+   * If `shared` is `true` and more `ServerSocket`s from this isolate or other
+   * isolates are bound to the port, then the incoming connections will be
+   * distributed among all the bound `ServerSocket`s. Connections can be
+   * distributed over multiple isolates this way.
    */
   external static Future<ServerSocket> bind(address,
                                             int port,
diff --git a/sdk/lib/js/dartium/js_dartium.dart b/sdk/lib/js/dartium/js_dartium.dart
index eeecd93..fde9d40 100644
--- a/sdk/lib/js/dartium/js_dartium.dart
+++ b/sdk/lib/js/dartium/js_dartium.dart
@@ -98,14 +98,16 @@
 
 // Pretend we are always in checked mode as we aren't interested in users
 // running Dartium code outside of checked mode.
+@Deprecated("Internal Use Only")
 final bool CHECK_JS_INVOCATIONS = true;
 
 final _allowedMethods = new Map<Symbol, _DeclarationSet>();
 final _allowedGetters = new Map<Symbol, _DeclarationSet>();
 final _allowedSetters = new Map<Symbol, _DeclarationSet>();
 
-final _jsInterfaceTypes = new Set<Type>();
-Iterable<Type> get jsInterfaceTypes => _jsInterfaceTypes;
+final _jsInterfaceTypes = new Set<mirrors.ClassMirror>();
+@Deprecated("Internal Use Only")
+Iterable<mirrors.ClassMirror> get jsInterfaceTypes => _jsInterfaceTypes;
 
 /// A collection of methods where all methods have the same name.
 /// This class is intended to optimize whether a specific invocation is
@@ -207,13 +209,13 @@
  * Temporary method that we hope to remove at some point. This method should
  * generally only be called by machine generated code.
  */
+@Deprecated("Internal Use Only")
 void registerJsInterfaces([List<Type> classes]) {
   // This method is now obsolete in Dartium.
 }
 
 void _registerJsInterfaces(List<Type> classes) {
   for (Type type in classes) {
-    if (!_jsInterfaceTypes.add(type)) continue; // Already registered.
     mirrors.ClassMirror typeMirror = mirrors.reflectType(type);
     typeMirror.declarations.forEach((symbol, declaration) {
       if (declaration is mirrors.MethodMirror ||
@@ -266,22 +268,33 @@
         try {
           var name = annotation.reflectee.name;
           return name != null ? name : "";
-        } catch (e) {
-        }
+        } catch (e) {}
       }
     }
   }
   return null;
 }
 
-bool _hasJsName(mirrors.DeclarationMirror mirror) =>
-  _getJsName(mirror) != null;
+bool _isAnonymousClass(mirrors.ClassMirror mirror) {
+  for (var annotation in mirror.metadata) {
+    if (mirrors.MirrorSystem.getName(annotation.type.simpleName) ==
+        "_Anonymous") {
+      mirrors.LibraryMirror library = annotation.type.owner;
+      var uri = library.uri;
+      // make sure the annotation is from package://js
+      if (uri.scheme == 'package' && uri.path == 'js/js.dart') {
+        return true;
+      }
+    }
+  }
+  return false;
+}
 
+bool _hasJsName(mirrors.DeclarationMirror mirror) => _getJsName(mirror) != null;
 
 _getJsMemberName(mirrors.DeclarationMirror mirror) {
   var name = _getJsName(mirror);
-  return name == null || name.isEmpty ? _getDeclarationName(mirror) :
-      name;
+  return name == null || name.isEmpty ? _getDeclarationName(mirror) : name;
 }
 
 // TODO(jacobr): handle setters correctyl.
@@ -301,9 +314,13 @@
     "${_JS_LIBRARY_PREFIX}.context${path.split(".").map((p) => "['$p']").join('')}";
 
 @Deprecated("Internal Use Only")
-void addMemberHelper(mirrors.MethodMirror declaration, String path, StringBuffer sb, {bool isStatic: false, String memberName}) {
-  var jsName = _getJsMemberName(declaration);
-  path = (path != null && path.isNotEmpty) ? "${path}.${jsName}" : jsName;
+void addMemberHelper(
+    mirrors.MethodMirror declaration, String path, StringBuffer sb,
+    {bool isStatic: false, String memberName}) {
+  if (!declaration.isConstructor) {
+    var jsName = _getJsMemberName(declaration);
+    path = (path != null && path.isNotEmpty) ? "${path}.${jsName}" : jsName;
+  }
   var name = memberName != null ? memberName : _getDeclarationName(declaration);
   if (declaration.isConstructor) {
     sb.write("factory");
@@ -346,7 +363,7 @@
     // TODO(jacobr):
     sb.write(") => ");
     if (declaration.isConstructor) {
-        sb.write("new ${_JS_LIBRARY_PREFIX}.JsObject(");
+      sb.write("new ${_JS_LIBRARY_PREFIX}.JsObject(");
     }
     sb
       ..write(_accessJsPath(path))
@@ -362,8 +379,13 @@
 }
 
 // TODO(jacobr): make this check more robust.
-bool _isExternal(mirrors.MethodMirror mirror) =>
-    mirror.source != null && mirror.source.startsWith("external ");
+bool _isExternal(mirrors.Mirror mirror) {
+  /*
+  var source = mirror.source;
+  return source != null && source.startsWith("external ");
+  */
+  return mirror.isExternal;
+}
 
 List<String> _generateExternalMethods() {
   var staticCodegen = <String>[];
@@ -372,49 +394,59 @@
     String jsLibraryName = _getJsName(library);
     library.declarations.forEach((name, declaration) {
       if (declaration is mirrors.MethodMirror) {
-        if (_isExternal(declaration) && (_hasJsName(declaration) || jsLibraryName != null)) {
+        if ((_hasJsName(declaration) || jsLibraryName != null) &&
+            _isExternal(declaration)) {
           addMemberHelper(declaration, jsLibraryName, sb);
         }
       } else if (declaration is mirrors.ClassMirror) {
         mirrors.ClassMirror clazz = declaration;
         if (_hasJsName(clazz)) {
           // TODO(jacobr): verify class implements JavaScriptObject.
-          assert(clazz.hasReflectedType);
-          jsInterfaceTypes.add(clazz.reflectedType);
           String jsClassName = _getJsMemberName(clazz);
           var className = mirrors.MirrorSystem.getName(clazz.simpleName);
           var sbPatch = new StringBuffer();
+          jsInterfaceTypes.add(clazz);
           clazz.declarations.forEach((name, declaration) {
-            if (declaration is! mirrors.MethodMirror || !_isExternal(declaration)) return;
-            if (declaration.isFactoryConstructor) {
-              sbPatch.write("  factory ${className}({");
+            if (declaration is! mirrors.MethodMirror ||
+                !_isExternal(declaration)) return;
+            if (declaration.isFactoryConstructor && _isAnonymousClass(clazz)) {
+              sbPatch.write("  factory ${className}(");
               int i = 0;
               var args = <String>[];
               for (var p in declaration.parameters) {
-                assert(p.isNamed); // XXX throw
                 args.add(mirrors.MirrorSystem.getName(p.simpleName));
                 i++;
               }
-              sbPatch
-                ..write(args.map((name) => '$name:${_UNDEFINED_VAR}').join(", "))
-                ..write("}) {\n"
-                        "    var ret = new ${_JS_LIBRARY_PREFIX}.JsObject.jsify({});\n");
+              if (args.isNotEmpty) {
+                sbPatch
+                  ..write('{')
+                  ..write(
+                      args.map((name) => '$name:${_UNDEFINED_VAR}').join(", "))
+                  ..write('}');
+              }
+              sbPatch.write(") {\n"
+                    "    var ret = new ${_JS_LIBRARY_PREFIX}.JsObject.jsify({});\n");
               i = 0;
               for (var p in declaration.parameters) {
                 assert(p.isNamed); // XXX throw
                 var name = args[i];
                 var jsName = mirrors.MirrorSystem.getName(p.simpleName);
                 // XXX apply name conversion rules.
-                sbPatch.write("    if($name != ${_UNDEFINED_VAR}) ret['$jsName'] = $name;\n");
+                sbPatch.write(
+                    "    if($name != ${_UNDEFINED_VAR}) ret['$jsName'] = $name;\n");
                 i++;
               }
 
               sbPatch.write("    return ret;\n"
-                            "  }\n");
-            } else if (declaration.isConstructor) {
+                  "  }\n");
+            } else if (declaration.isConstructor ||
+                declaration.isFactoryConstructor) {
               sbPatch.write("  ");
-              addMemberHelper(declaration,
-                  (jsLibraryName != null && jsLibraryName.isNotEmpty) ? "${jsLibraryName}" : "",
+              addMemberHelper(
+                  declaration,
+                  (jsLibraryName != null && jsLibraryName.isNotEmpty)
+                      ? "${jsLibraryName}.${jsClassName}"
+                      : jsClassName,
                   sbPatch,
                   isStatic: true,
                   memberName: className);
@@ -424,15 +456,136 @@
           clazz.staticMembers.forEach((memberName, member) {
             if (_isExternal(member)) {
               sbPatch.write("  ");
-              addMemberHelper(member,
-                  (jsLibraryName != null && jsLibraryName.isNotEmpty) ? "${jsLibraryName}.${jsClassName}" : jsClassName,
+              addMemberHelper(
+                  member,
+                  (jsLibraryName != null && jsLibraryName.isNotEmpty)
+                      ? "${jsLibraryName}.${jsClassName}"
+                      : jsClassName,
                   sbPatch,
                   isStatic: true);
             }
           });
+          var typeVariablesClause = '';
+          if (!clazz.typeVariables.isEmpty) {
+            typeVariablesClause =
+                '<${clazz.typeVariables.map((m) => mirrors.MirrorSystem.getName(m.simpleName)).join(',')}>';
+          }
           if (sbPatch.isNotEmpty) {
             sb.write("""
-patch class $className {
+patch class $className$typeVariablesClause {
+$sbPatch
+}
+""");
+          }
+        }
+      }
+    });
+    if (sb.isNotEmpty) {
+      staticCodegen
+        ..add(uri.toString())
+        ..add("${uri}_js_interop_patch.dart")
+        ..add("""
+import 'dart:js' as ${_JS_LIBRARY_PREFIX};
+
+/**
+ * Placeholder object for cases where we need to determine exactly how many
+ * args were passed to a function.
+ */
+const ${_UNDEFINED_VAR} = const Object();
+
+${sb}
+""");
+    }
+  });
+
+  return staticCodegen;
+}
+
+List<String> _generateExternalMethods2() {
+  var staticCodegen = <String>[];
+  mirrors.currentMirrorSystem().libraries.forEach((uri, library) {
+    var sb = new StringBuffer();
+    String jsLibraryName = _getJsName(library);
+    library.declarations.forEach((name, declaration) {
+      var isExternal = _isExternal(declaration);
+      if (declaration is mirrors.MethodMirror) {
+        if (isExternal && (_hasJsName(declaration) || jsLibraryName != null)) {
+          addMemberHelper(declaration, jsLibraryName, sb);
+        }
+      } else if (declaration is mirrors.ClassMirror) {
+        mirrors.ClassMirror clazz = declaration;
+        if (_hasJsName(clazz)) {
+          // TODO(jacobr): verify class implements JavaScriptObject.
+          String jsClassName = _getJsMemberName(clazz);
+          var className = mirrors.MirrorSystem.getName(clazz.simpleName);
+          var sbPatch = new StringBuffer();
+          jsInterfaceTypes.add(clazz);
+          clazz.declarations.forEach((name, declaration) {
+            if (declaration is! mirrors.MethodMirror ||
+                !declaration.isAbstract ||
+                !isExternal) return;
+            if (_hasLiteralAnnotation(declaration) &&
+                declaration.isFactoryConstructor) {
+              sbPatch.write("  factory ${className}({");
+              int i = 0;
+              var args = <String>[];
+              for (var p in declaration.parameters) {
+                assert(p.isNamed); // XXX throw
+                args.add(mirrors.MirrorSystem.getName(p.simpleName));
+                i++;
+              }
+              sbPatch
+                ..write(
+                    args.map((name) => '$name:${_UNDEFINED_VAR}').join(", "))
+                ..write("}) {\n"
+                    "    var ret = new ${_JS_LIBRARY_PREFIX}.JsObject.jsify({});\n");
+              i = 0;
+              for (var p in declaration.parameters) {
+                assert(p.isNamed); // XXX throw
+                var name = args[i];
+                var jsName = mirrors.MirrorSystem.getName(p.simpleName);
+                // XXX apply name conversion rules.
+                sbPatch.write(
+                    "    if($name != ${_UNDEFINED_VAR}) ret['$jsName'] = $name;\n");
+                i++;
+              }
+
+              sbPatch.write("    return ret;\n"
+                  "  }\n");
+            } else if (declaration.isConstructor ||
+                declaration.isFactoryConstructor) {
+              sbPatch.write("  ");
+              addMemberHelper(
+                  declaration,
+                  (jsLibraryName != null && jsLibraryName.isNotEmpty)
+                      ? "${jsLibraryName}.${jsClassName}"
+                      : jsClassName,
+                  sbPatch,
+                  isStatic: true,
+                  memberName: className);
+            }
+          });
+
+          clazz.staticMembers.forEach((memberName, member) {
+            if (_isExternal(member)) {
+              sbPatch.write("  ");
+              addMemberHelper(
+                  member,
+                  (jsLibraryName != null && jsLibraryName.isNotEmpty)
+                      ? "${jsLibraryName}.${jsClassName}"
+                      : jsClassName,
+                  sbPatch,
+                  isStatic: true);
+            }
+          });
+          var typeVariablesClause = '';
+          if (!clazz.typeVariables.isEmpty) {
+            typeVariablesClause =
+                '<${clazz.typeVariables.map((m) => mirrors.MirrorSystem.getName(m.simpleName)).join(',')}>';
+          }
+          if (sbPatch.isNotEmpty) {
+            sb.write("""
+patch class $className$typeVariablesClause {
 $sbPatch
 }
 """);
@@ -476,8 +629,7 @@
   var implementsArray = <String>[];
   var listMirror = mirrors.reflectType(List);
 
-  for (var type in jsInterfaceTypes) {
-    mirrors.ClassMirror typeMirror = mirrors.reflectType(type);
+  for (var typeMirror in jsInterfaceTypes) {
     mirrors.LibraryMirror libraryMirror = typeMirror.owner;
     var prefixName;
     if (libraryPrefixes.containsKey(libraryMirror)) {
@@ -504,7 +656,7 @@
     sb.writeln('import "${libraryMirror.uri}" as $prefix;');
   });
   buildImplementsClause(classes) =>
-      classes.isEmpty ? "" : "implements ${classes.join(', ')}"
+      classes.isEmpty ? "" : "implements ${classes.join(', ')}";
   var implementsClause = buildImplementsClause(implements);
   // TODO(jacobr): only certain classes need to be implemented by
   // JsFunctionImpl.
@@ -579,7 +731,7 @@
 String _arrayToString(List list) => _arrayJoin(list, ",");
 
 int _arrayPush(List list, List args) {
-  for(var e in args) {
+  for (var e in args) {
     list.add(e);
   }
   return list.length;
@@ -680,6 +832,7 @@
  * be added. Creating an instance of JsObject will also automatically trigger
  * all JsObjects to be finalized.
  */
+@Deprecated("Internal Use Only")
 void finalizeJsInterfaces() {
   if (_finalized == true) {
     throw 'JSInterop class registration already finalized';
@@ -703,13 +856,13 @@
 _maybeWrap(o) {
   var wrapped = html_common.wrap_jso_no_SerializedScriptvalue(o);
   if (identical(wrapped, o)) return o;
-  return (wrapped is html.Blob
-      || wrapped is html.Event
-      || wrapped is indexed_db.KeyRange
-      || wrapped is html.ImageData
-      || wrapped is html.Node
-      || wrapped is TypedData
-      || wrapped is html.Window) ? wrapped : o;
+  return (wrapped is html.Blob ||
+      wrapped is html.Event ||
+      wrapped is indexed_db.KeyRange ||
+      wrapped is html.ImageData ||
+      wrapped is html.Node ||
+      wrapped is TypedData ||
+      wrapped is html.Window) ? wrapped : o;
 }
 
 /**
@@ -737,10 +890,9 @@
  */
 @Deprecated("Internal Use Only")
 unwrap_jso(dartClass_instance) {
-  if (dartClass_instance is html.DartHtmlDomObject)
-    return dartClass_instance.blink_jsObject;
-  else
-    return dartClass_instance;
+  if (dartClass_instance is html.DartHtmlDomObject &&
+      dartClass_instance is! JsObject) return dartClass_instance.blink_jsObject;
+  else return dartClass_instance;
 }
 
 /**
@@ -764,15 +916,15 @@
    */
   factory JsObject(JsFunction constructor, [List arguments]) {
     try {
-      return _create(constructor, arguments);
+      return html_common.unwrap_jso(_create(constructor, arguments));
     } catch (e) {
       // Re-throw any errors (returned as a string) as a DomException.
       throw new html.DomException.jsInterop(e);
     }
   }
 
-  static JsObject _create(
-      JsFunction constructor, arguments) native "JsObject_constructorCallback";
+  static JsObject _create(JsFunction constructor, arguments)
+      native "JsObject_constructorCallback";
 
   _buildArgs(Invocation invocation) {
     if (invocation.namedArguments.isEmpty) {
@@ -839,6 +991,7 @@
       throw new html.DomException.jsInterop(e);
     }
   }
+
   _operator_getter(property) native "JsObject_[]";
 
   /**
@@ -855,6 +1008,7 @@
       throw new html.DomException.jsInterop(e);
     }
   }
+
   _operator_setter(property, value) native "JsObject_[]=";
 
   int get hashCode native "JsObject_hashCode";
@@ -868,8 +1022,8 @@
     return is_JsObject && _identityEquality(this, other);
   }
 
-  static bool _identityEquality(
-      JsObject a, JsObject b) native "JsObject_identityEquality";
+  static bool _identityEquality(JsObject a, JsObject b)
+      native "JsObject_identityEquality";
 
   /**
    * Returns `true` if the JavaScript object contains the specified property
@@ -1019,7 +1173,7 @@
    * supplied it is the value of `this` for the invocation.
    */
   dynamic apply(List args, {thisArg}) =>
-    _maybeWrap(_apply(args, thisArg: thisArg));
+      _maybeWrap(_apply(args, thisArg: thisArg));
 
   dynamic _apply(List args, {thisArg}) native "JsFunction_apply";
 
@@ -1036,8 +1190,8 @@
    * efficiently implemented in Dart2Js so should only be used by internal
    * tools.
    */
-  _applyDebuggerOnly(List args,
-      {thisArg}) native "JsFunction_applyDebuggerOnly";
+  _applyDebuggerOnly(List args, {thisArg})
+      native "JsFunction_applyDebuggerOnly";
 
   static JsFunction _withThis(Function f) native "JsFunction_withThis";
 }
@@ -1055,8 +1209,8 @@
   factory JsArray.from(Iterable<E> other) =>
       _newJsArrayFromSafeList(new List.from(other));
 
-  static JsArray _newJsArrayFromSafeList(
-      List list) native "JsArray_newJsArrayFromSafeList";
+  static JsArray _newJsArrayFromSafeList(List list)
+      native "JsArray_newJsArrayFromSafeList";
 
   _checkIndex(int index, {bool insert: false}) {
     int length = insert ? this.length + 1 : this.length;
@@ -1158,11 +1312,19 @@
  * Returns a method that can be called with an arbitrary number (for n less
  * than 11) of arguments without violating Dart type checks.
  */
-Function _wrapAsDebuggerVarArgsFunction(JsFunction jsFunction) =>
-    ([a1 = _UNDEFINED, a2 = _UNDEFINED, a3 = _UNDEFINED, a4 = _UNDEFINED,
-        a5 = _UNDEFINED, a6 = _UNDEFINED, a7 = _UNDEFINED, a8 = _UNDEFINED,
-        a9 = _UNDEFINED, a10 = _UNDEFINED]) => jsFunction._applyDebuggerOnly(
-            _stripUndefinedArgs([a1, a2, a3, a4, a5, a6, a7, a8, a9, a10]));
+Function _wrapAsDebuggerVarArgsFunction(JsFunction jsFunction) => (
+        [a1 = _UNDEFINED,
+        a2 = _UNDEFINED,
+        a3 = _UNDEFINED,
+        a4 = _UNDEFINED,
+        a5 = _UNDEFINED,
+        a6 = _UNDEFINED,
+        a7 = _UNDEFINED,
+        a8 = _UNDEFINED,
+        a9 = _UNDEFINED,
+        a10 = _UNDEFINED]) =>
+    jsFunction._applyDebuggerOnly(
+        _stripUndefinedArgs([a1, a2, a3, a4, a5, a6, a7, a8, a9, a10]));
 
 // The allowInterop method is a no-op in Dartium.
 // TODO(jacobr): tag methods so we can throw if a Dart method is passed to
diff --git a/sdk/lib/svg/dartium/svg_dartium.dart b/sdk/lib/svg/dartium/svg_dartium.dart
index 7da3402..c093cab 100644
--- a/sdk/lib/svg/dartium/svg_dartium.dart
+++ b/sdk/lib/svg/dartium/svg_dartium.dart
@@ -353,6 +353,7 @@
     return new AElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AElement.internal_() : super.internal_();
 
   /**
@@ -402,6 +403,7 @@
     return new AltGlyphElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AltGlyphElement.internal_() : super.internal_();
 
   /**
@@ -458,6 +460,7 @@
     return new Angle.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Angle.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -551,6 +554,7 @@
     return new AnimateElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AnimateElement.internal_() : super.internal_();
 
   /**
@@ -595,6 +599,7 @@
     return new AnimateMotionElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AnimateMotionElement.internal_() : super.internal_();
 
   /**
@@ -639,6 +644,7 @@
     return new AnimateTransformElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AnimateTransformElement.internal_() : super.internal_();
 
   /**
@@ -675,6 +681,7 @@
     return new AnimatedAngle.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AnimatedAngle.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -712,6 +719,7 @@
     return new AnimatedBoolean.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AnimatedBoolean.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -753,6 +761,7 @@
     return new AnimatedEnumeration.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AnimatedEnumeration.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -794,6 +803,7 @@
     return new AnimatedInteger.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AnimatedInteger.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -835,6 +845,7 @@
     return new AnimatedLength.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AnimatedLength.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -872,6 +883,7 @@
     return new AnimatedLengthList.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AnimatedLengthList.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -909,6 +921,7 @@
     return new AnimatedNumber.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AnimatedNumber.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -950,6 +963,7 @@
     return new AnimatedNumberList.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AnimatedNumberList.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -987,6 +1001,7 @@
     return new AnimatedPreserveAspectRatio.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AnimatedPreserveAspectRatio.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -1024,6 +1039,7 @@
     return new AnimatedRect.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AnimatedRect.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -1061,6 +1077,7 @@
     return new AnimatedString.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AnimatedString.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -1102,6 +1119,7 @@
     return new AnimatedTransformList.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AnimatedTransformList.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -1144,6 +1162,7 @@
     return new AnimationElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AnimationElement.internal_() : super.internal_();
 
   /**
@@ -1230,6 +1249,7 @@
     return new CircleElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   CircleElement.internal_() : super.internal_();
 
   /**
@@ -1280,6 +1300,7 @@
     return new ClipPathElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ClipPathElement.internal_() : super.internal_();
 
   /**
@@ -1322,6 +1343,7 @@
     return new DefsElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DefsElement.internal_() : super.internal_();
 
   /**
@@ -1360,6 +1382,7 @@
     return new DescElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DescElement.internal_() : super.internal_();
 
   /**
@@ -1394,6 +1417,7 @@
     return new DiscardElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DiscardElement.internal_() : super.internal_();
 
   /**
@@ -1432,6 +1456,7 @@
     return new EllipseElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   EllipseElement.internal_() : super.internal_();
 
   /**
@@ -1490,6 +1515,7 @@
     return new FEBlendElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FEBlendElement.internal_() : super.internal_();
 
   /**
@@ -1591,6 +1617,7 @@
     return new FEColorMatrixElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FEColorMatrixElement.internal_() : super.internal_();
 
   /**
@@ -1688,6 +1715,7 @@
     return new FEComponentTransferElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FEComponentTransferElement.internal_() : super.internal_();
 
   /**
@@ -1749,6 +1777,7 @@
     return new FECompositeElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FECompositeElement.internal_() : super.internal_();
 
   /**
@@ -1867,6 +1896,7 @@
     return new FEConvolveMatrixElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FEConvolveMatrixElement.internal_() : super.internal_();
 
   /**
@@ -1996,6 +2026,7 @@
     return new FEDiffuseLightingElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FEDiffuseLightingElement.internal_() : super.internal_();
 
   /**
@@ -2081,6 +2112,7 @@
     return new FEDisplacementMapElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FEDisplacementMapElement.internal_() : super.internal_();
 
   /**
@@ -2186,6 +2218,7 @@
     return new FEDistantLightElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FEDistantLightElement.internal_() : super.internal_();
 
   /**
@@ -2239,6 +2272,7 @@
     return new FEFloodElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FEFloodElement.internal_() : super.internal_();
 
   /**
@@ -2304,6 +2338,7 @@
     return new FEFuncAElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FEFuncAElement.internal_() : super.internal_();
 
   /**
@@ -2349,6 +2384,7 @@
     return new FEFuncBElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FEFuncBElement.internal_() : super.internal_();
 
   /**
@@ -2394,6 +2430,7 @@
     return new FEFuncGElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FEFuncGElement.internal_() : super.internal_();
 
   /**
@@ -2439,6 +2476,7 @@
     return new FEFuncRElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FEFuncRElement.internal_() : super.internal_();
 
   /**
@@ -2484,6 +2522,7 @@
     return new FEGaussianBlurElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FEGaussianBlurElement.internal_() : super.internal_();
 
   /**
@@ -2565,6 +2604,7 @@
     return new FEImageElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FEImageElement.internal_() : super.internal_();
 
   /**
@@ -2638,6 +2678,7 @@
     return new FEMergeElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FEMergeElement.internal_() : super.internal_();
 
   /**
@@ -2703,6 +2744,7 @@
     return new FEMergeNodeElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FEMergeNodeElement.internal_() : super.internal_();
 
   /**
@@ -2748,6 +2790,7 @@
     return new FEMorphologyElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FEMorphologyElement.internal_() : super.internal_();
 
   /**
@@ -2838,6 +2881,7 @@
     return new FEOffsetElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FEOffsetElement.internal_() : super.internal_();
 
   /**
@@ -2915,6 +2959,7 @@
     return new FEPointLightElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FEPointLightElement.internal_() : super.internal_();
 
   /**
@@ -2972,6 +3017,7 @@
     return new FESpecularLightingElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FESpecularLightingElement.internal_() : super.internal_();
 
   /**
@@ -3053,6 +3099,7 @@
     return new FESpotLightElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FESpotLightElement.internal_() : super.internal_();
 
   /**
@@ -3130,6 +3177,7 @@
     return new FETileElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FETileElement.internal_() : super.internal_();
 
   /**
@@ -3199,6 +3247,7 @@
     return new FETurbulenceElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FETurbulenceElement.internal_() : super.internal_();
 
   /**
@@ -3312,6 +3361,7 @@
     return new FilterElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   FilterElement.internal_() : super.internal_();
 
   /**
@@ -3454,6 +3504,7 @@
     return new ForeignObjectElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ForeignObjectElement.internal_() : super.internal_();
 
   /**
@@ -3511,6 +3562,7 @@
     return new GElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   GElement.internal_() : super.internal_();
 
   /**
@@ -3545,6 +3597,7 @@
     return new GeometryElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   GeometryElement.internal_() : super.internal_();
 
   /**
@@ -3589,6 +3642,7 @@
     return new GraphicsElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   GraphicsElement.internal_() : super.internal_();
 
   /**
@@ -3682,6 +3736,7 @@
     return new ImageElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ImageElement.internal_() : super.internal_();
 
   /**
@@ -3739,6 +3794,7 @@
     return new Length.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Length.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -3848,6 +3904,7 @@
     return new LengthList.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   LengthList.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -3968,6 +4025,7 @@
     return new LineElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   LineElement.internal_() : super.internal_();
 
   /**
@@ -4022,6 +4080,7 @@
     return new LinearGradientElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   LinearGradientElement.internal_() : super.internal_();
 
   /**
@@ -4076,6 +4135,7 @@
     return new MarkerElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MarkerElement.internal_() : super.internal_();
 
   /**
@@ -4182,6 +4242,7 @@
     return new MaskElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MaskElement.internal_() : super.internal_();
 
   /**
@@ -4255,6 +4316,7 @@
     return new Matrix.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Matrix.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -4377,6 +4439,7 @@
     return new MetadataElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MetadataElement.internal_() : super.internal_();
 
   /**
@@ -4410,6 +4473,7 @@
     return new Number.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Number.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -4447,6 +4511,7 @@
     return new NumberList.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   NumberList.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -4567,6 +4632,7 @@
     return new PathElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PathElement.internal_() : super.internal_();
 
   /**
@@ -4708,6 +4774,7 @@
     return new PathSeg.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PathSeg.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -4826,6 +4893,7 @@
     return new PathSegArcAbs.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PathSegArcAbs.internal_() : super.internal_();
 
 
@@ -4910,6 +4978,7 @@
     return new PathSegArcRel.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PathSegArcRel.internal_() : super.internal_();
 
 
@@ -4994,6 +5063,7 @@
     return new PathSegClosePath.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PathSegClosePath.internal_() : super.internal_();
 
 
@@ -5022,6 +5092,7 @@
     return new PathSegCurvetoCubicAbs.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PathSegCurvetoCubicAbs.internal_() : super.internal_();
 
 
@@ -5098,6 +5169,7 @@
     return new PathSegCurvetoCubicRel.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PathSegCurvetoCubicRel.internal_() : super.internal_();
 
 
@@ -5174,6 +5246,7 @@
     return new PathSegCurvetoCubicSmoothAbs.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PathSegCurvetoCubicSmoothAbs.internal_() : super.internal_();
 
 
@@ -5234,6 +5307,7 @@
     return new PathSegCurvetoCubicSmoothRel.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PathSegCurvetoCubicSmoothRel.internal_() : super.internal_();
 
 
@@ -5294,6 +5368,7 @@
     return new PathSegCurvetoQuadraticAbs.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PathSegCurvetoQuadraticAbs.internal_() : super.internal_();
 
 
@@ -5354,6 +5429,7 @@
     return new PathSegCurvetoQuadraticRel.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PathSegCurvetoQuadraticRel.internal_() : super.internal_();
 
 
@@ -5414,6 +5490,7 @@
     return new PathSegCurvetoQuadraticSmoothAbs.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PathSegCurvetoQuadraticSmoothAbs.internal_() : super.internal_();
 
 
@@ -5458,6 +5535,7 @@
     return new PathSegCurvetoQuadraticSmoothRel.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PathSegCurvetoQuadraticSmoothRel.internal_() : super.internal_();
 
 
@@ -5502,6 +5580,7 @@
     return new PathSegLinetoAbs.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PathSegLinetoAbs.internal_() : super.internal_();
 
 
@@ -5546,6 +5625,7 @@
     return new PathSegLinetoHorizontalAbs.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PathSegLinetoHorizontalAbs.internal_() : super.internal_();
 
 
@@ -5582,6 +5662,7 @@
     return new PathSegLinetoHorizontalRel.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PathSegLinetoHorizontalRel.internal_() : super.internal_();
 
 
@@ -5618,6 +5699,7 @@
     return new PathSegLinetoRel.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PathSegLinetoRel.internal_() : super.internal_();
 
 
@@ -5662,6 +5744,7 @@
     return new PathSegLinetoVerticalAbs.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PathSegLinetoVerticalAbs.internal_() : super.internal_();
 
 
@@ -5698,6 +5781,7 @@
     return new PathSegLinetoVerticalRel.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PathSegLinetoVerticalRel.internal_() : super.internal_();
 
 
@@ -5733,6 +5817,7 @@
     return new PathSegList.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PathSegList.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -5849,6 +5934,7 @@
     return new PathSegMovetoAbs.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PathSegMovetoAbs.internal_() : super.internal_();
 
 
@@ -5893,6 +5979,7 @@
     return new PathSegMovetoRel.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PathSegMovetoRel.internal_() : super.internal_();
 
 
@@ -5941,6 +6028,7 @@
     return new PatternElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PatternElement.internal_() : super.internal_();
 
   /**
@@ -6030,6 +6118,7 @@
     return new Point.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Point.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -6079,6 +6168,7 @@
     return new PointList.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PointList.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -6155,6 +6245,7 @@
     return new PolygonElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PolygonElement.internal_() : super.internal_();
 
   /**
@@ -6201,6 +6292,7 @@
     return new PolylineElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PolylineElement.internal_() : super.internal_();
 
   /**
@@ -6242,6 +6334,7 @@
     return new PreserveAspectRatio.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PreserveAspectRatio.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -6348,6 +6441,7 @@
     return new RadialGradientElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   RadialGradientElement.internal_() : super.internal_();
 
   /**
@@ -6405,6 +6499,7 @@
     return new Rect.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Rect.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -6471,6 +6566,7 @@
     return new RectElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   RectElement.internal_() : super.internal_();
 
   /**
@@ -6528,6 +6624,7 @@
     return new RenderingIntent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   RenderingIntent.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -6586,6 +6683,7 @@
     return new ScriptElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ScriptElement.internal_() : super.internal_();
 
   /**
@@ -6639,6 +6737,7 @@
     return new SetElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   SetElement.internal_() : super.internal_();
 
   /**
@@ -6680,6 +6779,7 @@
     return new StopElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   StopElement.internal_() : super.internal_();
 
   /**
@@ -6717,6 +6817,7 @@
     return new StringList.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   StringList.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -6838,6 +6939,7 @@
     return new StyleElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   StyleElement.internal_() : super.internal_();
 
   /**
@@ -7318,6 +7420,7 @@
     return new SvgElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   SvgElement.internal_() : super.internal_();
 
   /**
@@ -7672,6 +7775,7 @@
     return new SvgSvgElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   SvgSvgElement.internal_() : super.internal_();
 
   /**
@@ -7874,6 +7978,7 @@
     return new SwitchElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   SwitchElement.internal_() : super.internal_();
 
   /**
@@ -7912,6 +8017,7 @@
     return new SymbolElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   SymbolElement.internal_() : super.internal_();
 
   /**
@@ -7958,6 +8064,7 @@
     return new TSpanElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   TSpanElement.internal_() : super.internal_();
 
   /**
@@ -8023,6 +8130,7 @@
     return new TextContentElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   TextContentElement.internal_() : super.internal_();
 
   /**
@@ -8117,6 +8225,7 @@
     return new TextElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   TextElement.internal_() : super.internal_();
 
   /**
@@ -8151,6 +8260,7 @@
     return new TextPathElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   TextPathElement.internal_() : super.internal_();
 
   /**
@@ -8225,6 +8335,7 @@
     return new TextPositioningElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   TextPositioningElement.internal_() : super.internal_();
 
   /**
@@ -8283,6 +8394,7 @@
     return new TitleElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   TitleElement.internal_() : super.internal_();
 
   /**
@@ -8316,6 +8428,7 @@
     return new Transform.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Transform.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -8409,6 +8522,7 @@
     return new TransformList.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   TransformList.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -8532,6 +8646,7 @@
     return new UnitTypes.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   UnitTypes.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -8597,6 +8712,7 @@
     return new UseElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   UseElement.internal_() : super.internal_();
 
   /**
@@ -8655,6 +8771,7 @@
     return new ViewElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ViewElement.internal_() : super.internal_();
 
   /**
@@ -8708,6 +8825,7 @@
     return new ViewSpec.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ViewSpec.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -8817,6 +8935,7 @@
     return new ZoomEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ZoomEvent.internal_() : super.internal_();
 
 
@@ -8865,6 +8984,7 @@
     return new _GradientElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _GradientElement.internal_() : super.internal_();
 
   /**
@@ -8931,6 +9051,7 @@
     return new _SVGAltGlyphDefElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _SVGAltGlyphDefElement.internal_() : super.internal_();
 
   /**
@@ -8965,6 +9086,7 @@
     return new _SVGAltGlyphItemElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _SVGAltGlyphItemElement.internal_() : super.internal_();
 
   /**
@@ -8999,6 +9121,7 @@
     return new _SVGComponentTransferFunctionElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _SVGComponentTransferFunctionElement.internal_() : super.internal_();
 
   /**
@@ -9035,6 +9158,7 @@
     return new _SVGCursorElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _SVGCursorElement.internal_() : super.internal_();
 
   /**
@@ -9077,6 +9201,7 @@
     return new _SVGFEDropShadowElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _SVGFEDropShadowElement.internal_() : super.internal_();
 
   /**
@@ -9118,6 +9243,7 @@
     return new _SVGFontElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _SVGFontElement.internal_() : super.internal_();
 
   /**
@@ -9152,6 +9278,7 @@
     return new _SVGFontFaceElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _SVGFontFaceElement.internal_() : super.internal_();
 
   /**
@@ -9186,6 +9313,7 @@
     return new _SVGFontFaceFormatElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _SVGFontFaceFormatElement.internal_() : super.internal_();
 
   /**
@@ -9220,6 +9348,7 @@
     return new _SVGFontFaceNameElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _SVGFontFaceNameElement.internal_() : super.internal_();
 
   /**
@@ -9254,6 +9383,7 @@
     return new _SVGFontFaceSrcElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _SVGFontFaceSrcElement.internal_() : super.internal_();
 
   /**
@@ -9288,6 +9418,7 @@
     return new _SVGFontFaceUriElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _SVGFontFaceUriElement.internal_() : super.internal_();
 
   /**
@@ -9326,6 +9457,7 @@
     return new _SVGGlyphElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _SVGGlyphElement.internal_() : super.internal_();
 
   /**
@@ -9358,6 +9490,7 @@
     return new _SVGGlyphRefElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _SVGGlyphRefElement.internal_() : super.internal_();
 
   /**
@@ -9399,6 +9532,7 @@
     return new _SVGHKernElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _SVGHKernElement.internal_() : super.internal_();
 
   /**
@@ -9434,6 +9568,7 @@
     return new _SVGMPathElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _SVGMPathElement.internal_() : super.internal_();
 
   /**
@@ -9471,6 +9606,7 @@
     return new _SVGMissingGlyphElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _SVGMissingGlyphElement.internal_() : super.internal_();
 
   /**
@@ -9509,6 +9645,7 @@
     return new _SVGVKernElement.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   _SVGVKernElement.internal_() : super.internal_();
 
   /**
diff --git a/sdk/lib/web_audio/dartium/web_audio_dartium.dart b/sdk/lib/web_audio/dartium/web_audio_dartium.dart
index 7be279f..cc99534 100644
--- a/sdk/lib/web_audio/dartium/web_audio_dartium.dart
+++ b/sdk/lib/web_audio/dartium/web_audio_dartium.dart
@@ -108,6 +108,7 @@
     return new AnalyserNode.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AnalyserNode.internal_() : super.internal_();
 
 
@@ -189,6 +190,7 @@
     return new AudioBuffer.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AudioBuffer.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -264,6 +266,7 @@
     return new AudioBufferSourceNode.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AudioBufferSourceNode.internal_() : super.internal_();
 
 
@@ -376,6 +379,7 @@
     return new AudioContext.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AudioContext.internal_() : super.internal_();
 
 
@@ -542,6 +546,7 @@
     return new AudioDestinationNode.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AudioDestinationNode.internal_() : super.internal_();
 
 
@@ -574,6 +579,7 @@
     return new AudioListener.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AudioListener.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -630,6 +636,7 @@
     return new AudioNode.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AudioNode.internal_() : super.internal_();
 
 
@@ -717,6 +724,7 @@
     return new AudioParam.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AudioParam.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -784,6 +792,7 @@
     return new AudioProcessingEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AudioProcessingEvent.internal_() : super.internal_();
 
 
@@ -826,6 +835,7 @@
     return new AudioSourceNode.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AudioSourceNode.internal_() : super.internal_();
 
 
@@ -855,6 +865,7 @@
     return new BiquadFilterNode.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   BiquadFilterNode.internal_() : super.internal_();
 
 
@@ -912,6 +923,7 @@
     return new ChannelMergerNode.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ChannelMergerNode.internal_() : super.internal_();
 
 
@@ -941,6 +953,7 @@
     return new ChannelSplitterNode.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ChannelSplitterNode.internal_() : super.internal_();
 
 
@@ -970,6 +983,7 @@
     return new ConvolverNode.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ConvolverNode.internal_() : super.internal_();
 
 
@@ -1015,6 +1029,7 @@
     return new DelayNode.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DelayNode.internal_() : super.internal_();
 
 
@@ -1048,6 +1063,7 @@
     return new DynamicsCompressorNode.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DynamicsCompressorNode.internal_() : super.internal_();
 
 
@@ -1101,6 +1117,7 @@
     return new GainNode.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   GainNode.internal_() : super.internal_();
 
 
@@ -1134,6 +1151,7 @@
     return new MediaElementAudioSourceNode.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MediaElementAudioSourceNode.internal_() : super.internal_();
 
 
@@ -1168,6 +1186,7 @@
     return new MediaStreamAudioDestinationNode.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MediaStreamAudioDestinationNode.internal_() : super.internal_();
 
 
@@ -1201,6 +1220,7 @@
     return new MediaStreamAudioSourceNode.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   MediaStreamAudioSourceNode.internal_() : super.internal_();
 
 
@@ -1234,6 +1254,7 @@
     return new OfflineAudioCompletionEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   OfflineAudioCompletionEvent.internal_() : super.internal_();
 
 
@@ -1273,6 +1294,7 @@
     return new OfflineAudioContext.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   OfflineAudioContext.internal_() : super.internal_();
 
 
@@ -1313,6 +1335,7 @@
     return new OscillatorNode.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   OscillatorNode.internal_() : super.internal_();
 
 
@@ -1395,6 +1418,7 @@
     return new PannerNode.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PannerNode.internal_() : super.internal_();
 
 
@@ -1498,6 +1522,7 @@
     return new PeriodicWave.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   PeriodicWave.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -1540,6 +1565,7 @@
     return new ScriptProcessorNode.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ScriptProcessorNode.internal_() : super.internal_();
 
 
@@ -1591,6 +1617,7 @@
     return new WaveShaperNode.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   WaveShaperNode.internal_() : super.internal_();
 
 
diff --git a/sdk/lib/web_gl/dartium/web_gl_dartium.dart b/sdk/lib/web_gl/dartium/web_gl_dartium.dart
index 3d6ed95..1fdf4c7 100644
--- a/sdk/lib/web_gl/dartium/web_gl_dartium.dart
+++ b/sdk/lib/web_gl/dartium/web_gl_dartium.dart
@@ -423,6 +423,7 @@
     return new ActiveInfo.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ActiveInfo.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -464,6 +465,7 @@
     return new AngleInstancedArrays.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   AngleInstancedArrays.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -513,6 +515,7 @@
     return new Buffer.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Buffer.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -543,6 +546,7 @@
     return new CompressedTextureAtc.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   CompressedTextureAtc.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -584,6 +588,7 @@
     return new CompressedTextureETC1.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   CompressedTextureETC1.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -619,6 +624,7 @@
     return new CompressedTexturePvrtc.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   CompressedTexturePvrtc.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -665,6 +671,7 @@
     return new CompressedTextureS3TC.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   CompressedTextureS3TC.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -732,6 +739,7 @@
     return new ContextAttributes.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ContextAttributes.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -820,6 +828,7 @@
     return new ContextEvent.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ContextEvent.internal_() : super.internal_();
 
 
@@ -852,6 +861,7 @@
     return new DebugRendererInfo.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DebugRendererInfo.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -890,6 +900,7 @@
     return new DebugShaders.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DebugShaders.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -924,6 +935,7 @@
     return new DepthTexture.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DepthTexture.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -958,6 +970,7 @@
     return new DrawBuffers.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DrawBuffers.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -1127,6 +1140,7 @@
     return new ExtBlendMinMax.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ExtBlendMinMax.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -1167,6 +1181,7 @@
     return new ExtFragDepth.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ExtFragDepth.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -1196,6 +1211,7 @@
     return new ExtShaderTextureLod.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ExtShaderTextureLod.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -1226,6 +1242,7 @@
     return new ExtTextureFilterAnisotropic.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ExtTextureFilterAnisotropic.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -1263,6 +1280,7 @@
     return new Framebuffer.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Framebuffer.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -1293,6 +1311,7 @@
     return new LoseContext.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   LoseContext.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -1331,6 +1350,7 @@
     return new OesElementIndexUint.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   OesElementIndexUint.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -1361,6 +1381,7 @@
     return new OesStandardDerivatives.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   OesStandardDerivatives.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -1395,6 +1416,7 @@
     return new OesTextureFloat.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   OesTextureFloat.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -1425,6 +1447,7 @@
     return new OesTextureFloatLinear.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   OesTextureFloatLinear.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -1455,6 +1478,7 @@
     return new OesTextureHalfFloat.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   OesTextureHalfFloat.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -1489,6 +1513,7 @@
     return new OesTextureHalfFloatLinear.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   OesTextureHalfFloatLinear.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -1519,6 +1544,7 @@
     return new OesVertexArrayObject.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   OesVertexArrayObject.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -1568,6 +1594,7 @@
     return new Program.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Program.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -1597,6 +1624,7 @@
     return new Renderbuffer.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Renderbuffer.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -1626,6 +1654,7 @@
     return new RenderingContext.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   RenderingContext.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -3572,6 +3601,7 @@
     return new Shader.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Shader.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -3600,6 +3630,7 @@
     return new ShaderPrecisionFormat.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   ShaderPrecisionFormat.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -3640,6 +3671,7 @@
     return new Texture.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   Texture.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -3668,6 +3700,7 @@
     return new UniformLocation.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   UniformLocation.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -3698,6 +3731,7 @@
     return new VertexArrayObject.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   VertexArrayObject.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
diff --git a/sdk/lib/web_sql/dartium/web_sql_dartium.dart b/sdk/lib/web_sql/dartium/web_sql_dartium.dart
index 3b7d758..c7e6c93 100644
--- a/sdk/lib/web_sql/dartium/web_sql_dartium.dart
+++ b/sdk/lib/web_sql/dartium/web_sql_dartium.dart
@@ -118,6 +118,7 @@
     return new SqlDatabase.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   SqlDatabase.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -198,6 +199,7 @@
     return new SqlError.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   SqlError.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -268,6 +270,7 @@
     return new SqlResultSet.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   SqlResultSet.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -310,6 +313,7 @@
     return new SqlResultSetRowList.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   SqlResultSetRowList.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
@@ -397,6 +401,7 @@
     return new SqlTransaction.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   SqlTransaction.internal_() { }
 
   bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
diff --git a/tests/html/html.status b/tests/html/html.status
index fd87d0e..f5db897 100644
--- a/tests/html/html.status
+++ b/tests/html/html.status
@@ -19,9 +19,11 @@
 native_gc_test: Skip # Dartium JSInterop failure
 transferables_test: RuntimeError # Dartium JSInterop failure
 
+
 [ $compiler == none && ($runtime == drt || $runtime == dartium ) ]
 worker_api_test: Fail # Issue 10223
 resource_http_test: Fail # Issue 24203
+js_function_getter_trust_types_test: Skip # dartium doesn't support trust types.
 
 [ $compiler == none && $mode == debug && ($runtime == drt || $runtime == dartium ) ]
 datalistelement_test: Skip # Issue 20540
@@ -380,6 +382,8 @@
 js_test: Skip                       # Test cannot run under CSP restrictions (times out).
 js_array_test: Skip                 # Test cannot run under CSP restrictions.
 js_typed_interop_test: Skip         # Test cannot run under CSP restrictions.
+js_function_getter_test: Skip       # Test cannot run under CSP restrictions.
+js_function_getter_trust_types_test: Skip  # Test cannot run under CSP restrictions.
 js_dart_to_string_test: Skip        # Test cannot run under CSP restrictions.
 mirrors_js_typed_interop_test: Skip # Test cannot run under CSP restrictions.
 postmessage_structured_test: Skip   # Test cannot run under CSP restrictions (times out).
@@ -403,6 +407,7 @@
 element_test: StaticWarning
 events_test: StaticWarning
 htmlelement_test: StaticWarning
+js_function_getter_trust_types_test: skip # dart2js specific flags.
 localstorage_test: StaticWarning
 mutationobserver_test: StaticWarning
 queryall_test: fail
diff --git a/tests/html/js_function_getter_test.dart b/tests/html/js_function_getter_test.dart
new file mode 100644
index 0000000..c8a61b8
--- /dev/null
+++ b/tests/html/js_function_getter_test.dart
@@ -0,0 +1,109 @@
+// Copyright (c) 2015, 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.
+
+@JS()
+library js_function_getter_test;
+
+import 'dart:html';
+
+import 'package:js/js.dart';
+import 'package:unittest/unittest.dart';
+import 'package:unittest/html_config.dart';
+import 'package:unittest/html_individual_config.dart';
+
+_injectJs() {
+  document.body.append(new ScriptElement()
+    ..type = 'text/javascript'
+    ..innerHtml = r"""
+  var bar = { };
+
+  bar.instanceMember = function() {
+    if (this !== bar) {
+      throw 'Unexpected this!';
+    }
+    return arguments.length;
+  };
+
+  bar.staticMember = function() {
+    return arguments.length * 2;
+  };
+
+  bar.dynamicStatic = function() {
+    return arguments.length;
+  };
+
+  bar.add = function(a, b) {
+    return a + b;
+  };
+
+  var foo = { 'bar' : bar };
+""");
+}
+
+typedef int AddFn(int x, int y);
+
+@JS()
+abstract class Bar {
+  external Function get staticMember;
+  external Function get instanceMember;
+  external AddFn get add;
+  external get dynamicStatic;
+  external num get nonFunctionStatic;
+}
+
+@JS()
+abstract class Foo {
+  external Bar get bar;
+}
+
+@JS()
+external Foo get foo;
+
+main() {
+  _injectJs();
+
+  useHtmlIndividualConfiguration();
+
+  group('call getter as function', () {
+    test('member function', () {
+      expect(foo.bar.instanceMember(), equals(0));
+      expect(foo.bar.instanceMember(0), equals(1));
+      expect(foo.bar.instanceMember(0,0), equals(2));
+      expect(foo.bar.instanceMember(0,0,0,0,0,0), equals(6));
+      var instanceMember = foo.bar.instanceMember;
+      expect(() => instanceMember(), throws);
+      expect(() => instanceMember(0), throws);
+      expect(() => instanceMember(0,0), throws);
+      expect(() => instanceMember(0,0,0,0,0,0), throws);
+    });
+
+    test('static function', () {
+      expect(foo.bar.staticMember(), equals(0));
+      expect(foo.bar.staticMember(0), equals(2));
+      expect(foo.bar.staticMember(0,0), equals(4));
+      expect(foo.bar.staticMember(0,0,0,0,0,0), equals(12));
+      var staticMember = foo.bar.staticMember;
+      expect(staticMember(), equals(0));
+      expect(staticMember(0), equals(2));
+      expect(staticMember(0,0), equals(4));
+      expect(staticMember(0,0,0,0,0,0), equals(12));
+    });
+
+    test('static dynamicStatic', () {
+      expect(foo.bar.dynamicStatic(), equals(0));
+      expect(foo.bar.dynamicStatic(0), equals(1));
+      expect(foo.bar.dynamicStatic(0,0), equals(2));
+      expect(foo.bar.dynamicStatic(0,0,0,0,0,0), equals(6));
+      var dynamicStatic = foo.bar.dynamicStatic;
+      expect(dynamicStatic(), equals(0));
+      expect(dynamicStatic(0), equals(1));
+      expect(dynamicStatic(0,0), equals(2));
+      expect(dynamicStatic(0,0,0,0,0,0), equals(6));
+    });
+
+    test('typedef function', () {
+      expect(foo.bar.add(4,5), equals(9));
+    });
+  });
+}
diff --git a/tests/html/js_function_getter_trust_types_test.dart b/tests/html/js_function_getter_trust_types_test.dart
new file mode 100644
index 0000000..3e94b503
--- /dev/null
+++ b/tests/html/js_function_getter_trust_types_test.dart
@@ -0,0 +1,72 @@
+// Copyright (c) 2015, 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.
+
+// SharedOptions=--trust-type-annotations
+@JS()
+library js_function_getter_trust_types_test;
+
+import 'dart:html';
+
+import 'package:js/js.dart';
+import 'package:unittest/unittest.dart';
+import 'package:unittest/html_config.dart';
+import 'package:unittest/html_individual_config.dart';
+
+_injectJs() {
+  document.body.append(new ScriptElement()
+    ..type = 'text/javascript'
+    ..innerHtml = r"""
+  var bar = { };
+
+  bar.nonFunctionStatic = function() {
+    return arguments.length * 2;
+  };
+
+  bar.add = function(a, b) {
+    return a + b;
+  };
+
+  var foo = { 'bar' : bar };
+""");
+}
+
+typedef int AddFn(int x, int y);
+
+@JS()
+class NotAFn { }
+
+@JS()
+abstract class Bar {
+  external AddFn get add;
+  external NotAFn get nonFunctionStatic;
+}
+
+@JS()
+abstract class Foo {
+  external Bar get bar;
+}
+
+@JS()
+external Foo get foo;
+
+main() {
+  _injectJs();
+
+  useHtmlIndividualConfiguration();
+
+  group('trust types', () {
+    test('static nonFunctionStatic', () {
+      expect(() => foo.bar.nonFunctionStatic(), throws);
+      expect(() => foo.bar.nonFunctionStatic(0), throws);
+      expect(() => foo.bar.nonFunctionStatic(0,0), throws);
+      expect(() => foo.bar.nonFunctionStatic(0,0,0,0,0,0), throws);
+    });
+
+    test('typedef function', () {
+      expect(() => foo.bar.add(4), throws);
+      expect(() => foo.bar.add(4,5,10), throws);
+      expect(foo.bar.add(4,5), equals(9));
+    });
+  });
+}
diff --git a/tests/html/js_typed_interop_test.dart b/tests/html/js_typed_interop_test.dart
index 7325a87..2907142 100644
--- a/tests/html/js_typed_interop_test.dart
+++ b/tests/html/js_typed_interop_test.dart
@@ -114,6 +114,7 @@
   external static int multiplyDefault2(int a, [int b]);
 }
 
+@anonymous
 @JS()
 class ExampleLiteral {
   external factory ExampleLiteral({int x, String y, num z});
@@ -123,6 +124,12 @@
   external num get z;
 }
 
+@anonymous
+@JS()
+class EmptyLiteral {
+  external factory EmptyLiteral();
+}
+
 @JS('Foob')
 class Foob extends Foo {
   external String get y;
@@ -179,6 +186,11 @@
       expect(l.z, equals(100));
       expect(stringify(l), equals('{"z":100}'));
     });
+
+    test('empty', () {
+      var l = new EmptyLiteral();
+      expect(stringify(l), equals('{}'));
+    });
   });
 
   group('constructor', () {
diff --git a/tools/VERSION b/tools/VERSION
index 85daf0b..aee7ef0 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -28,4 +28,4 @@
 MINOR 13
 PATCH 0
 PRERELEASE 7
-PRERELEASE_PATCH 6
+PRERELEASE_PATCH 7
diff --git a/tools/dom/scripts/systemhtml.py b/tools/dom/scripts/systemhtml.py
index 75308d4..24ecbb8 100644
--- a/tools/dom/scripts/systemhtml.py
+++ b/tools/dom/scripts/systemhtml.py
@@ -618,6 +618,7 @@
     return new {0}.internal_();
   }}
 
+  @Deprecated("Internal Use Only")
   {0}.internal_() : super.internal_();
 
 '''.format(class_name)
@@ -632,6 +633,7 @@
     return new {0}.internal_();
   }}
 
+  @Deprecated("Internal Use Only")
   {0}.internal_() {{ }}
 
 {1}'''.format(class_name, js_interop_equivalence_op)
diff --git a/tools/dom/src/dartium_KeyEvent.dart b/tools/dom/src/dartium_KeyEvent.dart
index b93feeb..327ddf0 100644
--- a/tools/dom/src/dartium_KeyEvent.dart
+++ b/tools/dom/src/dartium_KeyEvent.dart
@@ -34,6 +34,7 @@
    *               all blink_jsObject.  Then needed private wrap/unwrap_jso
    *               functions that delegate to a public wrap/unwrap_jso.
    */
+  @Deprecated("Internal Use Only")
   js.JsObject blink_jsObject;
 
   /** The parent KeyboardEvent that this KeyEvent is wrapping and "fixing". */
diff --git a/tools/dom/templates/html/dartium/html_dartium.darttemplate b/tools/dom/templates/html/dartium/html_dartium.darttemplate
index 850b539..0e029f2 100644
--- a/tools/dom/templates/html/dartium/html_dartium.darttemplate
+++ b/tools/dom/templates/html/dartium/html_dartium.darttemplate
@@ -254,6 +254,7 @@
 
 $if JSINTEROP
 // FIXME: Can we make this private?
+@Deprecated("Internal Use Only")
 final htmlBlinkFunctionMap = {
 $!TYPE_FUNCTION_MAP
 };
diff --git a/tools/dom/templates/html/impl/impl_DOMException.darttemplate b/tools/dom/templates/html/impl/impl_DOMException.darttemplate
index bf5f0b6..9bbae84 100644
--- a/tools/dom/templates/html/impl/impl_DOMException.darttemplate
+++ b/tools/dom/templates/html/impl/impl_DOMException.darttemplate
@@ -52,14 +52,17 @@
     return new DomException._internalWrap();
   }
 
+  @Deprecated("Internal Use Only")
   js.JsObject blink_jsObject;
 
   factory DomException._internalWrap() {
     return new DomException.internal_();
   }
 
+  @Deprecated("Internal Use Only")
   DomException.internal_() { }
 
+  @Deprecated("Internal Use Only")
   DomException.jsInterop(String m) {
     var name_index = m.indexOf(': ');
     if (name_index < 0) {
