@eyeo/get-browser-binary 0.18.0 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/RELEASE_NOTES.md CHANGED
@@ -1,4 +1,13 @@
1
- # Unreleased
1
+ # Unreleased
2
+
3
+ # 0.19.0
4
+
5
+ - Fixes an issue starting with Firefox version 135 which prevented the binary to be downloaded (#82)
6
+ - `getInstalledVersion` now returns only the version number (#81)
7
+
8
+ ## Testing
9
+
10
+ - Test extensions internal pages can now load normally. The development version of Chromium 133 got the `driver.getAllWindowHandles()` issue fixed, therefore the workaround is no longer needed. (!121)
2
11
 
3
12
  # 0.18.0
4
13
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eyeo/get-browser-binary",
3
- "version": "0.18.0",
3
+ "version": "0.19.0",
4
4
  "description": "Install browser binaries and matching webdrivers",
5
5
  "repository": {
6
6
  "type": "git",
package/src/browser.js CHANGED
@@ -48,7 +48,8 @@ export class Browser {
48
48
  }
49
49
 
50
50
  /**
51
- * Gets the installed version returned by the browser binary.
51
+ * Gets the installed version returned by the browser binary. Subclasses add
52
+ * specific parsing to this function.
52
53
  * @param {string} binary The path to the browser binary.
53
54
  * @return {string} Installed browser version.
54
55
  * @throws {Error} Browser is not installed.
package/src/chromium.js CHANGED
@@ -110,11 +110,18 @@ export class Chromium extends Browser {
110
110
  return parseInt(chromiumBase, 10);
111
111
  }
112
112
 
113
- static async #getInstalledBrowserInfo(binary) {
114
- let installedVersion = await Chromium.getInstalledVersion(binary);
113
+ /** @see Browser.getInstalledVersion */
114
+ static async getInstalledVersion(binary) {
115
+ const installedVersion = await super.getInstalledVersion(binary);
116
+
115
117
  // Linux example: "Chromium 112.0.5615.49 built on Debian 11.6"
116
118
  // Windows example: "114.0.5735.0"
117
- let versionNumber = installedVersion.split(" ")[1] || installedVersion;
119
+ return installedVersion.split(" ")[1] || installedVersion;
120
+ }
121
+
122
+ static async #getInstalledBrowserInfo(binary) {
123
+ const versionNumber = await Chromium.getInstalledVersion(binary);
124
+
118
125
  return {binary, versionNumber};
119
126
  }
120
127
 
package/src/edge.js CHANGED
@@ -135,7 +135,7 @@ export class Edge extends Browser {
135
135
  let archive = path.join(snapshotsDir, "cache", filename);
136
136
  let binary = Edge.#getBinaryPath(channel);
137
137
  try {
138
- if (await Edge.#getInstalledVersionNumber(binary) == versionNumber)
138
+ if (await Edge.getInstalledVersion(binary) == versionNumber)
139
139
  return {binary, versionNumber};
140
140
  }
141
141
  catch (e) {}
@@ -171,8 +171,9 @@ export class Edge extends Browser {
171
171
  return {binary, versionNumber};
172
172
  }
173
173
 
174
- static async #getInstalledVersionNumber(binary) {
175
- let installedVersion = await Edge.getInstalledVersion(binary);
174
+ /** @see Browser.getInstalledVersion */
175
+ static async getInstalledVersion(binary) {
176
+ let installedVersion = await super.getInstalledVersion(binary);
176
177
  for (let word of ["beta", "dev", "Beta", "Dev"])
177
178
  installedVersion = installedVersion.replace(word, "");
178
179
  return installedVersion.trim().replace(/.*\s/, "");
@@ -194,7 +195,7 @@ export class Edge extends Browser {
194
195
  else {
195
196
  binary = customBrowserBinary || Edge.#getBinaryPath();
196
197
  versionNumber =
197
- await Edge.#getInstalledVersionNumber(binary);
198
+ await Edge.getInstalledVersion(binary);
198
199
  }
199
200
 
200
201
  let options = new edge.Options().addArguments("no-sandbox", ...extraArgs);
package/src/firefox.js CHANGED
@@ -106,11 +106,12 @@ export class Firefox extends Browser {
106
106
  }
107
107
  }
108
108
 
109
- static async #getInstalledBrowserInfo(binary) {
110
- let installedVersion = await Firefox.getInstalledVersion(binary);
109
+ /** @see Browser.getInstalledVersion */
110
+ static async getInstalledVersion(binary) {
111
+ const installedVersion = await super.getInstalledVersion(binary);
112
+
111
113
  // Linux example: "Mozilla Firefox 102.15.0esr"
112
- let versionNumber = installedVersion.split(" ")[2] || installedVersion;
113
- return {binary, versionNumber};
114
+ return installedVersion.split(" ")[2] || installedVersion;
114
115
  }
115
116
 
116
117
  /**
@@ -130,10 +131,15 @@ export class Firefox extends Browser {
130
131
  checkVersion(version, MIN_VERSION, Firefox.#CHANNELS);
131
132
  let versionNumber = await Firefox.#getVersionForChannel(version);
132
133
 
134
+ const majorVersion = getMajorVersion(versionNumber);
135
+ // Starting from Firefox 135 on Linux, the binary file extension
136
+ // was changed from .bz2 to .xz
137
+ const linuxExtension = majorVersion <= 134 ? "tar.bz2" : "tar.xz";
138
+
133
139
  let [buildPlatform, fileName] = {
134
140
  "win32-ia32": ["win32", `Firefox Setup ${versionNumber}.exe`],
135
141
  "win32-x64": ["win64", `Firefox Setup ${versionNumber}.exe`],
136
- "linux-x64": ["linux-x86_64", `firefox-${versionNumber}.tar.bz2`],
142
+ "linux-x64": ["linux-x86_64", `firefox-${versionNumber}.${linuxExtension}`],
137
143
  "darwin-x64": ["mac", `Firefox ${versionNumber}.dmg`],
138
144
  "darwin-arm64": ["mac", `Firefox ${versionNumber}.dmg`]
139
145
  }[platformArch];
package/src/utils.js CHANGED
@@ -91,7 +91,15 @@ export async function download(url, destFile, timeout = 0) {
91
91
 
92
92
  export async function extractTar(archive, dir) {
93
93
  await fs.promises.mkdir(dir);
94
- await promisify(exec)(`tar -jxf ${archive} -C ${dir}`);
94
+
95
+ let command;
96
+
97
+ if (archive.endsWith(".xz"))
98
+ command = `tar -xf ${archive} -C ${dir}`;
99
+ else
100
+ command = `tar -jxf ${archive} -C ${dir}`;
101
+
102
+ await promisify(exec)(command);
95
103
  }
96
104
 
97
105
  export async function extractDmg(archive, dir) {
package/test/browsers.js CHANGED
@@ -111,7 +111,7 @@ async function getInstallFileCTime(browser) {
111
111
  process.platform == "darwin"))
112
112
  return null;
113
113
 
114
- const installTypes = [".zip", ".dmg", ".bz2", ".deb", ".exe"];
114
+ const installTypes = [".zip", ".dmg", ".bz2", ".xz", ".deb", ".exe"];
115
115
 
116
116
  let cacheDir = path.join(snapshotsBaseDir, browser, "cache");
117
117
  let cacheFiles = await fs.promises.readdir(cacheDir);
@@ -1,16 +1,3 @@
1
1
  "use strict";
2
2
 
3
- // There's an issue with Chrome +133 and selenium webdriver where
4
- // getAllWindowHandles() can't see tabs opened by an extension if the url option
5
- // opens an extension page. Example: chrome.tabs.create({url: "index.html"});
6
- //
7
- // Workaround: Create the tab with empty options, which allows
8
- // getAllWindowHandles() to see it, and afterwards update the tab with the
9
- // intended url.
10
-
11
- // This timeout must be higher than driver.geAllWindowHandles() polling interval
12
- const timeout = 1000;
13
-
14
- chrome.tabs.create({}, ({tabId}) => {
15
- setTimeout(() => chrome.tabs.update(tabId, {url: "index.html"}), timeout);
16
- });
3
+ chrome.tabs.create({url: "index.html"});