nsIBrowserParsist

nsIBrowserParsist.saveURIを使えば、URIが刺すリソースをファイルに保存することができるらしいのですが・・・

const mzCC = Components.classes;
const mzCI = Components.interfaces;
function save(srcURI, destFile){
	var nsiPersist = Components.interfaces.nsIWebBrowserPersist;
	var persist = mzCC["@mozilla.org/embedding/browser/nsWebBrowserPersist;1"].createInstance(nsiPersist); 
	persist.persistFlags = nsiPersist.PERSIST_FLAGS_REPLACE_EXISTING_FILES | nsiPersist.PERSIST_FLAGS_AUTODETECT_APPLY_CONVERSION;
	persist.saveURI(srcURI, null, null, null, null, destFile);
	return destFile.fileSize;	//この時点でファイルが存在しないことが多く、例外となる。
}

上記コードのコメントのとおりの不都合があります。
一応、nsIBrowserParsistには進捗監視用のリスナを設定できるんですが、それで監視できるのは「ダウンロード完了」であって「ファイル書き込み完了」ではない様子。なので、saveURI直後に参照にいくと例外を吐く可能性が高い。
さっきダウンロードしてきて保存されたものを使いたいんだけど・・・書き込み完了を検知する方法はないんだろうか。
setTimeoutかけてexistsでチェックし続ければいけるのかなぁ・・・。