fix(Frame): postpone evaluations until execution context gets created (#1415)

In Blink, frames don't necesserily have execution context all the time.
DevTools Protocol precisely reports this situation, which results in
Puppeteer's frame.executionContext() being null occasionally.

However, from puppeteer point of view every frame will have at least a
default executions context, sooner or later:

- frame's execution context might be created naturally to run frame's
  javascript
- if frame has no javascript, devtools protocol will issue execution
  context creation

This patch builds up on this assumption and makes frame.executionContext()
to be a promise.
As a result, all the evaluations await for the execution context to be created first.

Fixes #827, #1325

BREAKING CHANGE: this patch changes frame.executionContext() method to return a promise.
To migrate onto a new behavior, await the context first before using it.
This commit is contained in:
Andrey Lushnikov
2017-11-18 16:27:52 -08:00
committed by GitHub
parent 48ccf1e9f4
commit 6512ce768d
6 changed files with 106 additions and 41 deletions

View File

@@ -28,7 +28,6 @@ const EXCLUDE_CLASSES = new Set([
'Multimap',
'NavigatorWatcher',
'NetworkManager',
'ProxyStream',
'Session',
'TaskQueue',
'WaitTask',