C++ ときどき ごはん、わりとてぃーぶれいく☆

USAGI.NETWORKのなかのひとのブログ。主にC++。

NaCl tips; JavaScriptサイドのNaClモジュール由来のイベント群

NaClモジュールに由来してそのembed要素に発生し得るJavaScriptイベント群について全て実装してみた。備忘録として今回もテスト中のLabyrinthian - Wonder Rabbit Projectリポジトリにtag 0.0.2を打って措いた。

JavaScriptのwrp.naclは汎用的なNaClを取り扱うライブラリーとして、new wrp.naclしたインスタンスに特殊化を施す設計方針。NaClのembed要素が発するイベント群は{loadstart,progress,error,abort,load,loadend,crash}。フロー的には:

loadstart
 ( => progress )
   => load | error | abort
   => loadend
 ( => crash   )

モジュールのロード中の挙動としては、loadstartを発行した後、

  • .nexeの読み込みの進捗に応じて0回以上のprogressが発生
  • エラーが起きればerrorが発生
  • ユーザーが中断した場合にはabortが発生
  • 無事に.nexeを読み込み終えたならloadが発生

そしてload|error|abortの何れかを経由した後に必ずloadendは呼ばれる。

その後はNaClモジュールがインスタンスを生成して実行開始され、実行中にクラッシュしてしまった場合にはcrashが発生する。

参考

※実はこのNaClモジュールのembed要素におけるJavaScriptへのイベントシステムはW3CのProgress Eventの仕様に沿って実装されていた。