From 9e7ea3ff7bd356eb3693533e9c34f6c10619a183 Mon Sep 17 00:00:00 2001 From: Dmitry Gozman Date: Tue, 16 Jun 2020 06:13:58 -0700 Subject: [PATCH] browser(firefox): Page.scrollIntoViewIfNeeded throws for invisible elements (#2584) This is similar to other browsers that report distinct errors for 'not connected' vs 'not visible' cases. --- browser_patches/firefox/BUILD_NUMBER | 2 +- browser_patches/firefox/juggler/content/PageAgent.js | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/browser_patches/firefox/BUILD_NUMBER b/browser_patches/firefox/BUILD_NUMBER index 9707e87684..af6316f1e0 100644 --- a/browser_patches/firefox/BUILD_NUMBER +++ b/browser_patches/firefox/BUILD_NUMBER @@ -1 +1 @@ -1108 +1109 diff --git a/browser_patches/firefox/juggler/content/PageAgent.js b/browser_patches/firefox/juggler/content/PageAgent.js index e5ed8358a5..4c759767f7 100644 --- a/browser_patches/firefox/juggler/content/PageAgent.js +++ b/browser_patches/firefox/juggler/content/PageAgent.js @@ -621,6 +621,17 @@ class PageAgent { const unsafeObject = this._frameData.get(frame).unsafeObject(objectId); if (!unsafeObject.isConnected) throw new Error('Node is detached from document'); + if (!unsafeObject.ownerDocument || !unsafeObject.ownerDocument.defaultView) + throw new Error('Node is detached from document'); + const element = unsafeObject.nodeType === 1 ? unsafeObject : unsafeObject.parentElement; + if (!element) + throw new Error('Node is detached from document'); + const style = unsafeObject.ownerDocument.defaultView.getComputedStyle(element); + if (!style || style.visibility === 'hidden') + throw new Error('Node is not visible'); + const bounds = element.getBoundingClientRect(); + if (bounds.width <= 0 || bounds.height <= 0) + throw new Error('Node is not visible'); if (!rect) rect = { x: -1, y: -1, width: -1, height: -1}; if (unsafeObject.scrollRectIntoViewIfNeeded)