Firefox 3.0.11 で DOMストレージの動きがおかしい

前振り

Wassrで色々と Greasemonkey(以下グリモン) 書いてる訳なのですが、設定を保存したいグリモンが有って、設定データをCookieに保存していたのですが、利用者次第でデータの量がふくれてCookieのサイズ(4K)を超えてしまい、400 BadRequest になると言う根本の問題を抱えていた欠陥グリモンでした。
で、Cookieの変わりに DOMストレージはどうよ?って教えてもらって試して見たのが事の始まり。

DOMストレージの状況

DOMストレージはCookieを使わずにローカル側にデータをハッシュ形式で保存できる仕組みで localStorageオブジェクトを利用します。(※セッション期間だけ有効な、sessionStorageもあります)
Firefox 3.0.11 ではまだ未実装で、代わりに同様の globalStorage オブジェクトを使う事で同じ機能を実現する(はずでした)。
参照 -> DOM Storage - DOM | MDN


IE8 と Safari4 に関しては HTML5仕様の localStorageオブジェクトが実装済みで動きます。

問題

グリモンを作っていて気付いたのですが、Firefox の DOMストレージが複数タブ間で上手く同期されていないようなのです。
で、単純な検証ページを作成して確認する事にしました。

検証ページ(コード)

検証ページは A と B があります。検証ページへのリンク -> 検証ページA 検証ページB
各々のページには「追加処理」「全削除」「全表示」ボタンと、DOMストレージの内容を表示する textarea が存在します。
両ページの動きは同じで、「追加処理」を行ったときの追加するデータが違います。


ページAは
Key[ADD] に対して、"AAA," を追加します。
Key[KeyAAA] に対して、"ValueAAA" をセットします。


ページBは
Key[ADD] に対して、"BBB," を追加します。
Key[KeyBBB] に対して、"ValueBBB" をセットします。


「全削除」は DOMストレージの中身をハッシュのキーを走査して全部消します。
「全表示」は現在のDOMストレージの中身を表示します。


localStorageが使えるブラウザ(IE8とSafari4)はlocalStorageを、localStorageの無いFirefoxでは globalStorageを使うようになってます。

	var ls = window.localStorage || window.globalStorage[location.hostname];

再現方法と現象と・・・

以下の表は上から時系列に進めていく過程での、実行コマンドとストレージの内容を示しています。
検証は、Firefox 3.0.11 にて


列説明

A処理
検証ページAでの実施した処理
B処理
検証ページBでの実施した処理
A状態
検証ページAで左記処理後にDOMストレージの内容「全表示」押下して表示した結果。
B状態
検証ページBで左記処理後にDOMストレージの内容「全表示」押下して表示した結果。
想定結果
想定(希望される)される結果(Safari4とIE8での結果と同様)


状態は [キー]=値 の形式で書きます。

ケース1

A処理 B処理 A状態 B状態 想定結果
1 OPEN - 無し 無し 無し
2 - OPEN 無し 無し 無し
3 「追加処理」押下 - [ADD]=AAA,
[KeyAAA]=ValueAAA
無し(※アレ?) [ADD]=AAA,
[KeyAAA]=ValueAAA
4 - 「追加処理」押下 [ADD]=AAA,BBB,
[KeyAAA]=ValueAAA
(※アレ?)
[ADD]=AAA,BBB,
[KeyAAA]=ValueAAA
[KeyBBB]=ValueBBB
[ADD]=AAA,BBB,
[KeyAAA]=ValueAAA
[KeyBBB]=ValueBBB
5 「追加処理」押下 - [ADD]=AAA,BBB,AAA
[KeyAAA]=ValueAAA
[KeyBBB]=ValueBBB
[ADD]=AAA,BBB,AAA
[KeyAAA]=ValueAAA
[KeyBBB]=ValueBBB
[ADD]=AAA,BBB,AAA
[KeyAAA]=ValueAAA
[KeyBBB]=ValueBBB
6 - 「全削除」押下 [ADD]=
[KeyAAA]=
[KeyBBB]=
(※アレ?)
無し 無し
7 「全削除」押下
->スクリプトハング
- [ADD]=
[KeyAAA]=
[KeyBBB]=
(※アレ?)
無し 無し
8 CLOSE - 無し 無し 無し

この後、表示するとキーも消えてるw


ケース2

A処理 B処理 A状態 B状態 想定結果
1 OPEN - 無し 無し 無し
2 - OPEN 無し 無し 無し
3 「追加処理」押下 - [ADD]=AAA,
[KeyAAA]=ValueAAA
無し(※アレ?) [ADD]=AAA,
[KeyAAA]=ValueAAA
4 CLOSE - × 無し(※アレ?) [ADD]=AAA,
[KeyAAA]=ValueAAA
5 - CLOSE × × [ADD]=AAA,
[KeyAAA]=ValueAAA
6 OPEN - [ADD]=AAA,
[KeyAAA]=ValueAAA
× [ADD]=AAA,
[KeyAAA]=ValueAAA
7 - OPEN [ADD]=AAA,
[KeyAAA]=ValueAAA
[ADD]=AAA,
[KeyAAA]=ValueAAA
[ADD]=AAA,
[KeyAAA]=ValueAAA


なんですかねコレ?汗


他にも色々と変な状態にはなったのですが、上記で十分かと・・・コレって一体・・・Firefoxより自分を疑いたいのですが・・・IE8とSafari4は想定通りに動いてくれたので・・・