Fix shutdown leaks of observer service via cycles through JS caused by closures and global variables. b=170022 r=morse sr=jag
This commit is contained in:
Родитель
62376591ca
Коммит
fa935f4f84
|
@ -34,8 +34,6 @@
|
|||
|
||||
/******* THE FOLLOWING IS FOR THE STATUSBAR OVERLAY *******/
|
||||
|
||||
var gObserverService;
|
||||
var gPref;
|
||||
var gButtonPressed;
|
||||
|
||||
var cookieIconObserver = {
|
||||
|
@ -68,10 +66,8 @@
|
|||
};
|
||||
|
||||
function viewP3PDialog() {
|
||||
if (!gObserverService) {
|
||||
gObserverService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
|
||||
}
|
||||
gObserverService.notifyObservers(null, "cookieIcon", "off");
|
||||
var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
|
||||
observerService.notifyObservers(null, "cookieIcon", "off");
|
||||
|
||||
window.openDialog
|
||||
("chrome://cookie/content/p3pDialog.xul","_blank","modal=yes,chrome,resizable=no", this);
|
||||
|
@ -82,28 +78,31 @@
|
|||
}
|
||||
}
|
||||
|
||||
// determine if p3p pref is set
|
||||
gPref = Components.classes['@mozilla.org/preferences-service;1'];
|
||||
gPref = gPref.getService();
|
||||
gPref = gPref.QueryInterface(Components.interfaces.nsIPrefBranch);
|
||||
if (gPref.getIntPref("network.cookie.cookieBehavior") == 3) {
|
||||
function CookieTasksStartup() {
|
||||
// determine if p3p pref is set
|
||||
var pref = Components.classes['@mozilla.org/preferences-service;1'].
|
||||
getService(Components.interfaces.nsIPrefBranch);
|
||||
if (pref.getIntPref("network.cookie.cookieBehavior") == 3) {
|
||||
|
||||
// make sure p3p dll exists, else we can't keep pref set
|
||||
if (!("@mozilla.org/cookie-consent;1" in Components.classes)) {
|
||||
gPref.setIntPref("network.cookie.cookieBehavior", 0);
|
||||
// make sure p3p dll exists, else we can't keep pref set
|
||||
if (!("@mozilla.org/cookie-consent;1" in Components.classes)) {
|
||||
pref.setIntPref("network.cookie.cookieBehavior", 0);
|
||||
}
|
||||
}
|
||||
|
||||
if ("@mozilla.org/cookie-consent;1" in Components.classes) {
|
||||
|
||||
// p3p dll exists so create an observer for changes in visibility of cookie icon
|
||||
var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
|
||||
observerService.addObserver(cookieIconObserver, "cookieIcon", false);
|
||||
|
||||
// determine whether or not cookie icon in this new window should be displayed
|
||||
// we need to wait until window is created before displaying icon
|
||||
addEventListener("load", listener, false);
|
||||
}
|
||||
}
|
||||
|
||||
if ("@mozilla.org/cookie-consent;1" in Components.classes) {
|
||||
|
||||
// p3p dll exists so create an observer for changes in visibility of cookie icon
|
||||
var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
|
||||
observerService.addObserver(cookieIconObserver, "cookieIcon", false);
|
||||
|
||||
// determine whether or not cookie icon in this new window should be displayed
|
||||
// we need to wait until window is created before displaying icon
|
||||
addEventListener("load", listener, false);
|
||||
}
|
||||
CookieTasksStartup();
|
||||
|
||||
]]>
|
||||
</script>
|
||||
|
|
|
@ -373,9 +373,12 @@ function RegisterTabOpenObserver()
|
|||
}
|
||||
};
|
||||
|
||||
const service = Components.classes["@mozilla.org/observer-service;1"]
|
||||
var service = Components.classes["@mozilla.org/observer-service;1"]
|
||||
.getService(Components.interfaces.nsIObserverService);
|
||||
service.addObserver(observer, "open-new-tab-request", false);
|
||||
// Null out service variable so the closure of the observer doesn't
|
||||
// own the service and create a cycle (bug 170022).
|
||||
service = null;
|
||||
}
|
||||
|
||||
function Startup()
|
||||
|
|
|
@ -34,8 +34,6 @@
|
|||
|
||||
/******* THE FOLLOWING IS FOR THE STATUSBAR OVERLAY *******/
|
||||
|
||||
var gObserverService;
|
||||
var gPref;
|
||||
var gButtonPressed;
|
||||
|
||||
var cookieIconObserver = {
|
||||
|
@ -68,10 +66,8 @@
|
|||
};
|
||||
|
||||
function viewP3PDialog() {
|
||||
if (!gObserverService) {
|
||||
gObserverService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
|
||||
}
|
||||
gObserverService.notifyObservers(null, "cookieIcon", "off");
|
||||
var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
|
||||
observerService.notifyObservers(null, "cookieIcon", "off");
|
||||
|
||||
window.openDialog
|
||||
("chrome://cookie/content/p3pDialog.xul","_blank","modal=yes,chrome,resizable=no", this);
|
||||
|
@ -82,28 +78,31 @@
|
|||
}
|
||||
}
|
||||
|
||||
// determine if p3p pref is set
|
||||
gPref = Components.classes['@mozilla.org/preferences-service;1'];
|
||||
gPref = gPref.getService();
|
||||
gPref = gPref.QueryInterface(Components.interfaces.nsIPrefBranch);
|
||||
if (gPref.getIntPref("network.cookie.cookieBehavior") == 3) {
|
||||
function CookieTasksStartup() {
|
||||
// determine if p3p pref is set
|
||||
var pref = Components.classes['@mozilla.org/preferences-service;1'].
|
||||
getService(Components.interfaces.nsIPrefBranch);
|
||||
if (pref.getIntPref("network.cookie.cookieBehavior") == 3) {
|
||||
|
||||
// make sure p3p dll exists, else we can't keep pref set
|
||||
if (!("@mozilla.org/cookie-consent;1" in Components.classes)) {
|
||||
gPref.setIntPref("network.cookie.cookieBehavior", 0);
|
||||
// make sure p3p dll exists, else we can't keep pref set
|
||||
if (!("@mozilla.org/cookie-consent;1" in Components.classes)) {
|
||||
pref.setIntPref("network.cookie.cookieBehavior", 0);
|
||||
}
|
||||
}
|
||||
|
||||
if ("@mozilla.org/cookie-consent;1" in Components.classes) {
|
||||
|
||||
// p3p dll exists so create an observer for changes in visibility of cookie icon
|
||||
var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
|
||||
observerService.addObserver(cookieIconObserver, "cookieIcon", false);
|
||||
|
||||
// determine whether or not cookie icon in this new window should be displayed
|
||||
// we need to wait until window is created before displaying icon
|
||||
addEventListener("load", listener, false);
|
||||
}
|
||||
}
|
||||
|
||||
if ("@mozilla.org/cookie-consent;1" in Components.classes) {
|
||||
|
||||
// p3p dll exists so create an observer for changes in visibility of cookie icon
|
||||
var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
|
||||
observerService.addObserver(cookieIconObserver, "cookieIcon", false);
|
||||
|
||||
// determine whether or not cookie icon in this new window should be displayed
|
||||
// we need to wait until window is created before displaying icon
|
||||
addEventListener("load", listener, false);
|
||||
}
|
||||
CookieTasksStartup();
|
||||
|
||||
]]>
|
||||
</script>
|
||||
|
|
Загрузка…
Ссылка в новой задаче