Skip to content

Commit 3b67ff7

Browse files
authored
node: Add support for installing unpacked addons at runtime in Firefox webdriver (#10216)
* node: Add support for installing unpacked addons at runtime in Firefox webdriver * Move example webextension files to //common/extensions
1 parent 5d2f6c6 commit 3b67ff7

14 files changed

Lines changed: 93 additions & 35 deletions

File tree

common/extensions/BUILD.bazel

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
filegroup(
2+
name = "extensions",
3+
srcs = glob([
4+
"*",
5+
"**/*",
6+
]),
7+
visibility = [
8+
"//javascript/node/selenium-webdriver:__pkg__",
9+
],
10+
)

javascript/node/selenium-webdriver/lib/test/data/chrome/webextension.crx renamed to common/extensions/webextensions-selenium-example.crx

File renamed without changes.

javascript/node/selenium-webdriver/lib/test/data/firefox/webextension.xpi renamed to common/extensions/webextensions-selenium-example.xpi

File renamed without changes.

javascript/node/selenium-webdriver/lib/test/data/firefox/webextension.zip renamed to common/extensions/webextensions-selenium-example.zip

File renamed without changes.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
((function(document) {
2+
var div = document.createElement('div');
3+
div.id = 'webextensions-selenium-example'
4+
div.textContent = "Content injected by webextensions-selenium-example";
5+
document.body.appendChild(div);
6+
})(document))
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"manifest_version": 2,
3+
"name": "webextensions-selenium-example",
4+
"description": "Inject a div with id webextensions-selenium-example to verify that WebExtensions work in Firefox/Selenium" ,
5+
"version": "0.1",
6+
"content_scripts": [
7+
{
8+
"matches": ["https://*/*","http://*/*"],
9+
"js": ["inject.js"]
10+
}
11+
],
12+
"applications": {
13+
"gecko": {
14+
15+
}
16+
}
17+
}

javascript/node/selenium-webdriver/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ jasmine_node_test(
7272
data = TEST_DATA + [
7373
"tools/init_jasmine.js",
7474
"//common/src/web",
75+
"//common/extensions",
7576
"@npm//express",
7677
"@npm//multer",
7778
"@npm//serve-index",

javascript/node/selenium-webdriver/firefox.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@
116116

117117
'use strict'
118118

119+
const fs = require('fs')
119120
const path = require('path')
120121
const Symbols = require('./lib/symbols')
121122
const command = require('./lib/command')
@@ -670,7 +671,15 @@ class Driver extends webdriver.WebDriver {
670671
* @see #uninstallAddon
671672
*/
672673
async installAddon(path, temporary = false) {
673-
let buf = await io.read(path)
674+
let stats = fs.statSync(path)
675+
let buf;
676+
if (stats.isDirectory()) {
677+
let zip = new Zip()
678+
await zip.addDir(path)
679+
buf = await zip.toBuffer('DEFLATE')
680+
} else {
681+
buf = await io.read(path)
682+
}
674683
return this.execute(
675684
new command.Command(ExtensionCommand.INSTALL_ADDON)
676685
.setParameter('addon', buf.toString('base64'))
Binary file not shown.

javascript/node/selenium-webdriver/test/chrome/devtools_test.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -162,18 +162,18 @@ test.suite(
162162
const dir = await io.tmpDir()
163163
await driver.setDownloadPath(dir)
164164

165-
const url = fileServer.whereIs('/data/firefox/webextension.xpi')
165+
const url = fileServer.whereIs('/data/chrome/download.bin')
166166
await driver.get(`data:text/html,<!DOCTYPE html>
167167
<div><a download="" href="${url}">Go!</a></div>`)
168168

169169
await driver.findElement({ css: 'a' }).click()
170170

171-
const downloadPath = path.join(dir, 'webextension.xpi')
171+
const downloadPath = path.join(dir, 'download.bin')
172172
await driver.wait(() => io.exists(downloadPath), 5000)
173173

174174
const goldenPath = path.join(
175175
__dirname,
176-
'../../lib/test/data/firefox/webextension.xpi'
176+
'../../lib/test/data/chrome/download.bin'
177177
)
178178
assert.strictEqual(
179179
fs.readFileSync(downloadPath, 'binary'),

0 commit comments

Comments
 (0)