Index: pkg/web_components/lib/platform.concat.js |
diff --git a/pkg/web_components/lib/platform.concat.js b/pkg/web_components/lib/platform.concat.js |
index c4009c652dc2debb9d654c91f54def366a7429db..537c4f9a11d62c05ee46babcaf4a540613aa514e 100644 |
--- a/pkg/web_components/lib/platform.concat.js |
+++ b/pkg/web_components/lib/platform.concat.js |
@@ -2019,6 +2019,15 @@ window.ShadowDOMPolyfill = {}; |
} |
} |
+ // Safari 8 exposes WebIDL attributes as an invalid accessor property. Its |
+ // descriptor has {get: undefined, set: undefined}. We therefore ignore the |
+ // shape of the descriptor and make all properties read-write. |
+ // https://bugs.webkit.org/show_bug.cgi?id=49739 |
+ var isBrokenSafari = function() { |
+ var descr = Object.getOwnPropertyDescriptor(Node.prototype, 'nodeType'); |
+ return !!descr && 'set' in descr; |
+ }(); |
+ |
function installProperty(source, target, allowMethod, opt_blacklist) { |
var names = getOwnPropertyNames(source); |
for (var i = 0; i < names.length; i++) { |
@@ -2049,7 +2058,7 @@ window.ShadowDOMPolyfill = {}; |
else |
getter = getGetter(name); |
- if (descriptor.writable || descriptor.set) { |
+ if (descriptor.writable || descriptor.set || isBrokenSafari) { |
if (isEvent) |
setter = scope.getEventHandlerSetter(name); |
else |