stance(tipElement) || defView.HTMLButtonElement.isInstance(tipElement)) && !tipElement.form?.noValidate ) { // If the element is barred from constraint validation or valid, // the validation message will be the empty string. titleText = tipElement.validationMessage || null; } // If the element is an without a title, we should show // the current file selection. if ( titleText == null && defView.HTMLInputElement.isInstance(tipElement) && tipElement.type == "file" ) { try { titleText = getFileInputTitleText(tipElement); } catch (ex) {} } if ( lookingForSVGTitle && tipElement.parentNode.nodeType != defView.Node.DOCUMENT_NODE ) { for (let childNode of tipElement.childNodes) { if (defView.SVGTitleElement.isInstance(childNode)) { titleText = childNode.textContent; break; } } } // Check texts against null so that title="" can be used to undefine a // title on a child element. if (titleText != null || XLinkTitleText != null) { break; } } return [titleText, XLinkTitleText].some(function (t) { if (t && /\S/.test(t)) { // Make CRLF and CR render one line break each. textOut.value = t.replace(/\r\n?/g, "\n"); if (tipElement) { direction = defView .getComputedStyle(tipElement) .getPropertyValue("direction"); } directionOut.value = direction; return true; } return false; }); }, classID: Components.ID("{f376627f-0bbc-47b8-887e-fc92574cc91f}"), QueryInterface: ChromeUtils.generateQI(["nsITooltipTextProvider"]), }; PK