残念ながら、Cookieマネージャーcookie-changed
が情報がすでに失われているという通知を送信するまでに、Cookieマネージャーは、Cookieが追加されたホストのみを認識します(domain
パラメーターが使用された場合、Cookieを設定するページのホストではない可能性があります)。そもそもURLがなかった可能性もあります。たとえば、Cookieが拡張子によって設定されている場合などです。
あなたができることは、http-on-examine-response
通知のためにオブザーバーを登録することです。チャネルのSet-Cookie
ヘッダーとチャネルURLを確認できるため、cookie-changed
後で通知が送信されたときに、どのWebサイトが責任を負っているのかがわかります。このようなもの:
var observer = require("observer-service");
observer.add("http-on-examine-response", function(subject, data)
{
subject.QueryInterface(Ci.nsIHttpChannel);
var cookieNames = [];
// There can be more than one Set-Cookie header, cannot use getResponseHeader
subject.visitResponseHeaders(function(header, value)
{
if (header.toLowerCase() == "set-cookie")
{
var match = /^([^\s=]+)=/.exec(value);
if (match)
cookieNames.push(match[1]);
}
});
if (cookieNames.length)
{
var url = channel.URI.spec;
// Remember that this url set the cookies or just clear the header
if (!isAllowedToSetCookies(url, cookieNames))
channel.setResponseHeader("Set-Cookie", "", false);
}
});
注:このコードはテストされていません。
ドキュメント:オブザーバー通知、nsIHttpChannel