Commit 8178e6e1 authored by Wei Lee's avatar Wei Lee Committed by Commit Bot

[CCA] Show confirm to leave dialog when closing CCA while recording

We use 'beforeunload' event listener to show confirm to leave dialog.

Bug: 1140391
Test: Manually
Change-Id: Ied6c0542fce505d46c5bbcb809740effe278c5c7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2494407
Commit-Queue: Wei Lee <wtlee@chromium.org>
Reviewed-by: default avatarInker Kuo <inker@chromium.org>
Reviewed-by: default avatarShik Chen <shik@chromium.org>
Cr-Commit-Position: refs/heads/master@{#822568}
parent 182757bc
...@@ -235,6 +235,11 @@ class ChromeAppBrowserProxy { ...@@ -235,6 +235,11 @@ class ChromeAppBrowserProxy {
getUntrustedOrigin() { getUntrustedOrigin() {
return UntrustedOrigin.CHROME_EXTENSION; return UntrustedOrigin.CHROME_EXTENSION;
} }
/** @override */
setBeforeUnloadListenerEnabled(enabled) {
// Do nothing since beforeunload event is unavailable for platform apps.
}
} }
export const browserProxy = new ChromeAppBrowserProxy(); export const browserProxy = new ChromeAppBrowserProxy();
...@@ -141,4 +141,10 @@ export class BrowserProxy { ...@@ -141,4 +141,10 @@ export class BrowserProxy {
* @abstract * @abstract
*/ */
getUntrustedOrigin() {} getUntrustedOrigin() {}
/**
* @param {boolean} enabled
* @abstract
*/
setBeforeUnloadListenerEnabled(enabled) {}
} }
...@@ -20,6 +20,16 @@ import {UntrustedOrigin} from '../type.js'; ...@@ -20,6 +20,16 @@ import {UntrustedOrigin} from '../type.js';
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
import {BrowserProxy} from './browser_proxy_interface.js'; import {BrowserProxy} from './browser_proxy_interface.js';
/**
* The 'beforeunload' listener which will show confirm dialog when trying to
* close window.
* @param {!Event} event The 'beforeunload' event.
*/
function beforeUnloadListener(event) {
event.preventDefault();
event.returnValue = '';
}
/** /**
* The WebUI implementation of the CCA's interaction with the browser. * The WebUI implementation of the CCA's interaction with the browser.
* @implements {BrowserProxy} * @implements {BrowserProxy}
...@@ -173,6 +183,15 @@ class WebUIBrowserProxy { ...@@ -173,6 +183,15 @@ class WebUIBrowserProxy {
getUntrustedOrigin() { getUntrustedOrigin() {
return UntrustedOrigin.CHROME_UNTRUSTED; return UntrustedOrigin.CHROME_UNTRUSTED;
} }
/** @override */
setBeforeUnloadListenerEnabled(enabled) {
if (enabled) {
window.addEventListener('beforeunload', beforeUnloadListener);
} else {
window.removeEventListener('beforeunload', beforeUnloadListener);
}
}
} }
export const browserProxy = new WebUIBrowserProxy(); export const browserProxy = new WebUIBrowserProxy();
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
// found in the LICENSE file. // found in the LICENSE file.
import {AsyncJobQueue} from '../../../async_job_queue.js'; import {AsyncJobQueue} from '../../../async_job_queue.js';
import {browserProxy} from '../../../browser_proxy/browser_proxy.js';
import {assert} from '../../../chrome_util.js'; import {assert} from '../../../chrome_util.js';
import {Filenamer} from '../../../models/file_namer.js'; import {Filenamer} from '../../../models/file_namer.js';
import { import {
...@@ -306,6 +307,7 @@ export class Video extends ModeBase { ...@@ -306,6 +307,7 @@ export class Video extends ModeBase {
(this.mediaRecorder_.state === 'recording' || (this.mediaRecorder_.state === 'recording' ||
this.mediaRecorder_.state === 'paused')) { this.mediaRecorder_.state === 'paused')) {
this.mediaRecorder_.stop(); this.mediaRecorder_.stop();
browserProxy.setBeforeUnloadListenerEnabled(false);
} }
} }
...@@ -350,6 +352,9 @@ export class Video extends ModeBase { ...@@ -350,6 +352,9 @@ export class Video extends ModeBase {
this.mediaRecorder_.addEventListener('dataavailable', ondataavailable); this.mediaRecorder_.addEventListener('dataavailable', ondataavailable);
this.mediaRecorder_.addEventListener('stop', onstop); this.mediaRecorder_.addEventListener('stop', onstop);
this.mediaRecorder_.addEventListener('start', onstart); this.mediaRecorder_.addEventListener('start', onstart);
browserProxy.setBeforeUnloadListenerEnabled(true);
this.mediaRecorder_.start(100); this.mediaRecorder_.start(100);
state.set(state.State.RECORDING_PAUSED, false); state.set(state.State.RECORDING_PAUSED, false);
state.set(state.State.RECORDING_UI_PAUSED, false); state.set(state.State.RECORDING_UI_PAUSED, false);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment