BlinkなChromeのExperimental Features

3月にChromeのExperimental WebKit/JavaScript Featuresというのを書いたらGoogle+でけっこうな反響があったBlinkのFAQからも間接的に参照されてたりしている。ただ件のエントリを書いたのはChromeがまだWebKitを使っていたとき。その後Blinkになり、ランタイムフラグの重要性が増し、コードもちょっと変わったので、アップデートを。

RuntimeEnabledFeatures.inにまとまり始める

試験実装は基本的にコンパイルタイムフラグではなくランタイムフラグを使う方針というのは、Blinkの紹介で書いた。その時はcontent/renderer/render_thread_impl.cccontent/browser/web_contents/web_contents_impl.ccという2ファイルから探さないといけなかったのだけれど、それがcrbug.com/237740 - Autogenerate Runtime Feature systemにて整理された。

TL;DR: If you're adding/removing runtime-guarded features, use RuntimeEnabledFeatures.in:
https://src.chromium.org/viewvc/blink/trunk/Source/core/page/RuntimeEnabledFeatures.in

とのこと、RuntimeEnabledFeatures.inChromiumではなくてBlinkの方にある。

ただ、そこに書かれてる機能がすべてExperimental Featuresなのかというとそうではないのでちょっと注意。ファイル冒頭のコメントにもあるけれど、各機能にはステータスが書かれている。stable, experimental, test という値が用意されていて、それぞれ「Stable Channelで有効」「Experimental Featuresフラグで有効(でもStableでは利用不可)」「Content Shellでのテストのみに限定(なんでフラグ有効でも使えない)」を意味しているみたい。値がないものは、無効と。

web_contents_impl.ccの機能は未統合

というわけで、BlinkでのExperimental FeaturesはRuntimeEnabledFeatures.inから experimental なものを探せばよい……と思ったんだけど、このファイルにはweb_contents_impl.ccにある position: -webkit-stickyやらがない。なのでweb_contents_impl.ccは引き続き見ないといけなそう。ただ入ってる機能を見ると、短期的中期的に有効にはされなそうなものが多い感じ。

JavaScriptは引き続きV8のファイルを

見出しの通り、JavaScript絡みはV8のファイルflag-definitions.hから探す。Webの機能ほどガンガン追加されてく感じはあまりしないけれど、既報の通り最近generatorsが追加されたりしているので、たまに見とくと面白そう。

追記 (2013-08-24): Chrome 30からフラグ名が変更に

Chrome 30から、長らくWebKitとついてたフラグ名が変更され、“Enable experimental Web Platform features”になった。

chrome://flags/#enable-experimental-web-platform-featuresから有効にできる。フラグ名が変わったので、WebKitなフラグを有効にしてたとしても、再度設定しないと新しい機能が試せないようになっているはず。

追記 (2018-04-16): いまはファイルが違う

RuntimeEnabledFeatures.inはその後runtime_enabled_features.json5というファイルに変換された。