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

Unified Diff: third_party/WebKit/Source/devtools/front_end/object_ui/ObjectPopoverHelper.js

Issue 2745903003: [DevTools] Do not inherit ObjectPopoverHelper from PopoverHelper. (Closed)
Patch Set: addressed review comments 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/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 72df88108b802967696836c7e9a09b2c3f470ae6..29c15334d34d6efcd4b89494f074b9091e74e371 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
@@ -28,33 +28,29 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-/**
- * @unrestricted
- */
-ObjectUI.ObjectPopoverHelper = class extends UI.PopoverHelper {
+ObjectUI.ObjectPopoverHelper = class {
/**
- * @param {!Element} panelElement
- * @param {function(!Element, !Event):(!Element|!AnchorBox|undefined)} getAnchor
- * @param {function(!Element, function(!SDK.RemoteObject, boolean, !Element=):undefined, string):undefined} queryObject
- * @param {function()=} onHide
- * @param {boolean=} disableOnClick
+ * @param {?Components.Linkifier} linkifier
+ * @param {boolean} resultHighlightedAsDOM
*/
- 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';
- panelElement.addEventListener('scroll', this.hidePopover.bind(this), true);
+ constructor(linkifier, resultHighlightedAsDOM) {
+ this._linkifier = linkifier;
+ this._resultHighlightedAsDOM = resultHighlightedAsDOM;
+ }
+
+ dispose() {
+ if (this._resultHighlightedAsDOM)
+ SDK.DOMModel.hideDOMNodeHighlight();
+ if (this._linkifier)
+ this._linkifier.dispose();
}
/**
- * @param {!Element} element
+ * @param {!SDK.RemoteObject} result
* @param {!UI.GlassPane} popover
- * @return {!Promise<boolean>}
+ * @return {!Promise<?ObjectUI.ObjectPopoverHelper>}
*/
- _showObjectPopover(element, popover) {
+ static buildObjectPopover(result, popover) {
var fulfill;
var promise = new Promise(x => fulfill = x);
@@ -64,7 +60,6 @@ ObjectUI.ObjectPopoverHelper = class extends UI.PopoverHelper {
* @param {!Element} popoverValueElement
* @param {?Array.<!SDK.RemoteObjectProperty>} properties
* @param {?Array.<!SDK.RemoteObjectProperty>} internalProperties
- * @this {ObjectUI.ObjectPopoverHelper}
*/
function didGetFunctionProperties(
funcObject, popoverContentElement, popoverValueElement, properties, internalProperties) {
@@ -79,17 +74,16 @@ ObjectUI.ObjectPopoverHelper = class extends UI.PopoverHelper {
ObjectUI.ObjectPropertiesSection.formatObjectAsFunction(funcObject, popoverValueElement, true);
funcObject.debuggerModel()
.functionDetailsPromise(funcObject)
- .then(didGetFunctionDetails.bind(this, popoverContentElement));
+ .then(didGetFunctionDetails.bind(null, popoverContentElement));
}
/**
* @param {!Element} popoverContentElement
* @param {?SDK.DebuggerModel.FunctionDetails} response
- * @this {ObjectUI.ObjectPopoverHelper}
*/
function didGetFunctionDetails(popoverContentElement, response) {
- if (!response || this._disposed) {
- fulfill(false);
+ if (!response) {
+ fulfill(null);
return;
}
@@ -101,111 +95,68 @@ ObjectUI.ObjectPopoverHelper = class extends UI.PopoverHelper {
var rawLocation = response.location;
var linkContainer = title.createChild('div', 'function-title-link-container');
var sourceURL = rawLocation && rawLocation.script() ? rawLocation.script().sourceURL : null;
- if (rawLocation && sourceURL)
- linkContainer.appendChild(this._lazyLinkifier().linkifyRawLocation(rawLocation, sourceURL));
+ var linkifier = null;
+ if (rawLocation && sourceURL) {
+ linkifier = new Components.Linkifier();
+ linkContainer.appendChild(linkifier.linkifyRawLocation(rawLocation, sourceURL));
+ }
container.appendChild(popoverContentElement);
popover.contentElement.appendChild(container);
- fulfill(true);
+ fulfill(new ObjectUI.ObjectPopoverHelper(linkifier, false));
}
- /**
- * @param {!SDK.RemoteObject} result
- * @param {boolean} wasThrown
- * @param {!Element|!AnchorBox=} anchorOverride
- * @this {ObjectUI.ObjectPopoverHelper}
- */
- function didQueryObject(result, wasThrown, anchorOverride) {
- if (this._disposed) {
- fulfill(false);
- return;
+ var description = result.description.trimEnd(ObjectUI.ObjectPopoverHelper.MaxPopoverTextLength);
+ var popoverContentElement = null;
+ if (result.type !== 'object') {
+ popoverContentElement = createElement('span');
+ UI.appendStyle(popoverContentElement, 'object_ui/objectValue.css');
+ UI.appendStyle(popoverContentElement, 'object_ui/objectPopover.css');
+ var valueElement = popoverContentElement.createChild('span', 'monospace object-value-' + result.type);
+ valueElement.style.whiteSpace = 'pre';
+
+ if (result.type === 'string')
+ valueElement.createTextChildren('"', description, '"');
+ else if (result.type !== 'function')
+ valueElement.textContent = description;
+
+ if (result.type === 'function') {
+ result.getOwnProperties(
+ false /* generatePreview */,
+ didGetFunctionProperties.bind(null, result, popoverContentElement, valueElement));
+ return promise;
}
- if (wasThrown) {
- this.hidePopover();
- fulfill(false);
- return;
+ popover.contentElement.appendChild(popoverContentElement);
+ fulfill(new ObjectUI.ObjectPopoverHelper(null, false));
+ } else {
+ var linkifier = null;
+ var resultHighlightedAsDOM = false;
+ if (result.subtype === 'node') {
+ SDK.DOMModel.highlightObjectAsDOMNode(result);
+ resultHighlightedAsDOM = true;
}
- this._objectTarget = result.target();
- 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') {
- popoverContentElement = createElement('span');
- UI.appendStyle(popoverContentElement, 'object_ui/objectValue.css');
- UI.appendStyle(popoverContentElement, 'object_ui/objectPopover.css');
- var valueElement = popoverContentElement.createChild('span', 'monospace object-value-' + result.type);
- valueElement.style.whiteSpace = 'pre';
-
- if (result.type === 'string')
- valueElement.createTextChildren('"', description, '"');
- else if (result.type !== 'function')
- valueElement.textContent = description;
- if (result.type === 'function') {
- result.getOwnProperties(
- false /* generatePreview */,
- didGetFunctionProperties.bind(this, result, popoverContentElement, valueElement));
- return;
- }
- popover.contentElement.appendChild(popoverContentElement);
- fulfill(true);
+ if (result.customPreview()) {
+ var customPreviewComponent = new ObjectUI.CustomPreviewComponent(result);
+ customPreviewComponent.expandIfPossible();
+ popoverContentElement = customPreviewComponent.element;
} else {
- if (result.subtype === 'node') {
- SDK.DOMModel.highlightObjectAsDOMNode(result);
- this._resultHighlightedAsDOM = true;
- }
-
- if (result.customPreview()) {
- var customPreviewComponent = new ObjectUI.CustomPreviewComponent(result);
- customPreviewComponent.expandIfPossible();
- popoverContentElement = customPreviewComponent.element;
- } else {
- popoverContentElement = createElementWithClass('div', 'object-popover-content');
- UI.appendStyle(popoverContentElement, 'object_ui/objectPopover.css');
- var titleElement = popoverContentElement.createChild('div', 'monospace object-popover-title');
- titleElement.createChild('span').textContent = description;
- var section = new ObjectUI.ObjectPropertiesSection(result, '', this._lazyLinkifier());
- section.element.classList.add('object-popover-tree');
- section.titleLessMode();
- popoverContentElement.appendChild(section.element);
- }
- popover.setMaxContentSize(new UI.Size(300, 250));
- popover.setSizeBehavior(UI.GlassPane.SizeBehavior.SetExactSize);
- popover.contentElement.appendChild(popoverContentElement);
- fulfill(true);
+ popoverContentElement = createElementWithClass('div', 'object-popover-content');
+ UI.appendStyle(popoverContentElement, 'object_ui/objectPopover.css');
+ var titleElement = popoverContentElement.createChild('div', 'monospace object-popover-title');
+ titleElement.createChild('span').textContent = description;
+ linkifier = new Components.Linkifier();
+ var section = new ObjectUI.ObjectPropertiesSection(result, '', linkifier);
+ section.element.classList.add('object-popover-tree');
+ section.titleLessMode();
+ popoverContentElement.appendChild(section.element);
}
+ popover.setMaxContentSize(new UI.Size(300, 250));
+ popover.setSizeBehavior(UI.GlassPane.SizeBehavior.SetExactSize);
+ popover.contentElement.appendChild(popoverContentElement);
+ fulfill(new ObjectUI.ObjectPopoverHelper(linkifier, resultHighlightedAsDOM));
}
- this._disposed = false;
- this._queryObject(element, didQueryObject.bind(this), this._popoverObjectGroup);
return promise;
}
-
- _onHideObjectPopover() {
- this._disposed = true;
- if (this._resultHighlightedAsDOM) {
- SDK.DOMModel.hideDOMNodeHighlight();
- delete this._resultHighlightedAsDOM;
- }
- if (this._linkifier) {
- this._linkifier.dispose();
- delete this._linkifier;
- }
- if (this._onHideCallback)
- this._onHideCallback();
- if (this._objectTarget) {
- this._objectTarget.runtimeModel.releaseObjectGroup(this._popoverObjectGroup);
- delete this._objectTarget;
- }
- }
-
- /**
- * @return {!Components.Linkifier}
- */
- _lazyLinkifier() {
- if (!this._linkifier)
- this._linkifier = new Components.Linkifier();
- return this._linkifier;
- }
};
ObjectUI.ObjectPopoverHelper.MaxPopoverTextLength = 10000;

Powered by Google App Engine
This is Rietveld 408576698