Index: third_party/WebKit/Source/devtools/front_end/profiler/ProfilesPanel.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/profiler/ProfilesPanel.js b/third_party/WebKit/Source/devtools/front_end/profiler/ProfilesPanel.js |
index e02334c2617df3b733383e961cb9448da10bea8a..f200a1b1a50ec80648d22aefe5d89f065c701890 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/profiler/ProfilesPanel.js |
+++ b/third_party/WebKit/Source/devtools/front_end/profiler/ProfilesPanel.js |
@@ -22,17 +22,17 @@ |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
- |
/** |
- * @constructor |
- * @extends {WebInspector.Object} |
- * @param {string} id |
- * @param {string} name |
- * @suppressGlobalPropertiesCheck |
+ * @unrestricted |
*/ |
-WebInspector.ProfileType = function(id, name) |
-{ |
- WebInspector.Object.call(this); |
+WebInspector.ProfileType = class extends WebInspector.Object { |
+ /** |
+ * @param {string} id |
+ * @param {string} name |
+ * @suppressGlobalPropertiesCheck |
+ */ |
+ constructor(id, name) { |
+ super(); |
this._id = id; |
this._name = name; |
/** @type {!Array.<!WebInspector.ProfileHeader>} */ |
@@ -42,403 +42,361 @@ WebInspector.ProfileType = function(id, name) |
this._nextProfileUid = 1; |
if (!window.opener) |
- window.addEventListener("unload", this._clearTempStorage.bind(this), false); |
-}; |
- |
-/** @enum {symbol} */ |
-WebInspector.ProfileType.Events = { |
- AddProfileHeader: Symbol("add-profile-header"), |
- ProfileComplete: Symbol("profile-complete"), |
- RemoveProfileHeader: Symbol("remove-profile-header"), |
- ViewUpdated: Symbol("view-updated") |
-}; |
- |
-WebInspector.ProfileType.prototype = { |
- /** |
- * @return {string} |
- */ |
- typeName: function() |
- { |
- return ""; |
- }, |
- |
- /** |
- * @return {number} |
- */ |
- nextProfileUid: function() |
- { |
- return this._nextProfileUid; |
- }, |
- |
- /** |
- * @return {boolean} |
- */ |
- hasTemporaryView: function() |
- { |
- return false; |
- }, |
- |
- /** |
- * @return {?string} |
- */ |
- fileExtension: function() |
- { |
- return null; |
- }, |
- |
- /** |
- * @return {!Array.<!WebInspector.ToolbarItem>} |
- */ |
- toolbarItems: function() |
- { |
- return []; |
- }, |
- |
- get buttonTooltip() |
- { |
- return ""; |
- }, |
- |
- get id() |
- { |
- return this._id; |
- }, |
- |
- get treeItemTitle() |
- { |
- return this._name; |
- }, |
- |
- get name() |
- { |
- return this._name; |
- }, |
- |
- /** |
- * @return {boolean} |
- */ |
- buttonClicked: function() |
- { |
- return false; |
- }, |
- |
- get description() |
- { |
- return ""; |
- }, |
- |
- /** |
- * @return {boolean} |
- */ |
- isInstantProfile: function() |
- { |
- return false; |
- }, |
- |
- /** |
- * @return {boolean} |
- */ |
- isEnabled: function() |
- { |
- return true; |
- }, |
- |
- /** |
- * @return {!Array.<!WebInspector.ProfileHeader>} |
- */ |
- getProfiles: function() |
- { |
- /** |
- * @param {!WebInspector.ProfileHeader} profile |
- * @return {boolean} |
- * @this {WebInspector.ProfileType} |
- */ |
- function isFinished(profile) |
- { |
- return this._profileBeingRecorded !== profile; |
- } |
- return this._profiles.filter(isFinished.bind(this)); |
- }, |
- |
- /** |
- * @return {?Element} |
- */ |
- decorationElement: function() |
- { |
- return null; |
- }, |
- |
- /** |
- * @param {number} uid |
- * @return {?WebInspector.ProfileHeader} |
- */ |
- getProfile: function(uid) |
- { |
- for (var i = 0; i < this._profiles.length; ++i) { |
- if (this._profiles[i].uid === uid) |
- return this._profiles[i]; |
- } |
- return null; |
- }, |
- |
- /** |
- * @param {!File} file |
- */ |
- loadFromFile: function(file) |
- { |
- var name = file.name; |
- var fileExtension = this.fileExtension(); |
- if (fileExtension && name.endsWith(fileExtension)) |
- name = name.substr(0, name.length - fileExtension.length); |
- var profile = this.createProfileLoadedFromFile(name); |
- profile.setFromFile(); |
- this.setProfileBeingRecorded(profile); |
- this.addProfile(profile); |
- profile.loadFromFile(file); |
- }, |
- |
- /** |
- * @param {string} title |
- * @return {!WebInspector.ProfileHeader} |
- */ |
- createProfileLoadedFromFile: function(title) |
- { |
- throw new Error("Needs implemented."); |
- }, |
- |
+ window.addEventListener('unload', this._clearTempStorage.bind(this), false); |
+ } |
+ |
+ /** |
+ * @return {string} |
+ */ |
+ typeName() { |
+ return ''; |
+ } |
+ |
+ /** |
+ * @return {number} |
+ */ |
+ nextProfileUid() { |
+ return this._nextProfileUid; |
+ } |
+ |
+ /** |
+ * @return {boolean} |
+ */ |
+ hasTemporaryView() { |
+ return false; |
+ } |
+ |
+ /** |
+ * @return {?string} |
+ */ |
+ fileExtension() { |
+ return null; |
+ } |
+ |
+ /** |
+ * @return {!Array.<!WebInspector.ToolbarItem>} |
+ */ |
+ toolbarItems() { |
+ return []; |
+ } |
+ |
+ get buttonTooltip() { |
+ return ''; |
+ } |
+ |
+ get id() { |
+ return this._id; |
+ } |
+ |
+ get treeItemTitle() { |
+ return this._name; |
+ } |
+ |
+ get name() { |
+ return this._name; |
+ } |
+ |
+ /** |
+ * @return {boolean} |
+ */ |
+ buttonClicked() { |
+ return false; |
+ } |
+ |
+ get description() { |
+ return ''; |
+ } |
+ |
+ /** |
+ * @return {boolean} |
+ */ |
+ isInstantProfile() { |
+ return false; |
+ } |
+ |
+ /** |
+ * @return {boolean} |
+ */ |
+ isEnabled() { |
+ return true; |
+ } |
+ |
+ /** |
+ * @return {!Array.<!WebInspector.ProfileHeader>} |
+ */ |
+ getProfiles() { |
/** |
* @param {!WebInspector.ProfileHeader} profile |
+ * @return {boolean} |
+ * @this {WebInspector.ProfileType} |
*/ |
- addProfile: function(profile) |
- { |
- this._profiles.push(profile); |
- this.dispatchEventToListeners(WebInspector.ProfileType.Events.AddProfileHeader, profile); |
- }, |
- |
- /** |
- * @param {!WebInspector.ProfileHeader} profile |
- */ |
- removeProfile: function(profile) |
- { |
- var index = this._profiles.indexOf(profile); |
- if (index === -1) |
- return; |
- this._profiles.splice(index, 1); |
- this._disposeProfile(profile); |
- }, |
- |
- _clearTempStorage: function() |
- { |
- for (var i = 0; i < this._profiles.length; ++i) |
- this._profiles[i].removeTempFile(); |
- }, |
- |
- /** |
- * @return {?WebInspector.ProfileHeader} |
- */ |
- profileBeingRecorded: function() |
- { |
- return this._profileBeingRecorded; |
- }, |
- |
- /** |
- * @param {?WebInspector.ProfileHeader} profile |
- */ |
- setProfileBeingRecorded: function(profile) |
- { |
- this._profileBeingRecorded = profile; |
- }, |
- |
- profileBeingRecordedRemoved: function() |
- { |
- }, |
- |
- _reset: function() |
- { |
- var profiles = this._profiles.slice(0); |
- for (var i = 0; i < profiles.length; ++i) |
- this._disposeProfile(profiles[i]); |
- this._profiles = []; |
+ function isFinished(profile) { |
+ return this._profileBeingRecorded !== profile; |
+ } |
+ return this._profiles.filter(isFinished.bind(this)); |
+ } |
+ |
+ /** |
+ * @return {?Element} |
+ */ |
+ decorationElement() { |
+ return null; |
+ } |
+ |
+ /** |
+ * @param {number} uid |
+ * @return {?WebInspector.ProfileHeader} |
+ */ |
+ getProfile(uid) { |
+ for (var i = 0; i < this._profiles.length; ++i) { |
+ if (this._profiles[i].uid === uid) |
+ return this._profiles[i]; |
+ } |
+ return null; |
+ } |
+ |
+ /** |
+ * @param {!File} file |
+ */ |
+ loadFromFile(file) { |
+ var name = file.name; |
+ var fileExtension = this.fileExtension(); |
+ if (fileExtension && name.endsWith(fileExtension)) |
+ name = name.substr(0, name.length - fileExtension.length); |
+ var profile = this.createProfileLoadedFromFile(name); |
+ profile.setFromFile(); |
+ this.setProfileBeingRecorded(profile); |
+ this.addProfile(profile); |
+ profile.loadFromFile(file); |
+ } |
+ |
+ /** |
+ * @param {string} title |
+ * @return {!WebInspector.ProfileHeader} |
+ */ |
+ createProfileLoadedFromFile(title) { |
+ throw new Error('Needs implemented.'); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.ProfileHeader} profile |
+ */ |
+ addProfile(profile) { |
+ this._profiles.push(profile); |
+ this.dispatchEventToListeners(WebInspector.ProfileType.Events.AddProfileHeader, profile); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.ProfileHeader} profile |
+ */ |
+ removeProfile(profile) { |
+ var index = this._profiles.indexOf(profile); |
+ if (index === -1) |
+ return; |
+ this._profiles.splice(index, 1); |
+ this._disposeProfile(profile); |
+ } |
+ |
+ _clearTempStorage() { |
+ for (var i = 0; i < this._profiles.length; ++i) |
+ this._profiles[i].removeTempFile(); |
+ } |
+ |
+ /** |
+ * @return {?WebInspector.ProfileHeader} |
+ */ |
+ profileBeingRecorded() { |
+ return this._profileBeingRecorded; |
+ } |
+ |
+ /** |
+ * @param {?WebInspector.ProfileHeader} profile |
+ */ |
+ setProfileBeingRecorded(profile) { |
+ this._profileBeingRecorded = profile; |
+ } |
+ |
+ profileBeingRecordedRemoved() { |
+ } |
+ |
+ _reset() { |
+ var profiles = this._profiles.slice(0); |
+ for (var i = 0; i < profiles.length; ++i) |
+ this._disposeProfile(profiles[i]); |
+ this._profiles = []; |
- this._nextProfileUid = 1; |
- }, |
+ this._nextProfileUid = 1; |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.ProfileHeader} profile |
+ */ |
+ _disposeProfile(profile) { |
+ this.dispatchEventToListeners(WebInspector.ProfileType.Events.RemoveProfileHeader, profile); |
+ profile.dispose(); |
+ if (this._profileBeingRecorded === profile) { |
+ this.profileBeingRecordedRemoved(); |
+ this.setProfileBeingRecorded(null); |
+ } |
+ } |
+}; |
- /** |
- * @param {!WebInspector.ProfileHeader} profile |
- */ |
- _disposeProfile: function(profile) |
- { |
- this.dispatchEventToListeners(WebInspector.ProfileType.Events.RemoveProfileHeader, profile); |
- profile.dispose(); |
- if (this._profileBeingRecorded === profile) { |
- this.profileBeingRecordedRemoved(); |
- this.setProfileBeingRecorded(null); |
- } |
- }, |
- |
- __proto__: WebInspector.Object.prototype |
+/** @enum {symbol} */ |
+WebInspector.ProfileType.Events = { |
+ AddProfileHeader: Symbol('add-profile-header'), |
+ ProfileComplete: Symbol('profile-complete'), |
+ RemoveProfileHeader: Symbol('remove-profile-header'), |
+ ViewUpdated: Symbol('view-updated') |
}; |
/** |
* @interface |
*/ |
-WebInspector.ProfileType.DataDisplayDelegate = function() |
-{ |
-}; |
+WebInspector.ProfileType.DataDisplayDelegate = function() {}; |
WebInspector.ProfileType.DataDisplayDelegate.prototype = { |
- /** |
- * @param {?WebInspector.ProfileHeader} profile |
- * @return {?WebInspector.Widget} |
- */ |
- showProfile: function(profile) { }, |
- |
- /** |
- * @param {!HeapProfilerAgent.HeapSnapshotObjectId} snapshotObjectId |
- * @param {string} perspectiveName |
- */ |
- showObject: function(snapshotObjectId, perspectiveName) { } |
+ /** |
+ * @param {?WebInspector.ProfileHeader} profile |
+ * @return {?WebInspector.Widget} |
+ */ |
+ showProfile: function(profile) {}, |
+ |
+ /** |
+ * @param {!HeapProfilerAgent.HeapSnapshotObjectId} snapshotObjectId |
+ * @param {string} perspectiveName |
+ */ |
+ showObject: function(snapshotObjectId, perspectiveName) {} |
}; |
/** |
- * @constructor |
- * @extends {WebInspector.Object} |
- * @param {?WebInspector.Target} target |
- * @param {!WebInspector.ProfileType} profileType |
- * @param {string} title |
+ * @unrestricted |
*/ |
-WebInspector.ProfileHeader = function(target, profileType, title) |
-{ |
+WebInspector.ProfileHeader = class extends WebInspector.Object { |
+ /** |
+ * @param {?WebInspector.Target} target |
+ * @param {!WebInspector.ProfileType} profileType |
+ * @param {string} title |
+ */ |
+ constructor(target, profileType, title) { |
+ super(); |
this._target = target; |
this._profileType = profileType; |
this.title = title; |
this.uid = profileType._nextProfileUid++; |
this._fromFile = false; |
+ } |
+ |
+ /** |
+ * @return {?WebInspector.Target} |
+ */ |
+ target() { |
+ return this._target; |
+ } |
+ |
+ /** |
+ * @return {!WebInspector.ProfileType} |
+ */ |
+ profileType() { |
+ return this._profileType; |
+ } |
+ |
+ /** |
+ * @param {?string} subtitle |
+ * @param {boolean=} wait |
+ */ |
+ updateStatus(subtitle, wait) { |
+ this.dispatchEventToListeners( |
+ WebInspector.ProfileHeader.Events.UpdateStatus, new WebInspector.ProfileHeader.StatusUpdate(subtitle, wait)); |
+ } |
+ |
+ /** |
+ * Must be implemented by subclasses. |
+ * @param {!WebInspector.ProfileType.DataDisplayDelegate} dataDisplayDelegate |
+ * @return {!WebInspector.ProfileSidebarTreeElement} |
+ */ |
+ createSidebarTreeElement(dataDisplayDelegate) { |
+ throw new Error('Needs implemented.'); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.ProfileType.DataDisplayDelegate} dataDisplayDelegate |
+ * @return {!WebInspector.Widget} |
+ */ |
+ createView(dataDisplayDelegate) { |
+ throw new Error('Not implemented.'); |
+ } |
+ |
+ removeTempFile() { |
+ if (this._tempFile) |
+ this._tempFile.remove(); |
+ } |
+ |
+ dispose() { |
+ } |
+ |
+ /** |
+ * @return {boolean} |
+ */ |
+ canSaveToFile() { |
+ return false; |
+ } |
+ |
+ saveToFile() { |
+ throw new Error('Needs implemented'); |
+ } |
+ |
+ /** |
+ * @param {!File} file |
+ */ |
+ loadFromFile(file) { |
+ throw new Error('Needs implemented'); |
+ } |
+ |
+ /** |
+ * @return {boolean} |
+ */ |
+ fromFile() { |
+ return this._fromFile; |
+ } |
+ |
+ setFromFile() { |
+ this._fromFile = true; |
+ } |
}; |
/** |
- * @constructor |
- * @param {?string} subtitle |
- * @param {boolean|undefined} wait |
+ * @unrestricted |
*/ |
-WebInspector.ProfileHeader.StatusUpdate = function(subtitle, wait) |
-{ |
+WebInspector.ProfileHeader.StatusUpdate = class { |
+ /** |
+ * @param {?string} subtitle |
+ * @param {boolean|undefined} wait |
+ */ |
+ constructor(subtitle, wait) { |
/** @type {?string} */ |
this.subtitle = subtitle; |
/** @type {boolean|undefined} */ |
this.wait = wait; |
+ } |
}; |
/** @enum {symbol} */ |
WebInspector.ProfileHeader.Events = { |
- UpdateStatus: Symbol("UpdateStatus"), |
- ProfileReceived: Symbol("ProfileReceived") |
-}; |
- |
-WebInspector.ProfileHeader.prototype = { |
- /** |
- * @return {?WebInspector.Target} |
- */ |
- target: function() |
- { |
- return this._target; |
- }, |
- |
- /** |
- * @return {!WebInspector.ProfileType} |
- */ |
- profileType: function() |
- { |
- return this._profileType; |
- }, |
- |
- /** |
- * @param {?string} subtitle |
- * @param {boolean=} wait |
- */ |
- updateStatus: function(subtitle, wait) |
- { |
- this.dispatchEventToListeners(WebInspector.ProfileHeader.Events.UpdateStatus, new WebInspector.ProfileHeader.StatusUpdate(subtitle, wait)); |
- }, |
- |
- /** |
- * Must be implemented by subclasses. |
- * @param {!WebInspector.ProfileType.DataDisplayDelegate} dataDisplayDelegate |
- * @return {!WebInspector.ProfileSidebarTreeElement} |
- */ |
- createSidebarTreeElement: function(dataDisplayDelegate) |
- { |
- throw new Error("Needs implemented."); |
- }, |
- |
- /** |
- * @param {!WebInspector.ProfileType.DataDisplayDelegate} dataDisplayDelegate |
- * @return {!WebInspector.Widget} |
- */ |
- createView: function(dataDisplayDelegate) |
- { |
- throw new Error("Not implemented."); |
- }, |
- |
- removeTempFile: function() |
- { |
- if (this._tempFile) |
- this._tempFile.remove(); |
- }, |
- |
- dispose: function() |
- { |
- }, |
- |
- /** |
- * @return {boolean} |
- */ |
- canSaveToFile: function() |
- { |
- return false; |
- }, |
- |
- saveToFile: function() |
- { |
- throw new Error("Needs implemented"); |
- }, |
- |
- /** |
- * @param {!File} file |
- */ |
- loadFromFile: function(file) |
- { |
- throw new Error("Needs implemented"); |
- }, |
- |
- /** |
- * @return {boolean} |
- */ |
- fromFile: function() |
- { |
- return this._fromFile; |
- }, |
- |
- setFromFile: function() |
- { |
- this._fromFile = true; |
- }, |
- |
- __proto__: WebInspector.Object.prototype |
+ UpdateStatus: Symbol('UpdateStatus'), |
+ ProfileReceived: Symbol('ProfileReceived') |
}; |
/** |
- * @constructor |
* @implements {WebInspector.ProfileType.DataDisplayDelegate} |
- * @extends {WebInspector.PanelWithSidebar} |
+ * @unrestricted |
*/ |
-WebInspector.ProfilesPanel = function() |
-{ |
- WebInspector.PanelWithSidebar.call(this, "profiles"); |
- this.registerRequiredCSS("ui/panelEnablerView.css"); |
- this.registerRequiredCSS("profiler/heapProfiler.css"); |
- this.registerRequiredCSS("profiler/profilesPanel.css"); |
- this.registerRequiredCSS("components/objectValue.css"); |
+WebInspector.ProfilesPanel = class extends WebInspector.PanelWithSidebar { |
+ constructor() { |
+ super('profiles'); |
+ this.registerRequiredCSS('ui/panelEnablerView.css'); |
+ this.registerRequiredCSS('profiler/heapProfiler.css'); |
+ this.registerRequiredCSS('profiler/profilesPanel.css'); |
+ this.registerRequiredCSS('components/objectValue.css'); |
var mainContainer = new WebInspector.VBox(); |
this.splitWidget().setMainWidget(mainContainer); |
@@ -446,498 +404,485 @@ WebInspector.ProfilesPanel = function() |
this.profilesItemTreeElement = new WebInspector.ProfilesSidebarTreeElement(this); |
this._sidebarTree = new TreeOutlineInShadow(); |
- this._sidebarTree.registerRequiredCSS("profiler/profilesSidebarTree.css"); |
+ this._sidebarTree.registerRequiredCSS('profiler/profilesSidebarTree.css'); |
this.panelSidebarElement().appendChild(this._sidebarTree.element); |
this._sidebarTree.appendChild(this.profilesItemTreeElement); |
- this.profileViews = createElement("div"); |
- this.profileViews.id = "profile-views"; |
- this.profileViews.classList.add("vbox"); |
+ this.profileViews = createElement('div'); |
+ this.profileViews.id = 'profile-views'; |
+ this.profileViews.classList.add('vbox'); |
mainContainer.element.appendChild(this.profileViews); |
- this._toolbarElement = createElementWithClass("div", "profiles-toolbar"); |
+ this._toolbarElement = createElementWithClass('div', 'profiles-toolbar'); |
mainContainer.element.insertBefore(this._toolbarElement, mainContainer.element.firstChild); |
- this.panelSidebarElement().classList.add("profiles-sidebar-tree-box"); |
- var toolbarContainerLeft = createElementWithClass("div", "profiles-toolbar"); |
+ this.panelSidebarElement().classList.add('profiles-sidebar-tree-box'); |
+ var toolbarContainerLeft = createElementWithClass('div', 'profiles-toolbar'); |
this.panelSidebarElement().insertBefore(toolbarContainerLeft, this.panelSidebarElement().firstChild); |
- var toolbar = new WebInspector.Toolbar("", toolbarContainerLeft); |
+ var toolbar = new WebInspector.Toolbar('', toolbarContainerLeft); |
- this._toggleRecordAction = /** @type {!WebInspector.Action }*/ (WebInspector.actionRegistry.action("profiler.toggle-recording")); |
+ this._toggleRecordAction = |
+ /** @type {!WebInspector.Action }*/ (WebInspector.actionRegistry.action('profiler.toggle-recording')); |
this._toggleRecordButton = WebInspector.Toolbar.createActionButton(this._toggleRecordAction); |
toolbar.appendToolbarItem(this._toggleRecordButton); |
- this.clearResultsButton = new WebInspector.ToolbarButton(WebInspector.UIString("Clear all profiles"), "clear-toolbar-item"); |
- this.clearResultsButton.addEventListener("click", this._reset, this); |
+ this.clearResultsButton = |
+ new WebInspector.ToolbarButton(WebInspector.UIString('Clear all profiles'), 'clear-toolbar-item'); |
+ this.clearResultsButton.addEventListener('click', this._reset, this); |
toolbar.appendToolbarItem(this.clearResultsButton); |
- this._profileTypeToolbar = new WebInspector.Toolbar("", this._toolbarElement); |
- this._profileViewToolbar = new WebInspector.Toolbar("", this._toolbarElement); |
+ this._profileTypeToolbar = new WebInspector.Toolbar('', this._toolbarElement); |
+ this._profileViewToolbar = new WebInspector.Toolbar('', this._toolbarElement); |
this._profileGroups = {}; |
this._launcherView = new WebInspector.MultiProfileLauncherView(this); |
- this._launcherView.addEventListener(WebInspector.MultiProfileLauncherView.Events.ProfileTypeSelected, this._onProfileTypeSelected, this); |
+ this._launcherView.addEventListener( |
+ WebInspector.MultiProfileLauncherView.Events.ProfileTypeSelected, this._onProfileTypeSelected, this); |
this._profileToView = []; |
this._typeIdToSidebarSection = {}; |
var types = WebInspector.ProfileTypeRegistry.instance.profileTypes(); |
for (var i = 0; i < types.length; i++) |
- this._registerProfileType(types[i]); |
+ this._registerProfileType(types[i]); |
this._launcherView.restoreSelectedProfileType(); |
this.profilesItemTreeElement.select(); |
this._showLauncherView(); |
this._createFileSelectorElement(); |
- this.element.addEventListener("contextmenu", this._handleContextMenuEvent.bind(this), false); |
- |
- this.contentElement.addEventListener("keydown", this._onKeyDown.bind(this), false); |
- |
- WebInspector.targetManager.addEventListener(WebInspector.TargetManager.Events.SuspendStateChanged, this._onSuspendStateChanged, this); |
-}; |
- |
-WebInspector.ProfilesPanel.prototype = { |
- /** |
- * @param {!Event} event |
- */ |
- _onKeyDown: function(event) |
- { |
- var handled = false; |
- if (event.key === "ArrowDown" && !event.altKey) |
- handled = this._sidebarTree.selectNext(); |
- else if (event.key === "ArrowUp" && !event.altKey) |
- handled = this._sidebarTree.selectPrevious(); |
- if (handled) |
- event.consume(true); |
- }, |
- |
- /** |
- * @override |
- * @return {?WebInspector.SearchableView} |
- */ |
- searchableView: function() |
- { |
- return this.visibleView && this.visibleView.searchableView ? this.visibleView.searchableView() : null; |
- }, |
- |
- _createFileSelectorElement: function() |
- { |
- if (this._fileSelectorElement) |
- this.element.removeChild(this._fileSelectorElement); |
- this._fileSelectorElement = WebInspector.createFileSelectorElement(this._loadFromFile.bind(this)); |
- WebInspector.ProfilesPanel._fileSelectorElement = this._fileSelectorElement; |
- this.element.appendChild(this._fileSelectorElement); |
- }, |
- |
- _findProfileTypeByExtension: function(fileName) |
- { |
- var types = WebInspector.ProfileTypeRegistry.instance.profileTypes(); |
- for (var i = 0; i < types.length; i++) { |
- var type = types[i]; |
- var extension = type.fileExtension(); |
- if (!extension) |
- continue; |
- if (fileName.endsWith(type.fileExtension())) |
- return type; |
- } |
- return null; |
- }, |
- |
- /** |
- * @param {!File} file |
- */ |
- _loadFromFile: function(file) |
- { |
- this._createFileSelectorElement(); |
- |
- var profileType = this._findProfileTypeByExtension(file.name); |
- if (!profileType) { |
- var extensions = []; |
- var types = WebInspector.ProfileTypeRegistry.instance.profileTypes(); |
- for (var i = 0; i < types.length; i++) { |
- var extension = types[i].fileExtension(); |
- if (!extension || extensions.indexOf(extension) !== -1) |
- continue; |
- extensions.push(extension); |
- } |
- WebInspector.console.error(WebInspector.UIString("Can't load file. Only files with extensions '%s' can be loaded.", extensions.join("', '"))); |
- return; |
- } |
- |
- if (!!profileType.profileBeingRecorded()) { |
- WebInspector.console.error(WebInspector.UIString("Can't load profile while another profile is recording.")); |
- return; |
- } |
- |
- profileType.loadFromFile(file); |
- }, |
- |
- /** |
- * @return {boolean} |
- */ |
- toggleRecord: function() |
- { |
- if (!this._toggleRecordAction.enabled()) |
- return true; |
- var type = this._selectedProfileType; |
- var isProfiling = type.buttonClicked(); |
- this._updateToggleRecordAction(isProfiling); |
- if (isProfiling) { |
- this._launcherView.profileStarted(); |
- if (type.hasTemporaryView()) |
- this.showProfile(type.profileBeingRecorded()); |
- } else { |
- this._launcherView.profileFinished(); |
- } |
- return true; |
- }, |
- |
- _onSuspendStateChanged: function() |
- { |
- this._updateToggleRecordAction(this._toggleRecordAction.toggled()); |
- }, |
- |
- /** |
- * @param {boolean} toggled |
- */ |
- _updateToggleRecordAction: function(toggled) |
- { |
- var enable = toggled || !WebInspector.targetManager.allTargetsSuspended(); |
- this._toggleRecordAction.setEnabled(enable); |
- this._toggleRecordAction.setToggled(toggled); |
- if (enable) |
- this._toggleRecordButton.setTitle(this._selectedProfileType ? this._selectedProfileType.buttonTooltip : ""); |
- else |
- this._toggleRecordButton.setTitle(WebInspector.anotherProfilerActiveLabel()); |
- if (this._selectedProfileType) |
- this._launcherView.updateProfileType(this._selectedProfileType, enable); |
- }, |
- |
- _profileBeingRecordedRemoved: function() |
- { |
- this._updateToggleRecordAction(false); |
- this._launcherView.profileFinished(); |
- }, |
- |
- /** |
- * @param {!WebInspector.Event} event |
- */ |
- _onProfileTypeSelected: function(event) |
- { |
- this._selectedProfileType = /** @type {!WebInspector.ProfileType} */ (event.data); |
- this._updateProfileTypeSpecificUI(); |
- }, |
- |
- _updateProfileTypeSpecificUI: function() |
- { |
- this._updateToggleRecordAction(this._toggleRecordAction.toggled()); |
- this._profileTypeToolbar.removeToolbarItems(); |
- var toolbarItems = this._selectedProfileType.toolbarItems(); |
- for (var i = 0; i < toolbarItems.length; ++i) |
- this._profileTypeToolbar.appendToolbarItem(toolbarItems[i]); |
- }, |
- |
- _reset: function() |
- { |
- var types = WebInspector.ProfileTypeRegistry.instance.profileTypes(); |
- for (var i = 0; i < types.length; i++) |
- types[i]._reset(); |
- |
- delete this.visibleView; |
- |
- this._profileGroups = {}; |
- this._updateToggleRecordAction(false); |
- this._launcherView.profileFinished(); |
- |
- this._sidebarTree.element.classList.remove("some-expandable"); |
- |
- this._launcherView.detach(); |
- this.profileViews.removeChildren(); |
- this._profileViewToolbar.removeToolbarItems(); |
- |
- this.removeAllListeners(); |
- |
- this._profileViewToolbar.element.classList.remove("hidden"); |
- this.clearResultsButton.element.classList.remove("hidden"); |
- this.profilesItemTreeElement.select(); |
- this._showLauncherView(); |
- }, |
- |
- _showLauncherView: function() |
- { |
- this.closeVisibleView(); |
- this._profileViewToolbar.removeToolbarItems(); |
- this._launcherView.show(this.profileViews); |
- this.visibleView = this._launcherView; |
- }, |
+ this.element.addEventListener('contextmenu', this._handleContextMenuEvent.bind(this), false); |
- /** |
- * @param {!WebInspector.ProfileType} profileType |
- */ |
- _registerProfileType: function(profileType) |
- { |
- this._launcherView.addProfileType(profileType); |
- var profileTypeSection = new WebInspector.ProfileTypeSidebarSection(this, profileType); |
- this._typeIdToSidebarSection[profileType.id] = profileTypeSection; |
- this._sidebarTree.appendChild(profileTypeSection); |
- profileTypeSection.childrenListElement.addEventListener("contextmenu", this._handleContextMenuEvent.bind(this), false); |
- |
- /** |
- * @param {!WebInspector.Event} event |
- * @this {WebInspector.ProfilesPanel} |
- */ |
- function onAddProfileHeader(event) |
- { |
- this._addProfileHeader(/** @type {!WebInspector.ProfileHeader} */ (event.data)); |
- } |
- |
- /** |
- * @param {!WebInspector.Event} event |
- * @this {WebInspector.ProfilesPanel} |
- */ |
- function onRemoveProfileHeader(event) |
- { |
- this._removeProfileHeader(/** @type {!WebInspector.ProfileHeader} */ (event.data)); |
- } |
- |
- /** |
- * @param {!WebInspector.Event} event |
- * @this {WebInspector.ProfilesPanel} |
- */ |
- function profileComplete(event) |
- { |
- this.showProfile(/** @type {!WebInspector.ProfileHeader} */ (event.data)); |
- } |
- |
- profileType.addEventListener(WebInspector.ProfileType.Events.ViewUpdated, this._updateProfileTypeSpecificUI, this); |
- profileType.addEventListener(WebInspector.ProfileType.Events.AddProfileHeader, onAddProfileHeader, this); |
- profileType.addEventListener(WebInspector.ProfileType.Events.RemoveProfileHeader, onRemoveProfileHeader, this); |
- profileType.addEventListener(WebInspector.ProfileType.Events.ProfileComplete, profileComplete, this); |
- |
- var profiles = profileType.getProfiles(); |
- for (var i = 0; i < profiles.length; i++) |
- this._addProfileHeader(profiles[i]); |
- }, |
+ this.contentElement.addEventListener('keydown', this._onKeyDown.bind(this), false); |
- /** |
- * @param {!Event} event |
- */ |
- _handleContextMenuEvent: function(event) |
- { |
- var contextMenu = new WebInspector.ContextMenu(event); |
- if (this.visibleView instanceof WebInspector.HeapSnapshotView) { |
- this.visibleView.populateContextMenu(contextMenu, event); |
- } |
- if (this.panelSidebarElement().isSelfOrAncestor(event.srcElement)) |
- contextMenu.appendItem(WebInspector.UIString("Load\u2026"), this._fileSelectorElement.click.bind(this._fileSelectorElement)); |
- contextMenu.show(); |
- }, |
- |
- showLoadFromFileDialog: function() |
- { |
- this._fileSelectorElement.click(); |
- }, |
+ WebInspector.targetManager.addEventListener( |
+ WebInspector.TargetManager.Events.SuspendStateChanged, this._onSuspendStateChanged, this); |
+ } |
- /** |
- * @param {!WebInspector.ProfileHeader} profile |
- */ |
- _addProfileHeader: function(profile) |
- { |
- var profileType = profile.profileType(); |
- var typeId = profileType.id; |
- this._typeIdToSidebarSection[typeId].addProfileHeader(profile); |
- if (!this.visibleView || this.visibleView === this._launcherView) |
- this.showProfile(profile); |
- }, |
+ /** |
+ * @return {!WebInspector.ProfilesPanel} |
+ */ |
+ static _instance() { |
+ return /** @type {!WebInspector.ProfilesPanel} */ (self.runtime.sharedInstance(WebInspector.ProfilesPanel)); |
+ } |
+ |
+ /** |
+ * @param {!Event} event |
+ */ |
+ _onKeyDown(event) { |
+ var handled = false; |
+ if (event.key === 'ArrowDown' && !event.altKey) |
+ handled = this._sidebarTree.selectNext(); |
+ else if (event.key === 'ArrowUp' && !event.altKey) |
+ handled = this._sidebarTree.selectPrevious(); |
+ if (handled) |
+ event.consume(true); |
+ } |
+ |
+ /** |
+ * @override |
+ * @return {?WebInspector.SearchableView} |
+ */ |
+ searchableView() { |
+ return this.visibleView && this.visibleView.searchableView ? this.visibleView.searchableView() : null; |
+ } |
+ |
+ _createFileSelectorElement() { |
+ if (this._fileSelectorElement) |
+ this.element.removeChild(this._fileSelectorElement); |
+ this._fileSelectorElement = WebInspector.createFileSelectorElement(this._loadFromFile.bind(this)); |
+ WebInspector.ProfilesPanel._fileSelectorElement = this._fileSelectorElement; |
+ this.element.appendChild(this._fileSelectorElement); |
+ } |
+ |
+ _findProfileTypeByExtension(fileName) { |
+ var types = WebInspector.ProfileTypeRegistry.instance.profileTypes(); |
+ for (var i = 0; i < types.length; i++) { |
+ var type = types[i]; |
+ var extension = type.fileExtension(); |
+ if (!extension) |
+ continue; |
+ if (fileName.endsWith(type.fileExtension())) |
+ return type; |
+ } |
+ return null; |
+ } |
- /** |
- * @param {!WebInspector.ProfileHeader} profile |
- */ |
- _removeProfileHeader: function(profile) |
- { |
- if (profile.profileType()._profileBeingRecorded === profile) |
- this._profileBeingRecordedRemoved(); |
- |
- var i = this._indexOfViewForProfile(profile); |
- if (i !== -1) |
- this._profileToView.splice(i, 1); |
- |
- var profileType = profile.profileType(); |
- var typeId = profileType.id; |
- var sectionIsEmpty = this._typeIdToSidebarSection[typeId].removeProfileHeader(profile); |
- |
- // No other item will be selected if there aren't any other profiles, so |
- // make sure that view gets cleared when the last profile is removed. |
- if (sectionIsEmpty) { |
- this.profilesItemTreeElement.select(); |
- this._showLauncherView(); |
- } |
- }, |
+ /** |
+ * @param {!File} file |
+ */ |
+ _loadFromFile(file) { |
+ this._createFileSelectorElement(); |
- /** |
- * @override |
- * @param {?WebInspector.ProfileHeader} profile |
- * @return {?WebInspector.Widget} |
- */ |
- showProfile: function(profile) |
- { |
- if (!profile || (profile.profileType().profileBeingRecorded() === profile) && !profile.profileType().hasTemporaryView()) |
- return null; |
+ var profileType = this._findProfileTypeByExtension(file.name); |
+ if (!profileType) { |
+ var extensions = []; |
+ var types = WebInspector.ProfileTypeRegistry.instance.profileTypes(); |
+ for (var i = 0; i < types.length; i++) { |
+ var extension = types[i].fileExtension(); |
+ if (!extension || extensions.indexOf(extension) !== -1) |
+ continue; |
+ extensions.push(extension); |
+ } |
+ WebInspector.console.error(WebInspector.UIString( |
+ 'Can\'t load file. Only files with extensions \'%s\' can be loaded.', extensions.join('\', \''))); |
+ return; |
+ } |
- var view = this._viewForProfile(profile); |
- if (view === this.visibleView) |
- return view; |
+ if (!!profileType.profileBeingRecorded()) { |
+ WebInspector.console.error(WebInspector.UIString('Can\'t load profile while another profile is recording.')); |
+ return; |
+ } |
- this.closeVisibleView(); |
+ profileType.loadFromFile(file); |
+ } |
+ |
+ /** |
+ * @return {boolean} |
+ */ |
+ toggleRecord() { |
+ if (!this._toggleRecordAction.enabled()) |
+ return true; |
+ var type = this._selectedProfileType; |
+ var isProfiling = type.buttonClicked(); |
+ this._updateToggleRecordAction(isProfiling); |
+ if (isProfiling) { |
+ this._launcherView.profileStarted(); |
+ if (type.hasTemporaryView()) |
+ this.showProfile(type.profileBeingRecorded()); |
+ } else { |
+ this._launcherView.profileFinished(); |
+ } |
+ return true; |
+ } |
+ |
+ _onSuspendStateChanged() { |
+ this._updateToggleRecordAction(this._toggleRecordAction.toggled()); |
+ } |
+ |
+ /** |
+ * @param {boolean} toggled |
+ */ |
+ _updateToggleRecordAction(toggled) { |
+ var enable = toggled || !WebInspector.targetManager.allTargetsSuspended(); |
+ this._toggleRecordAction.setEnabled(enable); |
+ this._toggleRecordAction.setToggled(toggled); |
+ if (enable) |
+ this._toggleRecordButton.setTitle(this._selectedProfileType ? this._selectedProfileType.buttonTooltip : ''); |
+ else |
+ this._toggleRecordButton.setTitle(WebInspector.anotherProfilerActiveLabel()); |
+ if (this._selectedProfileType) |
+ this._launcherView.updateProfileType(this._selectedProfileType, enable); |
+ } |
+ |
+ _profileBeingRecordedRemoved() { |
+ this._updateToggleRecordAction(false); |
+ this._launcherView.profileFinished(); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.Event} event |
+ */ |
+ _onProfileTypeSelected(event) { |
+ this._selectedProfileType = /** @type {!WebInspector.ProfileType} */ (event.data); |
+ this._updateProfileTypeSpecificUI(); |
+ } |
+ |
+ _updateProfileTypeSpecificUI() { |
+ this._updateToggleRecordAction(this._toggleRecordAction.toggled()); |
+ this._profileTypeToolbar.removeToolbarItems(); |
+ var toolbarItems = this._selectedProfileType.toolbarItems(); |
+ for (var i = 0; i < toolbarItems.length; ++i) |
+ this._profileTypeToolbar.appendToolbarItem(toolbarItems[i]); |
+ } |
+ |
+ _reset() { |
+ var types = WebInspector.ProfileTypeRegistry.instance.profileTypes(); |
+ for (var i = 0; i < types.length; i++) |
+ types[i]._reset(); |
- view.show(this.profileViews); |
- view.focus(); |
+ delete this.visibleView; |
- this.visibleView = view; |
+ this._profileGroups = {}; |
+ this._updateToggleRecordAction(false); |
+ this._launcherView.profileFinished(); |
- var profileTypeSection = this._typeIdToSidebarSection[profile.profileType().id]; |
- var sidebarElement = profileTypeSection.sidebarElementForProfile(profile); |
- sidebarElement.revealAndSelect(); |
+ this._sidebarTree.element.classList.remove('some-expandable'); |
- this._profileViewToolbar.removeToolbarItems(); |
+ this._launcherView.detach(); |
+ this.profileViews.removeChildren(); |
+ this._profileViewToolbar.removeToolbarItems(); |
- var toolbarItems = view.syncToolbarItems(); |
- for (var i = 0; i < toolbarItems.length; ++i) |
- this._profileViewToolbar.appendToolbarItem(toolbarItems[i]); |
+ this.removeAllListeners(); |
- return view; |
- }, |
+ this._profileViewToolbar.element.classList.remove('hidden'); |
+ this.clearResultsButton.element.classList.remove('hidden'); |
+ this.profilesItemTreeElement.select(); |
+ this._showLauncherView(); |
+ } |
+ |
+ _showLauncherView() { |
+ this.closeVisibleView(); |
+ this._profileViewToolbar.removeToolbarItems(); |
+ this._launcherView.show(this.profileViews); |
+ this.visibleView = this._launcherView; |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.ProfileType} profileType |
+ */ |
+ _registerProfileType(profileType) { |
+ this._launcherView.addProfileType(profileType); |
+ var profileTypeSection = new WebInspector.ProfileTypeSidebarSection(this, profileType); |
+ this._typeIdToSidebarSection[profileType.id] = profileTypeSection; |
+ this._sidebarTree.appendChild(profileTypeSection); |
+ profileTypeSection.childrenListElement.addEventListener( |
+ 'contextmenu', this._handleContextMenuEvent.bind(this), false); |
/** |
- * @override |
- * @param {!HeapProfilerAgent.HeapSnapshotObjectId} snapshotObjectId |
- * @param {string} perspectiveName |
+ * @param {!WebInspector.Event} event |
+ * @this {WebInspector.ProfilesPanel} |
*/ |
- showObject: function(snapshotObjectId, perspectiveName) |
- { |
- var heapProfiles = WebInspector.ProfileTypeRegistry.instance.heapSnapshotProfileType.getProfiles(); |
- for (var i = 0; i < heapProfiles.length; i++) { |
- var profile = heapProfiles[i]; |
- // FIXME: allow to choose snapshot if there are several options. |
- if (profile.maxJSObjectId >= snapshotObjectId) { |
- this.showProfile(profile); |
- var view = this._viewForProfile(profile); |
- view.selectLiveObject(perspectiveName, snapshotObjectId); |
- break; |
- } |
- } |
- }, |
+ function onAddProfileHeader(event) { |
+ this._addProfileHeader(/** @type {!WebInspector.ProfileHeader} */ (event.data)); |
+ } |
/** |
- * @param {!WebInspector.ProfileHeader} profile |
- * @return {!WebInspector.Widget} |
+ * @param {!WebInspector.Event} event |
+ * @this {WebInspector.ProfilesPanel} |
*/ |
- _viewForProfile: function(profile) |
- { |
- var index = this._indexOfViewForProfile(profile); |
- if (index !== -1) |
- return this._profileToView[index].view; |
- var view = profile.createView(this); |
- view.element.classList.add("profile-view"); |
- this._profileToView.push({ profile: profile, view: view}); |
- return view; |
- }, |
+ function onRemoveProfileHeader(event) { |
+ this._removeProfileHeader(/** @type {!WebInspector.ProfileHeader} */ (event.data)); |
+ } |
/** |
- * @param {!WebInspector.ProfileHeader} profile |
- * @return {number} |
+ * @param {!WebInspector.Event} event |
+ * @this {WebInspector.ProfilesPanel} |
*/ |
- _indexOfViewForProfile: function(profile) |
- { |
- for (var i = 0; i < this._profileToView.length; i++) { |
- if (this._profileToView[i].profile === profile) |
- return i; |
- } |
- return -1; |
- }, |
- |
- closeVisibleView: function() |
- { |
- if (this.visibleView) |
- this.visibleView.detach(); |
- delete this.visibleView; |
- }, |
+ function profileComplete(event) { |
+ this.showProfile(/** @type {!WebInspector.ProfileHeader} */ (event.data)); |
+ } |
+ |
+ profileType.addEventListener(WebInspector.ProfileType.Events.ViewUpdated, this._updateProfileTypeSpecificUI, this); |
+ profileType.addEventListener(WebInspector.ProfileType.Events.AddProfileHeader, onAddProfileHeader, this); |
+ profileType.addEventListener(WebInspector.ProfileType.Events.RemoveProfileHeader, onRemoveProfileHeader, this); |
+ profileType.addEventListener(WebInspector.ProfileType.Events.ProfileComplete, profileComplete, this); |
+ |
+ var profiles = profileType.getProfiles(); |
+ for (var i = 0; i < profiles.length; i++) |
+ this._addProfileHeader(profiles[i]); |
+ } |
+ |
+ /** |
+ * @param {!Event} event |
+ */ |
+ _handleContextMenuEvent(event) { |
+ var contextMenu = new WebInspector.ContextMenu(event); |
+ if (this.visibleView instanceof WebInspector.HeapSnapshotView) { |
+ this.visibleView.populateContextMenu(contextMenu, event); |
+ } |
+ if (this.panelSidebarElement().isSelfOrAncestor(event.srcElement)) |
+ contextMenu.appendItem( |
+ WebInspector.UIString('Load\u2026'), this._fileSelectorElement.click.bind(this._fileSelectorElement)); |
+ contextMenu.show(); |
+ } |
+ |
+ showLoadFromFileDialog() { |
+ this._fileSelectorElement.click(); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.ProfileHeader} profile |
+ */ |
+ _addProfileHeader(profile) { |
+ var profileType = profile.profileType(); |
+ var typeId = profileType.id; |
+ this._typeIdToSidebarSection[typeId].addProfileHeader(profile); |
+ if (!this.visibleView || this.visibleView === this._launcherView) |
+ this.showProfile(profile); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.ProfileHeader} profile |
+ */ |
+ _removeProfileHeader(profile) { |
+ if (profile.profileType()._profileBeingRecorded === profile) |
+ this._profileBeingRecordedRemoved(); |
+ |
+ var i = this._indexOfViewForProfile(profile); |
+ if (i !== -1) |
+ this._profileToView.splice(i, 1); |
+ |
+ var profileType = profile.profileType(); |
+ var typeId = profileType.id; |
+ var sectionIsEmpty = this._typeIdToSidebarSection[typeId].removeProfileHeader(profile); |
+ |
+ // No other item will be selected if there aren't any other profiles, so |
+ // make sure that view gets cleared when the last profile is removed. |
+ if (sectionIsEmpty) { |
+ this.profilesItemTreeElement.select(); |
+ this._showLauncherView(); |
+ } |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {?WebInspector.ProfileHeader} profile |
+ * @return {?WebInspector.Widget} |
+ */ |
+ showProfile(profile) { |
+ if (!profile || |
+ (profile.profileType().profileBeingRecorded() === profile) && !profile.profileType().hasTemporaryView()) |
+ return null; |
+ |
+ var view = this._viewForProfile(profile); |
+ if (view === this.visibleView) |
+ return view; |
+ |
+ this.closeVisibleView(); |
+ |
+ view.show(this.profileViews); |
+ view.focus(); |
+ |
+ this.visibleView = view; |
+ |
+ var profileTypeSection = this._typeIdToSidebarSection[profile.profileType().id]; |
+ var sidebarElement = profileTypeSection.sidebarElementForProfile(profile); |
+ sidebarElement.revealAndSelect(); |
+ |
+ this._profileViewToolbar.removeToolbarItems(); |
+ |
+ var toolbarItems = view.syncToolbarItems(); |
+ for (var i = 0; i < toolbarItems.length; ++i) |
+ this._profileViewToolbar.appendToolbarItem(toolbarItems[i]); |
+ |
+ return view; |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {!HeapProfilerAgent.HeapSnapshotObjectId} snapshotObjectId |
+ * @param {string} perspectiveName |
+ */ |
+ showObject(snapshotObjectId, perspectiveName) { |
+ var heapProfiles = WebInspector.ProfileTypeRegistry.instance.heapSnapshotProfileType.getProfiles(); |
+ for (var i = 0; i < heapProfiles.length; i++) { |
+ var profile = heapProfiles[i]; |
+ // FIXME: allow to choose snapshot if there are several options. |
+ if (profile.maxJSObjectId >= snapshotObjectId) { |
+ this.showProfile(profile); |
+ var view = this._viewForProfile(profile); |
+ view.selectLiveObject(perspectiveName, snapshotObjectId); |
+ break; |
+ } |
+ } |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.ProfileHeader} profile |
+ * @return {!WebInspector.Widget} |
+ */ |
+ _viewForProfile(profile) { |
+ var index = this._indexOfViewForProfile(profile); |
+ if (index !== -1) |
+ return this._profileToView[index].view; |
+ var view = profile.createView(this); |
+ view.element.classList.add('profile-view'); |
+ this._profileToView.push({profile: profile, view: view}); |
+ return view; |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.ProfileHeader} profile |
+ * @return {number} |
+ */ |
+ _indexOfViewForProfile(profile) { |
+ for (var i = 0; i < this._profileToView.length; i++) { |
+ if (this._profileToView[i].profile === profile) |
+ return i; |
+ } |
+ return -1; |
+ } |
+ |
+ closeVisibleView() { |
+ if (this.visibleView) |
+ this.visibleView.detach(); |
+ delete this.visibleView; |
+ } |
+ |
+ /** |
+ * @param {!Event} event |
+ * @param {!WebInspector.ContextMenu} contextMenu |
+ * @param {!Object} target |
+ */ |
+ appendApplicableItems(event, contextMenu, target) { |
+ if (!(target instanceof WebInspector.RemoteObject)) |
+ return; |
+ |
+ if (!this.isShowing()) |
+ return; |
+ |
+ var object = /** @type {!WebInspector.RemoteObject} */ (target); |
+ var objectId = object.objectId; |
+ if (!objectId) |
+ return; |
+ |
+ var heapProfiles = WebInspector.ProfileTypeRegistry.instance.heapSnapshotProfileType.getProfiles(); |
+ if (!heapProfiles.length) |
+ return; |
/** |
- * @param {!Event} event |
- * @param {!WebInspector.ContextMenu} contextMenu |
- * @param {!Object} target |
+ * @this {WebInspector.ProfilesPanel} |
*/ |
- appendApplicableItems: function(event, contextMenu, target) |
- { |
- if (!(target instanceof WebInspector.RemoteObject)) |
- return; |
- |
- if (!this.isShowing()) |
- return; |
- |
- var object = /** @type {!WebInspector.RemoteObject} */ (target); |
- var objectId = object.objectId; |
- if (!objectId) |
- return; |
- |
- var heapProfiles = WebInspector.ProfileTypeRegistry.instance.heapSnapshotProfileType.getProfiles(); |
- if (!heapProfiles.length) |
- return; |
- |
- /** |
- * @this {WebInspector.ProfilesPanel} |
- */ |
- function revealInView(viewName) |
- { |
- object.target().heapProfilerAgent().getHeapObjectId(objectId, didReceiveHeapObjectId.bind(this, viewName)); |
- } |
- |
- /** |
- * @this {WebInspector.ProfilesPanel} |
- */ |
- function didReceiveHeapObjectId(viewName, error, result) |
- { |
- if (!this.isShowing()) |
- return; |
- if (!error) |
- this.showObject(result, viewName); |
- } |
- |
- contextMenu.appendItem(WebInspector.UIString.capitalize("Reveal in Summary ^view"), revealInView.bind(this, "Summary")); |
- }, |
- |
- wasShown: function() |
- { |
- WebInspector.context.setFlavor(WebInspector.ProfilesPanel, this); |
- }, |
+ function revealInView(viewName) { |
+ object.target().heapProfilerAgent().getHeapObjectId(objectId, didReceiveHeapObjectId.bind(this, viewName)); |
+ } |
/** |
- * @override |
+ * @this {WebInspector.ProfilesPanel} |
*/ |
- focus: function() |
- { |
- this._sidebarTree.focus(); |
- }, |
- |
- willHide: function() |
- { |
- WebInspector.context.setFlavor(WebInspector.ProfilesPanel, null); |
- }, |
+ function didReceiveHeapObjectId(viewName, error, result) { |
+ if (!this.isShowing()) |
+ return; |
+ if (!error) |
+ this.showObject(result, viewName); |
+ } |
- __proto__: WebInspector.PanelWithSidebar.prototype |
+ contextMenu.appendItem( |
+ WebInspector.UIString.capitalize('Reveal in Summary ^view'), revealInView.bind(this, 'Summary')); |
+ } |
+ |
+ /** |
+ * @override |
+ */ |
+ wasShown() { |
+ WebInspector.context.setFlavor(WebInspector.ProfilesPanel, this); |
+ } |
+ |
+ /** |
+ * @override |
+ */ |
+ focus() { |
+ this._sidebarTree.focus(); |
+ } |
+ |
+ /** |
+ * @override |
+ */ |
+ willHide() { |
+ WebInspector.context.setFlavor(WebInspector.ProfilesPanel, null); |
+ } |
}; |
- |
/** |
- * @constructor |
- * @extends {TreeElement} |
- * @param {!WebInspector.ProfileType.DataDisplayDelegate} dataDisplayDelegate |
- * @param {!WebInspector.ProfileType} profileType |
+ * @unrestricted |
*/ |
-WebInspector.ProfileTypeSidebarSection = function(dataDisplayDelegate, profileType) |
-{ |
- TreeElement.call(this, profileType.treeItemTitle.escapeHTML(), true); |
+WebInspector.ProfileTypeSidebarSection = class extends TreeElement { |
+ /** |
+ * @param {!WebInspector.ProfileType.DataDisplayDelegate} dataDisplayDelegate |
+ * @param {!WebInspector.ProfileType} profileType |
+ */ |
+ constructor(dataDisplayDelegate, profileType) { |
+ super(profileType.treeItemTitle.escapeHTML(), true); |
this.selectable = false; |
this._dataDisplayDelegate = dataDisplayDelegate; |
/** @type {!Array<!WebInspector.ProfileSidebarTreeElement>} */ |
@@ -946,183 +891,173 @@ WebInspector.ProfileTypeSidebarSection = function(dataDisplayDelegate, profileTy |
this._profileGroups = {}; |
this.expand(); |
this.hidden = true; |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.ProfileHeader} profile |
+ */ |
+ addProfileHeader(profile) { |
+ this.hidden = false; |
+ var profileType = profile.profileType(); |
+ var sidebarParent = this; |
+ var profileTreeElement = profile.createSidebarTreeElement(this._dataDisplayDelegate); |
+ this._profileTreeElements.push(profileTreeElement); |
+ |
+ if (!profile.fromFile() && profileType.profileBeingRecorded() !== profile) { |
+ var profileTitle = profile.title; |
+ var group = this._profileGroups[profileTitle]; |
+ if (!group) { |
+ group = new WebInspector.ProfileTypeSidebarSection.ProfileGroup(); |
+ this._profileGroups[profileTitle] = group; |
+ } |
+ group.profileSidebarTreeElements.push(profileTreeElement); |
+ |
+ var groupSize = group.profileSidebarTreeElements.length; |
+ if (groupSize === 2) { |
+ // Make a group TreeElement now that there are 2 profiles. |
+ group.sidebarTreeElement = |
+ new WebInspector.ProfileGroupSidebarTreeElement(this._dataDisplayDelegate, profile.title); |
+ |
+ var firstProfileTreeElement = group.profileSidebarTreeElements[0]; |
+ // Insert at the same index for the first profile of the group. |
+ var index = this.children().indexOf(firstProfileTreeElement); |
+ this.insertChild(group.sidebarTreeElement, index); |
+ |
+ // Move the first profile to the group. |
+ var selected = firstProfileTreeElement.selected; |
+ this.removeChild(firstProfileTreeElement); |
+ group.sidebarTreeElement.appendChild(firstProfileTreeElement); |
+ if (selected) |
+ firstProfileTreeElement.revealAndSelect(); |
+ |
+ firstProfileTreeElement.setSmall(true); |
+ firstProfileTreeElement.setMainTitle(WebInspector.UIString('Run %d', 1)); |
+ |
+ this.treeOutline.element.classList.add('some-expandable'); |
+ } |
+ |
+ if (groupSize >= 2) { |
+ sidebarParent = group.sidebarTreeElement; |
+ profileTreeElement.setSmall(true); |
+ profileTreeElement.setMainTitle(WebInspector.UIString('Run %d', groupSize)); |
+ } |
+ } |
+ |
+ sidebarParent.appendChild(profileTreeElement); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.ProfileHeader} profile |
+ * @return {boolean} |
+ */ |
+ removeProfileHeader(profile) { |
+ var index = this._sidebarElementIndex(profile); |
+ if (index === -1) |
+ return false; |
+ var profileTreeElement = this._profileTreeElements[index]; |
+ this._profileTreeElements.splice(index, 1); |
+ |
+ var sidebarParent = this; |
+ var group = this._profileGroups[profile.title]; |
+ if (group) { |
+ var groupElements = group.profileSidebarTreeElements; |
+ groupElements.splice(groupElements.indexOf(profileTreeElement), 1); |
+ if (groupElements.length === 1) { |
+ // Move the last profile out of its group and remove the group. |
+ var pos = sidebarParent.children().indexOf( |
+ /** @type {!WebInspector.ProfileGroupSidebarTreeElement} */ (group.sidebarTreeElement)); |
+ group.sidebarTreeElement.removeChild(groupElements[0]); |
+ this.insertChild(groupElements[0], pos); |
+ groupElements[0].setSmall(false); |
+ groupElements[0].setMainTitle(profile.title); |
+ this.removeChild(group.sidebarTreeElement); |
+ } |
+ if (groupElements.length !== 0) |
+ sidebarParent = group.sidebarTreeElement; |
+ } |
+ sidebarParent.removeChild(profileTreeElement); |
+ profileTreeElement.dispose(); |
+ |
+ if (this.childCount()) |
+ return false; |
+ this.hidden = true; |
+ return true; |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.ProfileHeader} profile |
+ * @return {?WebInspector.ProfileSidebarTreeElement} |
+ */ |
+ sidebarElementForProfile(profile) { |
+ var index = this._sidebarElementIndex(profile); |
+ return index === -1 ? null : this._profileTreeElements[index]; |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.ProfileHeader} profile |
+ * @return {number} |
+ */ |
+ _sidebarElementIndex(profile) { |
+ var elements = this._profileTreeElements; |
+ for (var i = 0; i < elements.length; i++) { |
+ if (elements[i].profile === profile) |
+ return i; |
+ } |
+ return -1; |
+ } |
+ |
+ /** |
+ * @override |
+ */ |
+ onattach() { |
+ this.listItemElement.classList.add('profiles-tree-section'); |
+ } |
}; |
/** |
- * @constructor |
+ * @unrestricted |
*/ |
-WebInspector.ProfileTypeSidebarSection.ProfileGroup = function() |
-{ |
+WebInspector.ProfileTypeSidebarSection.ProfileGroup = class { |
+ constructor() { |
/** @type {!Array<!WebInspector.ProfileSidebarTreeElement>} */ |
this.profileSidebarTreeElements = []; |
/** @type {?WebInspector.ProfileGroupSidebarTreeElement} */ |
this.sidebarTreeElement = null; |
+ } |
}; |
-WebInspector.ProfileTypeSidebarSection.prototype = { |
- /** |
- * @param {!WebInspector.ProfileHeader} profile |
- */ |
- addProfileHeader: function(profile) |
- { |
- this.hidden = false; |
- var profileType = profile.profileType(); |
- var sidebarParent = this; |
- var profileTreeElement = profile.createSidebarTreeElement(this._dataDisplayDelegate); |
- this._profileTreeElements.push(profileTreeElement); |
- |
- if (!profile.fromFile() && profileType.profileBeingRecorded() !== profile) { |
- var profileTitle = profile.title; |
- var group = this._profileGroups[profileTitle]; |
- if (!group) { |
- group = new WebInspector.ProfileTypeSidebarSection.ProfileGroup(); |
- this._profileGroups[profileTitle] = group; |
- } |
- group.profileSidebarTreeElements.push(profileTreeElement); |
- |
- var groupSize = group.profileSidebarTreeElements.length; |
- if (groupSize === 2) { |
- // Make a group TreeElement now that there are 2 profiles. |
- group.sidebarTreeElement = new WebInspector.ProfileGroupSidebarTreeElement(this._dataDisplayDelegate, profile.title); |
- |
- var firstProfileTreeElement = group.profileSidebarTreeElements[0]; |
- // Insert at the same index for the first profile of the group. |
- var index = this.children().indexOf(firstProfileTreeElement); |
- this.insertChild(group.sidebarTreeElement, index); |
- |
- // Move the first profile to the group. |
- var selected = firstProfileTreeElement.selected; |
- this.removeChild(firstProfileTreeElement); |
- group.sidebarTreeElement.appendChild(firstProfileTreeElement); |
- if (selected) |
- firstProfileTreeElement.revealAndSelect(); |
- |
- firstProfileTreeElement.setSmall(true); |
- firstProfileTreeElement.setMainTitle(WebInspector.UIString("Run %d", 1)); |
- |
- this.treeOutline.element.classList.add("some-expandable"); |
- } |
- |
- if (groupSize >= 2) { |
- sidebarParent = group.sidebarTreeElement; |
- profileTreeElement.setSmall(true); |
- profileTreeElement.setMainTitle(WebInspector.UIString("Run %d", groupSize)); |
- } |
- } |
- |
- sidebarParent.appendChild(profileTreeElement); |
- }, |
- |
- /** |
- * @param {!WebInspector.ProfileHeader} profile |
- * @return {boolean} |
- */ |
- removeProfileHeader: function(profile) |
- { |
- var index = this._sidebarElementIndex(profile); |
- if (index === -1) |
- return false; |
- var profileTreeElement = this._profileTreeElements[index]; |
- this._profileTreeElements.splice(index, 1); |
- |
- var sidebarParent = this; |
- var group = this._profileGroups[profile.title]; |
- if (group) { |
- var groupElements = group.profileSidebarTreeElements; |
- groupElements.splice(groupElements.indexOf(profileTreeElement), 1); |
- if (groupElements.length === 1) { |
- // Move the last profile out of its group and remove the group. |
- var pos = sidebarParent.children().indexOf(/** @type {!WebInspector.ProfileGroupSidebarTreeElement} */ (group.sidebarTreeElement)); |
- group.sidebarTreeElement.removeChild(groupElements[0]); |
- this.insertChild(groupElements[0], pos); |
- groupElements[0].setSmall(false); |
- groupElements[0].setMainTitle(profile.title); |
- this.removeChild(group.sidebarTreeElement); |
- } |
- if (groupElements.length !== 0) |
- sidebarParent = group.sidebarTreeElement; |
- } |
- sidebarParent.removeChild(profileTreeElement); |
- profileTreeElement.dispose(); |
- |
- if (this.childCount()) |
- return false; |
- this.hidden = true; |
- return true; |
- }, |
- |
- /** |
- * @param {!WebInspector.ProfileHeader} profile |
- * @return {?WebInspector.ProfileSidebarTreeElement} |
- */ |
- sidebarElementForProfile: function(profile) |
- { |
- var index = this._sidebarElementIndex(profile); |
- return index === -1 ? null : this._profileTreeElements[index]; |
- }, |
- |
- /** |
- * @param {!WebInspector.ProfileHeader} profile |
- * @return {number} |
- */ |
- _sidebarElementIndex: function(profile) |
- { |
- var elements = this._profileTreeElements; |
- for (var i = 0; i < elements.length; i++) { |
- if (elements[i].profile === profile) |
- return i; |
- } |
- return -1; |
- }, |
- |
- /** |
- * @override |
- */ |
- onattach: function() |
- { |
- this.listItemElement.classList.add("profiles-tree-section"); |
- }, |
- |
- __proto__: TreeElement.prototype |
-}; |
- |
- |
/** |
- * @constructor |
* @implements {WebInspector.ContextMenu.Provider} |
+ * @unrestricted |
*/ |
-WebInspector.ProfilesPanel.ContextMenuProvider = function() |
-{ |
-}; |
- |
-WebInspector.ProfilesPanel.ContextMenuProvider.prototype = { |
- /** |
- * @override |
- * @param {!Event} event |
- * @param {!WebInspector.ContextMenu} contextMenu |
- * @param {!Object} target |
- */ |
- appendApplicableItems: function(event, contextMenu, target) |
- { |
- WebInspector.ProfilesPanel._instance().appendApplicableItems(event, contextMenu, target); |
- } |
+WebInspector.ProfilesPanel.ContextMenuProvider = class { |
+ /** |
+ * @override |
+ * @param {!Event} event |
+ * @param {!WebInspector.ContextMenu} contextMenu |
+ * @param {!Object} target |
+ */ |
+ appendApplicableItems(event, contextMenu, target) { |
+ WebInspector.ProfilesPanel._instance().appendApplicableItems(event, contextMenu, target); |
+ } |
}; |
/** |
- * @constructor |
- * @extends {TreeElement} |
- * @param {!WebInspector.ProfileType.DataDisplayDelegate} dataDisplayDelegate |
- * @param {!WebInspector.ProfileHeader} profile |
- * @param {string} className |
+ * @unrestricted |
*/ |
-WebInspector.ProfileSidebarTreeElement = function(dataDisplayDelegate, profile, className) |
-{ |
- TreeElement.call(this, "", false); |
- this._iconElement = createElementWithClass("div", "icon"); |
- this._titlesElement = createElementWithClass("div", "titles no-subtitle"); |
- this._titleContainer = this._titlesElement.createChild("span", "title-container"); |
- this._titleElement = this._titleContainer.createChild("span", "title"); |
- this._subtitleElement = this._titlesElement.createChild("span", "subtitle"); |
+WebInspector.ProfileSidebarTreeElement = class extends TreeElement { |
+ /** |
+ * @param {!WebInspector.ProfileType.DataDisplayDelegate} dataDisplayDelegate |
+ * @param {!WebInspector.ProfileHeader} profile |
+ * @param {string} className |
+ */ |
+ constructor(dataDisplayDelegate, profile, className) { |
+ super('', false); |
+ this._iconElement = createElementWithClass('div', 'icon'); |
+ this._titlesElement = createElementWithClass('div', 'titles no-subtitle'); |
+ this._titleContainer = this._titlesElement.createChild('span', 'title-container'); |
+ this._titleElement = this._titleContainer.createChild('span', 'title'); |
+ this._subtitleElement = this._titlesElement.createChild('span', 'subtitle'); |
this._titleElement.textContent = profile.title; |
this._className = className; |
@@ -1131,224 +1066,198 @@ WebInspector.ProfileSidebarTreeElement = function(dataDisplayDelegate, profile, |
this.profile = profile; |
profile.addEventListener(WebInspector.ProfileHeader.Events.UpdateStatus, this._updateStatus, this); |
if (profile.canSaveToFile()) |
- this._createSaveLink(); |
+ this._createSaveLink(); |
else |
- profile.addEventListener(WebInspector.ProfileHeader.Events.ProfileReceived, this._onProfileReceived, this); |
-}; |
- |
-WebInspector.ProfileSidebarTreeElement.prototype = { |
- _createSaveLink: function() |
- { |
- this._saveLinkElement = this._titleContainer.createChild("span", "save-link"); |
- this._saveLinkElement.textContent = WebInspector.UIString("Save"); |
- this._saveLinkElement.addEventListener("click", this._saveProfile.bind(this), false); |
- }, |
- |
- _onProfileReceived: function(event) |
- { |
- this._createSaveLink(); |
- }, |
- |
- /** |
- * @param {!WebInspector.Event} event |
- */ |
- _updateStatus: function(event) |
- { |
- var statusUpdate = event.data; |
- if (statusUpdate.subtitle !== null) { |
- this._subtitleElement.textContent = statusUpdate.subtitle || ""; |
- this._titlesElement.classList.toggle("no-subtitle", !statusUpdate.subtitle); |
- } |
- if (typeof statusUpdate.wait === "boolean" && this.listItemElement) |
- this.listItemElement.classList.toggle("wait", statusUpdate.wait); |
- }, |
- |
- dispose: function() |
- { |
- this.profile.removeEventListener(WebInspector.ProfileHeader.Events.UpdateStatus, this._updateStatus, this); |
- this.profile.removeEventListener(WebInspector.ProfileHeader.Events.ProfileReceived, this._onProfileReceived, this); |
- }, |
- |
- /** |
- * @override |
- * @return {boolean} |
- */ |
- onselect: function() |
- { |
- this._dataDisplayDelegate.showProfile(this.profile); |
- return true; |
- }, |
- |
- /** |
- * @override |
- * @return {boolean} |
- */ |
- ondelete: function() |
- { |
- this.profile.profileType().removeProfile(this.profile); |
- return true; |
- }, |
- |
- /** |
- * @override |
- */ |
- onattach: function() |
- { |
- if (this._className) |
- this.listItemElement.classList.add(this._className); |
- if (this._small) |
- this.listItemElement.classList.add("small"); |
- this.listItemElement.appendChildren(this._iconElement, this._titlesElement); |
- this.listItemElement.addEventListener("contextmenu", this._handleContextMenuEvent.bind(this), true); |
- }, |
- |
- /** |
- * @param {!Event} event |
- */ |
- _handleContextMenuEvent: function(event) |
- { |
- var profile = this.profile; |
- var contextMenu = new WebInspector.ContextMenu(event); |
- // FIXME: use context menu provider |
- contextMenu.appendItem(WebInspector.UIString("Load\u2026"), WebInspector.ProfilesPanel._fileSelectorElement.click.bind(WebInspector.ProfilesPanel._fileSelectorElement)); |
- if (profile.canSaveToFile()) |
- contextMenu.appendItem(WebInspector.UIString("Save\u2026"), profile.saveToFile.bind(profile)); |
- contextMenu.appendItem(WebInspector.UIString("Delete"), this.ondelete.bind(this)); |
- contextMenu.show(); |
- }, |
- |
- _saveProfile: function(event) |
- { |
- this.profile.saveToFile(); |
- }, |
- |
- /** |
- * @param {boolean} small |
- */ |
- setSmall: function(small) |
- { |
- this._small = small; |
- if (this.listItemElement) |
- this.listItemElement.classList.toggle("small", this._small); |
- }, |
- |
- /** |
- * @param {string} title |
- */ |
- setMainTitle: function(title) |
- { |
- this._titleElement.textContent = title; |
- }, |
- |
- __proto__: TreeElement.prototype |
+ profile.addEventListener(WebInspector.ProfileHeader.Events.ProfileReceived, this._onProfileReceived, this); |
+ } |
+ |
+ _createSaveLink() { |
+ this._saveLinkElement = this._titleContainer.createChild('span', 'save-link'); |
+ this._saveLinkElement.textContent = WebInspector.UIString('Save'); |
+ this._saveLinkElement.addEventListener('click', this._saveProfile.bind(this), false); |
+ } |
+ |
+ _onProfileReceived(event) { |
+ this._createSaveLink(); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.Event} event |
+ */ |
+ _updateStatus(event) { |
+ var statusUpdate = event.data; |
+ if (statusUpdate.subtitle !== null) { |
+ this._subtitleElement.textContent = statusUpdate.subtitle || ''; |
+ this._titlesElement.classList.toggle('no-subtitle', !statusUpdate.subtitle); |
+ } |
+ if (typeof statusUpdate.wait === 'boolean' && this.listItemElement) |
+ this.listItemElement.classList.toggle('wait', statusUpdate.wait); |
+ } |
+ |
+ dispose() { |
+ this.profile.removeEventListener(WebInspector.ProfileHeader.Events.UpdateStatus, this._updateStatus, this); |
+ this.profile.removeEventListener(WebInspector.ProfileHeader.Events.ProfileReceived, this._onProfileReceived, this); |
+ } |
+ |
+ /** |
+ * @override |
+ * @return {boolean} |
+ */ |
+ onselect() { |
+ this._dataDisplayDelegate.showProfile(this.profile); |
+ return true; |
+ } |
+ |
+ /** |
+ * @override |
+ * @return {boolean} |
+ */ |
+ ondelete() { |
+ this.profile.profileType().removeProfile(this.profile); |
+ return true; |
+ } |
+ |
+ /** |
+ * @override |
+ */ |
+ onattach() { |
+ if (this._className) |
+ this.listItemElement.classList.add(this._className); |
+ if (this._small) |
+ this.listItemElement.classList.add('small'); |
+ this.listItemElement.appendChildren(this._iconElement, this._titlesElement); |
+ this.listItemElement.addEventListener('contextmenu', this._handleContextMenuEvent.bind(this), true); |
+ } |
+ |
+ /** |
+ * @param {!Event} event |
+ */ |
+ _handleContextMenuEvent(event) { |
+ var profile = this.profile; |
+ var contextMenu = new WebInspector.ContextMenu(event); |
+ // FIXME: use context menu provider |
+ contextMenu.appendItem( |
+ WebInspector.UIString('Load\u2026'), |
+ WebInspector.ProfilesPanel._fileSelectorElement.click.bind(WebInspector.ProfilesPanel._fileSelectorElement)); |
+ if (profile.canSaveToFile()) |
+ contextMenu.appendItem(WebInspector.UIString('Save\u2026'), profile.saveToFile.bind(profile)); |
+ contextMenu.appendItem(WebInspector.UIString('Delete'), this.ondelete.bind(this)); |
+ contextMenu.show(); |
+ } |
+ |
+ _saveProfile(event) { |
+ this.profile.saveToFile(); |
+ } |
+ |
+ /** |
+ * @param {boolean} small |
+ */ |
+ setSmall(small) { |
+ this._small = small; |
+ if (this.listItemElement) |
+ this.listItemElement.classList.toggle('small', this._small); |
+ } |
+ |
+ /** |
+ * @param {string} title |
+ */ |
+ setMainTitle(title) { |
+ this._titleElement.textContent = title; |
+ } |
}; |
/** |
- * @constructor |
- * @extends {TreeElement} |
- * @param {!WebInspector.ProfileType.DataDisplayDelegate} dataDisplayDelegate |
- * @param {string} title |
+ * @unrestricted |
*/ |
-WebInspector.ProfileGroupSidebarTreeElement = function(dataDisplayDelegate, title) |
-{ |
- TreeElement.call(this, "", true); |
+WebInspector.ProfileGroupSidebarTreeElement = class extends TreeElement { |
+ /** |
+ * @param {!WebInspector.ProfileType.DataDisplayDelegate} dataDisplayDelegate |
+ * @param {string} title |
+ */ |
+ constructor(dataDisplayDelegate, title) { |
+ super('', true); |
this.selectable = false; |
this._dataDisplayDelegate = dataDisplayDelegate; |
this._title = title; |
this.expand(); |
this.toggleOnClick = true; |
-}; |
- |
-WebInspector.ProfileGroupSidebarTreeElement.prototype = { |
- /** |
- * @override |
- * @return {boolean} |
- */ |
- onselect: function() |
- { |
- var hasChildren = this.childCount() > 0; |
- if (hasChildren) |
- this._dataDisplayDelegate.showProfile(this.lastChild().profile); |
- return hasChildren; |
- }, |
- |
- /** |
- * @override |
- */ |
- onattach: function() |
- { |
- this.listItemElement.classList.add("profile-group-sidebar-tree-item"); |
- this.listItemElement.createChild("div", "icon"); |
- this.listItemElement.createChild("div", "titles no-subtitle").createChild("span", "title-container").createChild("span", "title").textContent = this._title; |
- }, |
- |
- __proto__: TreeElement.prototype |
+ } |
+ |
+ /** |
+ * @override |
+ * @return {boolean} |
+ */ |
+ onselect() { |
+ var hasChildren = this.childCount() > 0; |
+ if (hasChildren) |
+ this._dataDisplayDelegate.showProfile(this.lastChild().profile); |
+ return hasChildren; |
+ } |
+ |
+ /** |
+ * @override |
+ */ |
+ onattach() { |
+ this.listItemElement.classList.add('profile-group-sidebar-tree-item'); |
+ this.listItemElement.createChild('div', 'icon'); |
+ this.listItemElement.createChild('div', 'titles no-subtitle') |
+ .createChild('span', 'title-container') |
+ .createChild('span', 'title') |
+ .textContent = this._title; |
+ } |
}; |
/** |
- * @constructor |
- * @extends {TreeElement} |
- * @param {!WebInspector.ProfilesPanel} panel |
+ * @unrestricted |
*/ |
-WebInspector.ProfilesSidebarTreeElement = function(panel) |
-{ |
- TreeElement.call(this, "", false); |
+WebInspector.ProfilesSidebarTreeElement = class extends TreeElement { |
+ /** |
+ * @param {!WebInspector.ProfilesPanel} panel |
+ */ |
+ constructor(panel) { |
+ super('', false); |
this.selectable = true; |
this._panel = panel; |
+ } |
+ |
+ /** |
+ * @override |
+ * @return {boolean} |
+ */ |
+ onselect() { |
+ this._panel._showLauncherView(); |
+ return true; |
+ } |
+ |
+ /** |
+ * @override |
+ */ |
+ onattach() { |
+ this.listItemElement.classList.add('profile-launcher-view-tree-item'); |
+ this.listItemElement.createChild('div', 'icon'); |
+ this.listItemElement.createChild('div', 'titles no-subtitle') |
+ .createChild('span', 'title-container') |
+ .createChild('span', 'title') |
+ .textContent = WebInspector.UIString('Profiles'); |
+ } |
}; |
-WebInspector.ProfilesSidebarTreeElement.prototype = { |
- /** |
- * @override |
- * @return {boolean} |
- */ |
- onselect: function() |
- { |
- this._panel._showLauncherView(); |
- return true; |
- }, |
- |
- /** |
- * @override |
- */ |
- onattach: function() |
- { |
- this.listItemElement.classList.add("profile-launcher-view-tree-item"); |
- this.listItemElement.createChild("div", "icon"); |
- this.listItemElement.createChild("div", "titles no-subtitle").createChild("span", "title-container").createChild("span", "title").textContent = WebInspector.UIString("Profiles"); |
- }, |
- |
- __proto__: TreeElement.prototype |
-}; |
- |
-/** |
- * @return {!WebInspector.ProfilesPanel} |
- */ |
-WebInspector.ProfilesPanel._instance = function() |
-{ |
- return /** @type {!WebInspector.ProfilesPanel} */ (self.runtime.sharedInstance(WebInspector.ProfilesPanel)); |
-}; |
/** |
- * @constructor |
* @implements {WebInspector.ActionDelegate} |
+ * @unrestricted |
*/ |
-WebInspector.ProfilesPanel.RecordActionDelegate = function() |
-{ |
-}; |
- |
-WebInspector.ProfilesPanel.RecordActionDelegate.prototype = { |
- /** |
- * @override |
- * @param {!WebInspector.Context} context |
- * @param {string} actionId |
- * @return {boolean} |
- */ |
- handleAction: function(context, actionId) |
- { |
- var panel = WebInspector.context.flavor(WebInspector.ProfilesPanel); |
- console.assert(panel && panel instanceof WebInspector.ProfilesPanel); |
- panel.toggleRecord(); |
- return true; |
- } |
+WebInspector.ProfilesPanel.RecordActionDelegate = class { |
+ /** |
+ * @override |
+ * @param {!WebInspector.Context} context |
+ * @param {string} actionId |
+ * @return {boolean} |
+ */ |
+ handleAction(context, actionId) { |
+ var panel = WebInspector.context.flavor(WebInspector.ProfilesPanel); |
+ console.assert(panel && panel instanceof WebInspector.ProfilesPanel); |
+ panel.toggleRecord(); |
+ return true; |
+ } |
}; |