Index: third_party/WebKit/Source/devtools/front_end/object_ui/ObjectPopoverHelper.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/object_ui/ObjectPopoverHelper.js b/third_party/WebKit/Source/devtools/front_end/object_ui/ObjectPopoverHelper.js |
index b790cd034c2b43d8e4e9ec754e0d5e189ce30dfd..72df88108b802967696836c7e9a09b2c3f470ae6 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/object_ui/ObjectPopoverHelper.js |
+++ b/third_party/WebKit/Source/devtools/front_end/object_ui/ObjectPopoverHelper.js |
@@ -42,6 +42,7 @@ ObjectUI.ObjectPopoverHelper = class extends UI.PopoverHelper { |
constructor(panelElement, getAnchor, queryObject, onHide, disableOnClick) { |
super(panelElement, disableOnClick); |
this.initializeCallbacks(getAnchor, this._showObjectPopover.bind(this), this._onHideObjectPopover.bind(this)); |
+ this.setHasPadding(true); |
this._queryObject = queryObject; |
this._onHideCallback = onHide; |
this._popoverObjectGroup = 'popover'; |
@@ -50,20 +51,23 @@ ObjectUI.ObjectPopoverHelper = class extends UI.PopoverHelper { |
/** |
* @param {!Element} element |
- * @param {!UI.Popover} popover |
+ * @param {!UI.GlassPane} popover |
+ * @return {!Promise<boolean>} |
*/ |
_showObjectPopover(element, popover) { |
+ var fulfill; |
+ var promise = new Promise(x => fulfill = x); |
+ |
/** |
* @param {!SDK.RemoteObject} funcObject |
* @param {!Element} popoverContentElement |
* @param {!Element} popoverValueElement |
- * @param {!Element} anchorElement |
* @param {?Array.<!SDK.RemoteObjectProperty>} properties |
* @param {?Array.<!SDK.RemoteObjectProperty>} internalProperties |
* @this {ObjectUI.ObjectPopoverHelper} |
*/ |
function didGetFunctionProperties( |
- funcObject, popoverContentElement, popoverValueElement, anchorElement, properties, internalProperties) { |
+ funcObject, popoverContentElement, popoverValueElement, properties, internalProperties) { |
if (internalProperties) { |
for (var i = 0; i < internalProperties.length; i++) { |
if (internalProperties[i].name === '[[TargetFunction]]') { |
@@ -75,18 +79,19 @@ ObjectUI.ObjectPopoverHelper = class extends UI.PopoverHelper { |
ObjectUI.ObjectPropertiesSection.formatObjectAsFunction(funcObject, popoverValueElement, true); |
funcObject.debuggerModel() |
.functionDetailsPromise(funcObject) |
- .then(didGetFunctionDetails.bind(this, popoverContentElement, anchorElement)); |
+ .then(didGetFunctionDetails.bind(this, popoverContentElement)); |
} |
/** |
* @param {!Element} popoverContentElement |
- * @param {!Element} anchorElement |
* @param {?SDK.DebuggerModel.FunctionDetails} response |
* @this {ObjectUI.ObjectPopoverHelper} |
*/ |
- function didGetFunctionDetails(popoverContentElement, anchorElement, response) { |
- if (!response || this._disposed) |
+ function didGetFunctionDetails(popoverContentElement, response) { |
+ if (!response || this._disposed) { |
+ fulfill(false); |
return; |
+ } |
var container = createElementWithClass('div', 'object-popover-container'); |
var title = container.createChild('div', 'function-popover-title source-code'); |
@@ -99,24 +104,29 @@ ObjectUI.ObjectPopoverHelper = class extends UI.PopoverHelper { |
if (rawLocation && sourceURL) |
linkContainer.appendChild(this._lazyLinkifier().linkifyRawLocation(rawLocation, sourceURL)); |
container.appendChild(popoverContentElement); |
- popover.showForAnchor(container, anchorElement); |
+ popover.contentElement.appendChild(container); |
+ fulfill(true); |
} |
/** |
* @param {!SDK.RemoteObject} result |
* @param {boolean} wasThrown |
- * @param {!Element=} anchorOverride |
+ * @param {!Element|!AnchorBox=} anchorOverride |
* @this {ObjectUI.ObjectPopoverHelper} |
*/ |
function didQueryObject(result, wasThrown, anchorOverride) { |
- if (this._disposed) |
+ if (this._disposed) { |
+ fulfill(false); |
return; |
+ } |
if (wasThrown) { |
this.hidePopover(); |
+ fulfill(false); |
return; |
} |
this._objectTarget = result.target(); |
- var anchorElement = anchorOverride || element; |
+ var anchor = anchorOverride || element; |
+ popover.setContentAnchorBox(anchor instanceof AnchorBox ? anchor : anchor.boxInWindow()); |
var description = result.description.trimEnd(ObjectUI.ObjectPopoverHelper.MaxPopoverTextLength); |
var popoverContentElement = null; |
if (result.type !== 'object') { |
@@ -134,10 +144,11 @@ ObjectUI.ObjectPopoverHelper = class extends UI.PopoverHelper { |
if (result.type === 'function') { |
result.getOwnProperties( |
false /* generatePreview */, |
- didGetFunctionProperties.bind(this, result, popoverContentElement, valueElement, anchorElement)); |
+ didGetFunctionProperties.bind(this, result, popoverContentElement, valueElement)); |
return; |
} |
- popover.showForAnchor(popoverContentElement, anchorElement); |
+ popover.contentElement.appendChild(popoverContentElement); |
+ fulfill(true); |
} else { |
if (result.subtype === 'node') { |
SDK.DOMModel.highlightObjectAsDOMNode(result); |
@@ -160,11 +171,13 @@ ObjectUI.ObjectPopoverHelper = class extends UI.PopoverHelper { |
} |
popover.setMaxContentSize(new UI.Size(300, 250)); |
popover.setSizeBehavior(UI.GlassPane.SizeBehavior.SetExactSize); |
- popover.showForAnchor(popoverContentElement, anchorElement); |
+ popover.contentElement.appendChild(popoverContentElement); |
+ fulfill(true); |
} |
} |
this._disposed = false; |
this._queryObject(element, didQueryObject.bind(this), this._popoverObjectGroup); |
+ return promise; |
} |
_onHideObjectPopover() { |