Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
IDLリーディング
webidl編
株式会社
グローバルサイバーグループ
藪下 正美
自己紹介
• もうみんな知ってるよね!
会社紹介
• 株式会社グローバルサイバーグループ
– 時間ないので省略
アジェンダ
• webidlとは
• webidlを読む
– webidlで使える型
– webidlの属性
• bindings配下のコード
• webidlの実装を見つける
webidlとは
• webidlはJSに対してAPIを提供するイン
ターフェイス定義言語のひとつです
• W3Cで仕様が策定されています
webidlを読む
• webidlを読むのに気を付けるポイントがいくつかあります
– webidlが置かれる場所
• gecko/dom/webidlに置かれます
– 型
• C++とJSの型の対応に気を付ける必要があります
• また、web...
webidlで使える型
• Webidlで使える型は以下の通りです
webidl cpp
any JS::Handle<JS::Value>
boolean bool
Integer int
float float
DOMString nsAS...
Webidlで使える型
• この他に型を定義するためのキーワードもあ
ります
– interface
– dictionary
– enum
– callback
• キーワードではなく記法で型を定義するもの
もあります
– Union
– な...
webidlの属性
• 属性はいろいろありますが全部理解できてな
いのでFunc属性、Constructor属性、
NavigatorProperty属性だけ見ていきます
– Func属性
• [Func="funcname"]
• Func属...
webidlの属性
• Constructor属性
– [Constructor<(引数列)>]
– Constructor属性が付いているとnewしてインスタン
スを得ることができます
– DOMツリーにぶら下がってなくてもConstruct...
bindings配下のコード
• objdir-gecko/dom/bindingsにwebidlから生成された
cpp/hが置かれます
• b2gじゃないgeckoの場合は知りません。。。
• gecko/dom/bindings配下にはwe...
webidlの実装を見つける
• 実装は基本的にgecko/dom配下にいますがいろい
ろ散らばっています
– 最終的には検索命です。。。
• 散らばり方もいろいろありますがいくつか見てみ
たものをいくつか並べると
– battery
• ge...
まとめ
• grepとfind偉大!
• ズボラしたかったら
https://mxr.mozilla.org とか
http://reading.fxos.org/source/ で適当に検
索してみるといいです
• 読む分にはなんとなく読める...
Upcoming SlideShare
Loading in …5
×

Idlリーディング webidl編

704 views

Published on

This slide spoke at "FxOS code reading meetup #7".

Published in: Technology
  • Be the first to comment

Idlリーディング webidl編

  1. 1. IDLリーディング webidl編 株式会社 グローバルサイバーグループ 藪下 正美
  2. 2. 自己紹介 • もうみんな知ってるよね!
  3. 3. 会社紹介 • 株式会社グローバルサイバーグループ – 時間ないので省略
  4. 4. アジェンダ • webidlとは • webidlを読む – webidlで使える型 – webidlの属性 • bindings配下のコード • webidlの実装を見つける
  5. 5. webidlとは • webidlはJSに対してAPIを提供するイン ターフェイス定義言語のひとつです • W3Cで仕様が策定されています
  6. 6. webidlを読む • webidlを読むのに気を付けるポイントがいくつかあります – webidlが置かれる場所 • gecko/dom/webidlに置かれます – 型 • C++とJSの型の対応に気を付ける必要があります • また、webidlでは引数のin/outが指定できるのでそこも意識します – 属性 • 特に見るべきはFunc属性です • Constructor属性やNavigatorProperty属性もあるかチェックするといい でしょう – gecko/dom/bindings • webidlからcpp/hを生成して置かれるところです • 配下のディレクトリにはwebidlコンパイラもあります(pythonで書かれ ています)
  7. 7. webidlで使える型 • Webidlで使える型は以下の通りです webidl cpp any JS::Handle<JS::Value> boolean bool Integer int float float DOMString nsAString& ByteString Not supported object JS::Handle<JS::Object*>
  8. 8. Webidlで使える型 • この他に型を定義するためのキーワードもあ ります – interface – dictionary – enum – callback • キーワードではなく記法で型を定義するもの もあります – Union – なんとなくBoost::Variantとかを使ってるような 感覚ですかね
  9. 9. webidlの属性 • 属性はいろいろありますが全部理解できてな いのでFunc属性、Constructor属性、 NavigatorProperty属性だけ見ていきます – Func属性 • [Func="funcname"] • Func属性を指定すると、Func属性に指定した関数が falseを返した時APIをあたかもDOMツリーにないかの ように見せられます • 手前味噌ですが http://www.gcg.bz/labo_blog/?p=867 で Idle APIが隠れる理屈を書いてます
  10. 10. webidlの属性 • Constructor属性 – [Constructor<(引数列)>] – Constructor属性が付いているとnewしてインスタン スを得ることができます – DOMツリーにぶら下がってなくてもConstructor属性 が付いているならnewで使えます • NavigatorProperty属性 – [NavigatorProperty="propName"] – navigator.propNameでアクセスできるようになりま す – これがないとwindowにぶら下がるはず?
  11. 11. bindings配下のコード • objdir-gecko/dom/bindingsにwebidlから生成された cpp/hが置かれます • b2gじゃないgeckoの場合は知りません。。。 • gecko/dom/bindings配下にはwebidlコンパイラも入っ ています – gecko/dom/bindings/parser配下や gecko/dom/bindings/mozwebidlcodegenあたりがそれです • webidlと実際の実行コードのひも付きが特殊なものは gecko/dom/bindings/Bindings.confに設定を書く必要が あります – 手前味噌ですがそのへんは http://www.gcg.bz/labo_blog/?p=456 で書きました
  12. 12. webidlの実装を見つける • 実装は基本的にgecko/dom配下にいますがいろい ろ散らばっています – 最終的には検索命です。。。 • 散らばり方もいろいろありますがいくつか見てみ たものをいくつか並べると – battery • gecko/dom/battery • わかりやすい例 – AudioContext • gecko/content/media/webaudio • gecko全域findしないと見つからない例 – windowとかnavigatorとか • gecko/dom/base
  13. 13. まとめ • grepとfind偉大! • ズボラしたかったら https://mxr.mozilla.org とか http://reading.fxos.org/source/ で適当に検 索してみるといいです • 読む分にはなんとなく読めるからまあ頑 張って – API実装しだすと闇が見えてきますけれど も。。。

×