Chrome 44 の Service Worker の変更点
本記事は Chrome 44 の Service Worker のリリースノートを日本語に意訳したものです。原文は service-worker-discuss グループで読むことができます。
以前のバージョンのリリースノートはこちら。
(2015/07/28 追記) @FalkenMatto さん (原文の投稿者) からコメントをいただき、一部加筆修正しました。ありがとうございます。
Chrome 44 の Service Worker 関係の変更は次のとおりです。
新機能
API の変更
FetchEvent
がExtendableEvent
1 を継承するようになり、コンストラクタが追加されました (Bug, Spec)。- セキュリティ上の理由に、client requests2 に対して opaque レスポンスを返すことができなくなりました (Bug, Spec Discussion)。
- install イベントのインタフェースが
InstallEvent
からExtendableEvent
に変更され、InstallEvent
インタフェースが削除されました (Bug, Spec Discussion)。
改善点
- ブラウザのコンテンツ設定で Service Worker を許可しているかどうか、”Cookies set by this page” UI3 上で確認できるようになりました (Bug)。
- Service Worker がスタートアップに失敗するバグが修正されました。また、スタートアップ失敗によってメインリソースリクエストに対する
FetchEvent
がディスパッチできなかった場合は適切に4ネットワークにフォールバックするように改善されました (Bug)。
DevTools 関係の変更
Note: 最新の DevTools を試すために、Dev channel もしくは Canary の使用をおすすめします。
--unsafely-treat-insecure-origin-as-secure
コマンドラインオプションが追加されました。Service Worker のような Powerful Features は Secure Contexts (例: HTTPS) を必要としますが、このオプションで指定されたオリジンではセキュリティチェックをバイパスします。これによりローカル環境での開発が行いやすくなりました。
$ ./chrome --user-data-dir=/tmp/foo --unsafely-treat-insecure-origin-as-secure=http://your.insecure.site
- Cache Storage のエントリを個別に消せるようになりました (Bug)。
- Cache Storage が Service Worker のフレームだけでなく、すべてのフレームから inspect できるようになりました (Bug)。
- non-incognito ウィンドウ上の Service Worker でコンソール出力した内容が incognito ウィンドウのコンソールに表示されてしまうバグが修正されました (Bug)。
waitUntil()
やrespondWith()
で発生した例外が Service Worker のコンソールに出力されるようになりました (Bug)。- Service Worker を使ったアプリの開発効率向上を目指し、現在 “Service Worker explorer UI” の開発に取り組んでいます。この機能はまだ experimental で、現在 UX の改良が行われています。こちらのスライドを参考に試用していただき、是非フィードバックをお寄せください。
バグフィックス
訳者補足
-
ExtendableEvent
はそれの持つwaitUntil()
に任意の Promise を渡すことで、その Promise が settled (resolved or rejected) になるまでイベントのライフタイムを延長することができるイベントです。 ↩ -
client requests とは
Request.context
が navigation 関係 (form, frame, hyperlink etc) もしくは worker (serviceworker, sharedworker, worker) であるようなものを指します。詳しくは Fetch の仕様を参照してください。 ↩ -
(2015/07/28 追記) メインリソースリクエストがネットワークにフォールバックした場合は、その後のサブリソースリクエストもすべて Service Worker を介さずにネットワークにフォールバックします。サブリソースリクエスト時に
FetchEvent
がディスパッチできなかった場合はネットワークにフォールバックせず、エラーレスポンス (500 “Service Worker Response Error”) を返します。これにより、同一ドキュメント内で Service Worker にインターセプトされるリクエストとされないリクエストが混在することはありません。 ↩