Skip to content

Commit

Permalink
Do not call async events implicitly
Browse files Browse the repository at this point in the history
  • Loading branch information
miyakogi committed May 9, 2019
1 parent 9326ff2 commit d848420
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 8 deletions.
18 changes: 14 additions & 4 deletions pyppeteer/browser.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,10 @@ def __init__(self, connection: Connection, contextIds: List[str],
self._process = process
self._screenshotTaskQueue: List = []
self._connection = connection
loop = self._connection._loop

def _dummy_callback() -> Awaitable[None]:
fut = self._connection._loop.create_future()
fut = loop.create_future()
fut.set_result(None)
return fut

Expand All @@ -64,9 +65,18 @@ def _dummy_callback() -> Awaitable[None]:
self._connection.setClosedCallback(
lambda: self.emit(Browser.Events.Disconnected)
)
self._connection.on('Target.targetCreated', self._targetCreated)
self._connection.on('Target.targetDestroyed', self._targetDestroyed)
self._connection.on('Target.targetInfoChanged', self._targetInfoChanged) # noqa: E501
self._connection.on(
'Target.targetCreated',
lambda event: loop.create_task(self._targetCreated(event)),
)
self._connection.on(
'Target.targetDestroyed',
lambda event: loop.create_task(self._targetDestroyed(event)),
)
self._connection.on(
'Target.targetInfoChanged',
lambda event: loop.create_task(self._targetInfoChanged(event)),
)

@property
def process(self) -> Optional[Popen]:
Expand Down
7 changes: 6 additions & 1 deletion pyppeteer/network_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,12 @@ def __init__(self, client: CDPSession, frameManager: FrameManager) -> None:
self._requestHashToRequestIds = Multimap()
self._requestHashToInterceptionIds = Multimap()

self._client.on('Network.requestWillBeSent', self._onRequestWillBeSent)
self._client.on(
'Network.requestWillBeSent',
lambda event: self._client._loop.create_task(
self._onRequestWillBeSent(event)
),
)
self._client.on('Network.requestIntercepted', self._onRequestIntercepted) # noqa: E501
self._client.on('Network.requestServedFromCache', self._onRequestServedFromCache) # noqa: #501
self._client.on('Network.responseReceived', self._onResponseReceived)
Expand Down
10 changes: 7 additions & 3 deletions tests/test_page.py
Original file line number Diff line number Diff line change
Expand Up @@ -1874,18 +1874,22 @@ async def test_frame(self):
class TestEvents(BaseTestCase):
@sync
async def test_close_window_close(self):
newPagePromise = asyncio.get_event_loop().create_future()
loop = asyncio.get_event_loop()
newPagePromise = loop.create_future()

async def page_created(target):
page = await target.page()
newPagePromise.set_result(page)

self.context.once('targetcreated', page_created)
self.context.once(
'targetcreated',
lambda target: loop.create_task(page_created(target)),
)
await self.page.evaluate(
'window["newPage"] = window.open("about:blank")')
newPage = await newPagePromise

closedPromise = asyncio.get_event_loop().create_future()
closedPromise = loop.create_future()
newPage.on('close', lambda: closedPromise.set_result(True))
await self.page.evaluate('window["newPage"].close()')
await closedPromise
Expand Down

0 comments on commit d848420

Please sign in to comment.