fix(browser): ensure first page is created when browser is launched (#2658)

It's impossible to launch chromium without initial page.
This patch makes sure that `puppeteer.launch()` always returns a browser
with at least one page user can connect to.
This commit is contained in:
Andrey Lushnikov
2018-06-01 13:57:50 -07:00
committed by GitHub
parent 07b91f61a9
commit 9955a1e673
2 changed files with 23 additions and 1 deletions

View File

@@ -165,12 +165,33 @@ class Launcher {
}
const ignoreHTTPSErrors = !!options.ignoreHTTPSErrors;
const setDefaultViewport = !options.appMode;
return Browser.create(connection, [], ignoreHTTPSErrors, setDefaultViewport, chromeProcess, gracefullyCloseChrome);
const browser = await Browser.create(connection, [], ignoreHTTPSErrors, setDefaultViewport, chromeProcess, gracefullyCloseChrome);
await ensureInitialPage(browser);
return browser;
} catch (e) {
killChrome();
throw e;
}
/**
* @param {!Browser} browser
*/
async function ensureInitialPage(browser) {
// Wait for initial page target to be created.
if (browser.targets().find(target => target.type() === 'page'))
return;
let initialPageCallback;
const initialPagePromise = new Promise(resolve => initialPageCallback = resolve);
const listeners = [helper.addEventListener(browser, 'targetcreated', target => {
if (target.type() === 'page')
initialPageCallback();
})];
await initialPagePromise;
helper.removeEventListeners(listeners);
}
/**
* @return {Promise}
*/