123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- const http = require("http");
- const angular_wait_barrier_1 = require("./angular_wait_barrier");
- const highlight_delay_barrier_1 = require("./highlight_delay_barrier");
- const simple_webdriver_client_1 = require("./simple_webdriver_client");
- const webdriver_proxy_1 = require("./webdriver_proxy");
- exports.BP_PREFIX = 'bpproxy';
- /**
- * The stability proxy is an http server responsible for intercepting
- * JSON webdriver commands. It keeps track of whether the page under test
- * needs to wait for page stability, and initiates a wait if so.
- */
- class BlockingProxy {
- constructor(seleniumAddress, highlightDelay = null) {
- this.server = http.createServer(this.requestListener.bind(this));
- this.proxy = new webdriver_proxy_1.WebDriverProxy(seleniumAddress);
- let client = new simple_webdriver_client_1.SimpleWebDriverClient(seleniumAddress);
- this.waitBarrier = new angular_wait_barrier_1.AngularWaitBarrier(client);
- this.highlightBarrier = new highlight_delay_barrier_1.HighlightDelayBarrier(client, highlightDelay);
- this.proxy.addBarrier(this.waitBarrier);
- this.proxy.addBarrier(this.highlightBarrier);
- }
- /**
- * This command is for the proxy server, not to be forwarded to Selenium.
- */
- static isProxyCommand(commandPath) {
- return (commandPath.split('/')[1] === exports.BP_PREFIX);
- }
- /**
- * Turn on WebDriver logging.
- *
- * @param logDir The directory to create logs in.
- */
- enableLogging(logDir) {
- this.waitBarrier.enableLogging(logDir);
- }
- /**
- * Override the logger instance. Only used for testing.
- */
- setLogger(logger) {
- this.waitBarrier.setLogger(logger);
- }
- /**
- * Change the parameters used by the wait function.
- */
- setWaitParams(rootEl) {
- this.waitBarrier.setRootSelector(rootEl);
- }
- handleProxyCommand(message, data, response) {
- let command = message.url.split('/')[2];
- switch (command) {
- case 'waitEnabled':
- if (message.method === 'GET') {
- response.writeHead(200);
- response.write(JSON.stringify({ value: this.waitBarrier.enabled }));
- response.end();
- }
- else if (message.method === 'POST') {
- response.writeHead(200);
- this.waitBarrier.enabled = JSON.parse(data).value;
- response.end();
- }
- else {
- response.writeHead(405);
- response.write('Invalid method');
- response.end();
- }
- break;
- case 'waitParams':
- if (message.method === 'GET') {
- response.writeHead(200);
- response.write(JSON.stringify({ rootSelector: this.waitBarrier.rootSelector }));
- response.end();
- }
- else if (message.method === 'POST') {
- response.writeHead(200);
- this.waitBarrier.rootSelector = JSON.parse(data).rootSelector;
- response.end();
- }
- else {
- response.writeHead(405);
- response.write('Invalid method');
- response.end();
- }
- break;
- default:
- response.writeHead(404);
- response.write('Unknown stabilizer proxy command');
- response.end();
- }
- }
- requestListener(originalRequest, response) {
- if (BlockingProxy.isProxyCommand(originalRequest.url)) {
- let commandData = '';
- originalRequest.on('data', (d) => {
- commandData += d;
- });
- originalRequest.on('end', () => {
- this.handleProxyCommand(originalRequest, commandData, response);
- });
- return;
- }
- // OK to ignore the promise returned by this.
- this.proxy.handleRequest(originalRequest, response);
- }
- listen(port) {
- this.server.listen(port);
- let actualPort = this.server.address().port;
- return actualPort;
- }
- quit() {
- return new Promise((resolve) => {
- this.server.close(resolve);
- });
- }
- }
- exports.BlockingProxy = BlockingProxy;
- //# sourceMappingURL=blockingproxy.js.map
|