nsITaggingService のバグ?
本日の謎バグについての追加検証。
Firefox 側の問題っぽいな。
バグなのか仕様なのかはわからない。
(別スレッドで、うごかしちゃいけないのかも)
とりあえず、実証コード。
(function () { let useThread = 1; let preExec = 1; let taggingService = Cc["@mozilla.org/browser/tagging-service;1"] .getService(Components.interfaces.nsITaggingService); let fff = function () { try { taggingService.getTagsForURI(makeURI('http://snca.net'), {}); dump("getTagsForURI - OK\n"); } catch (e) { dump(e + "\n"); } }; if (useThread) { if (preExec) fff(); var workingThread = function() {}; workingThread.prototype = { run: fff, QueryInterface: function(iid) { if (iid.equals(Components.interfaces.nsIRunnable) || iid.equals(Components.interfaces.nsISupports)) { return this; } throw Components.results.NS_ERROR_NO_INTERFACE; } }; var background = Components.classes["@mozilla.org/thread-manager;1"].getService().newThread(0); background.dispatch(new workingThread(), background.DISPATCH_NORMAL); } else { fff(); } })();
useThread | preExec | 結果 |
---|---|---|
false | false | fff() は成功 |
true | false | なぜか失敗。例外発生。 |
true | true | なぜか成功。 |