<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
   <title>nesitive thinking</title>
   <link rel="alternate" type="text/html" href="http://nesitive.net/nesitive/" />
   <link rel="self" type="application/atom+xml" href="http://nesitive.net/nesitive/atom.xml" />
   <id>tag:nesitive.net,2008:/nesitive//1</id>
   <updated>2007-03-16T21:37:18Z</updated>
   
   <generator uri="http://www.sixapart.com/movabletype/">Movable Type Commercial 4.21-ja</generator>


<entry>
   <title>mod_setenvdnsbl : Apache module</title>
   <link rel="alternate" type="text/html" href="http://nesitive.net/nesitive/all/ab72d08f06989ea4e204403c6348424c.html" />
   <id>tag:nesitive.net,2007:/nesitive//1.22</id>
   
   <published>2007-01-13T18:47:54Z</published>
   <updated>2007-03-16T21:37:18Z</updated>
   
   <summary>The mod_setenvdnsbl is an Apache module that looks up DNSBL requests for target IP address and set those results to environment variables.
With this module, you can control access permission of black listed hosts.</summary>
   <author>
      <name></name>
      
   </author>
   
      <category term="Develop" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="en" xml:base="http://nesitive.net/nesitive/">
      <![CDATA[<h3>What is mod_setenvdnsbl</h3>
<p>
The mod_setenvdnsbl is an Apache module that looks up DNSBL requests for target IP address and set those results to environment variables.
With this module, you can control access permission of black listed hosts.
</p>

<h3>Download files</h3>
<dl>
<dt><a href="http://nesitive.net/nesitive/files/mod_setenvdnsbl-0.1.tgz">mod_setenvdnsbl-0.1.tgz</a></dt>
<dd> 4686 Bytes</dd>
</dl>]]>
      <![CDATA[<h3>How to install</h3>
<ol>
<li>Download and extract <code>mod_setenvdnsbl-0.1.tgz</code>.</li>
<li>Edit Makefile to change APXS variable to your apxs's path.</li>
<li>Do <code>make</code> to build.</li>
<li>Do <code>make install</code> to install.</li>
</ol>

<h3>Reference</h3>
<h4>SetEnvIfDNSBL directive</h4>
<dl>
<dt>Description</dt>
<dd>Sets variables based on DNSBL result of target host</dd>
<dt>Syntax</dt>
<dd><code>SetEnvIfDNSBL attribute dns-suffix [!|*]env-variable[=value] [[!|*]env-variable[=value]] ...</code></dd>
<dt>Context</dt>
<dd>server config, virtual host, directory, .htaccess</dd>
<dt>Override</dt>
<dd>FileInfo</dd>
</dl>
<p>
The SetEnvIfDNSBL directive sets variables based on DNSBL result of the attribute.
The attribute can be one of following three things:
</p>
<ol>
<li>
An HTTP request header field whose value is an IP address.
For example: Client-IP, X-Forwarded-For.
</li>
<li>
One of the following aspects of the request:
<dl>
<dt><code>remote_addr</code></dt>
<dd>The IP address of the client requesting.</dd>
<dt><code>server_addr</code></dt>
<dd>The IP address of the server on which received the request.</dd>
</dl>
</li>
<li>
The name of environment variables which are set by SetEnvIf directive.
</li>
</ol>
<p>
The rest of the arguments the name of variables to set, and optionally how to set the value.
These take the form of
</p>
<ol>
<li><code>varname</code>, or</li>
<li><code>!varname</code>, or</li>
<li><code>varname=value</code>, or</li>
<li><code>*varname</code></li>
</ol>
<p>
In the first three forms, the SetEnvIfDNSBL directive will work like the SetEnvIfDirective when the target IP address is listed on DNSBL (the result of DNSBL request was one of local loopback addresses, 127.0.0.0/24).
The fourth, this directive will set the result of DNSBL request when the result is not NXDOMAIN.
</p>
<div class="example">
<h4>Example</h4>
<pre>SetEnvIfDNSBL remote_host bsb.spamlookup.net IS_SPAM
SetEnvIfDNSBL remote_host list.dsbl.org *DNSBLRESULT</pre>
<div>

<div class="note">
<h4>Note</h4>
<p>
This directive generates a DNS request, so it may be a bottleneck of the response.
You should write this directive on limited contexts, for example &lt;Files&gt; directive and &lt;Location&gt; directive.
</p>
</div>]]>
   </content>
</entry>

<entry>
   <title>nsIHttpChannel sample/SimpleDownload</title>
   <link rel="alternate" type="text/html" href="http://nesitive.net/nesitive/all/aaf39a3cd88cdea567796433fa829d5f.html" />
   <id>tag:nesitive.net,2006:/nesitive//1.21</id>
   
   <published>2006-03-20T10:09:12Z</published>
   <updated>2007-03-16T21:37:18Z</updated>
   
   <summary> SimpleDownload downloads the target URI...</summary>
   <author>
      <name></name>
      
   </author>
   
      <category term="Develop" scheme="http://www.sixapart.com/ns/types#category" />
   
      <category term="Gecko" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="en" xml:base="http://nesitive.net/nesitive/">
      <![CDATA[<p>
SimpleDownload downloads the target URI to any folder.
Then if the request is http, response headers are shown in list box.
</p>
<p>
<img alt="SimpleDownload" src="http://nesitive.net/nesitive/images/SimpleDownload.png" width="589" height="311" />
</p>
<p>
<a href="http://nesitive.net/nesitive/files/SimpleDownload.zip">Download SimpleDownload.zip</a>
</p>]]>
      
   </content>
</entry>

<entry>
   <title>Gecko SDK for Delphi was registered to SourceForge.net</title>
   <link rel="alternate" type="text/html" href="http://nesitive.net/nesitive/all/2274e27dbc03e95f09767fc9b971d708.html" />
   <id>tag:nesitive.net,2006:/nesitive//1.20</id>
   
   <published>2006-03-15T07:02:09Z</published>
   <updated>2007-03-16T21:37:18Z</updated>
   
   <summary> Gecko SDK for Delphi project was regist...</summary>
   <author>
      <name></name>
      
   </author>
   
      <category term="Develop" scheme="http://www.sixapart.com/ns/types#category" />
   
      <category term="Gecko" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="en" xml:base="http://nesitive.net/nesitive/">
      <![CDATA[<p>
<a href="http://sourceforge.net/projects/d-gecko">Gecko SDK for Delphi project</a> was registered to <a href="http://sourceforge.net">SourceForge.net</a>.
It contains:
</p>
<ul>
<li>Gecko wrapper and utilitiy classes</li>
<li>VCL Components</li>
<li>command line utilities (xpidlpas)</li>
</ul>]]>
      
   </content>
</entry>

