There are some issues with the `chrome://` uri that I'll fix but these assertions seem wrong:
`resolve('../../gre/modules/XPCOMUtils.jsm', 'resource://thing/utils/file.js')`

In `resource://thing/utils/file.js`, requiring two directories up would result in:
`resource://gre/modules/XPCOMUtils.jsm`
not
`resource://thing/gre/modules/XPCOMUtils.jsm`

The `file:///` uri works, the first one with double slashes works if stripped out the double at the end (is there any reason to keep that? That's what normalizing the URIs does, and it should strip out doubles outside of protocols)