|
@@ -426,11 +426,16 @@ describe('<webview> tag', function () {
|
|
|
contextIsolation: false
|
|
|
}
|
|
|
});
|
|
|
+
|
|
|
const attachPromise = emittedOnce(w.webContents, 'did-attach-webview');
|
|
|
+ const loadPromise = emittedOnce(w.webContents, 'did-finish-load');
|
|
|
const readyPromise = emittedOnce(ipcMain, 'webview-ready');
|
|
|
+
|
|
|
w.loadFile(path.join(__dirname, 'fixtures', 'webview', 'fullscreen', 'main.html'));
|
|
|
+
|
|
|
const [, webview] = await attachPromise;
|
|
|
- await readyPromise;
|
|
|
+ await Promise.all([readyPromise, loadPromise]);
|
|
|
+
|
|
|
return [w, webview];
|
|
|
};
|
|
|
|
|
@@ -442,17 +447,38 @@ describe('<webview> tag', function () {
|
|
|
closeAllWindows();
|
|
|
});
|
|
|
|
|
|
- it('should make parent frame element fullscreen too', async () => {
|
|
|
+ ifit(process.platform !== 'darwin')('should make parent frame element fullscreen too (non-macOS)', async () => {
|
|
|
const [w, webview] = await loadWebViewWindow();
|
|
|
expect(await w.webContents.executeJavaScript('isIframeFullscreen()')).to.be.false();
|
|
|
|
|
|
const parentFullscreen = emittedOnce(ipcMain, 'fullscreenchange');
|
|
|
await webview.executeJavaScript('document.getElementById("div").requestFullscreen()', true);
|
|
|
await parentFullscreen;
|
|
|
+
|
|
|
+ expect(await w.webContents.executeJavaScript('isIframeFullscreen()')).to.be.true();
|
|
|
+
|
|
|
+ const close = emittedOnce(w, 'closed');
|
|
|
+ w.close();
|
|
|
+ await close;
|
|
|
+ });
|
|
|
+
|
|
|
+ ifit(process.platform === 'darwin')('should make parent frame element fullscreen too (macOS)', async () => {
|
|
|
+ const [w, webview] = await loadWebViewWindow();
|
|
|
+ expect(await w.webContents.executeJavaScript('isIframeFullscreen()')).to.be.false();
|
|
|
+
|
|
|
+ const parentFullscreen = emittedOnce(ipcMain, 'fullscreenchange');
|
|
|
+ const enterHTMLFS = emittedOnce(w.webContents, 'enter-html-full-screen');
|
|
|
+ const leaveHTMLFS = emittedOnce(w.webContents, 'leave-html-full-screen');
|
|
|
+
|
|
|
+ await webview.executeJavaScript('document.getElementById("div").requestFullscreen()', true);
|
|
|
expect(await w.webContents.executeJavaScript('isIframeFullscreen()')).to.be.true();
|
|
|
|
|
|
+ await webview.executeJavaScript('document.exitFullscreen()');
|
|
|
+ await Promise.all([enterHTMLFS, leaveHTMLFS, parentFullscreen]);
|
|
|
+
|
|
|
+ const close = emittedOnce(w, 'closed');
|
|
|
w.close();
|
|
|
- await emittedOnce(w, 'closed');
|
|
|
+ await close;
|
|
|
});
|
|
|
|
|
|
// FIXME(zcbenz): Fullscreen events do not work on Linux.
|
|
@@ -468,8 +494,9 @@ describe('<webview> tag', function () {
|
|
|
await delay(0);
|
|
|
expect(w.isFullScreen()).to.be.false();
|
|
|
|
|
|
+ const close = emittedOnce(w, 'closed');
|
|
|
w.close();
|
|
|
- await emittedOnce(w, 'closed');
|
|
|
+ await close;
|
|
|
});
|
|
|
|
|
|
// Sending ESC via sendInputEvent only works on Windows.
|
|
@@ -485,8 +512,9 @@ describe('<webview> tag', function () {
|
|
|
await delay(0);
|
|
|
expect(w.isFullScreen()).to.be.false();
|
|
|
|
|
|
+ const close = emittedOnce(w, 'closed');
|
|
|
w.close();
|
|
|
- await emittedOnce(w, 'closed');
|
|
|
+ await close;
|
|
|
});
|
|
|
|
|
|
it('pressing ESC should emit the leave-html-full-screen event', async () => {
|
|
@@ -513,11 +541,27 @@ describe('<webview> tag', function () {
|
|
|
const leaveFSWindow = emittedOnce(w, 'leave-html-full-screen');
|
|
|
const leaveFSWebview = emittedOnce(webContents, 'leave-html-full-screen');
|
|
|
webContents.sendInputEvent({ type: 'keyDown', keyCode: 'Escape' });
|
|
|
- await leaveFSWindow;
|
|
|
await leaveFSWebview;
|
|
|
+ await leaveFSWindow;
|
|
|
+
|
|
|
+ const close = emittedOnce(w, 'closed');
|
|
|
+ w.close();
|
|
|
+ await close;
|
|
|
+ });
|
|
|
+
|
|
|
+ it('should support user gesture', async () => {
|
|
|
+ const [w, webview] = await loadWebViewWindow();
|
|
|
+
|
|
|
+ const waitForEnterHtmlFullScreen = emittedOnce(webview, 'enter-html-full-screen');
|
|
|
+
|
|
|
+ const jsScript = "document.querySelector('video').webkitRequestFullscreen()";
|
|
|
+ webview.executeJavaScript(jsScript, true);
|
|
|
+
|
|
|
+ await waitForEnterHtmlFullScreen;
|
|
|
|
|
|
+ const close = emittedOnce(w, 'closed');
|
|
|
w.close();
|
|
|
- await emittedOnce(w, 'closed');
|
|
|
+ await close;
|
|
|
});
|
|
|
});
|
|
|
|