chrome-api-spec.js 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. const fs = require('fs');
  2. const path = require('path');
  3. const { expect } = require('chai');
  4. const { remote } = require('electron');
  5. const { closeWindow } = require('./window-helpers');
  6. const { emittedOnce } = require('./events-helpers');
  7. const { BrowserWindow } = remote;
  8. describe('chrome api', () => {
  9. const fixtures = path.resolve(__dirname, 'fixtures');
  10. let w;
  11. before(() => {
  12. BrowserWindow.addExtension(path.join(fixtures, 'extensions/chrome-api'));
  13. });
  14. after(() => {
  15. BrowserWindow.removeExtension('chrome-api');
  16. });
  17. beforeEach(() => {
  18. w = new BrowserWindow({
  19. show: false
  20. });
  21. });
  22. afterEach(() => closeWindow(w).then(() => { w = null; }));
  23. it('chrome.runtime.connect parses arguments properly', async function () {
  24. await w.loadURL('about:blank');
  25. const promise = emittedOnce(w.webContents, 'console-message');
  26. const message = { method: 'connect' };
  27. w.webContents.executeJavaScript(`window.postMessage('${JSON.stringify(message)}', '*')`);
  28. const [,, responseString] = await promise;
  29. const response = JSON.parse(responseString);
  30. expect(response).to.be.true();
  31. });
  32. it('runtime.getManifest returns extension manifest', async () => {
  33. const actualManifest = (() => {
  34. const data = fs.readFileSync(path.join(fixtures, 'extensions/chrome-api/manifest.json'), 'utf-8');
  35. return JSON.parse(data);
  36. })();
  37. await w.loadURL('about:blank');
  38. const promise = emittedOnce(w.webContents, 'console-message');
  39. const message = { method: 'getManifest' };
  40. w.webContents.executeJavaScript(`window.postMessage('${JSON.stringify(message)}', '*')`);
  41. const [,, manifestString] = await promise;
  42. const manifest = JSON.parse(manifestString);
  43. expect(manifest.name).to.equal(actualManifest.name);
  44. expect(manifest.content_scripts).to.have.lengthOf(actualManifest.content_scripts.length);
  45. });
  46. it('chrome.tabs.sendMessage receives the response', async function () {
  47. await w.loadURL('about:blank');
  48. const promise = emittedOnce(w.webContents, 'console-message');
  49. const message = { method: 'sendMessage', args: ['Hello World!'] };
  50. w.webContents.executeJavaScript(`window.postMessage('${JSON.stringify(message)}', '*')`);
  51. const [,, responseString] = await promise;
  52. const response = JSON.parse(responseString);
  53. expect(response.message).to.equal('Hello World!');
  54. expect(response.tabId).to.equal(w.webContents.id);
  55. });
  56. it('chrome.tabs.executeScript receives the response', async function () {
  57. await w.loadURL('about:blank');
  58. const promise = emittedOnce(w.webContents, 'console-message');
  59. const message = { method: 'executeScript', args: ['1 + 2'] };
  60. w.webContents.executeJavaScript(`window.postMessage('${JSON.stringify(message)}', '*')`);
  61. const [,, responseString] = await promise;
  62. const response = JSON.parse(responseString);
  63. expect(response).to.equal(3);
  64. });
  65. });