この記事は『Firefox OS / B2G OS Advent Calendar 2016』 18日目の記事です。
Firefox OS で、使用されている「ADB Helper」を再度まとめ直してみました。
前回、新訳:ADB Helperをハックしてみた(bootstrap.js)に引き続き、 adb-helperをハックしていきたいと思います
※2 : version 0.7.1 時点で有ったファイル
※3 : version 0.7.1 時点で有ったファイル、Windows用ファイル
※4 : version 0.7.1 時点で有ったファイル、mac,linux用ファイル
OS毎に使用されるファイルが有る事が確認できます。
https://developer.mozilla.org/ja/Add-ons/SDK/Guides/Working_with_Events
DevTools/Hacking
https://wiki.mozilla.org/DevTools/Hacking#require.28.29
Using JavaScript code modules
https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/Using
Task.jsm
https://developer.mozilla.org/ja/docs/Mozilla/JavaScript_code_modules/Task.jsm
yield
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/yield*
継承とプロトタイプチェーン
https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Inheritance_and_the_prototype_chain
- Cu にchrome ライブラリ読み込み
- EventEmitter に event-emitter 読み込み
- Task に Task.jsm 読み込み
- unload 時、system/unload 読み込み
- ConnectionManager に connection-manager 読み込み
- Devices に Devices.jsm 読み込み
- Runtimes に WebIDE の runtime モジュール読み込み
- 変数:promise を定義
- 変数:promise に Promise オブジェクトを代入
Scanner オブジェクト
- enable() 関数
- disable() 関数
- _emitUpdated() 関数
- _updateRuntimes() 関数
- _detectRuntimes() 関数
- scan() 関数
- listRuntimes() 関数
- Scanner オブジェクト を decorate 関数に渡します
- Runtime() オブジェクト
- FirefoxOSRuntime オブジェクト
- FirefoxOnAndroidRuntime() オブジェクト
- _updateRuntimes オブジェクトに bind します。
- _updateRuntimes オブジェクト、引数:register で、
Devices.on() 関数実行します。 - _updateRuntimes オブジェクト、引数:unregister で、
Devices.on() 関数実行します。 - _updateRuntimes オブジェクト、引数:addon-status-updated で、
Devices.on() 関数実行します。 - _updateRuntimes()関数を実行します。
- _updateRuntimes オブジェクトに bind します。
- _updateRuntimes オブジェクト、引数:register で、
Devices.off() 関数実行します。 - _updateRuntimes オブジェクト、引数:unregister で、
Devices.off() 関数実行します。 - _updateRuntimes オブジェクト、引数:addon-status-updated で、
Devices.off() 関数実行します。
- 引数:runtime-list-updated で、emit() 関数実行します。
- _updatingPromise オブジェクトが存在する時は、
其のオブジェクトを返します - 変数:device に取得したデバイス情報をセットします。
- 配列変数:promises に _detectRuntimes(device) の
結果を push します。 - _updatingPromise オブジェクトに promise.all(promises) の
結果を push します。 - _updatingPromise オブジェクトの then() 関数で、
_emitUpdated()関数を実行します - _updatingPromise オブジェクトを初期化します。
- 変数:model にデバイス情報を取得します。
- 変数:detectedRuntimes に FirefoxOSRuntime.detect
オブジェクトを委任します。 - _runtimes オブジェクトに detectedRuntimes を push します。
- 変数:detectedRuntimes に FirefoxOnAndroidRuntime.detect
オブジェクトを委任します。 - _runtimes オブジェクトに detectedRuntimes を push します。
- _updateRuntimes オブジェクトを返します。
- _runtimesオブジェクトを返します。
- 引数:device をプロパティにセットします。
- 引数:model をプロパティにセットします。
- 引数:socketPath をプロパティにセットします。
- デバイス ID とソケットパスを連結して返します。
- 引数を用いて、Runtime.call()関数を実行します。
オブジェクト
- Task.async()関数 実行し、同期が取れた結果格納します。
- 引数に以下の無名関数を実行します。
- 配列変数:runtimes を定義します。
- クエリー実行用変数:query を定義します
- 変数:b2gExists にクエリーの実行結果を取得します。
- クエリーの実行結果をチェックします。
- b2gExists === "0\r\n" の場合、以下の処理を実行します。
- 新しいインスタンスで、FirefoxOSRuntime()を実行します。
- 配列変数:runtimes 実行結果を push します。
- 配列変数:runtimes を返します。
オブジェクト
- Object.create() 関数を代入します。
- FirefoxOSRuntime.prototype を渡して実行します
- 引数を用いて、Runtime.call()関数を実行します。
オブジェクト
- Task.async()関数 実行し、同期が取れた結果格納します。
- 引数に以下の無名関数を実行します。
- 配列変数:runtimes を定義します。
- クエリー実行用変数:query を定義します
- 変数:rawSocketInfo にクエリーの実行結果を取得します。
- 変数:rawSocketInfo を用いて、変数:socketInfos にソケット情報を格納します。
- 変数:socketInfos にフィルターを実行します。
- 変数:socketPaths にソケット情報を追加していきます。
- 変数:socketPaths 分 FirefoxOnAndroidRuntime()関数を実行します。
- 配列変数:runtimes に実行結果を push します。
- 配列変数:runtimes を返します。
オブジェクト
- Object.create() 関数を代入します。
- FirefoxOnAndroidRuntime.prototype を渡して実行します
- 新訳:ADB Helperをハックしてみた(前篇)
- 新訳:ADB Helperをハックしてみた(install.rdf,main.js)
- 新訳:ADB Helperをハックしてみた(adb.js)
- 新訳:ADB Helperをハックしてみた(adb-client.js)
- 新訳:ADB Helperをハックしてみた(adb-running-checker.js)
- 新訳:ADB Helperをハックしてみた(adb-socket.js)
- 新訳:ADB Helperをハックしてみた(bootstrap.js)