From a8b3c456f156a945b9809a2e81f91cea750b935f Mon Sep 17 00:00:00 2001 From: Bobby Holley Date: Mon, 14 Jul 2014 10:09:06 -0700 Subject: [PATCH] Bug 856067 - Waive Xrays when SpecialPowers encounters an Opaque XrayWrapper. r=gabor --- testing/specialpowers/content/specialpowersAPI.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/testing/specialpowers/content/specialpowersAPI.js b/testing/specialpowers/content/specialpowersAPI.js index 94aedf6ea1eb..05c09be396e6 100644 --- a/testing/specialpowers/content/specialpowersAPI.js +++ b/testing/specialpowers/content/specialpowersAPI.js @@ -98,9 +98,16 @@ function isObjectOrArray(obj) { // security in general, but tends to break tests that try to pass object // literals into SpecialPowers. So we waive [[Object]] and [[Array]] // instances before inspecting properties. +// +// * When we don't have meaningful Xray semantics, we create an Opaque +// XrayWrapper for security reasons. For test code, we generally want to see +// through that sort of thing. function waiveXraysIfAppropriate(obj, propName) { - if (propName == 'toString' || isObjectOrArray(obj)) + if (propName == 'toString' || isObjectOrArray(obj) || + /Opaque/.test(Object.prototype.toString.call(obj))) +{ return XPCNativeWrapper.unwrap(obj); +} return obj; }