|
@@ -15,7 +15,12 @@ ifdescribe(process.electronBinding('features').isExtensionsEnabled())('chrome ex
|
|
|
let server: http.Server;
|
|
|
let url: string;
|
|
|
before(async () => {
|
|
|
- server = http.createServer((req, res) => res.end());
|
|
|
+ server = http.createServer((req, res) => {
|
|
|
+ if (req.url === '/cors') {
|
|
|
+ res.setHeader('Access-Control-Allow-Origin', 'http://example.com');
|
|
|
+ }
|
|
|
+ res.end();
|
|
|
+ });
|
|
|
await new Promise(resolve => server.listen(0, '127.0.0.1', () => {
|
|
|
url = `http://127.0.0.1:${(server.address() as AddressInfo).port}`;
|
|
|
resolve();
|
|
@@ -31,6 +36,19 @@ ifdescribe(process.electronBinding('features').isExtensionsEnabled())('chrome ex
|
|
|
});
|
|
|
});
|
|
|
|
|
|
+ function fetch (contents: WebContents, url: string) {
|
|
|
+ return contents.executeJavaScript(`fetch(${JSON.stringify(url)})`);
|
|
|
+ }
|
|
|
+
|
|
|
+ it('bypasses CORS in requests made from extensions', async () => {
|
|
|
+ const customSession = session.fromPartition(`persist:${require('uuid').v4()}`);
|
|
|
+ const w = new BrowserWindow({ show: false, webPreferences: { session: customSession, sandbox: true } });
|
|
|
+ const extension = await customSession.loadExtension(path.join(fixtures, 'extensions', 'ui-page'));
|
|
|
+ w.loadURL(`${extension.url}bare-page.html`);
|
|
|
+ await emittedOnce(w.webContents, 'dom-ready');
|
|
|
+ await expect(fetch(w.webContents, `${url}/cors`)).to.not.be.rejectedWith(TypeError);
|
|
|
+ });
|
|
|
+
|
|
|
it('loads an extension', async () => {
|
|
|
// NB. we have to use a persist: session (i.e. non-OTR) because the
|
|
|
// extension registry is redirected to the main session. so installing an
|
|
@@ -241,7 +259,7 @@ ifdescribe(process.electronBinding('features').isExtensionsEnabled())('chrome ex
|
|
|
const { id } = await customSession.loadExtension(path.join(fixtures, 'extensions', 'lazy-background-page'));
|
|
|
const w = new BrowserWindow({ show: false, webPreferences: { session: customSession } });
|
|
|
await w.loadURL(`chrome-extension://${id}/page-get-background.html`);
|
|
|
- const receivedMessage = await w.webContents.executeJavaScript(`window.completionPromise`);
|
|
|
+ const receivedMessage = await w.webContents.executeJavaScript('window.completionPromise');
|
|
|
expect(receivedMessage).to.deep.equal({ some: 'message' });
|
|
|
});
|
|
|
|
|
@@ -250,7 +268,7 @@ ifdescribe(process.electronBinding('features').isExtensionsEnabled())('chrome ex
|
|
|
const { id } = await customSession.loadExtension(path.join(fixtures, 'extensions', 'lazy-background-page'));
|
|
|
const w = new BrowserWindow({ show: false, webPreferences: { session: customSession } });
|
|
|
await w.loadURL(`chrome-extension://${id}/page-get-background.html`);
|
|
|
- const receivedMessage = await w.webContents.executeJavaScript(`window.completionPromise`);
|
|
|
+ const receivedMessage = await w.webContents.executeJavaScript('window.completionPromise');
|
|
|
expect(receivedMessage).to.deep.equal({ some: 'message' });
|
|
|
});
|
|
|
|
|
@@ -259,7 +277,7 @@ ifdescribe(process.electronBinding('features').isExtensionsEnabled())('chrome ex
|
|
|
const { id } = await customSession.loadExtension(path.join(fixtures, 'extensions', 'lazy-background-page'));
|
|
|
const w = new BrowserWindow({ show: false, webPreferences: { session: customSession } });
|
|
|
await w.loadURL(`chrome-extension://${id}/page-runtime-get-background.html`);
|
|
|
- const receivedMessage = await w.webContents.executeJavaScript(`window.completionPromise`);
|
|
|
+ const receivedMessage = await w.webContents.executeJavaScript('window.completionPromise');
|
|
|
expect(receivedMessage).to.deep.equal({ some: 'message' });
|
|
|
});
|
|
|
});
|
|
@@ -269,7 +287,7 @@ ifdescribe(process.electronBinding('features').isExtensionsEnabled())('chrome ex
|
|
|
await customSession.loadExtension(path.join(fixtures, 'extensions', 'persistent-background-page'));
|
|
|
const w = new BrowserWindow({ show: false, webPreferences: { session: customSession } });
|
|
|
const promise = emittedOnce(app, 'web-contents-created');
|
|
|
- await w.loadURL(`about:blank`);
|
|
|
+ await w.loadURL('about:blank');
|
|
|
const [, bgPageContents] = await promise;
|
|
|
expect(bgPageContents.session).to.not.equal(undefined);
|
|
|
});
|
|
@@ -418,9 +436,9 @@ ifdescribe(process.electronBinding('features').isExtensionsEnabled())('chrome ex
|
|
|
const contentScript = path.resolve(fixtures, 'extensions/content-script');
|
|
|
|
|
|
// Computed style values
|
|
|
- const COLOR_RED = `rgb(255, 0, 0)`;
|
|
|
- const COLOR_BLUE = `rgb(0, 0, 255)`;
|
|
|
- const COLOR_TRANSPARENT = `rgba(0, 0, 0, 0)`;
|
|
|
+ const COLOR_RED = 'rgb(255, 0, 0)';
|
|
|
+ const COLOR_BLUE = 'rgb(0, 0, 255)';
|
|
|
+ const COLOR_TRANSPARENT = 'rgba(0, 0, 0, 0)';
|
|
|
|
|
|
before(() => {
|
|
|
BrowserWindow.addExtension(contentScript);
|
|
@@ -496,7 +514,7 @@ ifdescribe(process.electronBinding('features').isExtensionsEnabled())('chrome ex
|
|
|
const { id } = await session.defaultSession.loadExtension(path.join(fixtures, 'extensions', 'ui-page'));
|
|
|
const w = new BrowserWindow({ show: false });
|
|
|
await w.loadURL(`chrome-extension://${id}/bare-page.html`);
|
|
|
- const textContent = await w.webContents.executeJavaScript(`document.body.textContent`);
|
|
|
+ const textContent = await w.webContents.executeJavaScript('document.body.textContent');
|
|
|
expect(textContent).to.equal('ui page loaded ok\n');
|
|
|
});
|
|
|
|
|
@@ -504,7 +522,7 @@ ifdescribe(process.electronBinding('features').isExtensionsEnabled())('chrome ex
|
|
|
const { id } = await session.defaultSession.loadExtension(path.join(fixtures, 'extensions', 'ui-page'));
|
|
|
const w = new BrowserWindow({ show: false });
|
|
|
await w.loadURL(`chrome-extension://${id}/page-script-load.html`);
|
|
|
- const textContent = await w.webContents.executeJavaScript(`document.body.textContent`);
|
|
|
+ const textContent = await w.webContents.executeJavaScript('document.body.textContent');
|
|
|
expect(textContent).to.equal('script loaded ok\n');
|
|
|
});
|
|
|
});
|