nsIResProtocolHandler#SetSubstitution
mSubstitiionsはただのハッシュで、セットするときには何のチェックもないのですが、getしてるほうでnsIFileを使っていてNewFileURIしてるのでローカルのファイルじゃないとダメみたいです。
netwerk/protocol/res/src/nsResProtocolHandler.cpp
NS_IMETHODIMP nsResProtocolHandler::SetSubstitution(const nsACString& root, nsIURI *baseURI) { if (!baseURI) { mSubstitutions.Remove(root); return NS_OK; } return mSubstitutions.Put(root, baseURI) ? NS_OK : NS_ERROR_UNEXPECTED; } NS_IMETHODIMP nsResProtocolHandler::GetSubstitution(const nsACString& root, nsIURI **result) { NS_ENSURE_ARG_POINTER(result); if (mSubstitutions.Get(root, result)) return NS_OK; // try invoking the directory service for "resource:root" nsCAutoString key; key.AssignLiteral("resource:"); key.Append(root); nsCOMPtr<nsIFile> file; nsresult rv = NS_GetSpecialDirectory(key.get(), getter_AddRefs(file)); if (NS_FAILED(rv)) return NS_ERROR_NOT_AVAILABLE; rv = mIOService->NewFileURI(file, result); if (NS_FAILED(rv)) return NS_ERROR_NOT_AVAILABLE; return NS_OK; }