зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1760324 - Add xorigin test to SelectionActionDelegateTest. r=geckoview-reviewers,owlish
Differential Revision: https://phabricator.services.mozilla.com/D166911
This commit is contained in:
Родитель
d8e9d2a141
Коммит
a115e0ace0
|
@ -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 {
|
||||
|
|
Загрузка…
Ссылка в новой задаче