Chromium Code Reviews| Index: third_party/WebKit/Source/devtools/front_end/profiler/HeapSnapshotView.js |
| diff --git a/third_party/WebKit/Source/devtools/front_end/profiler/HeapSnapshotView.js b/third_party/WebKit/Source/devtools/front_end/profiler/HeapSnapshotView.js |
| index 95e833e5a911a7f0e6c4f9f9b97bc41d9c93e1ec..80d057f93d74a5a2d11a407927bdf929f0698dd0 100644 |
| --- a/third_party/WebKit/Source/devtools/front_end/profiler/HeapSnapshotView.js |
| +++ b/third_party/WebKit/Source/devtools/front_end/profiler/HeapSnapshotView.js |
| @@ -153,9 +153,7 @@ Profiler.HeapSnapshotView = class extends UI.SimpleView { |
| this._selectedSizeText = new UI.ToolbarText(); |
| - this._popoverHelper = new UI.PopoverHelper(this.element, true); |
| - this._popoverHelper.initializeCallbacks( |
| - this._getHoverAnchor.bind(this), this._showObjectPopover.bind(this), this._onHidePopover.bind(this)); |
| + this._popoverHelper = new UI.PopoverHelper(this.element, true, this._getPopoverContent.bind(this)); |
| this._popoverHelper.setHasPadding(true); |
| this.element.addEventListener('scroll', this._popoverHelper.hidePopover.bind(this._popoverHelper), true); |
| @@ -607,58 +605,36 @@ Profiler.HeapSnapshotView = class extends UI.SimpleView { |
| } |
| } |
| - _getHoverAnchor(target) { |
| - var span = target.enclosingNodeOrSelfWithNodeName('span'); |
| - if (!span) |
| - return; |
| - var row = target.enclosingNodeOrSelfWithNodeName('tr'); |
| - if (!row) |
| - return; |
| - span.node = row._dataGridNode; |
| - return span; |
| - } |
| - |
| /** |
| - * @param {!Element|!AnchorBox} element |
| - * @param {!UI.GlassPane} popover |
| - * @return {!Promise<boolean>} |
| + * @param {!Event} event |
| + * @return {?UI.PopoverContent} |
| */ |
| - _showObjectPopover(element, popover) { |
| - if (!this._profile.target() || !element.node) |
| - return Promise.resolve(false); |
| - |
| - var fulfill; |
| - var promise = new Promise(x => fulfill = x); |
| - element.node.queryObjectContent(this._profile.target(), onObjectResolved.bind(this), 'popover'); |
| - return promise; |
| - |
| - /** |
| - * @param {?SDK.RemoteObject} result |
| - * @this {Profiler.HeapSnapshotView} |
| - */ |
| - function onObjectResolved(result) { |
| - if (!result) { |
| - fulfill(false); |
| - return; |
| - } |
| - ObjectUI.ObjectPopoverHelper.buildObjectPopover(result, popover).then(objectPopoverHelper => { |
| + _getPopoverContent(event) { |
| + var span = event.target.enclosingNodeOrSelfWithNodeName('span'); |
| + var row = event.target.enclosingNodeOrSelfWithNodeName('tr'); |
| + var target = this._profile.target(); |
| + if (!row || !span || !target) |
| + return null; |
| + var node = row._dataGridNode; |
| + var objectPopoverHelper; |
| + return { |
| + box: span.boxInWindow(), |
| + show: async popover => { |
| + var remoteObject = await node.queryObjectContent(target, 'popover'); |
| + if (!remoteObject) |
| + return false; |
| + objectPopoverHelper = await ObjectUI.ObjectPopoverHelper.buildObjectPopover(remoteObject, popover); |
| if (!objectPopoverHelper) { |
| - this._onHidePopover(); // Cleanup object resolving artifacts. |
| - fulfill(false); |
| - return; |
| + target.runtimeModel.releaseObjectGroup('popover'); |
|
lushnikov
2017/03/14 01:44:03
these partial clean-ups would be easy to forget. M
dgozman
2017/03/14 21:34:01
I think that would be a strange API and will not d
|
| + return false; |
| } |
| - this._objectPopoverHelper = objectPopoverHelper; |
| - fulfill(true); |
| - }); |
| - } |
| - } |
| - |
| - _onHidePopover() { |
| - if (this._objectPopoverHelper) { |
| - this._objectPopoverHelper.dispose(); |
| - delete this._objectPopoverHelper; |
| - } |
| - this._profile.target().runtimeModel.releaseObjectGroup('popover'); |
| + return true; |
| + }, |
| + hide: () => { |
| + target.runtimeModel.releaseObjectGroup('popover'); |
| + objectPopoverHelper.dispose(); |
| + } |
| + }; |
| } |
| _updatePerspectiveOptions() { |