From 189380d4ea54899b8de88b93c3bc0a712b14400b Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 17 May 2016 14:52:45 -0700 Subject: [PATCH 1/9] Add spec for devtools extension --- spec/api-browser-window-spec.js | 24 +++++++++++++++++++ .../fixtures/devtools-extensions/foo/foo.html | 10 ++++++++ .../devtools-extensions/foo/index.html | 14 +++++++++++ .../devtools-extensions/foo/manifest.json | 4 +++- 4 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 spec/fixtures/devtools-extensions/foo/foo.html create mode 100644 spec/fixtures/devtools-extensions/foo/index.html diff --git a/spec/api-browser-window-spec.js b/spec/api-browser-window-spec.js index a8dd8a3780cc..168aceb1d406 100644 --- a/spec/api-browser-window-spec.js +++ b/spec/api-browser-window-spec.js @@ -824,6 +824,30 @@ describe('browser-window module', function () { }) describe('dev tool extensions', function () { + describe('BrowserWindow.addDevToolsExtension', function () { + it('creates the extension', function (done) { + var extensionPath = path.join(__dirname, 'fixtures', 'devtools-extensions', 'foo') + BrowserWindow.addDevToolsExtension(extensionPath) + + w.webContents.on('devtools-opened', () => { + var inputEventIntervalId = setInterval(function () { + if (w && w.devToolsWebContents) { + w.devToolsWebContents.sendInputEvent({type: 'keyDown', keyCode:'[', modifiers: ['meta']}) + } else { + clearInterval(inputEventIntervalId) + } + }, 250) + }) + w.loadURL('about:blank') + w.webContents.openDevTools({mode: 'bottom'}) + + ipcMain.once('answer', function (event, message) { + assert.equal(message, 'extension loaded') + done() + }) + }) + }) + it('serializes the registered extensions on quit', function () { var extensionName = 'foo' var extensionPath = path.join(__dirname, 'fixtures', 'devtools-extensions', extensionName) diff --git a/spec/fixtures/devtools-extensions/foo/foo.html b/spec/fixtures/devtools-extensions/foo/foo.html new file mode 100644 index 000000000000..a326639c38de --- /dev/null +++ b/spec/fixtures/devtools-extensions/foo/foo.html @@ -0,0 +1,10 @@ + + + + + foo + + + diff --git a/spec/fixtures/devtools-extensions/foo/index.html b/spec/fixtures/devtools-extensions/foo/index.html new file mode 100644 index 000000000000..4e7439422e47 --- /dev/null +++ b/spec/fixtures/devtools-extensions/foo/index.html @@ -0,0 +1,14 @@ + + + + + + + + + a custom devtools extension + + diff --git a/spec/fixtures/devtools-extensions/foo/manifest.json b/spec/fixtures/devtools-extensions/foo/manifest.json index bde99de9287a..413853e8d351 100644 --- a/spec/fixtures/devtools-extensions/foo/manifest.json +++ b/spec/fixtures/devtools-extensions/foo/manifest.json @@ -1,3 +1,5 @@ { - "name": "foo" + "name": "foo", + "version": "1.0", + "devtools_page": "foo.html" } From 77b074fbadc8439bb3893180e4b94812de9df961 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 17 May 2016 14:56:00 -0700 Subject: [PATCH 2/9] Add spec for undocked devtools --- spec/api-browser-window-spec.js | 62 ++++++++++++++++++++++++--------- 1 file changed, 46 insertions(+), 16 deletions(-) diff --git a/spec/api-browser-window-spec.js b/spec/api-browser-window-spec.js index 168aceb1d406..46fc6a34c89e 100644 --- a/spec/api-browser-window-spec.js +++ b/spec/api-browser-window-spec.js @@ -825,25 +825,55 @@ describe('browser-window module', function () { describe('dev tool extensions', function () { describe('BrowserWindow.addDevToolsExtension', function () { - it('creates the extension', function (done) { - var extensionPath = path.join(__dirname, 'fixtures', 'devtools-extensions', 'foo') - BrowserWindow.addDevToolsExtension(extensionPath) + beforeEach(function () { + BrowserWindow.removeDevToolsExtension('foo') + }) - w.webContents.on('devtools-opened', () => { - var inputEventIntervalId = setInterval(function () { - if (w && w.devToolsWebContents) { - w.devToolsWebContents.sendInputEvent({type: 'keyDown', keyCode:'[', modifiers: ['meta']}) - } else { - clearInterval(inputEventIntervalId) - } - }, 250) + describe('when the devtools is docked', function () { + it('creates the extension', function (done) { + var extensionPath = path.join(__dirname, 'fixtures', 'devtools-extensions', 'foo') + BrowserWindow.addDevToolsExtension(extensionPath) + + w.webContents.on('devtools-opened', () => { + var inputEventIntervalId = setInterval(function () { + if (w && w.devToolsWebContents) { + w.devToolsWebContents.sendInputEvent({type: 'keyDown', keyCode:'[', modifiers: ['meta']}) + } else { + clearInterval(inputEventIntervalId) + } + }, 250) + }) + w.loadURL('about:blank') + w.webContents.openDevTools({mode: 'bottom'}) + + ipcMain.once('answer', function (event, message) { + assert.equal(message, 'extension loaded') + done() + }) }) - w.loadURL('about:blank') - w.webContents.openDevTools({mode: 'bottom'}) + }) - ipcMain.once('answer', function (event, message) { - assert.equal(message, 'extension loaded') - done() + describe('when the devtools is undocked', function () { + it('creates the extension', function (done) { + var extensionPath = path.join(__dirname, 'fixtures', 'devtools-extensions', 'foo') + BrowserWindow.addDevToolsExtension(extensionPath) + + w.webContents.on('devtools-opened', () => { + var inputEventIntervalId = setInterval(function () { + if (w && w.devToolsWebContents) { + w.devToolsWebContents.sendInputEvent({type: 'keyDown', keyCode:'[', modifiers: ['meta']}) + } else { + clearInterval(inputEventIntervalId) + } + }, 250) + }) + w.loadURL('about:blank') + w.webContents.openDevTools({mode: 'undocked'}) + + ipcMain.once('answer', function (event, message) { + assert.equal(message, 'extension loaded') + done() + }) }) }) }) From 7db2601ea8c5fc6f30f632896308793019bc3e8a Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 17 May 2016 14:59:33 -0700 Subject: [PATCH 3/9] DRY up specs --- spec/api-browser-window-spec.js | 43 +++++++++++++-------------------- 1 file changed, 17 insertions(+), 26 deletions(-) diff --git a/spec/api-browser-window-spec.js b/spec/api-browser-window-spec.js index 46fc6a34c89e..6178d7639848 100644 --- a/spec/api-browser-window-spec.js +++ b/spec/api-browser-window-spec.js @@ -825,25 +825,29 @@ describe('browser-window module', function () { describe('dev tool extensions', function () { describe('BrowserWindow.addDevToolsExtension', function () { + this.timeout(10000) + beforeEach(function () { BrowserWindow.removeDevToolsExtension('foo') + + var extensionPath = path.join(__dirname, 'fixtures', 'devtools-extensions', 'foo') + BrowserWindow.addDevToolsExtension(extensionPath) + + w.webContents.on('devtools-opened', () => { + var inputEventIntervalId = setInterval(function () { + if (w && w.devToolsWebContents) { + w.devToolsWebContents.sendInputEvent({type: 'keyDown', keyCode:'[', modifiers: ['meta']}) + } else { + clearInterval(inputEventIntervalId) + } + }, 200) + }) + + w.loadURL('about:blank') }) describe('when the devtools is docked', function () { it('creates the extension', function (done) { - var extensionPath = path.join(__dirname, 'fixtures', 'devtools-extensions', 'foo') - BrowserWindow.addDevToolsExtension(extensionPath) - - w.webContents.on('devtools-opened', () => { - var inputEventIntervalId = setInterval(function () { - if (w && w.devToolsWebContents) { - w.devToolsWebContents.sendInputEvent({type: 'keyDown', keyCode:'[', modifiers: ['meta']}) - } else { - clearInterval(inputEventIntervalId) - } - }, 250) - }) - w.loadURL('about:blank') w.webContents.openDevTools({mode: 'bottom'}) ipcMain.once('answer', function (event, message) { @@ -855,19 +859,6 @@ describe('browser-window module', function () { describe('when the devtools is undocked', function () { it('creates the extension', function (done) { - var extensionPath = path.join(__dirname, 'fixtures', 'devtools-extensions', 'foo') - BrowserWindow.addDevToolsExtension(extensionPath) - - w.webContents.on('devtools-opened', () => { - var inputEventIntervalId = setInterval(function () { - if (w && w.devToolsWebContents) { - w.devToolsWebContents.sendInputEvent({type: 'keyDown', keyCode:'[', modifiers: ['meta']}) - } else { - clearInterval(inputEventIntervalId) - } - }, 250) - }) - w.loadURL('about:blank') w.webContents.openDevTools({mode: 'undocked'}) ipcMain.once('answer', function (event, message) { From 0b4b79d0a4192e1b828b4620a6aa8a5a2ca02ab6 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 17 May 2016 15:01:32 -0700 Subject: [PATCH 4/9] Use control on non-mac platforms --- spec/api-browser-window-spec.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/spec/api-browser-window-spec.js b/spec/api-browser-window-spec.js index 6178d7639848..bd4e6ea45708 100644 --- a/spec/api-browser-window-spec.js +++ b/spec/api-browser-window-spec.js @@ -836,7 +836,11 @@ describe('browser-window module', function () { w.webContents.on('devtools-opened', () => { var inputEventIntervalId = setInterval(function () { if (w && w.devToolsWebContents) { - w.devToolsWebContents.sendInputEvent({type: 'keyDown', keyCode:'[', modifiers: ['meta']}) + w.devToolsWebContents.sendInputEvent({ + type: 'keyDown', + keyCode:'[', + modifiers: process.platform === 'darwin' ? ['meta'] : ['control'] + }) } else { clearInterval(inputEventIntervalId) } From 8d0c5c30b860fa97c638edab48959a0963ee77b2 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 17 May 2016 15:05:27 -0700 Subject: [PATCH 5/9] Use consistent function styles --- spec/api-browser-window-spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/api-browser-window-spec.js b/spec/api-browser-window-spec.js index bd4e6ea45708..f698121e152b 100644 --- a/spec/api-browser-window-spec.js +++ b/spec/api-browser-window-spec.js @@ -833,7 +833,7 @@ describe('browser-window module', function () { var extensionPath = path.join(__dirname, 'fixtures', 'devtools-extensions', 'foo') BrowserWindow.addDevToolsExtension(extensionPath) - w.webContents.on('devtools-opened', () => { + w.webContents.on('devtools-opened', function () { var inputEventIntervalId = setInterval(function () { if (w && w.devToolsWebContents) { w.devToolsWebContents.sendInputEvent({ From 13cfc2d2a0324e528ba4150b471454526a6d9446 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 17 May 2016 15:05:58 -0700 Subject: [PATCH 6/9] Add comment about panel switching via input event --- spec/api-browser-window-spec.js | 1 + 1 file changed, 1 insertion(+) diff --git a/spec/api-browser-window-spec.js b/spec/api-browser-window-spec.js index f698121e152b..a70d4f708899 100644 --- a/spec/api-browser-window-spec.js +++ b/spec/api-browser-window-spec.js @@ -836,6 +836,7 @@ describe('browser-window module', function () { w.webContents.on('devtools-opened', function () { var inputEventIntervalId = setInterval(function () { if (w && w.devToolsWebContents) { + // Switch panels until the custom one is selected and loads w.devToolsWebContents.sendInputEvent({ type: 'keyDown', keyCode:'[', From f95c46d987cf29fb8f842028fd4cc3e12b8bb3b8 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 17 May 2016 16:40:34 -0700 Subject: [PATCH 7/9] Show last panel by id --- spec/api-browser-window-spec.js | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/spec/api-browser-window-spec.js b/spec/api-browser-window-spec.js index a70d4f708899..a6da7f712ac4 100644 --- a/spec/api-browser-window-spec.js +++ b/spec/api-browser-window-spec.js @@ -836,16 +836,14 @@ describe('browser-window module', function () { w.webContents.on('devtools-opened', function () { var inputEventIntervalId = setInterval(function () { if (w && w.devToolsWebContents) { - // Switch panels until the custom one is selected and loads - w.devToolsWebContents.sendInputEvent({ - type: 'keyDown', - keyCode:'[', - modifiers: process.platform === 'darwin' ? ['meta'] : ['control'] - }) + w.devToolsWebContents.executeJavaScript('(' + (function () { + var lastPanelId = WebInspector.inspectorView._tabbedPane._tabs.peekLast().id + WebInspector.inspectorView.showPanel(lastPanelId); + }).toString() + ')()') } else { clearInterval(inputEventIntervalId) } - }, 200) + }, 100) }) w.loadURL('about:blank') From 9266f9abfc1e0b8e8ad3ad5881ccdcca307f5a66 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 17 May 2016 16:42:21 -0700 Subject: [PATCH 8/9] Update interval id variable name --- spec/api-browser-window-spec.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/api-browser-window-spec.js b/spec/api-browser-window-spec.js index a6da7f712ac4..9b07cb644535 100644 --- a/spec/api-browser-window-spec.js +++ b/spec/api-browser-window-spec.js @@ -834,14 +834,14 @@ describe('browser-window module', function () { BrowserWindow.addDevToolsExtension(extensionPath) w.webContents.on('devtools-opened', function () { - var inputEventIntervalId = setInterval(function () { + var showPanelIntevalId = setInterval(function () { if (w && w.devToolsWebContents) { w.devToolsWebContents.executeJavaScript('(' + (function () { var lastPanelId = WebInspector.inspectorView._tabbedPane._tabs.peekLast().id WebInspector.inspectorView.showPanel(lastPanelId); }).toString() + ')()') } else { - clearInterval(inputEventIntervalId) + clearInterval(showPanelIntevalId) } }, 100) }) From cee31ff67a0b8b451a19a26d32b9dfee9a9f2faf Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 17 May 2016 16:42:37 -0700 Subject: [PATCH 9/9] Remove semicolon --- spec/api-browser-window-spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/api-browser-window-spec.js b/spec/api-browser-window-spec.js index 9b07cb644535..52af001d765f 100644 --- a/spec/api-browser-window-spec.js +++ b/spec/api-browser-window-spec.js @@ -838,7 +838,7 @@ describe('browser-window module', function () { if (w && w.devToolsWebContents) { w.devToolsWebContents.executeJavaScript('(' + (function () { var lastPanelId = WebInspector.inspectorView._tabbedPane._tabs.peekLast().id - WebInspector.inspectorView.showPanel(lastPanelId); + WebInspector.inspectorView.showPanel(lastPanelId) }).toString() + ')()') } else { clearInterval(showPanelIntevalId)