| Index: test/runners/chromium_remote_process.js |
| =================================================================== |
| copy from chromium_process.js |
| copy to test/runners/chromium_remote_process.js |
| --- a/chromium_process.js |
| +++ b/test/runners/chromium_remote_process.js |
| @@ -10,30 +10,28 @@ |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU General Public License for more details. |
| * |
| * You should have received a copy of the GNU General Public License |
| * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
| */ |
| -/* eslint-env node */ |
| -/* eslint no-console: "off" */ |
| - |
| "use strict"; |
| const childProcess = require("child_process"); |
| const fs = require("fs"); |
| -const https = require("https"); |
| const os = require("os"); |
| const path = require("path"); |
| const remoteInterface = require("chrome-remote-interface"); |
| -const extractZip = require("extract-zip"); |
| +const {ensureChromium} = require("./chromium_download"); |
| + |
| +// Chromium 60.0.3082.x |
| const CHROMIUM_REVISION = 467222; |
| function rmdir(dirPath) |
| { |
| for (let file of fs.readdirSync(dirPath)) |
| { |
| let filePath = path.join(dirPath, file); |
| try |
| @@ -54,133 +52,16 @@ |
| fs.rmdirSync(dirPath); |
| } |
| catch (error) |
| { |
| console.error(error); |
| } |
| } |
| -function getChromiumExecutable(chromiumDir) |
| -{ |
| - switch (process.platform) |
| - { |
| - case "win32": |
| - return path.join(chromiumDir, "chrome-win32", "chrome.exe"); |
| - case "linux": |
| - return path.join(chromiumDir, "chrome-linux", "chrome"); |
| - case "darwin": |
| - return path.join(chromiumDir, "chrome-mac", "Chromium.app", "Contents", |
| - "MacOS", "Chromium"); |
| - default: |
| - throw new Error("Unexpected platform"); |
| - } |
| -} |
| - |
| -function ensureChromium() |
| -{ |
| - let {platform} = process; |
| - if (platform == "win32") |
| - platform += "-" + process.arch; |
| - let buildTypes = { |
| - "win32-ia32": ["Win", "chrome-win32.zip"], |
| - "win32-x64": ["Win_x64", "chrome-win32.zip"], |
| - "linux": ["Linux_x64", "chrome-linux.zip"], |
| - "darwin": ["Mac", "chrome-mac.zip"] |
| - }; |
| - |
| - if (!buildTypes.hasOwnProperty(platform)) |
| - { |
| - let err = new Error(`Cannot run browser tests, ${platform} is unsupported`); |
| - return Promise.reject(err); |
| - } |
| - |
| - |
| - return Promise.resolve().then(() => |
| - { |
| - let snapshotsDir = path.join(__dirname, "chromium-snapshots"); |
| - let chromiumDir = path.join(snapshotsDir, |
| - `chromium-${platform}-${CHROMIUM_REVISION}`); |
| - if (fs.existsSync(chromiumDir)) |
| - return chromiumDir; |
| - |
| - if (!fs.existsSync(path.dirname(chromiumDir))) |
| - fs.mkdirSync(path.dirname(chromiumDir)); |
| - |
| - let [dir, fileName] = buildTypes[platform]; |
| - let archive = path.join(snapshotsDir, "download-cache", |
| - `${CHROMIUM_REVISION}-${fileName}`); |
| - |
| - return Promise.resolve() |
| - .then(() => |
| - { |
| - if (!fs.existsSync(archive)) |
| - { |
| - let url = `https://www.googleapis.com/download/storage/v1/b/chromium-browser-snapshots/o/${dir}%2F${CHROMIUM_REVISION}%2F${fileName}?alt=media`; |
| - console.info("Downloading Chromium..."); |
| - return download(url, archive); |
| - } |
| - console.info(`Reusing cached archive ${archive}`); |
| - }) |
| - .then(() => unzipArchive(archive, chromiumDir)) |
| - .then(() => chromiumDir); |
| - }).then(dir => getChromiumExecutable(dir)); |
| -} |
| - |
| -function download(url, destFile) |
| -{ |
| - return new Promise((resolve, reject) => |
| - { |
| - let cacheDir = path.dirname(destFile); |
| - if (!fs.existsSync(cacheDir)) |
| - fs.mkdirSync(cacheDir); |
| - let tempDest = destFile + "-" + process.pid; |
| - let writable = fs.createWriteStream(tempDest); |
| - |
| - https.get(url, response => |
| - { |
| - if (response.statusCode != 200) |
| - { |
| - reject( |
| - new Error(`Unexpected server response: ${response.statusCode}`)); |
| - response.resume(); |
| - return; |
| - } |
| - |
| - response.pipe(writable) |
| - .on("error", error => |
| - { |
| - writable.close(); |
| - fs.unlinkSync(tempDest); |
| - reject(error); |
| - }) |
| - .on("close", () => |
| - { |
| - writable.close(); |
| - fs.renameSync(tempDest, destFile); |
| - resolve(); |
| - }); |
| - }).on("error", reject); |
| - }); |
| -} |
| - |
| -function unzipArchive(archive, destDir) |
| -{ |
| - return new Promise((resolve, reject) => |
| - { |
| - extractZip(archive, {dir: destDir}, err => |
| - { |
| - if (err) |
| - reject(err); |
| - else |
| - resolve(); |
| - }); |
| - }); |
| -} |
| - |
| function startChromium(chromiumPath) |
| { |
| fs.chmodSync(chromiumPath, fs.constants.S_IRWXU); |
| let dataDir = fs.mkdtempSync(path.join(os.tmpdir(), "chromium-data")); |
| let child = null; |
| return { |
| kill: () => child && child.kill(), |
| @@ -251,16 +132,18 @@ |
| function runScript(script, scriptName, scriptArgs) |
| { |
| return connectRemoteInterface().then(async client => |
| { |
| try |
| { |
| let {Runtime, Log, Console} = client; |
| + console.log("\nBrowser tests in Chromium (Remote Interface)\n"); |
| + |
| await Log.enable(); |
| Log.entryAdded(({entry}) => |
| { |
| reportMessage(entry.text, entry.level); |
| }); |
| await Console.enable(); |
| Console.messageAdded(({message}) => |
| @@ -301,17 +184,17 @@ |
| { |
| client.close(); |
| } |
| }); |
| } |
| module.exports = function(script, scriptName, ...scriptArgs) |
| { |
| - return ensureChromium().then(chromiumPath => |
| + return ensureChromium(CHROMIUM_REVISION).then(chromiumPath => |
| { |
| let child = startChromium(chromiumPath); |
| return Promise.race([ |
| child.done, |
| runScript(script, scriptName, scriptArgs) |
| ]).then(result => |
| { |
| child.kill(); |