blob: 5afd708f4e1267f1e6be47f70d614a572aeb1277 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* @implements {Protocol.PageDispatcher}
*/
SDK.ScreenCaptureModel = class extends SDK.SDKModel {
/**
* @param {!SDK.Target} target
*/
constructor(target) {
super(target);
this._agent = target.pageAgent();
/** @type {?function(string, !Protocol.Page.ScreencastFrameMetadata)} */
this._onScreencastFrame = null;
/** @type {?function(boolean)} */
this._onScreencastVisibilityChanged = null;
target.registerPageDispatcher(this);
}
/**
* @param {string} format
* @param {number} quality
* @param {number|undefined} width
* @param {number|undefined} height
* @param {number|undefined} everyNthFrame
* @param {function(string, !Protocol.Page.ScreencastFrameMetadata)} onFrame
* @param {function(boolean)} onVisibilityChanged
*/
startScreencast(format, quality, width, height, everyNthFrame, onFrame, onVisibilityChanged) {
this._onScreencastFrame = onFrame;
this._onScreencastVisibilityChanged = onVisibilityChanged;
this._agent.startScreencast(format, quality, width, height, everyNthFrame);
}
stopScreencast() {
this._onScreencastFrame = null;
this._onScreencastVisibilityChanged = null;
this._agent.stopScreencast();
}
/**
* @param {string} format
* @param {number} quality
* @return {!Promise<?string>}
*/
captureScreenshot(format, quality) {
var fulfill;
var promise = new Promise(callback => fulfill = callback);
this._agent.captureScreenshot(format, quality, false, (error, content) => {
if (error)
console.error(error);
fulfill(error ? null : content);
});
return promise;
}
/**
* @return {!Promise<?{width: number, height: number}>}
*/
fetchContentSize() {
var fulfill;
var promise = new Promise(callback => fulfill = callback);
this._agent.getLayoutMetrics((error, layoutViewport, visualViewport, contentSize) => {
fulfill(error ? null : {width: contentSize.width, height: contentSize.height});
});
return promise;
}
/**
* @override
* @param {string} data
* @param {!Protocol.Page.ScreencastFrameMetadata} metadata
* @param {number} sessionId
*/
screencastFrame(data, metadata, sessionId) {
this._agent.screencastFrameAck(sessionId);
if (this._onScreencastFrame)
this._onScreencastFrame.call(null, data, metadata);
}
/**
* @override
* @param {boolean} visible
*/
screencastVisibilityChanged(visible) {
if (this._onScreencastVisibilityChanged)
this._onScreencastVisibilityChanged.call(null, visible);
}
/**
* @override
* @param {number} time
*/
domContentEventFired(time) {
}
/**
* @override
* @param {number} time
*/
loadEventFired(time) {
}
/**
* @override
* @param {!Protocol.Page.FrameId} frameId
* @param {!Protocol.Page.FrameId} parentFrameId
*/
frameAttached(frameId, parentFrameId) {
}
/**
* @override
* @param {!Protocol.Page.Frame} frame
*/
frameNavigated(frame) {
}
/**
* @override
* @param {!Protocol.Page.FrameId} frameId
*/
frameDetached(frameId) {
}
/**
* @override
* @param {!Protocol.Page.FrameId} frameId
*/
frameStartedLoading(frameId) {
}
/**
* @override
* @param {!Protocol.Page.FrameId} frameId
*/
frameStoppedLoading(frameId) {
}
/**
* @override
* @param {!Protocol.Page.FrameId} frameId
* @param {number} delay
*/
frameScheduledNavigation(frameId, delay) {
}
/**
* @override
* @param {!Protocol.Page.FrameId} frameId
*/
frameClearedScheduledNavigation(frameId) {
}
/**
* @override
*/
frameResized() {
}
/**
* @override
* @param {string} message
* @param {string} dialogType
*/
javascriptDialogOpening(message, dialogType) {
}
/**
* @override
* @param {boolean} result
*/
javascriptDialogClosed(result) {
}
/**
* @override
* @param {!Protocol.DOM.RGBA} color
*/
colorPicked(color) {
}
/**
* @override
*/
interstitialShown() {
}
/**
* @override
*/
interstitialHidden() {
}
/**
* @override
*/
navigationRequested() {
}
};
SDK.SDKModel.register(SDK.ScreenCaptureModel, SDK.Target.Capability.ScreenCapture);