|
@@ -1383,6 +1383,138 @@ describe('chromium features', () => {
|
|
|
});
|
|
|
});
|
|
|
|
|
|
+ describe('Storage Access API', () => {
|
|
|
+ afterEach(closeAllWindows);
|
|
|
+ afterEach(() => {
|
|
|
+ session.defaultSession.setPermissionCheckHandler(null);
|
|
|
+ session.defaultSession.setPermissionRequestHandler(null);
|
|
|
+ });
|
|
|
+
|
|
|
+ it('can determine if a permission is granted for "storage-access"', async () => {
|
|
|
+ session.defaultSession.setPermissionCheckHandler(
|
|
|
+ (_wc, permission) => permission === 'storage-access'
|
|
|
+ );
|
|
|
+
|
|
|
+ const w = new BrowserWindow({ show: false });
|
|
|
+ await w.loadFile(path.join(fixturesPath, 'pages', 'a.html'));
|
|
|
+
|
|
|
+ const permission = await w.webContents.executeJavaScript(`
|
|
|
+ navigator.permissions.query({ name: 'storage-access' })
|
|
|
+ .then(permission => permission.state).catch(err => err.message);
|
|
|
+ `, true);
|
|
|
+
|
|
|
+ expect(permission).to.eq('granted');
|
|
|
+ });
|
|
|
+
|
|
|
+ it('can determine if a permission is denied for "storage-access"', async () => {
|
|
|
+ session.defaultSession.setPermissionCheckHandler(
|
|
|
+ (_wc, permission) => permission !== 'storage-access'
|
|
|
+ );
|
|
|
+
|
|
|
+ const w = new BrowserWindow({ show: false });
|
|
|
+ await w.loadFile(path.join(fixturesPath, 'pages', 'a.html'));
|
|
|
+
|
|
|
+ const permission = await w.webContents.executeJavaScript(`
|
|
|
+ navigator.permissions.query({ name: 'storage-access' })
|
|
|
+ .then(permission => permission.state).catch(err => err.message);
|
|
|
+ `, true);
|
|
|
+
|
|
|
+ expect(permission).to.eq('denied');
|
|
|
+ });
|
|
|
+
|
|
|
+ it('can determine if a permission is granted for "top-level-storage-access"', async () => {
|
|
|
+ session.defaultSession.setPermissionCheckHandler(
|
|
|
+ (_wc, permission) => permission === 'top-level-storage-access'
|
|
|
+ );
|
|
|
+
|
|
|
+ const w = new BrowserWindow({ show: false });
|
|
|
+ await w.loadFile(path.join(fixturesPath, 'pages', 'a.html'));
|
|
|
+
|
|
|
+ const permission = await w.webContents.executeJavaScript(`
|
|
|
+ navigator.permissions.query({
|
|
|
+ name: 'top-level-storage-access',
|
|
|
+ requestedOrigin: "https://www.example.com",
|
|
|
+ }).then(permission => permission.state).catch(err => err.message);
|
|
|
+ `, true);
|
|
|
+
|
|
|
+ expect(permission).to.eq('granted');
|
|
|
+ });
|
|
|
+
|
|
|
+ it('can determine if a permission is denied for "top-level-storage-access"', async () => {
|
|
|
+ session.defaultSession.setPermissionCheckHandler(
|
|
|
+ (_wc, permission) => permission !== 'top-level-storage-access'
|
|
|
+ );
|
|
|
+
|
|
|
+ const w = new BrowserWindow({ show: false });
|
|
|
+ await w.loadFile(path.join(fixturesPath, 'pages', 'a.html'));
|
|
|
+
|
|
|
+ const permission = await w.webContents.executeJavaScript(`
|
|
|
+ navigator.permissions.query({
|
|
|
+ name: 'top-level-storage-access',
|
|
|
+ requestedOrigin: "https://www.example.com",
|
|
|
+ }).then(permission => permission.state).catch(err => err.message);
|
|
|
+ `, true);
|
|
|
+
|
|
|
+ expect(permission).to.eq('denied');
|
|
|
+ });
|
|
|
+
|
|
|
+ it('can grant a permission request for "top-level-storage-access"', async () => {
|
|
|
+ session.defaultSession.setPermissionRequestHandler(
|
|
|
+ (_wc, permission, callback) => {
|
|
|
+ callback(permission === 'top-level-storage-access');
|
|
|
+ }
|
|
|
+ );
|
|
|
+
|
|
|
+ const w = new BrowserWindow({ show: false });
|
|
|
+ await w.loadFile(path.join(fixturesPath, 'pages', 'button.html'));
|
|
|
+
|
|
|
+ // requestStorageAccessFor returns a Promise that fulfills with undefined
|
|
|
+ // if the access to third-party cookies was granted and rejects if access was denied.
|
|
|
+ const permission = await w.webContents.executeJavaScript(`
|
|
|
+ new Promise((resolve, reject) => {
|
|
|
+ const button = document.getElementById('button');
|
|
|
+ button.addEventListener("click", () => {
|
|
|
+ document.requestStorageAccessFor('https://myfakesite').then(
|
|
|
+ (res) => { resolve('granted') },
|
|
|
+ (err) => { resolve('denied') },
|
|
|
+ );
|
|
|
+ });
|
|
|
+ button.click();
|
|
|
+ });
|
|
|
+ `, true);
|
|
|
+
|
|
|
+ expect(permission).to.eq('granted');
|
|
|
+ });
|
|
|
+
|
|
|
+ it('can deny a permission request for "top-level-storage-access"', async () => {
|
|
|
+ session.defaultSession.setPermissionRequestHandler(
|
|
|
+ (_wc, permission, callback) => {
|
|
|
+ callback(permission !== 'top-level-storage-access');
|
|
|
+ }
|
|
|
+ );
|
|
|
+
|
|
|
+ const w = new BrowserWindow({ show: false });
|
|
|
+ await w.loadFile(path.join(fixturesPath, 'pages', 'button.html'));
|
|
|
+
|
|
|
+ // requestStorageAccessFor returns a Promise that fulfills with undefined
|
|
|
+ // if the access to third-party cookies was granted and rejects if access was denied.
|
|
|
+ const permission = await w.webContents.executeJavaScript(`
|
|
|
+ new Promise((resolve, reject) => {
|
|
|
+ const button = document.getElementById('button');
|
|
|
+ button.addEventListener("click", () => {
|
|
|
+ document.requestStorageAccessFor('https://myfakesite').then(
|
|
|
+ (res) => { resolve('granted') },
|
|
|
+ (err) => { resolve('denied') },
|
|
|
+ );
|
|
|
+ });
|
|
|
+ button.click();
|
|
|
+ });
|
|
|
+ `, true);
|
|
|
+
|
|
|
+ expect(permission).to.eq('denied');
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
describe('IdleDetection', () => {
|
|
|
afterEach(closeAllWindows);
|
|
|
afterEach(() => {
|