Use originalGetTag on wrapped object

Upgrade dart_support to use dartNativeDispatchHooksTransformer.

R=sigmund@google.com

Review URL: https://codereview.chromium.org//282893002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart/pkg/web_components@36135 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/lib/dart_support.js b/lib/dart_support.js
index 44b5a38..503faee 100644
--- a/lib/dart_support.js
+++ b/lib/dart_support.js
@@ -15,11 +15,18 @@
   var needsConstructorFix = window.constructor === window.Window;
 
   // TODO(jmesserly): we need to wrap document somehow (a dart:html hook?)
-  window.dartExperimentalFixupGetTag = function(originalGetTag) {
+
+  // dartNativeDispatchHooksTransformer is described on initHooks() in
+  // sdk/lib/_internal/lib/native_helper.dart.
+  if (typeof window.dartNativeDispatchHooksTransformer == 'undefined')
+    window.dartNativeDispatchHooksTransformer = [];
+
+  window.dartNativeDispatchHooksTransformer.push(function(hooks) {
     var NodeList = ShadowDOMPolyfill.wrappers.NodeList;
     var ShadowRoot = ShadowDOMPolyfill.wrappers.ShadowRoot;
     var unwrapIfNeeded = ShadowDOMPolyfill.unwrapIfNeeded;
-    function getTag(obj) {
+    var originalGetTag = hooks.getTag;
+    hooks.getTag = function getTag(obj) {
       // TODO(jmesserly): do we still need these?
       if (obj instanceof NodeList) return 'NodeList';
       if (obj instanceof ShadowRoot) return 'ShadowRoot';
@@ -44,8 +51,7 @@
         if (ctor === unwrapped.constructor) {
           var name = ctor._ShadowDOMPolyfill$cacheTag_;
           if (!name) {
-            name = Object.prototype.toString.call(unwrapped);
-            name = name.substring(8, name.length - 1);
+            name = originalGetTag(unwrapped);
             ctor._ShadowDOMPolyfill$cacheTag_ = name;
           }
           return name;
@@ -55,7 +61,5 @@
       }
       return originalGetTag(obj);
     }
-
-    return getTag;
-  };
+  });
 })();