Skip to content

Commit

Permalink
Merge branch 'bug/RD-37835_ws_recv_hangs'
Browse files Browse the repository at this point in the history
  • Loading branch information
Mathew Seymour committed Mar 27, 2020
2 parents 85c86d1 + d6e060b commit a828e15
Show file tree
Hide file tree
Showing 11 changed files with 1,017 additions and 722 deletions.
31 changes: 16 additions & 15 deletions browserdebuggertools/chrome/interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from base64 import b64decode, b64encode

from browserdebuggertools.exceptions import ResourceNotFoundError
from browserdebuggertools.sockethandler import SocketHandler
from browserdebuggertools.wssessionmanager import WSSessionManager


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

def quit(self):
self._socket_handler.close()
self._session_manager.close()

def reset(self):
""" Clears all stored messages
"""
self._socket_handler.reset()
self._session_manager.reset()
self._dom_manager.reset()

def get_events(self, domain, clear=False):
Expand All @@ -47,7 +48,7 @@ def get_events(self, domain, clear=False):
:param clear: Removes the stored events if set to true.
:return: List of events.
"""
return self._socket_handler.get_events(domain, clear)
return self._session_manager.get_events(domain, clear)

def execute(self, domain, method, params=None):
""" Executes a command and returns the result.
Expand All @@ -63,30 +64,30 @@ def execute(self, domain, method, params=None):
:param params: Parameters to be executed
:return: The result of the command
"""
return self._socket_handler.execute(domain, method, params=params)
return self._session_manager.execute(domain, method, params=params)

def enable_domain(self, domain, params=None):
""" Enables notifications for the given domain.
"""
self._socket_handler.enable_domain(domain, parameters=params)
self._session_manager.enable_domain(domain, parameters=params)

def disable_domain(self, domain):
""" Disables further notifications from the given domain. Also clears any events cached for
that domain, it is recommended that you get events for the domain before disabling it.
"""
self._socket_handler.disable_domain(domain)
self._session_manager.disable_domain(domain)

@contextlib.contextmanager
def set_timeout(self, value):
""" Switches the timeout to the given value.
"""
_timeout = self._socket_handler.timeout
self._socket_handler.timer.timeout = value
_timeout = self._session_manager.timeout
self._session_manager.timeout = value
try:
yield
finally:
self._socket_handler.timeout = _timeout
self._session_manager.timeout = _timeout

def navigate(self, url):
""" Navigates to the given url asynchronously
Expand Down Expand Up @@ -121,7 +122,7 @@ def get_url(self):
:returns: The url of the current page.
"""
return self._socket_handler.event_handlers["PageLoad"].get_current_url()
return self._session_manager.event_handlers["PageLoad"].get_current_url()

def get_document_readystate(self):
""" Gets the document.readyState of the page.
Expand Down Expand Up @@ -183,7 +184,7 @@ def get_opened_javascript_dialog(self):
:raises JavascriptDialogNotFoundError: If there is currently no dialog open
"""
return (
self._socket_handler.event_handlers["JavascriptDialog"].get_opened_javascript_dialog()
self._session_manager.event_handlers["JavascriptDialog"].get_opened_javascript_dialog()
)

def get_iframe_source_content(self, xpath):
Expand All @@ -208,7 +209,7 @@ def get_page_source(self):
:return: HTML markup
"""

root_node_id = self._socket_handler.event_handlers["PageLoad"].get_root_backend_node_id()
root_node_id = self._session_manager.event_handlers["PageLoad"].get_root_backend_node_id()
return self._dom_manager.get_outer_html(root_node_id)


Expand Down
3 changes: 3 additions & 0 deletions browserdebuggertools/eventhandlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@ def handle(self, message):
elif message.get("method") == "Page.domContentEventFired":
logging.info("Detected Page Load")
self._reset()
elif message.get("method") == "Page.frameNavigated":
logging.info("Detected Frame Navigation")
self._reset()
else:
self.raise_unexpected_event_error(message["method"])

Expand Down
8 changes: 4 additions & 4 deletions browserdebuggertools/exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,6 @@ class DevToolsTimeoutException(DevToolsException):
pass


class TimerException(DevToolsException):
pass


class TabNotFoundError(NotFoundError):
pass

Expand Down Expand Up @@ -50,5 +46,9 @@ class UnknownError(ProtocolError):
pass


class MessagingThreadIsDeadError(DevToolsException):
pass


class InvalidParametersError(ProtocolError):
pass

0 comments on commit a828e15

Please sign in to comment.