feat(extensions): add chrome.i18n API (#22455)

* feat(extensions): implement chrome.i18n API

* refactor(extensions): use forward declaration for ScriptExecutor

* fix(extensions): add message filter to handle i18n GetMessageBundle

* test(extensions): add chrome.i18n tests

* fix(extensions): message filter lint error

* fix: remove exclusive test

* fix(extensions): format api feature arrays

Co-Authored-By: Jeremy Apthorp <nornagon@nornagon.net>

* fix(extensions): uncomment chrome.i18n usage in old extensions test

Co-authored-by: Jeremy Apthorp <nornagon@nornagon.net>
This commit is contained in:
John Kleinschmidt 2020-03-05 09:56:21 -05:00 committed by GitHub
parent 1e9fa204ee
commit d6701ff435
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
18 changed files with 502 additions and 3 deletions

View file

@ -1,5 +1,5 @@
import { expect } from 'chai'
import { app, session, BrowserWindow, ipcMain, WebContents } from 'electron'
import { app, session, BrowserWindow, ipcMain, WebContents, Extension } from 'electron'
import { closeAllWindows, closeWindow } from './window-helpers'
import * as http from 'http'
import { AddressInfo } from 'net'
@ -103,6 +103,32 @@ ifdescribe(process.electronBinding('features').isExtensionsEnabled())('chrome ex
await expect(customSession.loadExtension(path.join(fixtures, 'extensions', 'red-bg'))).to.eventually.be.rejectedWith('Extensions cannot be loaded in a temporary session')
})
describe('chrome.i18n', () => {
let w: BrowserWindow
let extension: Extension
const exec = async (name: string) => {
const p = emittedOnce(ipcMain, 'success')
await w.webContents.executeJavaScript(`exec('${name}')`)
const [, result] = await p
return result
}
beforeEach(async () => {
const customSession = session.fromPartition(`persist:${require('uuid').v4()}`)
extension = await customSession.loadExtension(path.join(fixtures, 'extensions', 'chrome-i18n'))
w = new BrowserWindow({ show: false, webPreferences: { session: customSession, nodeIntegration: true } })
await w.loadURL(url)
})
it('getAcceptLanguages()', async () => {
const result = await exec('getAcceptLanguages')
expect(result).to.be.an('array').and.deep.equal(['en-US'])
})
it('getMessage()', async () => {
const result = await exec('getMessage')
expect(result.id).to.be.a('string').and.equal(extension.id)
expect(result.name).to.be.a('string').and.equal('chrome-i18n')
})
})
describe('chrome.runtime', () => {
let content: any
before(async () => {