From f279c5e1d9ab5a7638b71264ed5c04c592887c73 Mon Sep 17 00:00:00 2001 From: Milan Burda Date: Wed, 30 Oct 2019 06:46:52 +0100 Subject: [PATCH] fix: devtools extensions not loading (#20791) --- lib/renderer/chrome-api.ts | 6 +++++- spec/chrome-api-spec.js | 14 ++++++++++++++ spec/fixtures/extensions/chrome-api/main.js | 11 +++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/lib/renderer/chrome-api.ts b/lib/renderer/chrome-api.ts index ad07f7c2c6d40..dbea84da1cca0 100644 --- a/lib/renderer/chrome-api.ts +++ b/lib/renderer/chrome-api.ts @@ -116,7 +116,11 @@ export function injectTo (extensionId: string, context: any) { let targetExtensionId = extensionId let connectInfo = { name: '' } if (args.length === 1) { - targetExtensionId = args[0] + if (typeof args[0] === 'string') { + targetExtensionId = args[0] + } else { + connectInfo = args[0] + } } else if (args.length === 2) { [targetExtensionId, connectInfo] = args } diff --git a/spec/chrome-api-spec.js b/spec/chrome-api-spec.js index beacd423151a3..8fd9c627512c2 100644 --- a/spec/chrome-api-spec.js +++ b/spec/chrome-api-spec.js @@ -29,6 +29,20 @@ describe('chrome api', () => { afterEach(() => closeWindow(w).then(() => { w = null })) + it('chrome.runtime.connect parses arguments properly', async function () { + await w.loadURL('about:blank') + + const promise = emittedOnce(w.webContents, 'console-message') + + const message = { method: 'connect' } + w.webContents.executeJavaScript(`window.postMessage('${JSON.stringify(message)}', '*')`) + + const [,, responseString] = await promise + const response = JSON.parse(responseString) + + expect(response).to.be.true() + }) + it('runtime.getManifest returns extension manifest', async () => { const actualManifest = (() => { const data = fs.readFileSync(path.join(fixtures, 'extensions/chrome-api/manifest.json'), 'utf-8') diff --git a/spec/fixtures/extensions/chrome-api/main.js b/spec/fixtures/extensions/chrome-api/main.js index 2784e82c37fd0..ee7ec1f2b91cb 100644 --- a/spec/fixtures/extensions/chrome-api/main.js +++ b/spec/fixtures/extensions/chrome-api/main.js @@ -5,6 +5,17 @@ chrome.runtime.onMessage.addListener((message, sender, sendResponse) => { }) const testMap = { + connect () { + let success = false + try { + chrome.runtime.connect(chrome.runtime.id) + chrome.runtime.connect(chrome.runtime.id, { name: 'content-script' }) + chrome.runtime.connect({ name: 'content-script' }) + success = true + } finally { + console.log(JSON.stringify(success)) + } + }, getManifest () { const manifest = chrome.runtime.getManifest() console.log(JSON.stringify(manifest))