/**
* GNU LibreJS - A browser add-on to block nonfree nontrivial JavaScript.
* *
* Copyright (C) 2021 Yuchen Pei
*
* This file is part of GNU LibreJS.
*
* GNU LibreJS is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* GNU LibreJS is distributed in the hope that it will be useful,
* 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 GNU LibreJS. If not, see .
*/
/**
* A node script that opens the supplied url and outputs librejs
* compliance.
*
* Usage: node ./compliance.js
*
* It opens the url, saves a screenshot, and outputs text from the
* LibreJS display panel about the webpage compliance.
*/
var fs = require('fs');
(function libreJSCompliance() {
const webdriver = require('selenium-webdriver');
const firefox = require('selenium-webdriver/firefox');
new webdriver.Builder().forBrowser('firefox')
.setFirefoxOptions(new firefox.Options()
// Uncomment to test using icecat or abrowser
// .setBinary("/usr/bin/icecat")
// .setBinary("/usr/bin/abrowser")
.headless()
)
.build()
.then(driver =>
driver.installAddon("./librejs.xpi", /*isTemporary=*/true)
.then(driver.get("about:debugging#/runtime/this-firefox"))
.then(_ => driver.findElements(webdriver.By.css('.fieldpair dd')))
.then(es => es[2].getText())
.then(uuid =>
driver.get(process.argv[2])
// Refreshing the page, otherwise weblabels may not work.
.then(_ => driver.get(process.argv[2]))
// Wait, even if the webpage appears loaded, without waiting
// the script may get stuck.
.then(_ => driver.sleep(5000))
.then(_ => driver.takeScreenshot())
.then(s => fs.writeFile(
"/tmp/screen.png", Buffer.from(s, 'base64'), "binary",
err => err ? console.log(err) : console.log("Screenshot saved to /tmp/screen.png")))
.then(_ => driver.executeScript("window.open('');"))
.then(_ => driver.getAllWindowHandles())
.then(handles => driver.switchTo().window(handles[1]))
.then(_ => driver.get('moz-extension://'
+ uuid
+ '/html/display_panel/content/display-panel.html#fromTab=1'))
.then(_ => driver.findElement(webdriver.By.css('div#info')))
.then(e => e.getText())
.then(console.log)
)
.then(_ => driver.quit())
);
})();