WADAさんに教えていただいたCustom ButtonsとDebugViewを準備し、通常使用していてエラー発生した際のNPSRログ(常時キャプチャ&ログ書き出し)を取りました。
前回の事例ではchaikaのgrayスキンが履歴を更新する際のエラーでしたが、今回は
https://twitter.com:443 スコープで先にエラーになった事例です。
コード:
00182970 14:59:19.080 [4424] 0[2711140]: Initialized statement 'SELECT rowid,biscuitLsnr(action,scope,key,value,secure,owner) FROM biscuit_delta' (0x20da7300)
00182971 14:59:19.080 [4424] 0[2711140]: sqlite3_trace on e0b1460 for 'SELECT rowid,biscuitLsnr(action,scope,key,value,secure,owner) FROM biscuit_delta'
00182972 14:59:19.080 [4424] 0[2711140]: Initialized statement 'DELETE FROM biscuit_delta WHERE rowid=:rowid' (0x216431f0)
00182973 14:59:19.080 [4424] 0[2711140]: sqlite3_trace on e0b1460 for 'DELETE FROM biscuit_delta WHERE rowid=1'
00182974 14:59:19.133 [4424] 2480[2043b8e0]: sqlite3_trace on 2050d640 for 'BEGIN DEFERRED'
00182975 14:59:19.133 [4424] 2480[2043b8e0]: sqlite3_trace on 2050d640 for 'INSERT OR REPLACE INTO webappsstore2 (scope, key, value) VALUES ('moc.rettiwt.:https:443', '__connect_badge__:keep_badge_until', '{"until":1427263155109}') '
00182976 14:59:19.133 [4424] 2480[2043b8e0]: Statement::ExecuteStep error: database is locked
00182977 14:59:19.133 [4424] 2480[2043b8e0]: sqlite3_trace on 2050d640 for 'ROLLBACK'
00182978 14:59:19.253 [4424] 0[2711140]: Finalizing statement 'DELETE FROM biscuit_delta WHERE rowid=:rowid' during garbage-collection
00182979 14:59:19.254 [4424] 0[2711140]: Finalizing statement 'SELECT rowid,biscuitLsnr(action,scope,key,value,secure,owner) FROM biscuit_delta' during garbage-collection
00182980 14:59:19.764 [4424] 0[2711140]: Initialized statement 'SELECT rowid,biscuitLsnr(action,scope,key,value,secure,owner) FROM biscuit_delta' (0x224799d0)
00182981 14:59:19.764 [4424] 0[2711140]: sqlite3_trace on e0b1460 for 'SELECT rowid,biscuitLsnr(action,scope,key,value,secure,owner) FROM biscuit_delta'
00182982 14:59:19.764 [4424] 0[2711140]: Finalizing statement 'SELECT rowid,biscuitLsnr(action,scope,key,value,secure,owner) FROM biscuit_delta' during garbage-collection
どうやら、[2711140]の Initialized statement ... Finalizing statement の間に[2043b8e0]が割り込んだ形になってるようです。
この状態のまま、Custom Buttonsのボタンからスクリプトを走らせてテストを行いました。以下がそのスクリプトです。
コード:
// LocalStorageに保存された各スコープの全項目の読み出し/書き込みテスト
var consrv = Components.classes["@mozilla.org/consoleservice;1"]
.getService(Components.interfaces.nsIConsoleService);
var prefix = "[TestLocalStorageAll]";
var enableFirebug = !(typeof Firebug == "undefined") && !(typeof Firebug.Console == "undefined");
function dbglog(message) {
var msg = prefix + message;
consrv.logStringMessage(msg);
enableFirebug && Firebug.Console.log(msg);
}
var ios = Components.classes["@mozilla.org/network/io-service;1"]
.getService(Components.interfaces.nsIIOService);
var ssm = Components.classes["@mozilla.org/scriptsecuritymanager;1"]
.getService(Components.interfaces.nsIScriptSecurityManager);
var dsm = Components.classes["@mozilla.org/dom/storagemanager;1"]
.getService(Components.interfaces.nsIDOMStorageManager);
var site = new Array(
"http://ja.wikipedia.org:80",
"http://127.0.0.1:8823",
/* ... */
"https://www.youtube.com:443"
);
for(s = 0; s < site.length; s++){
var scope = site[s];
dbglog(scope);
try { var uri = ios.newURI(scope, "", null); } catch(e) { dbglog(e); }
dbglog(uri);
try { var principal = ssm.getCodebasePrincipal(uri); } catch(e) { dbglog(e); }
dbglog(principal);
try { var ls = dsm.getLocalStorageForPrincipal(principal, ""); } catch(e) { dbglog(e); }
dbglog(ls);
for(n = 0; n < ls.length; n++){
var Key=ls.key(n);
dbglog(" "+Key);
try{ ls.setItem(Key, ls.getItem(Key)); }
catch(e){ dbglog("scope=" + scope + " key=" + Key + " e=" + e); }
}
}
dbglog("complete");
alert("complete");
一部省略してますが、配列siteには事前にFirebugのFireStorage Plus!パネルで調べた全サイトをセットしておきます。
ブラウザコンソールを開いておくと正常時は、
コード:
[TestLocalStorageAll]http://ja.wikipedia.org:80
[TestLocalStorageAll][xpconnect wrapped nsIURI]
[TestLocalStorageAll][xpconnect wrapped (nsISupports, nsIPrincipal, nsISerializable)]
[TestLocalStorageAll][object Storage]
[TestLocalStorageAll] MediaWikiModuleStore:jawiki
[TestLocalStorageAll] CentralAuthAnon
[TestLocalStorageAll]http://127.0.0.1:8823
[TestLocalStorageAll][xpconnect wrapped nsIURI]
[TestLocalStorageAll][xpconnect wrapped (nsISupports, nsIPrincipal, nsISerializable)]
[TestLocalStorageAll][object Storage]
[TestLocalStorageAll] pref-delay-popup
[TestLocalStorageAll] pref-enable-non-strict-image-detection
[TestLocalStorageAll] smorgasbord_valueHistoryManager
[TestLocalStorageAll] skin.gray2x
[TestLocalStorageAll] smorgasbord_nameSkinStyle
[TestLocalStorageAll] pref-max-posts-in-popup
...
[TestLocalStorageAll]https://www.youtube.com:443
[TestLocalStorageAll][xpconnect wrapped nsIURI]
[TestLocalStorageAll][xpconnect wrapped (nsISupports, nsIPrincipal, nsISerializable)]
[TestLocalStorageAll][object Storage]
[TestLocalStorageAll] yt-player-volume
[TestLocalStorageAll] yt-remote-device-id
[TestLocalStorageAll] yt-player-two-stage-token
[TestLocalStorageAll] yt-remote-online-screens
[TestLocalStorageAll] yt.autonav::autonav_disabled
[TestLocalStorageAll] yt-remote-connected-devices
[TestLocalStorageAll]complete
となるところ、
コード:
[TestLocalStorageAll]http://ja.wikipedia.org:80
[TestLocalStorageAll][xpconnect wrapped nsIURI]
[TestLocalStorageAll][xpconnect wrapped (nsISupports, nsIPrincipal, nsISerializable)]
NS_ERROR_STORAGE_BUSY: button.js:62:0
で終了しました。getLocalStorageForPrincipal() の時点でNS_ERROR_STORAGE_BUSYが発生しているようです。
一方、NSPRログは正常時は、
コード:
00000555 20:28:32.777 [5548] 35776[1ed67190]: sqlite3_trace on 203c9100 for 'SELECT key, value FROM webappsstore2 WHERE scope = 'gro.aidepikiw.aj.:http:80' ORDER BY key LIMIT -1 OFFSET 0'
00000556 20:28:32.777 [5548] 0[2b11140]: Initialized statement 'SELECT key, value FROM webappsstore2 WHERE scope = :scope ORDER BY key LIMIT -1 OFFSET :offset' (0xe6bbef0)
00000557 20:28:32.778 [5548] 0[2b11140]: sqlite3_trace on 1cc51100 for 'SELECT key, value FROM webappsstore2 WHERE scope = 'gro.aidepikiw.aj.:http:80' ORDER BY key LIMIT -1 OFFSET 1'
00000558 20:28:32.778 [5548] 35776[1ed67190]: sqlite3_trace on 203c9100 for 'SELECT SUM(LENGTH(key) + LENGTH(value)) FROM webappsstore2 WHERE scope LIKE 'gro.aidepikiw.%''
といった具合に出力されますが、例外が出てスクリプト終了しているのでログには残っていません。
ちなみにこのエラーはGoogleスプレッドシートをいくつか開いておいたタブグループをカレントに切り替えた途端に発生しました。
【余談】
ブラウザーコンソールを開いていると拡張機能やWEBアプリが頻繁に未定義変数参照のTypeErrorを吐き続けるし、何より新規プロファイルであっても起動時に必ず
コード:
Could not read chrome manifest 'file:///C:/Program%20Files%20(x86)/Mozilla%20Firefox/chrome.manifest'.
Could not read chrome manifest 'file:///C:/Program%20Files%20(x86)/Mozilla%20Firefox/browser/extensions/%7B972ce4c6-7e08-4474-a285-3208198ce6fd%7D/chrome.manifest'.
を出してくるのが気になります。
ちょっとググってみたら、
Bug 586610 というのが見つかったけど初出が2010-08-12。
悪さはしないけど正常時のログはスッキリしてて欲しいなと思ったり。