<entry>
   <title>Gecko SDK 1.8 で凍結されたインターフェース</title>
   <link rel="alternate" type="text/html" href="http://nesitive.net/nesitive/all/1bed29cddddbd32cc23bfd39ac6287f8.html" />
   <id>tag:nesitive.net,2005:/nesitive//1.19</id>
   
   <published>2005-10-07T12:19:00Z</published>
   <updated>2007-03-16T21:37:18Z</updated>
   
   <summary> 紛らわしいタイトルだが結局Bug 268520はTarget Mileston...</summary>
   <author>
      <name></name>
      
   </author>
   
      <category term="Gecko" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="en" xml:base="http://nesitive.net/nesitive/">
      <![CDATA[<p>
紛らわしいタイトルだが結局<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=268520">Bug 268520</a>はTarget MilestoneがMozilla1.9alphaとなりインターフェースで凍結されたのはこれだけ。
</p>
<ul>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=99615" title="Freeze nsIPromptService">nsIPromptService</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=99639" title="Freeze nsIWebProgress and nsIWebProgressListener">nsIWebProgress</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=99639" title="Freeze nsIWebProgress and nsIWebProgressListener">nsIWebProgressListener</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=265333" title="Freeze nsIWebBrowserStream">nsIWebBrowserStream</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=283684" title="Freeze nsIPrefBranch2">nsIPrefBranch2</a></li>

</ul>
<p>
2.0までに残り全部凍結できるんだろうか。
</p>]]>
      
   </content>
</entry>

<entry>
   <title>Gecko SDK 1.8 で凍結される予定のインターフェース</title>
   <link rel="alternate" type="text/html" href="http://nesitive.net/nesitive/all/a6072606f3fa32ccb149efb15b15bc6a.html" />
   <id>tag:nesitive.net,2005:/nesitive//1.18</id>
   
   <published>2005-06-11T14:45:00Z</published>
   <updated>2007-03-16T21:37:18Z</updated>
   
   <summary> Bug 268520からメモ程度に。 nsIWebNavigation nsI...</summary>
   <author>
      <name></name>
      
   </author>
   
      <category term="Gecko" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="en" xml:base="http://nesitive.net/nesitive/">
      <![CDATA[<p>
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=268520">Bug 268520</a>からメモ程度に。
</p>
<ul>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=99625">nsIWebNavigation</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=99642">nsIWebBrowserPersist</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=162116">nsIMimeInfo</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=180154">nsISeekableStream</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=265513">nsIPrompt</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=265513">nsIAuthPrompt</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=269323">nsIBaseWindow</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=270892">nsIAppShell</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=270893">nsIArray</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=270895">nsIHelperAppLauncher</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=270895">nsIHelperAppLauncherDialog</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=270897">nsIDownload</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=270897">nsITransfer</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=271295">nsIDOMWindow2</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=283684">nsIPrefBranch2</a></li>
</ul>]]>
      
   </content>
</entry>

<entry>
   <title>完全に凍結していないインターフェース</title>
   <link rel="alternate" type="text/html" href="http://nesitive.net/nesitive/all/8efaa1f71c88ddab3ba28933896f7809.html" />
   <id>tag:nesitive.net,2005:/nesitive//1.17</id>
   
   <published>2005-06-05T12:45:00Z</published>
   <updated>2007-03-16T21:37:18Z</updated>
   
   <summary> Gecko SDK に含まれているインターフェースはデバッグ用のインターフェー...</summary>
   <author>
      <name></name>
      
   </author>
   
      <category term="Gecko" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="en" xml:base="http://nesitive.net/nesitive/">
      <![CDATA[<p>
Gecko SDK に含まれているインターフェースはデバッグ用のインターフェースを除き全て <code>@status FROZEN</code> がついており凍結されているのだが、一部のインターフェースは凍結されていないインターフェースを参照しているため完全に凍結されているとは言えない。
例えば、 Mozilla 1.1β で凍結された <code>nsIWebBrowserPrint</code> は <code>@status UNDER_REVIEW</code> である <code>nsIPrintSettings</code> を参照しているが、このインターフェースは 1.8α4 以前と 1.8α5 以降では UUID が異なっている。
Gecko SDK 1.8β1 に含まれるインターフェースで、完全に凍結されていないと見なされるものは次の7つになる。
</p>]]>
      <![CDATA[<table>
<thead>
<tr>
<th>インターフェース名</th>
<td>参照している非凍結インターフェース</td>
</tr>
</thead>
<tbody>
<tr>
<th>nsIASN1Sequence</th>
<td><ul>
<li>nsIMutableArray</li>
</ul></td>
</tr>
<tr class="chained">
<th>nsIBadCertListener</th>
<td><ul>
<li class="chained">nsIX509Cert</li>
</ul></td>
</tr>
<tr>
<th>nsIDOMCSSPrimitiveValue</th>
<td><ul>
<li>nsIDOMCSSCounter</li>
<li>nsIDOMCSSRect</li>
<li>nsIDOMCSSRGBColor</li>
</ul></td>
</tr>
<tr>
<th>nsIWebBrowserPrint</th>
<td><ul>
<li>nsIPrintSettings</li>
</ul></td>
</tr>
<tr>
<th>nsIWindowWathcer</th>
<td><ul>
<li>nsIAuthPrompt</li>
<li>nsIPrompt</li>
</ul></td>
</tr>
<tr>
<th>nsIX509Cert</th>
<td><ul>
<li>nsIArray</li>
</ul></td>
</tr>
<tr>
<th>nsIX509CertDB</th>
<td><ul>
<li>nsIArray</li>
<li class="chained">nsIX509Cert</li>
</ul></td>
</tr>
</table>

<p>
<code>nsIDOMCSSPrimitiveValue</code> が参照している <code>nsIDOMCSSCounter</code> などはソースツリーに現れて以来一切の変更はなされていないが、先に説明した <code>nsIPrintSettings</code> や <code>nsIMutableArray</code> などは <code>UNDER_REVIEW</code> になった後でも UUID やメソッドなどの変更がある。
これらのインターフェースを C++ などで Gecko のバージョンをまたいで使う場合には注意が必要だ。
</p>]]>
   </content>
</entry>

<entry>
   <title>タブブラウザ Bagel</title>
   <link rel="alternate" type="text/html" href="http://nesitive.net/nesitive/all/5eb8c670d21b0acdbde0bd2232aec6a6.html" />
   <id>tag:nesitive.net,2005:/nesitive//1.16</id>
   
   <published>2005-05-21T15:45:55Z</published>
   <updated>2007-03-16T21:37:17Z</updated>
   
   <summary>先月からちょくちょくアクセスログに姿を現し始めていたためアクセス解析ツールに手を...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="en" xml:base="http://nesitive.net/nesitive/">
      <![CDATA[<p>先月からちょくちょくアクセスログに姿を現し始めていたためアクセス解析ツールに手を入れて他のブラウザと区別出来るようにしていたわけだが</p>
<p><img src="/images/analysis-050520.png" alt="Bagel が MSIE、Firefox を押さえてアクセスされたブラウザでトップの座に！"/></p>
<p>まじですか。</p>]]>
      <![CDATA[<p>せっかく記事にしてみたんだからダウンロードして使ってみる。</p>
<p><img src="/images/bagel-bookmark-0.0.3.png" alt="Bagel のデフォルトブックマークにnesitive thinkingが！"/></p>
<p>まじですか。</p>]]>
   </content>
