gecko/devtools/client/memory/panel.js
Nick Fitzgerald 5899b7cf0d Bug 1219554 - Follow up: clean up memory panel open/destroy; r=jsantell
This commit removes the assignment expression in a return statement thing that
was going on. It is easy to misread and we don't usually use this idiom anywhere
else in the codebase. Additionally, it makes the destroy method clean up some
more members set when opening the tool.
2016-02-04 11:53:00 +01:00

76 lines
2.1 KiB
JavaScript

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
const { Cc, Ci, Cu, Cr } = require("chrome");
const { Task } = require("resource://gre/modules/Task.jsm");
const EventEmitter = require("devtools/shared/event-emitter");
const { MemoryFront } = require("devtools/server/actors/memory");
const HeapAnalysesClient = require("devtools/shared/heapsnapshot/HeapAnalysesClient");
const promise = require("promise");
function MemoryPanel (iframeWindow, toolbox) {
this.panelWin = iframeWindow;
this._toolbox = toolbox;
EventEmitter.decorate(this);
}
MemoryPanel.prototype = {
open: Task.async(function *() {
if (this._opening) {
return this._opening;
}
this.panelWin.gToolbox = this._toolbox;
this.panelWin.gTarget = this.target;
const rootForm = yield this.target.root;
this.panelWin.gFront = new MemoryFront(this.target.client,
this.target.form,
rootForm);
this.panelWin.gHeapAnalysesClient = new HeapAnalysesClient();
yield this.panelWin.gFront.attach();
this._opening = this.panelWin.initialize().then(() => {
this.isReady = true;
this.emit("ready");
return this;
});
return this._opening;
}),
// DevToolPanel API
get target() {
return this._toolbox.target;
},
destroy: Task.async(function *() {
// Make sure this panel is not already destroyed.
if (this._destroyer) {
return this._destroyer;
}
yield this.panelWin.gFront.detach();
this._destroyer = this.panelWin.destroy().then(() => {
// Destroy front to ensure packet handler is removed from client
this.panelWin.gFront.destroy();
this.panelWin.gHeapAnalysesClient.destroy();
this.panelWin = null;
this._opening = null;
this.isReady = false;
this.emit("destroyed");
});
return this._destroyer;
})
};
exports.MemoryPanel = MemoryPanel;