Fix leaks by avoiding closure and unregistering listener. b=231266 r=bryner sr=brendan

This commit is contained in:
dbaron%dbaron.org 2004-01-17 22:41:38 +00:00
Родитель 176a213396
Коммит e363f842be
2 изменённых файлов: 31 добавлений и 35 удалений

Просмотреть файл

@ -196,23 +196,17 @@ function UpdatePageReport(event)
} }
#ifdef MOZ_ENABLE_XREMOTE #ifdef MOZ_ENABLE_XREMOTE
function RegisterTabOpenObserver() const gTabOpenObserver = {
{ observe: function(subject, topic, data)
const observer = { {
observe: function(subject, topic, data) if (topic != "open-new-tab-request" || subject != window)
{ return;
if (topic != "open-new-tab-request" || subject != window)
return;
delayedOpenTab(data); delayedOpenTab(data);
} }
}; };
const service = Components.classes["@mozilla.org/observer-service;1"]
.getService(Components.interfaces.nsIObserverService);
service.addObserver(observer, "open-new-tab-request", false);
}
#endif #endif
function Startup() function Startup()
{ {
gBrowser = document.getElementById("content"); gBrowser = document.getElementById("content");
@ -246,7 +240,9 @@ function Startup()
.getService(Components.interfaces.nsIXRemoteService); .getService(Components.interfaces.nsIXRemoteService);
remoteService.addBrowserInstance(window); remoteService.addBrowserInstance(window);
RegisterTabOpenObserver(); var observerService = Components.classes["@mozilla.org/observer-service;1"]
.getService(Components.interfaces.nsIObserverService);
observerService.addObserver(gTabOpenObserver, "open-new-tab-request", false);
#endif #endif
#endif #endif
@ -483,6 +479,10 @@ function Shutdown()
remoteService = Components.classes["@mozilla.org/browser/xremoteservice;1"] remoteService = Components.classes["@mozilla.org/browser/xremoteservice;1"]
.getService(Components.interfaces.nsIXRemoteService); .getService(Components.interfaces.nsIXRemoteService);
remoteService.removeBrowserInstance(window); remoteService.removeBrowserInstance(window);
var observerService = Components.classes["@mozilla.org/observer-service;1"]
.getService(Components.interfaces.nsIObserverService);
observerService.removeObserver(gTabOpenObserver, "open-new-tab-request");
#endif #endif
try { try {
gBrowser.removeProgressListener(window.XULBrowserWindow); gBrowser.removeProgressListener(window.XULBrowserWindow);

Просмотреть файл

@ -411,25 +411,15 @@ function allLeftButtonsAreHidden()
return true; return true;
} }
function RegisterTabOpenObserver() const gTabOpenObserver = {
{ observe: function(subject, topic, data)
const observer = { {
observe: function(subject, topic, data) if (topic != "open-new-tab-request" || subject != window)
{ return;
if (topic != "open-new-tab-request" || subject != window)
return;
delayedOpenTab(data); delayedOpenTab(data);
} }
}; };
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() function Startup()
{ {
@ -634,7 +624,9 @@ function Startup()
.getService(Components.interfaces.nsIXRemoteService); .getService(Components.interfaces.nsIXRemoteService);
remoteService.addBrowserInstance(window); remoteService.addBrowserInstance(window);
RegisterTabOpenObserver(); var observerService = Components.classes["@mozilla.org/observer-service;1"]
.getService(Components.interfaces.nsIObserverService);
observerService.addObserver(gTabOpenObserver, "open-new-tab-request", false);
} }
} }
@ -713,6 +705,10 @@ function Shutdown()
remoteService = Components.classes[XREMOTESERVICE_CONTRACTID] remoteService = Components.classes[XREMOTESERVICE_CONTRACTID]
.getService(Components.interfaces.nsIXRemoteService); .getService(Components.interfaces.nsIXRemoteService);
remoteService.removeBrowserInstance(window); remoteService.removeBrowserInstance(window);
var observerService = Components.classes["@mozilla.org/observer-service;1"]
.getService(Components.interfaces.nsIObserverService);
observerService.removeObserver(gTabOpenObserver, "open-new-tab-request", false);
} }
try { try {