</entry>

<entry>
   <title>Added for Mozilla 1.8</title>
   <link rel="alternate" type="text/html" href="http://nesitive.net/nesitive/all/3b9d0f600e61f4174274a2360a6f2277.html" />
   <id>tag:nesitive.net,2005:/nesitive//1.15</id>
   
   <published>2005-04-17T12:56:33Z</published>
   <updated>2007-03-16T21:37:17Z</updated>
   
   <summary>ずいぶん前に好みの仕様なったのだが正直コードの変更がだるい。
というかどうせ1.8RC1までにまだ追加されるだろうからコードを変更しようという気にもなれない。
1.7の時と同じ轍は踏まん。
そもそも1.7と1.8でUUIDが違うインターフェースが増殖しすぎだ。</summary>
   <author>
      <name></name>
      
   </author>
   
      <category term="Gecko" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="en" xml:base="http://nesitive.net/nesitive/">
      <![CDATA[<blockquote cite="http://lxr.mozilla.org/seamonkey/source/xpcom/build/nsXPCOMPrivate.h#165" title="mozilla/xpcom/build/nsXPCOMGlue.cpp">
<pre><code>    // Added for Mozilla 1.8
    AllocFunc allocFunc;
    ReallocFunc reallocFunc;
    FreeFunc freeFunc;
    StringContainerInit2Func stringContainerInit2;
    CStringContainerInit2Func cstringContainerInit2;</code></pre>
</blockquote>
<p><a href="http://bonsai.mozilla.org/cvsview2.cgi?diff_mode=context&amp;whitespace_mode=show&amp;file=nsXPCOMPrivate.h&amp;branch=&amp;root=/cvsroot&amp;subdir=mozilla/xpcom/build&amp;command=DIFF_FRAMESET&amp;rev1=1.19&amp;rev2=1.20">ずいぶん前</a>に好みの仕様なったのだが正直コードの変更がだるい。
というかどうせ1.8RC1までにまだ追加されるだろうからコードを変更しようという気にもなれない。
1.7の時と同じ轍は踏まん。</p>
<p>そもそも1.7と1.8でUUIDが違うインターフェースが増殖しすぎだ。</p>]]>
      
   </content>
</entry>

<entry>
   <title>アプリケーション components フォルダのテスト</title>
   <link rel="alternate" type="text/html" href="http://nesitive.net/nesitive/all/28216f86700ae1a7ae411a41f7f5843b.html" />
   <id>tag:nesitive.net,2005:/nesitive//1.14</id>
   
   <published>2005-04-03T15:00:00Z</published>
   <updated>2008-07-05T18:19:27Z</updated>
   
   <summary>GRE ではコンポーネントフォルダをスキャンして XPCOM コンポーネントを登...</summary>
   <author>
      <name></name>
      
   </author>
   
      <category term="Gecko" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="en" xml:base="http://nesitive.net/nesitive/">
      <![CDATA[<p>GRE ではコンポーネントフォルダをスキャンして XPCOM コンポーネントを登録していくのだが、このときスキャンするフォルダは一つではなく、次のような複数の場所をスキャンする。</p>
<ul>
<li><code>NS_GRE_COMPONENT_DIR</code> (GRE 直下の components フォルダ)</li>
<li><code>NS_XPCOM_COMPONENT_DIR</code> (実行ファイルのある場所の components フォルダ)</li>
<li><code>NS_XPCOM_COMPONENT_DIR_LIST</code></li>
</ul>
<p>このことから、 GRE を使ったアプリケーションを配布する際には、 GRE で不足しているコンポーネントのみを一緒に配布すればいいことになる。
そこで、実際に最小限のコンポーネントを構成する実験を行った。</p>]]>
      <![CDATA[<p>まず、 <code>nsIXMLRpcClient</code> を利用した <a href="http://nesitive.net/nesitive/files/XmlRpcClient.zip">XML-RPC の簡易クライアント</a>を作成した。
次に、 Mozilla 1.8β1 の components 以下から持ってきた3つのファイルの有無により、クライアントが実行できるかどうかを確かめた。</p>
<ul>
<li>nsXmlRpcClient.js</li>
<li>nsDictionary.js</li>
<li>xml-rpc.xpt</li>
</ul>
<p>まず、最低限起動時エラーを出さないためには、 nsXmlRpcClient.js と xml-rpc.xpt は必須である。
nsXmlRpcClient.js は <code>nsIXMLRpcClient</code> の実装を記述しているため、必要不可欠である。
また、 xml-rpc.xpt は nsIXMLRpcClient その他の <abbr title="Universally Unique Identifier">UUID</abbr> 情報を持っているため、これがないと nsXmlRpcClient.js の初期化処理が正常に行われない。
最後に、 nsDictionary.js だが、これがない場合、ほとんどの XML-RPC の結果を処理することができない。
nsDictionary.js は XML-RPC の結果で構造体を扱うためのものだが、単一の値を返す XML-RPC はほとんどないため、事実上必須といえる。</p>
<p>以上のことから、アプリケーションの components フォルダに必要なファイルは次のものだとわかる。</p>
<ul>
<li>アプリケーションから利用されるコンポーネントを実装した DLL または JavaScript</li>
<li>JavaScript から利用されるコンポーネントを含む xpt</li>
</ul>
<p>今回は DLL については特に検証しなかったがおそらく条件は JavaScript のものと変わらないだろう。
xpt ファイルに関しては JavaScript で使用さえしなければ必要ないはずだ。
逆に、 JavaScript であれば components フォルダの外、たとえばユーザースクリプトなどで使う場合であっても必要だろう。</p>]]>
   </content>
</entry>

