@@ -69,7 +69,6 @@ def __init__(
6969 self ._timeout_settings = TimeoutSettings (None )
7070 self ._browser : Optional ["Browser" ] = None
7171 self ._owner_page : Optional [Page ] = None
72- self ._is_closed_or_closing = False
7372 self ._options : Dict [str , Any ] = {}
7473 self ._background_pages : Set [Page ] = set ()
7574 self ._service_workers : Set [Worker ] = set ()
@@ -129,6 +128,8 @@ def __init__(
129128 from_nullable_channel (params .get ("page" )),
130129 ),
131130 )
131+ self ._closed_future : asyncio .Future = asyncio .Future ()
132+ self .once (self .Events .Close , lambda : self ._closed_future .set_result (True ))
132133
133134 def __repr__ (self ) -> str :
134135 return f"<BrowserContext browser={ self .browser } >"
@@ -278,18 +279,15 @@ def expect_event(
278279 return EventContextManagerImpl (wait_helper .result ())
279280
280281 def _on_close (self ) -> None :
281- self ._is_closed_or_closing = True
282282 if self ._browser :
283283 self ._browser ._contexts .remove (self )
284284
285285 self .emit (BrowserContext .Events .Close )
286286
287287 async def close (self ) -> None :
288- if self ._is_closed_or_closing :
289- return
290- self ._is_closed_or_closing = True
291288 try :
292289 await self ._channel .send ("close" )
290+ await self ._closed_future
293291 except Exception as e :
294292 if not is_safe_close_error (e ):
295293 raise e
0 commit comments