mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 912646 - Part 1: Refactor debug targets for more reuse. r=dcamp
* * * imported patch cleanup-target-listeners * * * imported patch target-cleanup
This commit is contained in:
parent
ab62b37e1d
commit
76b1063325
@ -332,6 +332,19 @@ TabTarget.prototype = {
|
|||||||
this.tab.ownerDocument.defaultView.addEventListener("unload", this);
|
this.tab.ownerDocument.defaultView.addEventListener("unload", this);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Teardown event listeners.
|
||||||
|
*/
|
||||||
|
_teardownListeners: function TabTarget__teardownListeners() {
|
||||||
|
if (this._webProgressListener) {
|
||||||
|
this._webProgressListener.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
this._tab.ownerDocument.defaultView.removeEventListener("unload", this);
|
||||||
|
this._tab.removeEventListener("TabClose", this);
|
||||||
|
this._tab.parentNode.removeEventListener("TabSelect", this);
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Setup listeners for remote debugging, updating existing ones as necessary.
|
* Setup listeners for remote debugging, updating existing ones as necessary.
|
||||||
*/
|
*/
|
||||||
@ -358,6 +371,14 @@ TabTarget.prototype = {
|
|||||||
this.client.addListener("tabNavigated", this._onTabNavigated);
|
this.client.addListener("tabNavigated", this._onTabNavigated);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Teardown listeners for remote debugging.
|
||||||
|
*/
|
||||||
|
_teardownRemoteListeners: function TabTarget__teardownRemoteListeners() {
|
||||||
|
this.client.removeListener("tabNavigated", this._onTabNavigated);
|
||||||
|
this.client.removeListener("tabDetached", this.destroy);
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle tabs events.
|
* Handle tabs events.
|
||||||
*/
|
*/
|
||||||
@ -412,49 +433,43 @@ TabTarget.prototype = {
|
|||||||
this.off("thread-paused", this._handleThreadState);
|
this.off("thread-paused", this._handleThreadState);
|
||||||
|
|
||||||
if (this._tab) {
|
if (this._tab) {
|
||||||
if (this._webProgressListener) {
|
this._teardownListeners();
|
||||||
this._webProgressListener.destroy();
|
|
||||||
}
|
|
||||||
|
|
||||||
this._tab.ownerDocument.defaultView.removeEventListener("unload", this);
|
|
||||||
this._tab.removeEventListener("TabClose", this);
|
|
||||||
this._tab.parentNode.removeEventListener("TabSelect", this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// If this target was not remoted, the promise will be resolved before the
|
// If this target was not remoted, the promise will be resolved before the
|
||||||
// function returns.
|
// function returns.
|
||||||
if (this._tab && !this._client) {
|
if (this._tab && !this._client) {
|
||||||
targets.delete(this._tab);
|
this._cleanup();
|
||||||
this._tab = null;
|
|
||||||
this._client = null;
|
|
||||||
this._form = null;
|
|
||||||
this._remote = null;
|
|
||||||
|
|
||||||
this._destroyer.resolve(null);
|
this._destroyer.resolve(null);
|
||||||
} else if (this._client) {
|
} else if (this._client) {
|
||||||
// If, on the other hand, this target was remoted, the promise will be
|
// If, on the other hand, this target was remoted, the promise will be
|
||||||
// resolved after the remote connection is closed.
|
// resolved after the remote connection is closed.
|
||||||
this.client.removeListener("tabNavigated", this._onTabNavigated);
|
this._teardownRemoteListeners();
|
||||||
this.client.removeListener("tabDetached", this.destroy);
|
|
||||||
|
|
||||||
this._client.close(function onClosed() {
|
|
||||||
if (this._tab) {
|
|
||||||
targets.delete(this._tab);
|
|
||||||
} else {
|
|
||||||
promiseTargets.delete(this._form);
|
|
||||||
}
|
|
||||||
this._client = null;
|
|
||||||
this._tab = null;
|
|
||||||
this._form = null;
|
|
||||||
this._remote = null;
|
|
||||||
|
|
||||||
|
this._client.close(() => {
|
||||||
|
this._cleanup();
|
||||||
this._destroyer.resolve(null);
|
this._destroyer.resolve(null);
|
||||||
}.bind(this));
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return this._destroyer.promise;
|
return this._destroyer.promise;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clean up references to what this target points to.
|
||||||
|
*/
|
||||||
|
_cleanup: function TabTarget__cleanup() {
|
||||||
|
if (this._tab) {
|
||||||
|
targets.delete(this._tab);
|
||||||
|
} else {
|
||||||
|
promiseTargets.delete(this._form);
|
||||||
|
}
|
||||||
|
this._client = null;
|
||||||
|
this._tab = null;
|
||||||
|
this._form = null;
|
||||||
|
this._remote = null;
|
||||||
|
},
|
||||||
|
|
||||||
toString: function() {
|
toString: function() {
|
||||||
return 'TabTarget:' + (this._tab ? this._tab : (this._form && this._form.actor));
|
return 'TabTarget:' + (this._tab ? this._tab : (this._form && this._form.actor));
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user