Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(553)

Unified Diff: third_party/WebKit/Source/devtools/front_end/profiler/HeapSnapshotView.js

Issue 2747553002: [DevTools] Rework Popover API (Closed)
Patch Set: works! Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..b3de9dc5e24dbc706357dfdeedeba75e98fef759 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,53 @@ 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 => {
- if (!objectPopoverHelper) {
- this._onHidePopover(); // Cleanup object resolving artifacts.
- fulfill(false);
- return;
+ _getPopoverContent(event) {
+ var span = event.target.enclosingNodeOrSelfWithNodeName('span');
+ var row = event.target.enclosingNodeOrSelfWithNodeName('tr');
+ if (!row || !span)
+ return null;
+ var node = row._dataGridNode;
+ var objectPopoverHelper;
+ return {
+ box: span.boxInWindow(),
+ show: popover => {
+ if (!this._profile.target())
+ return Promise.resolve(false);
+
+ var fulfill;
+ var promise = new Promise(x => fulfill = x);
+ 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(helper => {
+ if (!helper) {
+ this._profile.target().runtimeModel.releaseObjectGroup('popover');
+ fulfill(false);
+ return;
+ }
+ objectPopoverHelper = helper;
+ fulfill(true);
+ });
}
- this._objectPopoverHelper = objectPopoverHelper;
- fulfill(true);
- });
- }
- }
-
- _onHidePopover() {
- if (this._objectPopoverHelper) {
- this._objectPopoverHelper.dispose();
- delete this._objectPopoverHelper;
- }
- this._profile.target().runtimeModel.releaseObjectGroup('popover');
+ },
+ hide: () => {
+ this._profile.target().runtimeModel.releaseObjectGroup('popover');
+ objectPopoverHelper.dispose();
+ }
+ };
}
_updatePerspectiveOptions() {

Powered by Google App Engine
This is Rietveld 408576698