SyntaxHighlighter

2014年11月30日日曜日

Google Chrome の Native Messaging Host

Google Chrome の Native Messaging Host

Chrome 向けの Open TortoiseSVN を Native Messaging 対応したので、そのまとめです。
今回は、Native Messaging の概要についてです。

TechCrunch の記事にあるように、Chrome では NPAPI がブロックされます。
Open TortoiseSVN for Google Chrome では NPAPI を使っていたので、これを機に Native Messaging 版に変更しました。

Native Messaging

Native Messaging とは、 Google Chrome の Extension の機能の一つで、ローカルの実行ファイルを直接起動してやりとりするための仕組みです。
今回は、この機能を使ってローカルの TortoiseSVN を起動しています。

Native Messaging の概要

詳しくは Google Chrome の解説のページを見ると分かりますが、基本的には以下の通りです。

  • JavaScript から、あらかじめ登録済みのローカルの EXE を実行できる
  • その EXE と JSON 形式でメッセージのやりとりができる

なお、EXE と書きましたが、 BAT などでも問題ありません。

さらに、「EXE を実行してすぐに終了する」形式と「EXE を実行し、サービスのように常駐させてやりとりする」の二つの呼び出し形式がサポートされています。
また、JSON 形式でやりとりをする、という以外には、EXE の内容に制限はありません。

NPAPI プラグインとの違い

「ローカルの EXE (DLL) を呼び出し、JavaScript の制限外のことができる」という点では、NPAPI と似ています。
実際、これまで Open TortoiseSVN では、 NPAPI プラグインを使って、 JavaScript だけではできない「ローカルファイルを実行」を実現していました。

しかし、いくつか大きな違いがあります。

  • Native Messaging の場合、やりとりするデータは JSON に限られる
  • Native Messaging の場合、必ず別プロセスで起動される。

JavaScript のオブジェクトに比較的自由にアクセスできる NPAPI と異なり、Native Messaging では JSON 形式で明示的にやりとりしたデータしか EXE 側には渡らないので、意図せず JavaScript 側のグローバルオブジェクトにアクセスされたりせず、従来の JavaScript のセキュリティモデルは崩れません。
また、EXE を別プロセスで呼ぶため、クラッシュに悩まされることもなくなります。

PPAPI プラグインとの違い

一方で、NPAPI の置き換えとして Google が推進している PPAPI と比べると、PPAPI では呼べる API やローカルリソースへのアクセスに制限があるので、単純にできることが異なります。
基本的には PPAPI はサンドボックス化されており、NPAPI のように、任意の OS Native な API を呼べるわけではありません。

とても大雑把に言うと、NPAPI プラグインでできていたことのうち、「C/C++ で高速に動作するものを作りたい (が、ローカルリソースへの自由なアクセスは不要)」という部分は PPAPI に、「ローカルリソース (OS Native な API などを含む) に制限なくアクセスしたい」という部分が Native Messaging に分割され、整理されたということだと思います。

次回は Native Messaging を利用するための方法について、簡単に書きます。

0 件のコメント:

コメントを投稿