chrome-api-spec.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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('runtime.getManifest returns extension manifest', async () => {
  24. const actualManifest = (() => {
  25. const data = fs.readFileSync(path.join(fixtures, 'extensions/chrome-api/manifest.json'), 'utf-8')
  26. return JSON.parse(data)
  27. })()
  28. await w.loadURL('about:blank')
  29. const promise = emittedOnce(w.webContents, 'console-message')
  30. const message = { method: 'getManifest' }
  31. w.webContents.executeJavaScript(`window.postMessage('${JSON.stringify(message)}', '*')`)
  32. const [,, manifestString] = await promise
  33. const manifest = JSON.parse(manifestString)
  34. expect(manifest.name).to.equal(actualManifest.name)
  35. expect(manifest.content_scripts.length).to.equal(actualManifest.content_scripts.length)
  36. })
  37. it('chrome.tabs.sendMessage receives the response', async function () {
  38. await w.loadURL('about:blank')
  39. const promise = emittedOnce(w.webContents, 'console-message')
  40. const message = { method: 'sendMessage', args: ['Hello World!'] }
  41. w.webContents.executeJavaScript(`window.postMessage('${JSON.stringify(message)}', '*')`)
  42. const [,, responseString] = await promise
  43. const response = JSON.parse(responseString)
  44. expect(response.message).to.equal('Hello World!')
  45. expect(response.tabId).to.equal(w.webContents.id)
  46. })
  47. it('chrome.tabs.executeScript receives the response', async function () {
  48. await w.loadURL('about:blank')
  49. const promise = emittedOnce(w.webContents, 'console-message')
  50. const message = { method: 'executeScript', args: ['1 + 2'] }
  51. w.webContents.executeJavaScript(`window.postMessage('${JSON.stringify(message)}', '*')`)
  52. const [,, responseString] = await promise
  53. const response = JSON.parse(responseString)
  54. expect(response).to.equal(3)
  55. })
  56. })