If you look at the generated code in XMLHttpRequestBinding.cpp, in the worker part, then CreateInterfaceObjects does this:
if (sMethods_ids[0] == JSID_VOID &&
(!InitIds(aCx, sMethods, sMethods_ids) ||
!InitIds(aCx, sAttributes, sAttributes_ids) ||
!InitIds(aCx, sConstants, sConstants_ids))) {
but EnumerateProperties does this:
for (size_t i = 0; i < sizeof(sChromeAttributes_ids); ++i) {
if ((sChromeAttributes[i].flags & JSPROP_ENUMERATE) &&
!props.append(sChromeAttributes_ids[i])) {
and similar for ResolveProperty. Looks pretty fishy. This happens because CGCreateInterfaceObjectsMethod is doing:
if props.hasChromeOnly() and not self.descriptor.workers:
idsToInit.append(props.variableName(True))
Maybe this is all a non-issue because there are no Xrays in workers, but then we just shouldn't generate EnumerateProperties/ResolveProperty for workers, right?

Created attachment 623920[details][diff][review]
Rip out the codegen for the Xray-related bits of worker bindings, since we don't have Xrays in workers.
Ben says no Xrays in workers, so let's just not generate this gunk.