Bug 917583 - part 2: request definitionSite before adding listeners to the view; r=vporof

This commit is contained in:
Nick Fitzgerald 2013-11-05 17:28:00 -08:00
parent 9379e40d2e
commit b02656d66f

View File

@ -1398,12 +1398,36 @@ EventListeners.prototype = {
*/ */
scheduleEventListenersFetch: function() { scheduleEventListenersFetch: function() {
let getListeners = aCallback => gThreadClient.eventListeners(aResponse => { let getListeners = aCallback => gThreadClient.eventListeners(aResponse => {
this._onEventListeners(aResponse); if (aResponse.error) {
let msg = "Error getting event listeners: " + aResponse.message;
DevToolsUtils.reportException("scheduleEventListenersFetch", msg);
return;
}
// Notify that event listeners were fetched and shown in the view, promise.all(aResponse.listeners.map(listener => {
// and callback to resume the active thread if necessary. const deferred = promise.defer();
window.emit(EVENTS.EVENT_LISTENERS_FETCHED);
aCallback && aCallback(); gThreadClient.pauseGrip(listener.function).getDefinitionSite(aResponse => {
if (aResponse.error) {
const msg = "Error getting function definition site: " + aResponse.message;
DevToolsUtils.reportException("scheduleEventListenersFetch", msg);
deferred.reject(msg);
return;
}
listener.function.url = aResponse.url;
deferred.resolve(listener);
});
return deferred.promise;
})).then(listeners => {
this._onEventListeners(listeners);
// Notify that event listeners were fetched and shown in the view,
// and callback to resume the active thread if necessary.
window.emit(EVENTS.EVENT_LISTENERS_FETCHED);
aCallback && aCallback();
});
}); });
// Make sure we're not sending a batch of closely repeated requests. // Make sure we're not sending a batch of closely repeated requests.
@ -1418,18 +1442,11 @@ EventListeners.prototype = {
}, },
/** /**
* Callback for the debugger's active thread eventListeners() method. * Callback for a debugger's successful active thread eventListeners() call.
*/ */
_onEventListeners: function(aResponse) { _onEventListeners: function(aListeners) {
if (aResponse.error) {
let msg = "Error getting event listeners: " + aResponse.message;
Cu.reportError(msg);
dumpn(msg);
return;
}
// Add all the listeners in the debugger view event linsteners container. // Add all the listeners in the debugger view event linsteners container.
for (let listener of aResponse.listeners) { for (let listener of aListeners) {
DebuggerView.EventListeners.addListener(listener, { staged: true }); DebuggerView.EventListeners.addListener(listener, { staged: true });
} }