<entry>
   <title>GRE にハードコードされているchrome</title>
   <link rel="alternate" type="text/html" href="http://nesitive.net/nesitive/all/0e5e8538e398972e245a52f07549aaaa.html" />
   <id>tag:nesitive.net,2005:/nesitive//1.13</id>
   
   <published>2005-03-28T15:32:28Z</published>
   <updated>2007-03-16T21:37:17Z</updated>
   
   <summary>GRE に含まれている DLL に埋め込まれている文字列からハードコードされてい...</summary>
   <author>
      <name></name>
      
   </author>
   
      <category term="Gecko" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="en" xml:base="http://nesitive.net/nesitive/">
      <![CDATA[<p><abbr title="Gecko Runtime Environment">GRE</abbr> に含まれている <abbr title="Dynamic Link Library">DLL</abbr> に埋め込まれている文字列からハードコードされている chrome を列挙した。
GRE のみでブラウザ組み込みをするといろいろなところで不具合がでるのだが、それを chrome に限って探求する。</p>
<p>Mozilla Suite 1.8&beta;1 の GRE を対象にして検索を行った。
ハードコードされている chrome と DLL の対応は次のとおり。</p>
<table summary="GRE ディレクトリ直下のハードコード chrome">
<caption>GRE ディレクトリ直下</caption>
<thead>
<tr><th>DLL</th><td>chrome</td></tr>
</thead>
<tbody>
<tr>
<th><code>gkgfx.dll</code></th>
<td>chrome://global/content/printPageSetup.xul</td>
</tr>
<tr>
<th><code>mozctl.dll</code></th>
<td>chrome://necko/locale/necko.properties</td>
</tr>
</tbody>
</table>]]>
      <![CDATA[<table summary"components ディレクトリ直下のハードコード chrome">
<caption>components ディレクトリ直下</caption>
<thead>
<tr><th>DLL</th><td>chrome</td></tr>
</thead>
<tbody>
<tr>
<th rowspan="2><code>accesibility.dll</code></th>
<td>chrome://global-platform/locale/platformKeys.properties</td>
</tr>
<tr><td>chrome://global-platform/locale/accesible.properties</td></tr>
<tr>
<th rowspan="2><code>appshell.dll</cope></th>
<td>chrome://global/locale/about.xhtml</td>
</tr>
<tr><td>chrome://navigator/content/navigator.xul</td></tr>
<tr>
<th><code>caps.dll</code></th>
<td>chrome://communicator/locale/security/caps.properties</td>
</tr>
<tr>
<th><code>cookie.dll</code></th>
<td>chrome://cookie/content/cookieAcceptDialog.xul</td>
</tr>
<tr>
<th rowspan="3"><code>docshell.dll</code></th>
<td>chrome://global/content/netError.xhtml</td>
</tr>
<tr><td>chrome://global/locale/appstrings.properties</td></tr>
<tr><td>chrome://global/locale/nsWebBrowserPersist.properties</td></tr>
<tr>
<th rowspan="8"><code>embedcomponents.dll</code></th>
<td>chrome://global/content/commonDialog.xul</td>
</tr>
<tr><td>chrome://global/content/console.xul</td></tr>
<tr><td>chrome://global/locale/commonDialogs.properties</td></tr>
<tr><td>chrome://global/locale/nsWebBrowserPersist.properties</td></tr>
<tr><td>chrome://global/content/printPageSetup.xul</td></tr>
<tr><td>chrome://global/content/printPreviewProgress.xul</td></tr>
<tr><td>chrome://global/content/printProgress.xul</td></tr>
<tr><td>chrome://global/locale/printdialog.properties</td></tr>
<tr>
<th><code>gkgfxwin.dll</code></th>
<td>chrome://global/locale/printing.properties</td>
</tr>
<tr>
<th rowspan="17"><code>gklayout.dll</code></th>
<td>chrome://global/locale/css.properties</td>
<tr><td>chrome://global/locale/xbl.properties</td></tr>
<tr><td>chrome://global/locale/xul.properties</td></tr>
<tr><td>chrome://global/locale/layout_error.properties</td></tr>
<tr><td>chrome://communicator/locale/layout/HtmlForm.properties</td></tr>
<tr><td>chrome://global/locale/printing.properties</td></tr>
<tr><td>chrome://communicator/locale/dom/dom.properties</td></tr>
<tr><td>chrome://global/locale/commonDialogs.properties</td></tr>
<tr><td>chrome://mozapps/locale/plugins/plugins.properties</td></tr>
<tr><td>chrome://global/skin/scrollbars.css</td></tr>
<tr><td>chrome://global/locale/css.properties</td></tr>
<tr><td>chrome://global/locale/brand.properties</td></tr>
<tr><td>chrome://global-platform/locale/platformKeys.properties</td></tr>
<tr><td>chrome://global/locale/keys.properties</td></tr>
<tr><td>chrome://communicator/locale/layout/MediaDocument.properties</td></tr>
<tr><td>chrome://communicator/content/xml/XMLPrettyPrint.xsl</td></tr>
<tr><td>chrome://global/content/commonDialog.xul</td></tr>
<tr>
<th><code>gkparser.dll</code></th>
<td>chrome://communicator/locale/layout/xmlparser.properties</td>
</tr>
<tr>
<th rowspan="2"><code>gkwidget.dll</code></th>
<td>chrome://navigator/locale/pageInfo.properties</td>
</tr>
<tr><td>chrome://global/locale/filepicker.properties</td></tr>
<tr>
<th rowspan="8"><code>necko.dll</code></th>
<td>chrome://necko/locale/necko.properties</td>
</tr>
<tr><td>chrome://global/content/aboutAbout.html</td></tr>
<tr><td>chrome://global/content/MPL-1.1.html</td></tr>
<tr><td>chrome://global/content/buildconfig.html</td></tr>
<tr><td>chrome://global/content/logo.gif</td></tr>
<tr><td>chrome://global/content/config.xul</td></tr>
<tr><td>chrome://global/content/plugins.html</td></tr>
<tr><td>chrome://global/content/mozilla.xhtml</td></tr>
<tr>
<th><code>necko2.dll</code></th>
<td>chrome://necko/locale/necko.properties</td>
</tr>
<tr>
<th><code>oji.dll</code></th>
<td>chrome://global-region/locale/region.properties</td>
</tr>
<tr>
<th><code>pipboot.dll</code></th>
<td>chrome://pipnss/locale/security.properties</td>
</tr>
<tr>
<th rowspan="2"><code>pipnss.dll</code></th>
<td>chrome://pipnss/locale/pipnss.properties</td>
<tr><td>chrome://pipnss/locale/pipnss.properties</td></tr>
<tr>
<th rowspan="4"><code>profile.dll</code></th>
<td>chrome://communicator/locale/profile/migration.properties</td>
</tr>
<tr><td>chrome://global/locale/brand.properties</td></tr>
<tr><td>chrome://communicator/content/profile/profileSelection.xul</td></tr>
<tr><td>chrome://communicator/content/profile/createProfileWizard.xul</td></tr>
<tr>
<th><code>uconv.dll</code></th>
<td>chrome://global/locale/charsetTitles.properties</td>
</tr>
<tr>
<th><code>wallet.dll</code></th>
<td>chrome://communicator/locale/wallet/wallet.properties</td>
</tr>
<tr>
<th rowspan="2"><code>xpinstall.dll</code></th>
<td>chrome://global/locale/xpinstall/xpinstall.properties</td>
</tr>
<tr><td>chrome://global/locale/commonDialogs.properties</td></tr>
</tbody>
</table>
<p>まず GRE ディレクトリ直下の2つだが、 chrome://global/content/printPageSetup.xul に関しては gfx/src/nsPrintOptionsImpl.cpp の nsPrintOptions::ShowPrintSetupDialog メソッドで呼び出されるが、このメソッドは GRE の中のいずれのファイルからも呼び出されることはない。
組み込みプログラムから意図的に呼び出さない限りは不要だ。
<code>mozctl.dll</code> は Mozilla ActiveX コントロールで使われるファイルなので、 ActiveX ブラウザを使わない限りは特に気にする必要はない。
ただし、ハードコードされている chrome://necko/locale/necko.properties 自体は他の DLL でも使われている。</p>
<p>続いて components ディレクトリ以下のファイルについてもチェックしてみる。
*.properties ファイルの多くはエラーメッセージなどの埋め込みに使われる。
たとえば necko.properties がない場合、 nsIWebProgressListener.onStatusChange による進行状況メッセージが使えなくなる。
about.xhtml、aboutAbout.xul、MPL-1.1.html、buildconfig.html、logo.gif、config.xul、plugins.html、mozilla.xhtml は about スキーマで表示されるファイルになる。
Mozilla のものを流用する場合はこれらに使われる chrome も考慮する必要がある。
scrollbars.css はハードコードされている唯一の skin chrome である。
GRE のみでは組み込みブラウザでスクロールバーが表示されないのに関係があるかもしれない。
</p>
<p>*.xul で重要だと思われるのは commonDialog.xul だろう。
これは nsIPrompt から呼び出されるためにことあるごとに必要になる。
nsIPrompt や nsIAuthPrompt を自前で実装する場合には必要ないものだ
(ただし、 MathML や SVG の実装では nsIPromptService を通さずに直に呼び出している模様)。
その手のダイアログとしては他に cookieAcceptDialog.xul、print*.xul などがある。
console.xul は JavaScript コンソールのための、 profile*.xul はプロファイル関連のためのダイアログなので、必要ならば各自導入する必要がある。
navigator.xul は appshell で起動する際のデフォルト設定なのだが、 XUL アプリを作る場合でもない限り不要だろう。
*.xul ファイルを Mozilla のソースコードから導入する際の注意点として、*.js、*.properties、*.dtd などの関連ファイルも同時に用意する必要がある。
ほとんどは brand.dtd と 同名の js、properties、dtd ファイルをがあれば問題ないだろう。</p>
<p>その他のファイルとして XMLPrettyPrint.xsl があるが、これはスタイルシートが関連づけられていない XML を表示する際に使われるものだと思われる。</p>
<p>以上が GRE 内の DLL でハードコードされた chrome である。
以前 chrome を削りに削ったことがあるが、 locale 関連以外はほぼ似たような構成になった。
つまり、これらのファイルから最小の chrome セットを作ることができるのではないだろうか。
機会があったらもう一度最小 chrome に挑戦してみよう。</p>]]>
   </content>
