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,13 +1398,37 @@ EventListeners.prototype = {
*/
scheduleEventListenersFetch: function() {
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;
}
promise.all(aResponse.listeners.map(listener => {
const deferred = promise.defer();
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.
// This can easily happen whenever new sources are fetched.
@ -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) {
if (aResponse.error) {
let msg = "Error getting event listeners: " + aResponse.message;
Cu.reportError(msg);
dumpn(msg);
return;
}
_onEventListeners: function(aListeners) {
// 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 });
}