--- a/devtools/client/framework/target.js
+++ b/devtools/client/framework/target.js
@@ -137,18 +137,16 @@ function TabTarget(tab) {
if (typeof tab.isTabActor == "boolean") {
this._isTabActor = tab.isTabActor;
} else {
this._isTabActor = true;
}
}
TabTarget.prototype = {
- _webProgressListener: null,
-
/**
* Returns a promise for the protocol description from the root actor. Used
* internally with `target.actorHasMethod`. Takes advantage of caching if
* definition was fetched previously with the corresponding actor information.
* Actors are lazily loaded, so not only must the tool using a specific actor
* be in use, the actors are only registered after invoking a method (for
* performance reasons, added in bug 988237), so to use these actor detection
* methods, one must already be communicating with a specific actor of that
@@ -444,31 +442,25 @@ TabTarget.prototype = {
return this._remote.promise;
},
/**
* Listen to the different events.
*/
_setupListeners: function () {
- this._webProgressListener = new TabWebProgressListener(this);
- this.tab.linkedBrowser.addProgressListener(this._webProgressListener);
this.tab.addEventListener("TabClose", this);
this.tab.parentNode.addEventListener("TabSelect", this);
this.tab.ownerDocument.defaultView.addEventListener("unload", this);
},
/**
* Teardown event listeners.
*/
_teardownListeners: function () {
- 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.
*/
@@ -494,23 +486,19 @@ TabTarget.prototype = {
// Update the title and url unless this is a frame switch.
this._url = aPacket.url;
this._title = aPacket.title;
}
// Send any stored event payload (DOMWindow or nsIRequest) for backwards
// compatibility with non-remotable tools.
if (aPacket.state == "start") {
- event._navPayload = this._navRequest;
- this.emit("will-navigate", event);
- this._navRequest = null;
+ this.emit("will-navigate", aPacket);
} else {
- event._navPayload = this._navWindow;
- this.emit("navigate", event);
- this._navWindow = null;
+ this.emit("navigate", aPacket);
}
};
this.client.addListener("tabNavigated", this._onTabNavigated);
this._onFrameUpdate = (aType, aPacket) => {
this.emit("frame-update", aPacket);
};
this.client.addListener("frameUpdate", this._onFrameUpdate);
@@ -636,91 +624,16 @@ TabTarget.prototype = {
to: this._form.actor,
type: "resolveLocation",
}, loc), deferred.resolve);
return deferred.promise;
},
};
-/**
- * WebProgressListener for TabTarget.
- *
- * @param object aTarget
- * The TabTarget instance to work with.
- */
-function TabWebProgressListener(aTarget) {
- this.target = aTarget;
-}
-
-TabWebProgressListener.prototype = {
- target: null,
-
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIWebProgressListener,
- Ci.nsISupportsWeakReference]),
-
- onStateChange: function (progress, request, flag) {
- let isStart = flag & Ci.nsIWebProgressListener.STATE_START;
- let isDocument = flag & Ci.nsIWebProgressListener.STATE_IS_DOCUMENT;
- let isNetwork = flag & Ci.nsIWebProgressListener.STATE_IS_NETWORK;
- let isRequest = flag & Ci.nsIWebProgressListener.STATE_IS_REQUEST;
-
- // Skip non-interesting states.
- if (!isStart || !isDocument || !isRequest || !isNetwork) {
- return;
- }
-
- // emit event if the top frame is navigating
- if (progress.isTopLevel) {
- // Emit the event if the target is not remoted or store the payload for
- // later emission otherwise.
- if (this.target._client) {
- this.target._navRequest = request;
- } else {
- this.target.emit("will-navigate", request);
- }
- }
- },
-
- onProgressChange: function () {},
- onSecurityChange: function () {},
- onStatusChange: function () {},
-
- onLocationChange: function (webProgress, request, URI, flags) {
- if (this.target &&
- !(flags & Ci.nsIWebProgressListener.LOCATION_CHANGE_SAME_DOCUMENT)) {
- let window = webProgress.DOMWindow;
- // Emit the event if the target is not remoted or store the payload for
- // later emission otherwise.
- if (this.target._client) {
- this.target._navWindow = window;
- } else {
- this.target.emit("navigate", window);
- }
- }
- },
-
- /**
- * Destroy the progress listener instance.
- */
- destroy: function () {
- if (this.target.tab) {
- try {
- this.target.tab.linkedBrowser.removeProgressListener(this);
- } catch (ex) {
- // This can throw when a tab crashes in e10s.
- }
- }
- this.target._webProgressListener = null;
- this.target._navRequest = null;
- this.target._navWindow = null;
- this.target = null;
- }
-};
-
function WorkerTarget(workerClient) {
EventEmitter.decorate(this);
this._workerClient = workerClient;
}
/**
* A WorkerTarget represents a worker. Unlike TabTarget, which can represent
* either a local or remote tab, WorkerTarget always represents a remote worker.