</entry>

<entry>
   <title>仕様が固定されたインターフェース</title>
   <link rel="alternate" type="text/html" href="http://nesitive.net/nesitive/all/c4976d18b7b5ad8abab559c6e23a86f8.html" />
   <id>tag:nesitive.net,2004:/nesitive//1.12</id>
   
   <published>2004-12-11T12:10:00Z</published>
   <updated>2007-03-16T21:37:17Z</updated>
   
   <summary>GeckoSDK に含まれているインターフェースの最後に仕様が変更されたバージョ...</summary>
   <author>
      <name></name>
      
   </author>
   
      <category term="Gecko" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="en" xml:base="http://nesitive.net/nesitive/">
      <![CDATA[<p>GeckoSDK に含まれているインターフェースの最後に仕様が変更されたバージョンと <code>@status FROZEN</code> になったバージョンを調べてみた。
<code>UNDER _REVIEW</code>　が混ざっているが多分もう仕様変更がないんだろう。
<code>nsIDebug</code> とかいまさら仕様変更されても困るし。</p>]]>
      <![CDATA[<table summary="仕様が固定されたインターフェースとその時期">
<caption>仕様が固定されたインターフェース</caption>
<thead>
<tr><th>インターフェース</th><td>最後の仕様変更</td><td>仕様固定</td></tr>
</thead>
<tbody>
<tr><th><code>mozIJSSubScriptLoader</code></th><td>1.0</td><td>1.2</td></tr>
<tr><th><code>nsICategoryManager</code></th><td>1.1</td><td>1.2</td></tr>
<tr><th><code>nsIChannel</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIClassInfo</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIClipboardCommands</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIComponentManager</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIComponentRegistrar</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIContextMenuListener</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsICookie</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsICookieManager</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIDebug</code></th><td>1.5</td><td>UNDER_REVIEW</td></tr>
<tr><th><code>nsIDirectoryService</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIDOM3DocumentEvent</code></th><td>1.1</td><td>?</td></tr>
<tr><th><code>nsIDOM3EventTarget</code></th><td>1.1</td><td>?</td></tr>
<tr><th><code>nsIDOMAbstractView</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMAttr</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIDOMBarProp</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIDOMCDATASection</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIDOMCharacterData</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIDOMComment</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIDOMCSSPrimitiveValue</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMCSSRule</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMCSSRuleList</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMCSSStyleDeclaration</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMCSSStyleSheet</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMCSSValue</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMCSSValueList</code></th><td>1.1</td><td>1.3</td></tr>
<tr><th><code>nsIDOMCustomEvent</code></th><td>1.1</td><td>?</td></tr>
<tr><th><code>nsIDOMDocument</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIDOMDocumentEvent</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIDOMDocumentFragment</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIDOMDocumentRange</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMDocumentStyle</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMDocumentType</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIDOMDocumentView</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMDOMException</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIDOMDOMImplementation</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIDOMElement</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIDOMEntity</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIDOMEntityReference</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIDOMEvent</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIDOMEventGroup</code></th><td>1.1</td><td>?</td></tr>
<tr><th><code>nsIDOMEventListener</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIDOMEventTarget</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIDOMHTMLAnchorElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLAppletElement</code></th><td>1.3</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLAreaElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLBaseElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLBaseFontElement</code></th><td>1.3</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLBodyElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLBRElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLButtonElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLCollection</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLDirectoryElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLDivElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLDListElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLDocument</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLEmbedElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLFieldSetElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLFontElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLFormElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLFrameElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLFrameSetElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLHeadElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLHeadingElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLHRElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLHtmlElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLIFrameElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLImageElement</code></th><td>1.3</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLInputElement</code></th><td>1.3</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLIsIndexElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLLabelElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLLegendElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLLIElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLLinkElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLMapElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLMenuElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLMetaElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLModElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLObjectElement</code></th><td>1.3</td><td>1.4</td></tr>
<tr><th><code>nsIDOMHTMLOListElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLOptGroupElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLOptionElement</code></th><td>1.0</td><td>1.4</td></tr>
<tr><th><code>nsIDOMHTMLOptionsCollection</code></th><td>1.4</td><td>1.4</td></tr>
<tr><th><code>nsIDOMHTMLParagraphElement</code></th><td>1.0</td><td>1.3</tr>
<tr><th><code>nsIDOMHTMLParamElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLPreElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLQuoteElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLScriptElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLSelectElement</code></th><td>1.0</td><td>1.4</td></tr>
<tr><th><code>nsIDOMHTMLStyleElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLTableCaptionElem</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLTableCellElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLTableColElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLTableElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLTableRowElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLTableSectionElem</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLTextAreaElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLTitleElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMHTMLUListElement</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMMediaList</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMMouseEvent</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMNamedNodeMap</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIDOMNode</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIDOMNodeList</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIDOMNotation</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIDOMNSDocumentStyle</code></th><td>1.8a3</td><td>?</td></tr>
<tr><th><code>nsIDOMProcessingInstruction</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIDOMRange</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMStyleSheet</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMStyleSheetList</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMText</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIDOMUIEvent</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIDOMWindow</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIDOMWindow2</code></th><td>1.7</td><td>?</td></tr>
<tr><th><code>nsIDOMWindowCollection</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIDOMWindowUtils</code></th><td>1.8a5</td><td>?</td></tr>
<tr><th><code>nsIEmbeddingSiteWindow</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIFactory</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIFile</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIFileURL</code></th><td>1.0</td><td>1.2</td></tr>
<tr><th><code>nsIGlobalHistory</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIHistoryEntry</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIHttpChannel</code></th><td>1.2</td><td>1.3</td></tr>
<tr><th><code>nsIHttpHeaderVisitor</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIInputStream</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIInterfaceRequestor</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIIOService</code></th><td>1.2</td><td>1.2</td></tr>
<tr><th><code>nsILoadGroup</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsILocalFile</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIMemory</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIModule</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIObserver</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIObserverService</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIOutputStream</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIPassword</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIPrefBranch</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIPrefLocalizedString</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIPrefService</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIProfile</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIProfileChangeStatus</code></th><td>1.4</td><td>?</td></tr>
<tr><th><code>nsIProgrammingLanguage</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIPromptService</code></th><td>1.0</td><td>1.8a5</td></tr>
<tr><th><code>nsIProperties</code></th><td>1.2</td><td>1.2</td></tr>
<tr><th><code>nsIProtocolHandler</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIRequest</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIRequestObserver</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIScriptableInputStream</code></th><td>1.0</td><td>1.2</td></tr>
<tr><th><code>nsISelection</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIServiceManager</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsISHistory</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsISHistoryListener</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsISimpleEnumerator</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIStreamListener</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsISupports</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsISupportsPrimitives</code></th><td>1.2</td><td>1.2</td></tr>
<tr><th><code>nsITooltipListener</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsITooltipTextProvider</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsITraceRefcnt</code></th><td>1.5</td><td>UNDER_REVIEW</td></tr>
<tr><th><code>nsIUnicharStreamListener</code></th><td>1.8a5</td><td>1.8a5</td></tr>
<tr><th><code>nsIUploadChannel</code></th><td>1.3</td><td>1.3</td></tr>
<tr><th><code>nsIURI</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIURIContentListener</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIURL</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIWeakReference</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIWebBrowser</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIWebBrowserChrome</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIWebBrowserChromeFocus</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIWebBrowserFind</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIWebBrowserFocus</code></th><td>1.0</td><td>1.3</td></tr>
<tr><th><code>nsIWebBrowserPrint</code></th><td>1.1</td><td>1.1</td></tr>
<tr><th><code>nsIWebBrowserSetup</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIWebProgress</code></th><td>1.1</td><td>1.8a5</td></tr>
<tr><th><code>nsIWebProgressListener</code></th><td>1.0</td><td>1.8a5</td></tr>
<tr><th><code>nsIWindowCreator</code></th><td>1.0</td><td>1.0</td></tr>
<tr><th><code>nsIWindowWatcher</code></th><td>1.0</td><td>1.0</td></tr>
</tbody>
</table>
<p>GeckoSDK に含まれるインターフェースはここまで。
なのだが、実は SDK に含まれていないながらも仕様が固定されたインターフェースも存在する。</p>

<table summary="GeckoSDK に含まれないが仕様が固定されたインターフェースとその時期">
<caption>仕様が固定されたインターフェース(番外編)</caption>
<thead>
<tr><th>インターフェース</th><td>最後の仕様変更</td><td>仕様固定</td></tr>
</thead>
<tbody>
<tr><th><code>nsIASN1Object</code></th><td>1.3</td><td>1.4</td></tr>
<tr><th><code>nsIASN1Sequence</code></th><td>1.3</td><td>1.4</td></tr>
<tr><th><code>nsIBadCertListener</code></th><td>1.3</td><td>1.4</td></tr>
<tr><th><code>nsICertificateDialogs</code></th><td>1.3</td><td>1.4</td></tr>
<tr><th><code>nsICRLInfo</code></th><td>1.3</td><td>1.4</td></tr>
<tr><th><code>nsIX509Cert</code></th><td>1.4</td><td>1.4</td></tr>
<tr><th><code>nsIX509CertDB</code></th><td>1.3</td><td>1.4</td></tr>
<tr><th><code>nsIX509CertValidity</code></th><td>1.4</td><td>1.4</td></tr>
<tr><th><code>nsIXFormsModelElement</code></th><td>1.8a5</td><td>1.8a5</td></tr>
</tbody>
</table>

<p>単独で滑り込んできた <code>nsIXFormsModelElement</code> はともかく、その他のインターフェースは <abbr title="Security Sockets Layer">SSL</abbr> がらみのもので結構重要だと思うんですが mozilla.org は　<code>nsIDOMNSDocumentStyle</code>　なんかよりも重要度が低いと考えているのだろうか。</p>

<h3>02月06日追記</h3>
<p>Mozilla 1.8a6 から <code>nsIASN1Object</code> 以下8つの SSL 関連のインターフェースが GeckoSDK に含まれた。
そのほかにもいくつかのインターフェースが固定されたようだ。
1.8a6 の成果をまとめると以下の通り。</p>
<table summary="GeckoSDK 1.8a6 で固定されたインターフェースとその時期">
<caption>GeckoSDK 1.8a6 で固定されたインターフェース</caption>
<thead>
<tr><th>インターフェース</th><td>最後の仕様変更</td><td>仕様固定</td></tr>
</thead>
<tbody>
<tr><th><code>nsIASN1Object</code></th><td>1.3</td><td>1.4</td></tr>
<tr><th><code>nsIASN1Sequence</code></th><td>1.3</td><td>1.4</td></tr>
<tr><th><code>nsIBadCertListener</code></th><td>1.3</td><td>1.4</td></tr>
<tr><th><code>nsICertificateDialogs</code></th><td>1.3</td><td>1.4</td></tr>
<tr><th><code>nsICRLInfo</code></th><td>1.3</td><td>1.4</td></tr>
<tr><th><code>nsISecurityWarningDialogs</code></th><td>1.3</td><td>1.4</td></tr>
<tr><th><code>nsIWebBrowserStream</code></th><td>1.8a5</td><td>1.8a6</td></tr>
<tr><th><code>nsIX509Cert</code></th><td>1.4</td><td>1.4</td></tr>
<tr><th><code>nsIX509CertDB</code></th><td>1.3</td><td>1.4</td></tr>
<tr><th><code>nsIX509CertValidity</code></th><td>1.4</td><td>1.4</td></tr>
</tbody>
</table>]]>
   </content>
