diff --git a/js/xpconnect/src/XPCWrappedJSClass.cpp b/js/xpconnect/src/XPCWrappedJSClass.cpp index 970d4bb0dab..0c563f4da6f 100644 --- a/js/xpconnect/src/XPCWrappedJSClass.cpp +++ b/js/xpconnect/src/XPCWrappedJSClass.cpp @@ -573,6 +573,22 @@ nsXPCWrappedJSClass::DelegatedQueryInterface(nsXPCWrappedJS* self, REFNSIID aIID, void** aInstancePtr) { + if (MOZ_UNLIKELY(!NS_IsMainThread())) { + printf("Uh oh! DelegatedQueryInterface called off-main-thread!\n"); + printf("Name: %s\n", GetInterfaceName()); + JSCompartment *c = js::GetObjectCompartment(self->GetJSObjectPreserveColor()); + char *origin = nullptr; + nsresult rv = xpc::GetCompartmentPrincipal(c)->GetOrigin(&origin); + if (NS_SUCCEEDED(rv)) { + printf("Principal origin: %s\n", origin); + NS_Free(origin); + } else { + printf("Unable to get origin from principal :-(\n"); + } + nsAutoCString loc(EnsureCompartmentPrivate(c)->GetLocation()); + printf("Global's Location: %s\n", loc.get()); + MOZ_CRASH(); + } if (aIID.Equals(NS_GET_IID(nsIXPConnectJSObjectHolder))) { NS_ADDREF(self); *aInstancePtr = (void*) static_cast(self);