Skip to content

Commit a828e15

Browse files
author
Mathew Seymour
committed
Merge branch 'bug/RD-37835_ws_recv_hangs'
2 parents 85c86d1 + d6e060b commit a828e15

File tree

11 files changed

+1017
-722
lines changed

11 files changed

+1017
-722
lines changed

browserdebuggertools/chrome/interface.py

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from base64 import b64decode, b64encode
44

55
from browserdebuggertools.exceptions import ResourceNotFoundError
6-
from browserdebuggertools.sockethandler import SocketHandler
6+
from browserdebuggertools.wssessionmanager import WSSessionManager
77

88

99
logging.basicConfig(format='%(levelname)s:%(message)s')
@@ -29,16 +29,17 @@ def __init__(self, port, timeout=30, domains=None):
2929
:param domains: Dictionary of dictionaries where the Key is the domain string and the Value
3030
is a dictionary of the arguments passed with the domain upon enabling.
3131
"""
32-
self._socket_handler = SocketHandler(port, timeout, domains=domains) # type: SocketHandler
33-
self._dom_manager = _DOMManager(self._socket_handler)
32+
# type: WSSessionManager
33+
self._session_manager = WSSessionManager(port, timeout, domains=domains)
34+
self._dom_manager = _DOMManager(self._session_manager)
3435

3536
def quit(self):
36-
self._socket_handler.close()
37+
self._session_manager.close()
3738

3839
def reset(self):
3940
""" Clears all stored messages
4041
"""
41-
self._socket_handler.reset()
42+
self._session_manager.reset()
4243
self._dom_manager.reset()
4344

4445
def get_events(self, domain, clear=False):
@@ -47,7 +48,7 @@ def get_events(self, domain, clear=False):
4748
:param clear: Removes the stored events if set to true.
4849
:return: List of events.
4950
"""
50-
return self._socket_handler.get_events(domain, clear)
51+
return self._session_manager.get_events(domain, clear)
5152

5253
def execute(self, domain, method, params=None):
5354
""" Executes a command and returns the result.
@@ -63,30 +64,30 @@ def execute(self, domain, method, params=None):
6364
:param params: Parameters to be executed
6465
:return: The result of the command
6566
"""
66-
return self._socket_handler.execute(domain, method, params=params)
67+
return self._session_manager.execute(domain, method, params=params)
6768

6869
def enable_domain(self, domain, params=None):
6970
""" Enables notifications for the given domain.
7071
"""
71-
self._socket_handler.enable_domain(domain, parameters=params)
72+
self._session_manager.enable_domain(domain, parameters=params)
7273

7374
def disable_domain(self, domain):
7475
""" Disables further notifications from the given domain. Also clears any events cached for
7576
that domain, it is recommended that you get events for the domain before disabling it.
7677
7778
"""
78-
self._socket_handler.disable_domain(domain)
79+
self._session_manager.disable_domain(domain)
7980

8081
@contextlib.contextmanager
8182
def set_timeout(self, value):
8283
""" Switches the timeout to the given value.
8384
"""
84-
_timeout = self._socket_handler.timeout
85-
self._socket_handler.timer.timeout = value
85+
_timeout = self._session_manager.timeout
86+
self._session_manager.timeout = value
8687
try:
8788
yield
8889
finally:
89-
self._socket_handler.timeout = _timeout
90+
self._session_manager.timeout = _timeout
9091

9192
def navigate(self, url):
9293
""" Navigates to the given url asynchronously
@@ -121,7 +122,7 @@ def get_url(self):
121122
122123
:returns: The url of the current page.
123124
"""
124-
return self._socket_handler.event_handlers["PageLoad"].get_current_url()
125+
return self._session_manager.event_handlers["PageLoad"].get_current_url()
125126

126127
def get_document_readystate(self):
127128
""" Gets the document.readyState of the page.
@@ -183,7 +184,7 @@ def get_opened_javascript_dialog(self):
183184
:raises JavascriptDialogNotFoundError: If there is currently no dialog open
184185
"""
185186
return (
186-
self._socket_handler.event_handlers["JavascriptDialog"].get_opened_javascript_dialog()
187+
self._session_manager.event_handlers["JavascriptDialog"].get_opened_javascript_dialog()
187188
)
188189

189190
def get_iframe_source_content(self, xpath):
@@ -208,7 +209,7 @@ def get_page_source(self):
208209
:return: HTML markup
209210
"""
210211

211-
root_node_id = self._socket_handler.event_handlers["PageLoad"].get_root_backend_node_id()
212+
root_node_id = self._session_manager.event_handlers["PageLoad"].get_root_backend_node_id()
212213
return self._dom_manager.get_outer_html(root_node_id)
213214

214215

browserdebuggertools/eventhandlers.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ def handle(self, message):
4141
elif message.get("method") == "Page.domContentEventFired":
4242
logging.info("Detected Page Load")
4343
self._reset()
44+
elif message.get("method") == "Page.frameNavigated":
45+
logging.info("Detected Frame Navigation")
46+
self._reset()
4447
else:
4548
self.raise_unexpected_event_error(message["method"])
4649

browserdebuggertools/exceptions.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,6 @@ class DevToolsTimeoutException(DevToolsException):
1414
pass
1515

1616

17-
class TimerException(DevToolsException):
18-
pass
19-
20-
2117
class TabNotFoundError(NotFoundError):
2218
pass
2319

@@ -50,5 +46,9 @@ class UnknownError(ProtocolError):
5046
pass
5147

5248

49+
class MessagingThreadIsDeadError(DevToolsException):
50+
pass
51+
52+
5353
class InvalidParametersError(ProtocolError):
5454
pass

0 commit comments

Comments
 (0)