</entry>

<entry>
   <title>nsIWebProgress その他の仕様が固定</title>
   <link rel="alternate" type="text/html" href="http://nesitive.net/nesitive/all/e8c0b7cfd567c87a0fc85c4578fb84ba.html" />
   <id>tag:nesitive.net,2004:/nesitive//1.11</id>
   
   <published>2004-11-25T15:50:00Z</published>
   <updated>2007-03-16T21:37:17Z</updated>
   
   <summary>nsIWebProgressListener がいつまでたっても凍結されないため...</summary>
   <author>
      <name></name>
      
   </author>
   
      <category term="Gecko" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="en" xml:base="http://nesitive.net/nesitive/">
      <![CDATA[<p><code>nsIWebProgressListener</code> がいつまでたっても凍結されないため、いったいいつからインターフェースが変わっていないのかを調べるために <a href="http://lxr.mozilla.org/mozilla/">LXR</a> で CVS Log を見てみたところ、実は2004年10月30日の時点ですでに凍結されていたようだ。
もしかして、と思い先日リリースされた 1.8α5 の SDK をダウンロードして確認してみたところ、 1.7 と比較して次の <abbr title="interface definition language">idl</abbr> ファイルが増えていた。</p>]]>
      <![CDATA[<ul>
<li><code>nsIDOMWindowUtils.idl</code></li>
<li><code>nsIDOMNSDocumentStyle.idl</code></li>
<li><code>nsIPromptService.idl</code></li>
<li><code>nsIUnicharStreamListener.idl</code></li>
<li><code>nsIWebProgress.idl</code></li>
<li><code>nsIWebProgressListener.idl</code></li>
</ul>
<p>このうち <code>nsIPromptService</code> と <code>nsIWebProgressListener</code> は <a href="http://www.mozilla.org/projects/embedding/embedoverview/EmbeddingBasics.html">Gecko Embedding Basics</a> の <a href="http://www.mozilla.org/projects/embedding/embedoverview/EmbeddingBasics13.html">What You Provide</a> で指定されているインターフェースの中ではまだ凍結されていないものだっただけに、ようやくといったところだ。
特に <code>nsIWebProgressListener</code> の方は<q>実装されなければならない</q>となっていてブラウザ組み込みの鬼門となっていたのは間違いない。</p>
<p>まあ内容はコメントやライセンス以外は2002年から変更がなかったので実際には大して気にせずに使っていたんだけれど。</p>]]>
   </content>
