|
@@ -0,0 +1,51 @@
|
|
|
|
+'use strict';
|
|
|
|
+
|
|
|
|
+function waitForEvent(target, type, options) {
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ target.addEventListener(type, resolve, options);
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function waitForAnimationFrame(w) {
|
|
|
|
+ let targetWindow = w || window;
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ targetWindow.requestAnimationFrame(resolve);
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function waitForEvent(target, type, options) {
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ target.addEventListener(type, resolve, options);
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function waitForLoad(target) {
|
|
|
|
+ return waitForEvent(target, 'load');
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function timeOut(test, ms) {
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ test.step_timeout(resolve, ms);
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// If an element with autofocus is connected to a document and this function
|
|
|
|
+// is called, the autofocus result is deterministic after returning from the
|
|
|
|
+// function.
|
|
|
|
+// Exception: If the document has script-blocking style sheets, this function
|
|
|
|
+// doesn't work well.
|
|
|
|
+async function waitUntilStableAutofocusState(w) {
|
|
|
|
+ let targetWindow = w || window;
|
|
|
|
+ // Awaiting one animation frame is an easy way to determine autofocus state.
|
|
|
|
+ await waitForAnimationFrame(targetWindow);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+async function waitForIframeLoad(src, w = window) {
|
|
|
|
+ const iframe = w.document.createElement("iframe");
|
|
|
|
+ let loadPromise = new Promise(resolve => {
|
|
|
|
+ iframe.addEventListener("load", () => resolve(iframe));
|
|
|
|
+ });
|
|
|
|
+ iframe.src = src;
|
|
|
|
+ w.document.body.appendChild(iframe);
|
|
|
|
+ return loadPromise;
|
|
|
|
+}
|