mirror of
https://github.com/puppeteer/puppeteer
synced 2024-06-14 14:02:48 +00:00
Implement FrameManager
This patch implements FrameManager which is responsible for maintaining the frame tree. FrameManager is quite basic: it sends FrameAttached, FrameDetached and FrameNavigated events, and can report mainFrame and all frames. The next step would be moving certain Page API's to the Frame. For example, such method as Page.evaluate, Page.navigate and others should be available on Frame object as well. References #4
This commit is contained in:
committed by
Pavel Feldman
parent
a66480a416
commit
175963182e
29
lib/Page.js
29
lib/Page.js
@@ -20,6 +20,7 @@ var helpers = require('./helpers');
|
||||
var mime = require('mime');
|
||||
var Request = require('./Request');
|
||||
var Dialog = require('./Dialog');
|
||||
var FrameManager = require('./FrameManager');
|
||||
|
||||
class Page extends EventEmitter {
|
||||
/**
|
||||
@@ -35,7 +36,8 @@ class Page extends EventEmitter {
|
||||
]);
|
||||
var expression = helpers.evaluationString(() => window.devicePixelRatio, []);
|
||||
var {result:{value: screenDPI}} = await client.send('Runtime.evaluate', { expression, returnByValue: true });
|
||||
var page = new Page(client, screenDPI);
|
||||
var frameManager = await FrameManager.create(client);
|
||||
var page = new Page(client, frameManager, screenDPI);
|
||||
// Initialize default page size.
|
||||
await page.setViewportSize({width: 400, height: 300});
|
||||
return page;
|
||||
@@ -43,11 +45,13 @@ class Page extends EventEmitter {
|
||||
|
||||
/**
|
||||
* @param {!Connection} client
|
||||
* @param {!FrameManager} frameManager
|
||||
* @param {number} screenDPI
|
||||
*/
|
||||
constructor(client, screenDPI) {
|
||||
constructor(client, frameManager, screenDPI) {
|
||||
super();
|
||||
this._client = client;
|
||||
this._frameManager = frameManager;
|
||||
this._screenDPI = screenDPI;
|
||||
this._extraHeaders = {};
|
||||
/** @type {!Map<string, function>} */
|
||||
@@ -57,6 +61,10 @@ class Page extends EventEmitter {
|
||||
|
||||
this._screenshotTaskChain = Promise.resolve();
|
||||
|
||||
this._frameManager.on(FrameManager.Events.FrameAttached, event => this.emit(Page.Events.FrameAttached, event));
|
||||
this._frameManager.on(FrameManager.Events.FrameDetached, event => this.emit(Page.Events.FrameDetached, event));
|
||||
this._frameManager.on(FrameManager.Events.FrameNavigated, event => this.emit(Page.Events.FrameNavigated, event));
|
||||
|
||||
client.on('Network.responseReceived', event => this.emit(Page.Events.ResponseReceived, event.response));
|
||||
client.on('Network.loadingFailed', event => this.emit(Page.Events.ResourceLoadingFailed, event));
|
||||
client.on('Network.requestIntercepted', event => this._onRequestIntercepted(event));
|
||||
@@ -65,6 +73,20 @@ class Page extends EventEmitter {
|
||||
client.on('Runtime.exceptionThrown', exception => this._handleException(exception.exceptionDetails));
|
||||
}
|
||||
|
||||
/**
|
||||
* @return {!Frame}
|
||||
*/
|
||||
mainFrame() {
|
||||
return this._frameManager.mainFrame();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return {!Array<!Frame>}
|
||||
*/
|
||||
frames() {
|
||||
return this._frameManager.frames();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {?function(!Request)} interceptor
|
||||
*/
|
||||
@@ -583,6 +605,9 @@ Page.Events = {
|
||||
Error: 'error',
|
||||
ResourceLoadingFailed: 'resourceloadingfailed',
|
||||
ResponseReceived: 'responsereceived',
|
||||
FrameAttached: 'frameattached',
|
||||
FrameDetached: 'framedetached',
|
||||
FrameNavigated: 'framenavigated',
|
||||
};
|
||||
|
||||
module.exports = Page;
|
||||
|
||||
Reference in New Issue
Block a user