</entry>

<entry>
   <title>Firefox 1.0 リリース</title>
   <link rel="alternate" type="text/html" href="http://nesitive.net/nesitive/all/2846820383115c379d3b1224dda90bf8.html" />
   <id>tag:nesitive.net,2004:/nesitive//1.10</id>
   
   <published>2004-11-09T14:40:00Z</published>
   <updated>2007-03-16T21:37:17Z</updated>
   
   <summary>mozilla.org から当初の予告通り11月9日に Firefox 1.0 ...</summary>
   <author>
      <name></name>
      
   </author>
   
      <category term="Mozilla" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="en" xml:base="http://nesitive.net/nesitive/">
      <![CDATA[<p><a href="http://www.mozilla.org/">mozilla.org</a> から当初の予告通り11月9日に <a href="http://www.mozilla.org/products/firefox/">Firefox 1.0</a> がリリースされた。

いつものように <a href="http://backup.jasnapaka.com/">MozBackup</a> でプロファイルをバックアップしてからインストールして使ってみた。</p>]]>
      <![CDATA[<p>0.9 からの新機能はネイティブでのシングルウィンドウモードの対応だ。
今までは <a href="http://piro.sakura.ne.jp/xul/_tabextensions.html">Tabbrowser Extensions</a> を使っていたのだが、他のアプリケーションから新しいタブを開く際に、一度新しいウィンドウが開いてからタブに入り直すため動作が非常に遅かった。
しかし、今回のネイティブ対応で即座にタブで開かれるようになったため、非常にブラウジングが快適になった。
<code>target=&quot;blank&quot;</code> などをタブで開かせることも可能だ。</p>
<p>インストールには Windows 対応の日本語版を使ったのだが、プロファイルの流用ができなかった。
古い <abbr title="Japanese Language Pack">JLP</abbr> をアンインストールしなかったのがいけなかったような気がする。
新しいプロファイルを作ってバックアップを復元したら設定等は復元できたが拡張は復元できなかったので入れ直そうとしたのだが、
<a href="http://optimoz.mozdev.org/gestures/">Optimoz の Mouse Gestures</a> が 1.0 に対応していなくてインストールできなかったのは残念だ。</p>
<p>1.0 <abbr title="Preview Release">PR</abbr> を使っていたのであまり目新しく感じないのだがライブブックマークや検索ツールバーも 1.0 の新機能だ。
ライブブックマークは正直なところあまり使い勝手が良くない。
Web ページに <abbr title="RDF Site Summary">RSS</abbr> があることの確認程度には使えるのだが
<a href="http://sage.mozdev.org/">Sage</a> の方が使い勝手が良いのも事実だ。
検索ツールバーは従来の検索と Find As You Type を組み合わせたもので、キーボードをタイプするだけで文字列の検索ができる。
<abbr title="Input Method Editor">IME</abbr> をオンにしていると <code>Ctrl+F</code> しないと有効にはならないのだが、それでも入力のたびにリアルタイムで検索できるのは大きい。
じゃまな検索ダイアログもなくなったし。
Firefox は 1.0 へのバージョンアップで確実に便利になった。</p>]]>
   </content>
</entry>

<entry>
   <title>Thunderbird 0.9 リリース</title>
   <link rel="alternate" type="text/html" href="http://nesitive.net/nesitive/all/73171f1028e7f054a8ac10917e6188a8.html" />
   <id>tag:nesitive.net,2004:/nesitive//1.9</id>
   
   <published>2004-11-04T16:10:00Z</published>
   <updated>2007-03-16T21:37:17Z</updated>
   
   <summary>Thunderbird 0.9 がリリースされたので早速インストールして使ってみ...</summary>
   <author>
      <name></name>
      
   </author>
   
      <category term="Mozilla" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="en" xml:base="http://nesitive.net/nesitive/">
      <![CDATA[<p><a href="http://www.mozilla.org/products/thunderbird/">Thunderbird</a> 0.9 がリリースされたので早速インストールして使ってみた。
主な新機能は次の2つ。</p>
<ul>
<li>Saved Search フォルダ</li>
<li>メッセージのグループ化</li>
</ul>]]>
      <![CDATA[<p>Saved Search フォルダというのは検索条件をフォルダとして保存しておけるものだ。
メッセージを新たに受信してその検索条件に合うものが見つかった場合、自動的にそのフォルダに格納される。
コピーや移動ではなく、あくまで検索結果なので、元のフォルダにメッセージは残るし、未読マークを消せば元のフォルダのメッセージからも自動的に未読マークが消される。
抽出はしたいが別個にしたいわけではないメッセージを選びたい場合に有効だろう。
用途によってフィルタリングと使い分けることもできる。</p>
<p>メッセージのグループ化ではフォルダ内のメッセージを差出人、日付などでグループ化することができる。
差出人でグループ化した場合、同じ差出人のメールはまとめられて1行で表示される。
展開することでその差出人の全てのメールを見ることができる。
フォルダ内も必要以上にごちゃごちゃしなくなるのは良いことだ。</p>
<p>バージョン番号が0.9ともなりいよいよ1.0のリリースが近づいてきたという感じがしてきた。
Mozilla では0.9.1から0.9.9まで続いてさらに <abbr title="Release Candidate 3">RC3</abbr> まで出てずいぶんと待たされたものだが、 Firefox 、 Thunderbird はすんなりと1.0が出てくれそうだ。</p>]]>
   </content>
