らいふうっどの閑話休題

興味のあることをゆる~く書いていく

ADB Helperをハックしてみた(bootstrap.js篇)

目次

前回:ADB Helperをハックしてみた(adb-socket.js篇)に引き続き、 adb-helperをハックしていきたいと思います

  1. フォルダ内のファイル構成
  2. 予備知識
  3. bootstrap.js
  4. 今回のまとめ
  5. バックナンバー

フォルダ内のファイル構成
[解凍フォルダ内のjsファイル群]
windowsmaclinux
install.rdf
main.js
adb.js
adb-client.js
adb-running-checker.js
adb-socket.js
bootstrap.js
scanner.js
subprocess.js
subprocess_worker_unix.js
subprocess_worker_win.js

前回に引き続き、bootstrap.jsファイルをハックしていきたいと思います。

予備知識

Bootstrap - ウィキペディア
http://is.gd/pcEkKn
Bootstrap · The world's most popular mobile-first and responsive front-end framework. http://getbootstrap.com/
The Official Bootstrap Blog
http://blog.getbootstrap.com/

皆さんは、当然Bootstrapをご存知かと思います。
不勉強な自分は、今回初めてじっくり見る事になります。


Components.interfaces
概要:プロパティがそれらの名前によって索引付けされたクラスである、読み出し専用オブジェクトです。
https://developer.mozilla.org/ja/docs/Components.interfaces
Components.utils 概要:便利でありながらも必須というわけではない、さまざまな XPConnect の機能のまとまりです。
そのインタフェースは js/src/xpconnect/idl/xpccomponents.idl で定義されています。
https://developer.mozilla.org/ja/docs/Components.utils
Preferences
概要:Mozilla 設定システムを利用しようとする拡張機能開発者向けのサンプルを示しています。
https://developer.mozilla.org/ja/docs/Code_snippets/Preferences

bootstrap.js

ご覧の通り、各OSでの差異はありません。(当たり前ですね。)
bootstrap_merge
モジュールの構成はシンプルな感じです。
スクリーンショット 2015-04-13 22.58.46

定数定義各種


上記のComponents.interfaces,Components.utilsを用いて
インターフェースオブジェクトへのアクセスを定義します。

配列REASONに下記値を格納します。
'unknown', 'startup', 'shutdown', 'enable', 'disable','install', 'uninstall', 'upgrade', 'downgrade'


コメントには、このように記載されています。
Usefull piece of code from :bent http://mxr.mozilla.org/mozilla-central/source/dom/workers/test/extensions/bootstrap/bootstrap.js
【訳文】
方向性:有益なコードを部分的に流用
http://mxr.mozilla.org/mozilla-central/source/dom/workers/test/extensions/bootstrap/bootstrap.js

function registerAddonResourceHandler(data)


・引数からファイルパスを取得
・取得したファイルパスを用いてリソース名取得
・リソース名を返します


function install(data, reason)


関数定義のみです。


function startup(data, reason)


◆オブジェクト定義 loaderModule:'resource://gre/modules/commonjs/toolkit/loader.js'をインポートします。
{ Loader, Require, Main }:loaderModuleをロードします。
unload:loaderModule.unloadを代入します。

◆定数定義 LOGPREF:"extensions.adbhelper@mozilla.org.debug"
LOGPREFIX:"ADB Addon Helper:"

startup関数の内部関数です。
startup_in

  • canLog() Services.jsmのPreferences serviceを利用して 真偽値をセットします
  • canLog()+ログ出力用無名関数
  • canLog()+ワーニング出力用無名関数
  • canLog()+エラー出力用無名関数
  • canLog()+デバッグ出力用無名関数


function shutdown(data, reasonCode)


・引数reasonCodeより、上記配列REASONからキーワードを格納します。
・loaderが有る場合、上記キーワードでunloadします。
・mainModuleオブジェクトが存在し、且つmainModule.shutdown関数が実行していない時に
  mainModule.shutdown()を実行します


function uninstall(data, reason)


関数定義のみです。

今回のまとめ

今回は、大分間が空いてしまいました。(1/5以来)
理由は、諸々の活動をしてました。
この活動は、また別の機会で書きたいと思います。

次回はscanner.jsファイルの中身をハックしていきたいと思います。 お時間のある方、宜しかったら見て下さい。m(__)m グンマー@坊主五厘

追伸
何か間違いが有った場合は、ご指摘ください。

バックナンバー