Skip to content

Commit

Permalink
feat(firefox): support target.opener() and page.on('popup') (#3966)
Browse files Browse the repository at this point in the history
  • Loading branch information
aslushnikov committed Feb 9, 2019
1 parent 0cf6ab6 commit cfefd61
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 6 deletions.
23 changes: 20 additions & 3 deletions experimental/puppeteer-firefox/lib/Browser.js
Expand Up @@ -158,10 +158,18 @@ class Browser extends EventEmitter {
return Array.from(this._pageTargets.values());
}

_onTabOpened({pageId, url, browserContextId}) {
async _onTabOpened({pageId, url, browserContextId, openerId}) {
const context = browserContextId ? this._contexts.get(browserContextId) : this._defaultContext;
const target = new Target(this._connection, this, context, pageId, url);
const opener = openerId ? this._pageTargets.get(openerId) : null;
const target = new Target(this._connection, this, context, pageId, url, opener);
this._pageTargets.set(pageId, target);
if (opener && opener._pagePromise) {
const openerPage = await opener._pagePromise;
if (openerPage.listenerCount(Events.Page.Popup)) {
const popupPage = await target.page();
openerPage.emit(Events.Page.Popup, popupPage);
}
}
this.emit(Events.Browser.TargetCreated, target);
context.emit(Events.BrowserContext.TargetCreated, target);
}
Expand Down Expand Up @@ -194,15 +202,24 @@ class Target {
* @param {!BrowserContext} context
* @param {string} pageId
* @param {string} url
* @param {?Target} opener
*/
constructor(connection, browser, context, pageId, url) {
constructor(connection, browser, context, pageId, url, opener) {
this._browser = browser;
this._context = context;
this._connection = connection;
this._pageId = pageId;
/** @type {?Promise<!Page>} */
this._pagePromise = null;
this._url = url;
this._opener = opener;
}

/**
* @return {?Target}
*/
opener() {
return this._opener;
}

/**
Expand Down
1 change: 1 addition & 0 deletions experimental/puppeteer-firefox/lib/Events.js
Expand Up @@ -9,6 +9,7 @@ const Events = {
FrameNavigated: 'framenavigated',
Load: 'load',
PageError: 'pageerror',
Popup: 'popup',
},
Browser: {
TargetCreated: 'targetcreated',
Expand Down
2 changes: 1 addition & 1 deletion experimental/puppeteer-firefox/package.json
Expand Up @@ -9,7 +9,7 @@
"node": ">=8.9.4"
},
"puppeteer": {
"firefox_revision": "ed8e119ec1279c3db3638e90e910edb3816e0280"
"firefox_revision": "9702d3d2dd86550e385fadec66eb28a5ff2b1322"
},
"scripts": {
"install": "node install.js",
Expand Down
2 changes: 1 addition & 1 deletion test/page.spec.js
Expand Up @@ -102,7 +102,7 @@ module.exports.addTests = function({testRunner, expect, headless, Errors, Device
});
});

describe_fails_ffox('Page.Events.Popup', function() {
describe('Page.Events.Popup', function() {
it('should work', async({page}) => {
const [popup] = await Promise.all([
new Promise(x => page.once('popup', x)),
Expand Down
2 changes: 1 addition & 1 deletion test/target.spec.js
Expand Up @@ -132,7 +132,7 @@ module.exports.addTests = function({testRunner, expect, puppeteer, Errors}) {
// Cleanup.
await newPage.close();
});
it_fails_ffox('should have an opener', async({page, server, context}) => {
it('should have an opener', async({page, server, context}) => {
await page.goto(server.EMPTY_PAGE);
const [createdTarget] = await Promise.all([
new Promise(fulfill => context.once('targetcreated', target => fulfill(target))),
Expand Down

0 comments on commit cfefd61

Please sign in to comment.