feat: Introduce BrowserFetcher class (#1983)

This patch introduces `BrowserFetcher` class that manages
downloaded versions of products.

This patch:
- shapes Downloader API to be minimal yet usable for our needs. This
  includes removing such methods as `Downloader.supportedPlatforms` and
  `Downloader.defaultRevision`.
- makes most of the fs-related methods in Downloader async. The only
  exception is the `Downloader.revisionInfo`: it has stay sync due to the
  `pptr.executablePath()` method being sync.
- updates `install.js` and `utils/check_availability.js` to use new API
- finally, renames `Downloader` into `BrowserFetcher`

Fixes #1748.
This commit is contained in:
Andrey Lushnikov
2018-02-07 12:31:53 -05:00
committed by GitHub
parent 18c975509f
commit a363a733b7
11 changed files with 260 additions and 141 deletions

View File

@@ -17,13 +17,13 @@ const os = require('os');
const path = require('path');
const removeFolder = require('rimraf');
const childProcess = require('child_process');
const Downloader = require('./Downloader');
const BrowserFetcher = require('./BrowserFetcher');
const {Connection} = require('./Connection');
const {Browser} = require('./Browser');
const readline = require('readline');
const fs = require('fs');
const {helper} = require('./helper');
const ChromiumRevision = Downloader.defaultRevision();
const ChromiumRevision = require(path.join(helper.projectRoot(), 'package.json')).puppeteer.chromium_revision;
const mkdtempAsync = helper.promisify(fs.mkdtemp);
const removeFolderAsync = helper.promisify(removeFolder);
@@ -90,9 +90,9 @@ class Launcher {
}
let chromeExecutable = options.executablePath;
if (typeof chromeExecutable !== 'string') {
const downloader = Downloader.createDefault();
const revisionInfo = downloader.revisionInfo(downloader.currentPlatform(), ChromiumRevision);
console.assert(revisionInfo.downloaded, `Chromium revision is not downloaded. Run "npm install" or "yarn install"`);
const browserFetcher = new BrowserFetcher();
const revisionInfo = browserFetcher.revisionInfo(ChromiumRevision);
console.assert(revisionInfo.local, `Chromium revision is not downloaded. Run "npm install" or "yarn install"`);
chromeExecutable = revisionInfo.executablePath;
}
if (Array.isArray(options.args))
@@ -187,8 +187,8 @@ class Launcher {
* @return {string}
*/
static executablePath() {
const downloader = Downloader.createDefault();
const revisionInfo = downloader.revisionInfo(downloader.currentPlatform(), ChromiumRevision);
const browserFetcher = new BrowserFetcher();
const revisionInfo = browserFetcher.revisionInfo(ChromiumRevision);
return revisionInfo.executablePath;
}