Chrome Tech Talk Night #3 行ったので拡張機能の内容をまとめてみる #chromejp

一週間くらいたってしまったが 7/13 に Chrome Tech Talk Night #3 へ行ってきたので今更ながら内容をまとめてみる。

さて、内容は大きくわけると以下のものに分かれる。
1. Chrome拡張をマイグレートしないといけない話
2. 新しいChrome拡張のAPIの話
3. 新しいChrome Appの話

正直Chrome Extension Tech Nightと誤解していたので、Chrome Appの話はかなり面白かった。しかし、長くなりそうなのでこのエントリの話は拡張機能で一旦切ることにする。

Chrome拡張をマイグレートしないといけない話

Ernest Delgado(@edr)さんがわざわざ日本に来てくれて説明してくれた。内容は以下のGoogle IOのセッションと同じもの。 ( https://mkw.st/p/io12-whats-next-for-chrome-extensions/#1 )

manifest version 2に挙げないと行けない件については
Chrome Storeから拡張機能更新しろよ案内が来た
2012年中に公開しているChrome拡張機能を更新しないといけない件について
にて把握していたのである程度は聞き流した。

ここで聞きたかったのは何故そこまでしてマイグレーションすることにしたか。 拡張機能向けのAPIはChromeの様々なリソースにアクセスできたり、Ajaxでクロスドメイン制約を受けないのでXSS攻撃を受けると通常のWebサイトのそれ以上の被害をユーザが受けることになる。

これにはhttpやinlineスクリプトを禁止すると脆弱性の94%を防げるだろうという研究があると紹介された。 ( https://mkw.st/p/io12-whats-next-for-chrome-extensions/#9 ) manifest version 2で外部スクリプトの読み込みが以上に厳しくなったのはこれが根拠となっているようだ。

さらにContent Security Policy(CSP)についてはHTML5ROCKSの記事もあわせて紹介があった。( AN INTRODUCTION TO CONTENT SECURITY POLICY )

CSPは別にChrome拡張にかぎらずセキュリティを高める点で通常のサイトでも必要になってくるものだ。Googleには開発者のセキュリティ意識を教育するという面もあるんじゃないかと思う。HTML5アプリのメインとなるJavaScriptはクライアントサイドで動くものだからそのあたりの意識の徹底化は必要になってくるはず。

「過去のバージョンはmanifest versionを上げないと動かなくなる」と言われるとすごい足切りに聞こえるけど、「新しいセキュリティガイドラインを作成したのでそれに対応してもらえない拡張機能は停止します」と言われればこれはiOSアプリのガイドラインなんかで近いことはあるので納得できる。

新しいChrome拡張のAPIの話

これも Ernest さんから。まず、現在あるChrome拡張の問題として必要な機能を以上のパーミッションを定義させてしまう、拡張機能のプロセスによってリソースを大量に消費してしまうというものが紹介された。

それを改善する一つの方法として新たにEvent Pageが提供される。これを使うとsetTimeoutのようなイベントをChromeが起こしてくれるのでそれ以外は拡張機能は眠っていてよいということになる。

キーボードショートカットがサポート。拡張機能がキーボードショートカットを実現しようとするとContent Scriptをすべてのサイトに突っ込んでキー入力をウォッチしないといけないがそれが過度のパーミッションだったという話。ショートカットはmanifestに定義してコマンド名をつけておくとイベンドが通知されるのでコマンド名を見て何かするという感じ。

Web Request APIでネットワークレベルでいろいろ制御できるらしい?英語も日本語もついていけなかったのでこれについてはあとで調査が必要。

Active Tab Permissionsが追加。ユーザから見ると勝手にタブを追加されたり、削除する権限を求められるのは「ん?」ってなるから。アクティブなタブ(ページ)で何か処理したいだけという時に使うだけでよいのだろうか。さらっと流されたのでこれも説明についていけなかった。

最後にSandboxページの追加。これは先程のセキュリティの問題に絡む。Sandboxページ内ではセキュリティによる制限を受けないで処理が実行できるので他のページではできない処理をSandboxページ内で処理して結果をメッセージで受け取るということができる。具体的にSandboxで何が制約されないかはこれも調べてみないとわからない。

と、新しいAPIの紹介は以上。まだ対応中のAPIもありどうやらmanifest version 2と同期するAPIでは無いようなのでひとまずセキュリティ(manifest version 2)対応と新しいAPIの対応はひとまず別のマイルストーンで扱ってよいと思う。(セキュリティ対応次第ではSandbox Pageだけは使う必要がある)

その他参考リンク

DevelopersサイトのChrome情報
https://developers.google.com/chrome/

chrome.com(立ち上げ中とのこと)
http://developer.chrome.com/apps

githubにGoogleChromeアカウントでその中にサンプルがある
http://github.com/GoogleChrome