From a115e0ace09a23b458f7d143c128cd48f3ae7993 Mon Sep 17 00:00:00 2001 From: Makoto Kato Date: Thu, 26 Jan 2023 01:51:57 +0000 Subject: [PATCH] Bug 1760324 - Add xorigin test to SelectionActionDelegateTest. r=geckoview-reviewers,owlish Differential Revision: https://phabricator.services.mozilla.com/D166911 --- .../src/androidTest/assets/www/inputs.html | 1 + .../www/selectionAction_frame_xorigin.html | 36 +++++++++++++ .../test/SelectionActionDelegateTest.kt | 53 ++++++++++++++++++- 3 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 mobile/android/geckoview/src/androidTest/assets/www/selectionAction_frame_xorigin.html diff --git a/mobile/android/geckoview/src/androidTest/assets/www/inputs.html b/mobile/android/geckoview/src/androidTest/assets/www/inputs.html index 7bf86c82dfd2..02d288d03ede 100644 --- a/mobile/android/geckoview/src/androidTest/assets/www/inputs.html +++ b/mobile/android/geckoview/src/androidTest/assets/www/inputs.html @@ -48,6 +48,7 @@
sit
+ + + + diff --git a/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/SelectionActionDelegateTest.kt b/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/SelectionActionDelegateTest.kt index efcc19e42d19..fb9247f3bfb5 100644 --- a/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/SelectionActionDelegateTest.kt +++ b/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/SelectionActionDelegateTest.kt @@ -46,7 +46,7 @@ class SelectionActionDelegateTest : BaseSessionTest() { override val rules: RuleChain = RuleChain.outerRule(activityRule).around(sessionRule) enum class ContentType { - DIV, EDITABLE_ELEMENT, IFRAME + DIV, EDITABLE_ELEMENT, IFRAME, IFRAME_XORIGIN } companion object { @@ -59,6 +59,7 @@ class SelectionActionDelegateTest : BaseSessionTest() { arrayOf("#contenteditable", ContentType.DIV, "sit", true), arrayOf("#iframe", ContentType.IFRAME, "amet", false), arrayOf("#designmode", ContentType.IFRAME, "consectetur", true), + arrayOf("#iframe-xorigin", ContentType.IFRAME_XORIGIN, "elit", false), arrayOf("#x-input", ContentType.EDITABLE_ELEMENT, "adipisci", true) ) } @@ -84,6 +85,7 @@ class SelectionActionDelegateTest : BaseSessionTest() { ContentType.DIV -> SelectedDiv(id, initialContent) ContentType.EDITABLE_ELEMENT -> SelectedEditableElement(id, initialContent) ContentType.IFRAME -> SelectedFrame(id, initialContent) + ContentType.IFRAME_XORIGIN -> SelectedFrameXOrigin(id, initialContent) } } @@ -92,6 +94,7 @@ class SelectionActionDelegateTest : BaseSessionTest() { ContentType.DIV -> CollapsedDiv(id) ContentType.EDITABLE_ELEMENT -> CollapsedEditableElement(id) ContentType.IFRAME -> CollapsedFrame(id) + ContentType.IFRAME_XORIGIN -> CollapsedFrameXOrigin(id) } } @@ -763,6 +766,54 @@ class SelectionActionDelegateTest : BaseSessionTest() { override fun select() = selectTo(0) } + open inner class SelectedFrameXOrigin( + val id: String, + override val initialContent: String + ) : SelectedContent { + override fun focus() { + mainSession.evaluateJS("document.querySelector('$id').contentWindow.postMessage({ type: 'focus' }, '*')") + } + + protected fun selectTo(to: Int) { + mainSession.evaluateJS("document.querySelector('$id').contentWindow.postMessage({ type: 'select', length: $to }, '*')") + } + + override fun select() = selectTo(initialContent.length) + + override val content: String get() { + val promise = mainSession.evaluatePromiseJS( + """ + new Promise(resolve => { + window.addEventListener('message', e => { + resolve(e.data); + }, { once: true }); + document.querySelector('$id').contentDocument.postMessage({ type: 'content' }, '*'); + }); + """ + ) + return promise.value as String + } + + override val selectionOffsets: Pair get() { + val promise = mainSession.evaluatePromiseJS( + """ + new Promise(resolve => { + window.addEventListener('message', e => { + resolve(e.data); + }, { once: true }); + document.querySelector('$id').contentDocument.postMessage({ type: 'selectedOffset' }, '*'); + }); + """ + ) + val offsets = promise.value as JSONArray + return Pair(offsets[0] as Int, offsets[1] as Int) + } + } + + inner class CollapsedFrameXOrigin(id: String) : SelectedFrameXOrigin(id, "") { + override fun select() = selectTo(0) + } + /** Lambda for responding with certain actions. */ private fun withResponse(vararg actions: String): (Selection) -> Unit {