Bug 1760324 - Add xorigin test to SelectionActionDelegateTest. r=geckoview-reviewers,owlish

Differential Revision: https://phabricator.services.mozilla.com/D166911
This commit is contained in:
Makoto Kato 2023-01-26 01:51:57 +00:00
Родитель d8e9d2a141
Коммит a115e0ace0
3 изменённых файлов: 89 добавлений и 1 удалений

Просмотреть файл

@ -48,6 +48,7 @@
<div id="contenteditable" contenteditable="true">sit</div>
<iframe id="iframe" src="selectionAction_frame.html"></iframe>
<iframe id="designmode" src="selectionAction_frame.html"></iframe>
<iframe id="iframe-xorigin" src="http://127.0.0.1:4245/assets/www/selectionAction_frame_xorigin.html"></iframe>
<x-input id="x-input"></x-input>
</body>
<script>

Просмотреть файл

@ -0,0 +1,36 @@
<html>
<head>
<meta charset="utf-8">
<script>
window.addEventListener("message", e => {
switch (e.data.type) {
case "focus":
window.focus();
break;
case "select": {
const text = document.body.firstChild;
document.getSelection().setBaseAndExtent(text, 0, text, e.data.length);
break;
}
case "selectedOffset": {
const sel = document.getSelection();
const text = document.body.firstChild;
if (sel.anchorNode !== text || sel.focusNode !== text) {
window.parent.postMessage([-1, -1], "*");
} else {
window.parent.postMessage([sel.anchorOffset, sel.focusOffset], "*");
}
break;
}
case "content":
window.parent.postMessage(document.body.textContent, "*");
break;
}
});
</script>
</head>
<body onload="document.body.textContent = 'elit'"></body>
</html>

Просмотреть файл

@ -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<Int, Int> 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 {