[go: nahoru, domu]

blob: a5e8ba9be605cc32b18b71b61b741c3596a37d0f [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.
import {OverlayModel} from './OverlayModel.js';
import {Capability, SDKModel, Target} from './SDKModel.js'; // eslint-disable-line no-unused-vars
/**
* @implements {ProtocolProxyApi.PageDispatcher}
*/
export class ScreenCaptureModel extends SDKModel {
/**
* @param {!Target} target
*/
constructor(target) {
super(target);
this._agent = target.pageAgent();
/** @type {?function(!Protocol.binary, !Protocol.Page.ScreencastFrameMetadata):void} */
this._onScreencastFrame = null;
/** @type {?function(boolean):void} */
this._onScreencastVisibilityChanged = null;
target.registerPageDispatcher(this);
}
/**
* @param {!Protocol.Page.StartScreencastRequestFormat} format
* @param {number} quality
* @param {number|undefined} maxWidth
* @param {number|undefined} maxHeight
* @param {number|undefined} everyNthFrame
* @param {function(!Protocol.binary, !Protocol.Page.ScreencastFrameMetadata): void} onFrame
* @param {function(boolean): void} onVisibilityChanged
*/
startScreencast(format, quality, maxWidth, maxHeight, everyNthFrame, onFrame, onVisibilityChanged) {
this._onScreencastFrame = onFrame;
this._onScreencastVisibilityChanged = onVisibilityChanged;
this._agent.invoke_startScreencast({format, quality, maxWidth, maxHeight, everyNthFrame});
}
stopScreencast() {
this._onScreencastFrame = null;
this._onScreencastVisibilityChanged = null;
this._agent.invoke_stopScreencast();
}
/**
* @param {!Protocol.Page.CaptureScreenshotRequestFormat} format
* @param {number} quality
* @param {!Protocol.Page.Viewport=} clip
* @return {!Promise<?Protocol.binary>}
*/
async captureScreenshot(format, quality, clip) {
await OverlayModel.muteHighlight();
const result = await this._agent.invoke_captureScreenshot({format, quality, clip, fromSurface: true});
await OverlayModel.unmuteHighlight();
return result.data;
}
/**
* @return {!Promise<?{viewportX: number, viewportY: number, viewportScale: number, contentWidth: number, contentHeight: number}>}
*/
async fetchLayoutMetrics() {
const response = await this._agent.invoke_getLayoutMetrics();
if (response.getError()) {
return null;
}
return {
viewportX: response.visualViewport.pageX,
viewportY: response.visualViewport.pageY,
viewportScale: response.visualViewport.scale,
contentWidth: response.contentSize.width,
contentHeight: response.contentSize.height
};
}
/**
* @override
* @param {!Protocol.Page.ScreencastFrameEvent} _
*/
screencastFrame({data, metadata, sessionId}) {
this._agent.invoke_screencastFrameAck({sessionId});
if (this._onScreencastFrame) {
this._onScreencastFrame.call(null, data, metadata);
}
}
/**
* @override
* @param {!Protocol.Page.ScreencastVisibilityChangedEvent} _
*/
screencastVisibilityChanged({visible}) {
if (this._onScreencastVisibilityChanged) {
this._onScreencastVisibilityChanged.call(null, visible);
}
}
/**
* @override
* @param {!Protocol.Page.DomContentEventFiredEvent} params
*/
domContentEventFired(params) {
}
/**
* @override
* @param {!Protocol.Page.LoadEventFiredEvent} params
*/
loadEventFired(params) {
}
/**
* @override
* @param {!Protocol.Page.LifecycleEventEvent} params
*/
lifecycleEvent(params) {
}
/**
* @override
* @param {!Protocol.Page.NavigatedWithinDocumentEvent} params
*/
navigatedWithinDocument(params) {
}
/**
* @override
* @param {!Protocol.Page.FrameAttachedEvent} params
*/
frameAttached(params) {
}
/**
* @override
* @param {!Protocol.Page.FrameNavigatedEvent} params
*/
frameNavigated(params) {
}
/**
* @override
* @param {!Protocol.Page.DocumentOpenedEvent} params
*/
documentOpened(params) {
}
/**
* @override
* @param {!Protocol.Page.FrameDetachedEvent} params
*/
frameDetached(params) {
}
/**
* @override
* @param {!Protocol.Page.FrameStartedLoadingEvent} params
*/
frameStartedLoading(params) {
}
/**
* @override
* @param {!Protocol.Page.FrameStoppedLoadingEvent} params
*/
frameStoppedLoading(params) {
}
/**
* @override
* @param {!Protocol.Page.FrameRequestedNavigationEvent} params
*/
frameRequestedNavigation(params) {
}
/**
* @override
* @param {!Protocol.Page.FrameScheduledNavigationEvent} params
*/
frameScheduledNavigation(params) {
}
/**
* @override
* @param {!Protocol.Page.FrameClearedScheduledNavigationEvent} params
*/
frameClearedScheduledNavigation(params) {
}
/**
* @override
*/
frameResized() {
}
/**
* @override
* @param {!Protocol.Page.JavascriptDialogOpeningEvent} params
*/
javascriptDialogOpening(params) {
}
/**
* @override
* @param {!Protocol.Page.JavascriptDialogClosedEvent} params
*/
javascriptDialogClosed(params) {
}
/**
* @override
*/
interstitialShown() {
}
/**
* @override
*/
interstitialHidden() {
}
/**
* @override
* @param {!Protocol.Page.WindowOpenEvent} params
*/
windowOpen(params) {
}
/**
* @override
* @param {!Protocol.Page.FileChooserOpenedEvent} params
*/
fileChooserOpened(params) {
}
/**
* @override
* @param {!Protocol.Page.CompilationCacheProducedEvent} params
*/
compilationCacheProduced(params) {
}
/**
* @override
* @param {!Protocol.Page.DownloadWillBeginEvent} params
*/
downloadWillBegin(params) {
}
/**
* @override
*/
downloadProgress() {
}
}
SDKModel.register(ScreenCaptureModel, Capability.ScreenCapture, false);