nsIWebBrowserPersist で gzip 圧縮されたデータをダウンロードする

HTTPでダウンロードする際は nsIWebBrowserPersist::saveURI や saveChannel が便利だ。
しかし、gzip圧縮形式で転送されたデータ(つまりWebサーバが「Content-Encoding: gzip」ヘッダを付加した場合)をダウンロードすると、圧縮されたままの状態でファイルへと保存してしまう。

非圧縮状態でファイルへ保存するためには、 nsIWebBrowserPersist::persistFlags プロパティに PERSIST_FLAGS_AUTODETECT_APPLY_CONVERSION フラグを立てる。
あえて圧縮状態で保存する理由が思いつかないので、基本的にこのフラグは必須と考えてよさそう。

参考

nsIWebBrowserPersist.idl

余談

ScrapBook でgzip圧縮されたページを保存すると画像がすべて壊れて表示されなかったり、 Amazon や はてな のページを保存すると、ツリーの favicon が消滅してしまう、といった問題はすべて上記の問題によるものだった。さきほど修正して新しいバージョンをリリースした。

なぜこんな簡単なことに今まで気付かなかったのだろうか…。
しかも気付く前に Bugzilla にバグを立ててしまった。
Bug 416817 – nsIWebBrowserPersist should decompress data if server responses with "Content-Encoding: gzip" header

TOP

2 Comments to “nsIWebBrowserPersist で gzip 圧縮されたデータをダウンロードする”

名無しさん@お腹いっぱい。:

対応バージョン: Firefox 2.0 – 3.0b5pre
とありますが、Firefox3b4にインストールすることができませんでした。
下記のエラーが表示されます。

「Foxage2ch には安全な更新方法が用意されていないたやいrめ、インストールされません。」

きちんと対応されてから「対応バージョン」を記載すべきだと思いますが...。
なにか当方で特別な操作が必要となるのでしたらご教示ください。
Firefox2で使用していたfoxageのデータが無くなってしまったので大変困っております。
よろしくお願いします。

Import and export functions in ScrapBook are useful.
But me and a colleague are saving different scraps
but want to syncronize our ScrapBooks.

Request: Coud there be a syncronisation option in future?

VR
cybolon

TOP

TOP