</entry>

<entry>
   <title>最小の Gecko Web ブラウザ</title>
   <link rel="alternate" type="text/html" href="http://nesitive.net/nesitive/all/b02b7441f5ef25a07110a55959e89575.html" />
   <id>tag:nesitive.net,2004:/nesitive//1.8</id>
   
   <published>2004-11-03T16:15:00Z</published>
   <updated>2007-03-16T21:37:17Z</updated>
   
   <summary>SDK の説明にもいい加減飽きたので SDK を使って実際に何かをしてみる事にし...</summary>
   <author>
      <name></name>
      
   </author>
   
      <category term="Develop" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="en" xml:base="http://nesitive.net/nesitive/">
      <![CDATA[<p>SDK の説明にもいい加減飽きたので SDK を使って実際に何かをしてみる事にしよう。
わかりやすいのはやはりブラウザだろう。
そういうわけで最小限のコードでブラウザのようなものを作ってみた。
<a href="http://nesitive.net/files/GeckoSDK.zip">Delphi 版 GeckoSDK</a> の中身をライブラリパスの通ったフォルダに入れておくこと。
最小のブラウザは以下のコードで実現する。</p>]]>
      <![CDATA[<pre><code>unit BrowserWin;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, nsXPCOM, nsTypes;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private 宣言 }
    FBrowser: nsIWebBrowser;
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses
  nsXPCOMGlue;

type
  nsIWidget = interface end;
  nsIBaseWindow = interface(nsISupports)
  ['{046BC8A0-8015-11d3-AF70-00A024FFC08C}']
    procedure InitWindow(parentNativeWindow: Pointer;
                         parentWidget: nsIWidget;
                         x: PRInt32;
                         y: PRInt32;
                         cx: PRInt32;
                         cy: PRInt32); safecall;
    procedure Create(); safecall;
    procedure Destroy(); safecall;
    procedure SetPosition(x: PRInt32;
                          y: PRInt32); safecall;
    procedure GetPosition(out x: PRInt32;
                          out y: PRInt32); safecall;
    procedure SetSize(cx: PRInt32;
                      cy: PRInt32); safecall;
    procedure GetSize(out cx: PRInt32;
                      out cy: PRInt32); safecall;
    procedure SetPositionAndSize(x: PRInt32;
                                 y: PRInt32;
                                 cx: PRInt32;
                                 cy: PRInt32); safecall;
    procedure GetPositionAndSize(out x: PRInt32;
                                 out y: PRInt32;
                                 out cx: PRInt32;
                                 out cy: PRInt32); safecall;
    procedure Repaint(force: PRBool); safecall;
    function GetParentWidget: nsIWidget; safecall;
    procedure SetParentWidget(aParentWidget: nsIWidget); safecall;
    function GetNativeWindow: Pointer; safecall;
    procedure SetNativeWindow(aNativeWindow: Pointer); safecall;
    function GetVisibility: PRBool; safecall;
    procedure SetVisibility(aVisibility: PRBool); safecall;
    function GetEnabled: PRBool; safecall;
    procedure SetEnabled(aEnabled: PRBool); safecall;
    function GetBlurSupression: PRBool; safecall;
    procedure SetBlurSupression(aBlurSupression: PRBool); safecall;
    function GetMainWidget: nsIWidget; safecall;
    procedure SetFocus(); safecall;
    function GetTitle: PWideChar; safecall;
    procedure SetTitle(aTitle: PWideChar); safecall;
  end;

  nsIWebNavigation = interface(nsISupports)
  ['{F5D9E7B0-D930-11d3-B057-00A024FFC08C}']
    function GetCanGoBack: PRBool; safecall;
    function GetCanForward: PRBool; safecall;
    procedure GoBack(); safecall;
    procedure GoForward(); safecall;
    procedure GotoIndex(index: PRInt32); safecall;
    procedure LoadURI(uri: PWideChar;
                      loadFlags: PRUint32;
                      referer: nsIURI;
                      postData: nsIInputStream;
                      headers: nsIInputStream); safecall;
    procedure Reload(reloadFlags: PRUint32); safecall;
    procedure Stop(stopFlags: PRUint32); safecall;
    function GetDocument: nsIDOMDocument; safecall;
    function GetCurrentURI: nsIURI; safecall;
    function GetReferringURI: nsIURI; safecall;
    function GetSessionHistory: nsISHistory; safecall;
  end;

procedure TForm1.FormCreate(Sender: TObject);
var
  basewin: nsIBaseWindow;
  navigation: nsIWebNavigation;
begin
  // GRE の初期化
  GRE_Startup;
  // nsWebBrowser の生成
  NS_CreateInstance(NS_WEBBROWSER_CONTRACTID, nsIWebBrowser, FBrowser);

  basewin := FBrowser as nsIBaseWindow;
  // ブラウザとネイティブウィンドウの関連づけ
  basewin.InitWindow(Pointer(Handle), nil, 0, 0, ClientWidth, ClientHeight);
  // ブラウザウィンドウの生成
  basewin.Create;
  basewin.SetVisibility(True);

  navigation := FBrowser as nsIWebNavigation;
  // ページの読み込み
  navigation.LoadURI('http://nesitive.net/', 0, nil, nil, nil);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  // nsWebBrowser の破棄
  FBrowser := nil;
  // GRE の終了
  GRE_Shutdown;
end;

end.</code></pre>
<p><code>implementation</code> 節の3つの <code>interface</code> は凍結されていないために GeckoSDK には含まれていないものだ。
このうち <code>nsIWidget</code> は IDL を使っていない C++ ベースのインターフェースなので、宣言自体を省略した。</p>
<p><code>OnCreate</code> イベントに書かれている部分がブラウザの初期化になる。
コメント以上のことは特に説明する必要もないだろう。
<code>OnDestroy</code> イベントが終了処理になる。
<code>GRE_Shudown</code> よりも前に<code>nsWebBrowser</code> オブジェクトの参照カウントが 0にならないといけないため、 <code>FBrowser</code> に明示的に <code>nil</code> を代入して解放するようにしている。</p>
<p>実行ファイルは Mozilla のフォルダや GRE のフォルダにコピーする必要はなく、任意のフォルダで実行することができる。
ただ、このままではいろいろと問題がある。
これからしばらくはこの問題を解決する方法を模索していくことにする。</p>]]>
   </content>
</entry>

</feed>
