ひとりFirefox読書会

無駄にMinefieldのsrcを読んでみたり。
とりあえず、browser/app/nsBrowserApp.cppのsimpleさに感動してみたり。
無駄に引用してみたり。

static const nsXREAppData kAppData = {
  sizeof(nsXREAppData),
  nsnull,
  "Mozilla",
  "Firefox",
  NS_STRINGIFY(APP_VERSION),
  NS_STRINGIFY(BUILD_ID),
  "{ec8030f7-c20a-464f-9b0e-13a3a9e97384}",
  "Copyright (c) 1998 - 2007 mozilla.org",
  NS_XRE_ENABLE_PROFILE_MIGRATOR |
  NS_XRE_ENABLE_EXTENSION_MANAGER
#if defined(MOZILLA_OFFICIAL) && (defined(XP_WIN) || defined(XP_MACOSX))
  | NS_XRE_ENABLE_CRASH_REPORTER
#endif
,
  nsnull, // xreDirectory
  nsnull, // minVersion
  nsnull, // maxVersion
  "https://crash-reports.mozilla.com/submit"
};

int main(int argc, char* argv[])
{
  return XRE_main(argc, argv, &kAppData);
}

#if defined( XP_WIN ) && defined( WIN32 ) && !defined(__GNUC__)
// We need WinMain in order to not be a console app.  This function is
// unused if we are a console application.
int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR args, int )
{
    // Do the real work.
    return main( __argc, __argv );
}
#endif

(browser/app/nsBrowserApp.cpp:46-80; 2007/06/22 18:27 CVS-trunk 最新版はこっち )

Win32ならWinMainからmainをcallして、
mainからXRE_mainをcallして、
それで終了。
なんか、もう、ね、ハァハァ


あと、browser/base/content/browser.jsとか、browser/base/content/browser.xulとか、
夢がひろがるなぁ…


って、こんなことをしてる場合ではないのです。

ひとりGecko-SDK読書会

とりあえず、自分がbuildしたFirefoxのdist/sdk/idlの中の人をメモっていくことにするのです。
泥縄とか言わない。

domstubs.idl

nsIDOMhogeのがさっとプロトタイプ

mozJSSubScriptLoader.idl

javascriptがさらにこどもjavascriptをloadするためのservice。
Bagel-0.4.1のnsBagelScriptLoader.jsでも使われてるみたい。

nsIArray.idl

Gecko的配列?

nsIASN1Object.idl nsIASN1Sequence.idl

ASN1ってなんですか?

nsIBadCertListener.idl

認証を通らなかったとか、そっち系っぽい。
K-MeleonではnsICertificateDialogsのそばで使われてるみたい。

nsICategoryManager.idl

なんか、たとえば"http"と"ftp"と"mailto"は"scheme"というcategoryで…
みたいな管理ができるみたい。こんなのあるのか。

nsICertificateDialogs.idl

認証書を表示するとか、受け入れるとかのdialogのinterface。
がんばって自分で実装する。

nsIChannel.idl

GETしたりするためのchannelをほげる。
これは結構使えるかも。

nsIClassInfo.idl

XPCOM objectが実装してるinterfaceのlistをとってくる。

nsIClipboardCommands.idl

クリップボードをほげる。これ結構便利。
WebBrowserもこれを実装してるみたい。(nomina.041cのnmnFrameWindow.cpp)

nsIComponentManager.idl nsIComponentRegistrar.idl

おなじみ。XPCOMを作ってくれたり登録したりする。
nsComponentManagerUtils.h経由で使うことも多いかな。(nomina.041cのnmnGeckoEngine.cpp)

nsIContextMenuListener.idl

はいおなじみ。WebBrowserの右クリックメニューのやつ。
僕はnsIContextMenuListener2のほうが好きです。

nsICookie.idl nsICookieManager.idl

cookieのservice。なんか機能が少ないような気も…

nsICRLInfo.idl

なんか認証がらみっぽい。

nsIDebug.idl

assertとかまで独自仕様で実装してしまうのか…

nsIDirectoryService.idl

Geckoにはいろんなディレクトリ名を一元管理する機能があって、そのへん。
nsDirectoryServiceUtils.hとか、nsDirectoryServiceDefs.hとかをみるといろいろある。

nsIDOMhoge

めんどくさいので省略。192個のidlのうち、112個がこれだけど。
まあ、あれだ。DOMだ。


そして結構疲れる割にはムダであることに気づくorz
しんどいので続きはまたこんど。


…続けるのか?