Innovenergy_trunk/frontend/node_modules/testcafe/lib/browser/provider/plugin-host.js

135 lines
17 KiB
JavaScript

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const lodash_1 = require("lodash");
const promisify_event_1 = __importDefault(require("promisify-event"));
const browser_job_result_1 = __importDefault(require("../../runner/browser-job-result"));
const connection_1 = __importDefault(require("../connection"));
const warning_message_1 = __importDefault(require("../../notifications/warning-message"));
const testcafe_hammerhead_1 = require("testcafe-hammerhead");
const name = Symbol();
class BrowserProviderPluginHost {
constructor(providerObject, providerName) {
this.JOB_RESULT = (0, lodash_1.assignIn)({}, browser_job_result_1.default);
(0, lodash_1.assignIn)(this, providerObject);
this[name] = providerName;
}
// Helpers
get providerName() {
return this[name];
}
async runInitScript(browserId, code) {
const connection = connection_1.default.getById(browserId);
return connection.runInitScript(`(${code})()`);
}
calculateWindowId() {
return (0, testcafe_hammerhead_1.generateUniqueId)();
}
waitForConnectionReady(browserId) {
const connection = connection_1.default.getById(browserId);
if (connection.isReady())
return Promise.resolve();
return (0, promisify_event_1.default)(connection, 'ready');
}
reportWarning(browserId, ...args) {
const connection = connection_1.default.getById(browserId);
connection.addWarning(...args);
}
setUserAgentMetaInfo(browserId, message, ...args) {
const connection = connection_1.default.getById(browserId);
connection.setProviderMetaInfo(message, ...args);
}
async closeLocalBrowser(browserId) {
const connection = connection_1.default.getById(browserId);
await connection.provider._ensureBrowserWindowDescriptor(browserId);
await connection.provider._closeLocalBrowser(browserId);
}
async resizeLocalBrowserWindow(browserId, width, height, currentWidth, currentHeight) {
const connection = connection_1.default.getById(browserId);
await connection.provider._ensureBrowserWindowParameters(browserId);
await connection.provider._resizeLocalBrowserWindow(browserId, width, height, currentWidth, currentHeight);
}
// API
// Browser control
async openBrowser( /* browserId, pageUrl, browserName */) {
throw new Error('Not implemented!');
}
async closeBrowser( /* browserId */) {
throw new Error('Not implemented!');
}
// Initialization
async init() {
return;
}
async dispose() {
return;
}
// Browser names handling
async getBrowserList() {
throw new Error('Not implemented!');
}
async isValidBrowserName( /* browserName */) {
return true;
}
// Extra functions
// NOTE:
// The browserName argument is optional, and must be supplied if the browserId argument is not valid
// (browser is not opened)
async isLocalBrowser( /* browserId[, browserName] */) {
return false;
}
// NOTE:
// The browserName argument is optional, and must be supplied if the browserId argument is not valid
// (browser is not opened)
isHeadlessBrowser( /* browserId[, browserName] */) {
return false;
}
async hasCustomActionForBrowser( /* browserId */) {
return {
hasCloseBrowser: this.hasOwnProperty('closeBrowser'),
hasResizeWindow: this.hasOwnProperty('resizeWindow'),
hasTakeScreenshot: this.hasOwnProperty('takeScreenshot'),
hasGetVideoFrameData: this.hasOwnProperty('getVideoFrameData'),
hasCanResizeWindowToDimensions: this.hasOwnProperty('canResizeWindowToDimensions'),
hasMaximizeWindow: this.hasOwnProperty('maximizeWindow'),
hasChromelessScreenshots: false,
};
}
async resizeWindow(browserId /*, width, height, currentWidth, currentHeight */) {
this.reportWarning(browserId, warning_message_1.default.resizeNotSupportedByBrowserProvider, this[name]);
}
async canResizeWindowToDimensions( /* browserId, width, height */) {
return true;
}
async takeScreenshot(browserId /*, screenshotPath, pageWidth, pageHeight */) {
this.reportWarning(browserId, warning_message_1.default.screenshotNotSupportedByBrowserProvider, this[name]);
}
async maximizeWindow(browserId) {
this.reportWarning(browserId, warning_message_1.default.maximizeNotSupportedByBrowserProvider, this[name]);
}
async startCapturingVideo( /*browserId*/) {
}
async stopCapturingVideo( /*browserId*/) {
}
async getVideoFrameData(browserId) {
const browserAlias = connection_1.default.getById(browserId).browserInfo.alias;
this.reportWarning(browserId, warning_message_1.default.videoNotSupportedByBrowser, browserAlias);
}
async reportJobResult( /*browserId, status, data*/) {
return;
}
getConfig(value) {
return value;
}
async closeBrowserChildWindow( /*browserId*/) {
return Promise.resolve();
}
async getOSInfo( /*browserId*/) {
return null;
}
}
exports.default = BrowserProviderPluginHost;
module.exports = exports.default;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWhvc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYnJvd3Nlci9wcm92aWRlci9wbHVnaW4taG9zdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1DQUFrQztBQUNsQyxzRUFBNkM7QUFDN0MseUZBQWlFO0FBQ2pFLCtEQUE4QztBQUM5QywwRkFBa0U7QUFDbEUsNkRBQXVEO0FBRXZELE1BQU0sSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBRXRCLE1BQXFCLHlCQUF5QjtJQUMxQyxZQUFhLGNBQWMsRUFBRSxZQUFZO1FBQ3JDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBQSxpQkFBUSxFQUFDLEVBQUUsRUFBRSw0QkFBa0IsQ0FBQyxDQUFDO1FBRW5ELElBQUEsaUJBQVEsRUFBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFFL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLFlBQVksQ0FBQztJQUM5QixDQUFDO0lBR0QsVUFBVTtJQUNWLElBQUksWUFBWTtRQUNaLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFFLFNBQVMsRUFBRSxJQUFJO1FBQ2hDLE1BQU0sVUFBVSxHQUFHLG9CQUFpQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV4RCxPQUFPLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxpQkFBaUI7UUFDYixPQUFPLElBQUEsc0NBQWdCLEdBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsc0JBQXNCLENBQUUsU0FBUztRQUM3QixNQUFNLFVBQVUsR0FBRyxvQkFBaUIsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFeEQsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFO1lBQ3BCLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxD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Q0FBQyxlQUFlLEVBQUUsMkJBQTJCO1FBQzlDLE9BQU87SUFDWCxDQUFDO0lBRUQsU0FBUyxDQUFFLEtBQUs7UUFDWixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsS0FBSyxDQUFDLHVCQUF1QixFQUFFLGFBQWE7UUFDeEMsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTLEVBQUUsYUFBYTtRQUMxQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0o7QUEvSkQsNENBK0pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXNzaWduSW4gfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHByb21pc2lmeUV2ZW50IGZyb20gJ3Byb21pc2lmeS1ldmVudCc7XG5pbXBvcnQgQlJPV1NFUl9KT0JfUkVTVUxUIGZyb20gJy4uLy4uL3J1bm5lci9icm93c2VyLWpvYi1yZXN1bHQnO1xuaW1wb3J0IEJyb3dzZXJDb25uZWN0aW9uIGZyb20gJy4uL2Nvbm5lY3Rpb24nO1xuaW1wb3J0IFdBUk5JTkdfTUVTU0FHRSBmcm9tICcuLi8uLi9ub3RpZmljYXRpb25zL3dhcm5pbmctbWVzc2FnZSc7XG5pbXBvcnQgeyBnZW5lcmF0ZVVuaXF1ZUlkIH0gZnJvbSAndGVzdGNhZmUtaGFtbWVyaGVhZCc7XG5cbmNvbnN0IG5hbWUgPSBTeW1ib2woKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnJvd3NlclByb3ZpZGVyUGx1Z2luSG9zdCB7XG4gICAgY29uc3RydWN0b3IgKHByb3ZpZGVyT2JqZWN0LCBwcm92aWRlck5hbWUpIHtcbiAgICAgICAgdGhpcy5KT0JfUkVTVUxUID0gYXNzaWduSW4oe30sIEJST1dTRVJfSk9CX1JFU1VMVCk7XG5cbiAgICAgICAgYXNzaWduSW4odGhpcywgcHJvdmlkZXJPYmplY3QpO1xuXG4gICAgICAgIHRoaXNbbmFtZV0gPSBwcm92aWRlck5hbWU7XG4gICAgfVxuXG5cbiAgICAvLyBIZWxwZXJzXG4gICAgZ2V0IHByb3ZpZGVyTmFtZSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW25hbWVdO1xuICAgIH1cblxuICAgIGFzeW5jIHJ1bkluaXRTY3JpcHQgKGJyb3dzZXJJZCwgY29kZSkge1xuICAgICAgICBjb25zdCBjb25uZWN0aW9uID0gQnJvd3NlckNvbm5lY3Rpb24uZ2V0QnlJZChicm93c2VySWQpO1xuXG4gICAgICAgIHJldHVybiBjb25uZWN0aW9uLnJ1bkluaXRTY3JpcHQoYCgke2NvZGV9KSgpYCk7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlV2luZG93SWQgKCkge1xuICAgICAgICByZXR1cm4gZ2VuZXJhdGVVbmlxdWVJZCgpO1xuICAgIH1cblxuICAgIHdhaXRGb3JDb25uZWN0aW9uUmVhZHkgKGJyb3dzZXJJZCkge1xuICAgICAgICBjb25zdCBjb25uZWN0aW9uID0gQnJvd3NlckNvbm5lY3Rpb24uZ2V0QnlJZChicm93c2VySWQpO1xuXG4gICAgICAgIGlmIChjb25uZWN0aW9uLmlzUmVhZHkoKSlcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblxuICAgICAgICByZXR1cm4gcHJvbWlzaWZ5RXZlbnQoY29ubmVjdGlvbiwgJ3JlYWR5Jyk7XG4gICAgfVxuXG4gICAgcmVwb3J0V2FybmluZyAoYnJvd3NlcklkLCAuLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBCcm93c2VyQ29ubmVjdGlvbi5nZXRCeUlkKGJyb3dzZXJJZCk7XG5cbiAgICAgICAgY29ubmVjdGlvbi5hZGRXYXJuaW5nKC4uLmFyZ3MpO1xuICAgIH1cblxuICAgIHNldFVzZXJBZ2VudE1ldGFJbmZvIChicm93c2VySWQsIG1lc3NhZ2UsIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgY29ubmVjdGlvbiA9IEJyb3dzZXJDb25uZWN0aW9uLmdldEJ5SWQoYnJvd3NlcklkKTtcblxuICAgICAgICBjb25uZWN0aW9uLnNldFByb3ZpZGVyTWV0YUluZm8obWVzc2FnZSwgLi4uYXJncyk7XG4gICAgfVxuXG4gICAgYXN5bmMgY2xvc2VMb2NhbEJyb3dzZXIgKGJyb3dzZXJJZCkge1xuICAgICAgICBjb25zdCBjb25uZWN0aW9uID0gQnJvd3NlckNvbm5lY3Rpb24uZ2V0QnlJZChicm93c2VySWQpO1xuXG4gICAgICAgIGF3YWl0IGNvbm5lY3Rpb24ucHJvdmlkZXIuX2Vuc3VyZUJyb3dzZXJXaW5kb3dEZXNjcmlwdG9yKGJyb3dzZXJJZCk7XG4gICAgICAgIGF3YWl0IGNvbm5lY3Rpb24ucHJvdmlkZXIuX2Nsb3NlTG9jYWxCcm93c2VyKGJyb3dzZXJJZCk7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVzaXplTG9jYWxCcm93c2VyV2luZG93IChicm93c2VySWQsIHdpZHRoLCBoZWlnaHQsIGN1cnJlbnRXaWR0aCwgY3VycmVudEhlaWdodCkge1xuICAgICAgICBjb25zdCBjb25uZWN0aW9uID0gQnJvd3NlckNvbm5lY3Rpb24uZ2V0QnlJZChicm93c2VySWQpO1xuXG4gICAgICAgIGF3YWl0IGNvbm5lY3Rpb24ucHJvdmlkZXIuX2Vuc3VyZUJyb3dzZXJXaW5kb3dQYXJhbWV0ZXJzKGJyb3dzZXJJZCk7XG4gICAgICAgIGF3YWl0IGNvbm5lY3Rpb24ucHJvdmlkZXIuX3Jlc2l6ZUxvY2FsQnJvd3NlcldpbmRvdyhicm93c2VySWQsIHdpZHRoLCBoZWlnaHQsIGN1cnJlbnRXaWR0aCwgY3VycmVudEhlaWdodCk7XG4gICAgfVxuXG4gICAgLy8gQVBJXG4gICAgLy8gQnJvd3NlciBjb250cm9sXG4gICAgYXN5bmMgb3BlbkJyb3dzZXIgKC8qIGJyb3dzZXJJZCwgcGFnZVVybCwgYnJvd3Nlck5hbWUgKi8pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQhJyk7XG4gICAgfVxuXG4gICAgYXN5bmMgY2xvc2VCcm93c2VyICgvKiBicm93c2VySWQgKi8pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQhJyk7XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGl6YXRpb25cbiAgICBhc3luYyBpbml0ICgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGFzeW5jIGRpc3Bvc2UgKCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICAvLyBCcm93c2VyIG5hbWVzIGhhbmRsaW5nXG4gICAgYXN5bmMgZ2V0QnJvd3Nlckxpc3QgKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCEnKTtcbiAgICB9XG5cbiAgICBhc3luYyBpc1ZhbGlkQnJvd3Nlck5hbWUgKC8qIGJyb3dzZXJOYW1lICovKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIEV4dHJhIGZ1bmN0aW9uc1xuICAgIC8vIE5PVEU6XG4gICAgLy8gVGhlIGJyb3dzZXJOYW1lIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCBhbmQgbXVzdCBiZSBzdXBwbGllZCBpZiB0aGUgYnJvd3NlcklkIGFyZ3VtZW50IGlzIG5vdCB2YWxpZFxuICAgIC8vIChicm93c2VyIGlzIG5vdCBvcGVuZWQpXG4gICAgYXN5bmMgaXNMb2NhbEJyb3dzZXIgKC8qIGJyb3dzZXJJZFssIGJyb3dzZXJOYW1lXSAqLykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gTk9URTpcbiAgICAvLyBUaGUgYnJvd3Nlck5hbWUgYXJndW1lbnQgaXMgb3B0aW9uYWwsIGFuZCBtdXN0IGJlIHN1cHBsaWVkIGlmIHRoZSBicm93c2VySWQgYXJndW1lbnQgaXMgbm90IHZhbGlkXG4gICAgLy8gKGJyb3dzZXIgaXMgbm90IG9wZW5lZClcbiAgICBpc0hlYWRsZXNzQnJvd3NlciAoLyogYnJvd3NlcklkWywgYnJvd3Nlck5hbWVdICovKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBhc3luYyBoYXNDdXN0b21BY3Rpb25Gb3JCcm93c2VyICgvKiBicm93c2VySWQgKi8pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhhc0Nsb3NlQnJvd3NlcjogICAgICAgICAgICAgICAgdGhpcy5oYXNPd25Qcm9wZXJ0eSgnY2xvc2VCcm93c2VyJyksXG4gICAgICAgICAgICBoYXNSZXNpemVXaW5kb3c6ICAgICAgICAgICAgICAgIHRoaXMuaGFzT3duUHJvcGVydHkoJ3Jlc2l6ZVdpbmRvdycpLFxuICAgICAgICAgICAgaGFzVGFrZVNjcmVlbnNob3Q6ICAgICAgICAgICAgICB0aGlzLmhhc093blByb3BlcnR5KCd0YWtlU2NyZWVuc2hvdCcpLFxuICAgICAgICAgICAgaGFzR2V0VmlkZW9GcmFtZURhdGE6ICAgICAgICAgICB0aGlzLmhhc093blByb3BlcnR5KCdnZXRWaWRlb0ZyYW1lRGF0YScpLFxuICAgICAgICAgICAgaGFzQ2FuUmVzaXplV2luZG93VG9EaW1lbnNpb25zOiB0aGlzLmhhc093blByb3BlcnR5KCdjYW5SZXNpemVXaW5kb3dUb0RpbWVuc2lvbnMnKSxcbiAgICAgICAgICAgIGhhc01heGltaXplV2luZG93OiAgICAgICAgICAgICAgdGhpcy5oYXNPd25Qcm9wZXJ0eSgnbWF4aW1pemVXaW5kb3cnKSxcbiAgICAgICAgICAgIGhhc0Nocm9tZWxlc3NTY3JlZW5zaG90czogICAgICAgZmFsc2UsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYXN5bmMgcmVzaXplV2luZG93IChicm93c2VySWQvKiwgd2lkdGgsIGhlaWdodCwgY3VycmVudFdpZHRoLCBjdXJyZW50SGVpZ2h0ICovKSB7XG4gICAgICAgIHRoaXMucmVwb3J0V2FybmluZyhicm93c2VySWQsIFdBUk5JTkdfTUVTU0FHRS5yZXNpemVOb3RTdXBwb3J0ZWRCeUJyb3dzZXJQcm92aWRlciwgdGhpc1tuYW1lXSk7XG4gICAgfVxuXG4gICAgYXN5bmMgY2FuUmVzaXplV2luZG93VG9EaW1lbnNpb25zICgvKiBicm93c2VySWQsIHdpZHRoLCBoZWlnaHQgKi8pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgYXN5bmMgdGFrZVNjcmVlbnNob3QgKGJyb3dzZXJJZC8qLCBzY3JlZW5zaG90UGF0aCwgcGFnZVdpZHRoLCBwYWdlSGVpZ2h0ICovKSB7XG4gICAgICAgIHRoaXMucmVwb3J0V2FybmluZyhicm93c2VySWQsIFdBUk5JTkdfTUVTU0FHRS5zY3JlZW5zaG90Tm90U3VwcG9ydGVkQnlCcm93c2VyUHJvdmlkZXIsIHRoaXNbbmFtZV0pO1xuICAgIH1cblxuICAgIGFzeW5jIG1heGltaXplV2luZG93IChicm93c2VySWQpIHtcbiAgICAgICAgdGhpcy5yZXBvcnRXYXJuaW5nKGJyb3dzZXJJZCwgV0FSTklOR19NRVNTQUdFLm1heGltaXplTm90U3VwcG9ydGVkQnlCcm93c2VyUHJvdmlkZXIsIHRoaXNbbmFtZV0pO1xuICAgIH1cblxuICAgIGFzeW5jIHN0YXJ0Q2FwdHVyaW5nVmlkZW8gKC8qYnJvd3NlcklkKi8pIHtcbiAgICB9XG5cbiAgICBhc3luYyBzdG9wQ2FwdHVyaW5nVmlkZW8gKC8qYnJvd3NlcklkKi8pIHtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRWaWRlb0ZyYW1lRGF0YSAoYnJvd3NlcklkKSB7XG4gICAgICAgIGNvbnN0IGJyb3dzZXJBbGlhcyA9IEJyb3dzZXJDb25uZWN0aW9uLmdldEJ5SWQoYnJvd3NlcklkKS5icm93c2VySW5mby5hbGlhcztcblxuICAgICAgICB0aGlzLnJlcG9ydFdhcm5pbmcoYnJvd3NlcklkLCBXQVJOSU5HX01FU1NBR0UudmlkZW9Ob3RTdXBwb3J0ZWRCeUJyb3dzZXIsIGJyb3dzZXJBbGlhcyk7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVwb3J0Sm9iUmVzdWx0ICgvKmJyb3dzZXJJZCwgc3RhdHVzLCBkYXRhKi8pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGdldENvbmZpZyAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGFzeW5jIGNsb3NlQnJvd3NlckNoaWxkV2luZG93ICgvKmJyb3dzZXJJZCovKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRPU0luZm8gKC8qYnJvd3NlcklkKi8pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuIl19