Bug 1292503 - Fix e10s issues in resending HTTP requests, enable browser_net_resend.js test r=ochameau
--- a/devtools/client/netmonitor/test/browser.ini
+++ b/devtools/client/netmonitor/test/browser.ini
@@ -107,17 +107,16 @@ skip-if = (os == 'linux' && e10s && debu
[browser_net_post-data-03.js]
[browser_net_prefs-and-l10n.js]
[browser_net_prefs-reload.js]
[browser_net_raw_headers.js]
[browser_net_reload-button.js]
[browser_net_reload-markers.js]
[browser_net_req-resp-bodies.js]
[browser_net_resend.js]
-skip-if = e10s # Bug 1091612
[browser_net_security-details.js]
[browser_net_security-error.js]
[browser_net_security-icon-click.js]
[browser_net_security-redirect.js]
[browser_net_security-state.js]
[browser_net_security-tab-deselect.js]
[browser_net_security-tab-visibility.js]
[browser_net_security-warnings.js]
--- a/devtools/server/actors/webconsole.js
+++ b/devtools/server/actors/webconsole.js
@@ -1506,57 +1506,54 @@ WebConsoleActor.prototype =
* Handler for network events. This method is invoked when a new network event
* is about to be recorded.
*
* @see NetworkEventActor
* @see NetworkMonitor from webconsole/utils.js
*
* @param object aEvent
* The initial network request event information.
- * @param nsIHttpChannel aChannel
- * The network request nsIHttpChannel object.
* @return object
* A new NetworkEventActor is returned. This is used for tracking the
* network request and response.
*/
- onNetworkEvent: function WCA_onNetworkEvent(aEvent, aChannel)
+ onNetworkEvent: function WCA_onNetworkEvent(aEvent)
{
- let actor = this.getNetworkEventActor(aChannel);
+ let actor = this.getNetworkEventActor(aEvent.channelId);
actor.init(aEvent);
let packet = {
from: this.actorID,
type: "networkEvent",
eventActor: actor.grip()
};
this.conn.send(packet);
return actor;
},
/**
- * Get the NetworkEventActor for a nsIChannel, if it exists,
+ * Get the NetworkEventActor for a nsIHttpChannel, if it exists,
* otherwise create a new one.
*
- * @param nsIHttpChannel aChannel
- * The channel for the network event.
+ * @param string channelId
+ * The id of the channel for the network event.
* @return object
* The NetworkEventActor for the given channel.
*/
- getNetworkEventActor: function WCA_getNetworkEventActor(aChannel) {
- let actor = this._netEvents.get(aChannel);
+ getNetworkEventActor: function WCA_getNetworkEventActor(channelId) {
+ let actor = this._netEvents.get(channelId);
if (actor) {
// delete from map as we should only need to do this check once
- this._netEvents.delete(aChannel);
- actor.channel = null;
+ this._netEvents.delete(channelId);
return actor;
}
- actor = new NetworkEventActor(aChannel, this);
+ actor = new NetworkEventActor(this);
this._actorPool.addActor(actor);
return actor;
},
/**
* Send a new HTTP request from the target's window.
*
* @param object aMessage
@@ -1570,20 +1567,21 @@ WebConsoleActor.prototype =
let request = new this.window.XMLHttpRequest();
request.open(details.method, details.url, true);
for (let {name, value} of details.headers) {
request.setRequestHeader(name, value);
}
request.send(details.body);
- let actor = this.getNetworkEventActor(request.channel);
+ let channel = request.channel.QueryInterface(Ci.nsIHttpChannel);
+ let actor = this.getNetworkEventActor(channel.channelId);
// map channel to actor so we can associate future events with it
- this._netEvents.set(request.channel, actor);
+ this._netEvents.set(channel.channelId, actor);
return {
from: this.actorID,
eventActor: actor.grip()
};
},
/**
@@ -1797,26 +1795,22 @@ WebConsoleActor.prototype.requestTypes =
};
exports.WebConsoleActor = WebConsoleActor;
/**
* Creates an actor for a network event.
*
* @constructor
- * @param object aChannel
- * The nsIChannel associated with this event.
- * @param object aWebConsoleActor
+ * @param object webConsoleActor
* The parent WebConsoleActor instance for this object.
*/
-function NetworkEventActor(aChannel, aWebConsoleActor)
-{
- this.parent = aWebConsoleActor;
+function NetworkEventActor(webConsoleActor) {
+ this.parent = webConsoleActor;
this.conn = this.parent.conn;
- this.channel = aChannel;
this._request = {
method: null,
url: null,
httpVersion: null,
headers: [],
cookies: [],
headersSize: null,
--- a/devtools/shared/webconsole/network-monitor.js
+++ b/devtools/shared/webconsole/network-monitor.js
@@ -709,25 +709,24 @@ NetworkResponseListener.prototype = {
* window object.
* - appId (number): filter requests by the appId.
* - topFrame (nsIDOMElement): filter requests by their topFrameElement.
* Filters are optional. If any of these filters match the request is
* logged (OR is applied). If no filter is provided then all requests are
* logged.
* @param object owner
* The network monitor owner. This object needs to hold:
- * - onNetworkEvent(requestInfo, channel, networkMonitor).
+ * - onNetworkEvent(requestInfo)
* This method is invoked once for every new network request and it is
- * given the following arguments: the initial network request
- * information, and the channel. The third argument is the NetworkMonitor
- * instance. onNetworkEvent() must return an object which holds several add*()
- * methods which are used to add further network request/response
- * information.
- * - stackTraceCollector If the owner has this optional property, it will
- * be used as a StackTraceCollector by the NetworkMonitor.
+ * given the initial network request information as an argument.
+ * onNetworkEvent() must return an object which holds several add*()
+ * methods which are used to add further network request/response information.
+ * - stackTraceCollector
+ * If the owner has this optional property, it will be used as a
+ * StackTraceCollector by the NetworkMonitor.
*/
function NetworkMonitor(filters, owner) {
this.filters = filters;
this.owner = owner;
this.openRequests = {};
this.openResponses = {};
this._httpResponseExaminer =
DevToolsUtils.makeInfallible(this._httpResponseExaminer).bind(this);
@@ -1076,17 +1075,17 @@ NetworkMonitor.prototype = {
headers.push({ name: name, value: value });
}
});
if (cookieHeader) {
cookies = NetworkHelper.parseCookieHeader(cookieHeader);
}
- httpActivity.owner = this.owner.onNetworkEvent(event, channel);
+ httpActivity.owner = this.owner.onNetworkEvent(event);
this._setupResponseListener(httpActivity);
httpActivity.owner.addRequestHeaders(headers, extraStringData);
httpActivity.owner.addRequestCookies(cookies);
this.openRequests[httpActivity.id] = httpActivity;
return httpActivity;