|
1 | 1 | # mypy: allow-untyped-defs |
2 | 2 |
|
3 | | -from http.client import HTTPConnection, ResponseNotReady |
4 | 3 | import os |
| 4 | +import requests |
5 | 5 | import tempfile |
6 | 6 | import time |
7 | 7 |
|
@@ -81,6 +81,7 @@ def write_hosts_file(config): |
81 | 81 |
|
82 | 82 | class ServoWebDriverBrowser(WebDriverBrowser): |
83 | 83 | init_timeout = 300 # Large timeout for cases where we're booting an Android emulator |
| 84 | + shutdown_retry = 5 |
84 | 85 |
|
85 | 86 | def __init__(self, logger, binary, debug_info=None, webdriver_host="127.0.0.1", |
86 | 87 | server_config=None, binary_args=None, |
@@ -134,33 +135,38 @@ def is_alive(self): |
134 | 135 | if not super().is_alive(): |
135 | 136 | return False |
136 | 137 | try: |
137 | | - conn = HTTPConnection(self.host, self.port) |
138 | | - conn.request("GET", "/status") |
139 | | - res = conn.getresponse() |
| 138 | + requests.get(f"http://{self.host}:{self.port}/status", timeout=5) |
140 | 139 | except Exception: |
141 | | - self.logger.info("Servo has shutted down normally.") |
| 140 | + self.logger.debug("Servo has shut down normally.") |
142 | 141 | return False |
143 | 142 |
|
144 | 143 | return True |
145 | 144 |
|
146 | 145 | def stop(self, force=False): |
| 146 | + retry_cnt = 0 |
147 | 147 | while self.is_alive(): |
148 | 148 | self.logger.info("Trying to shut down gracefully by extension command") |
149 | | - while True: |
150 | | - try: |
151 | | - conn = HTTPConnection(self.host, self.port) |
152 | | - conn.request("DELETE", "/session/dummy-session-id/servo/shutdown") |
153 | | - res = conn.getresponse() |
154 | | - self.logger.info(f"Got response status for shutdown command: {res.status}") |
155 | | - except ResponseNotReady: |
156 | | - self.logger.info(f"Shutdown request not sent yet, retrying...") |
157 | | - continue |
158 | | - except Exception as e: |
159 | | - self.logger.info(f"Servo browser already shut down: {e}") |
160 | | - return |
161 | | - # Successfully sent the shutdown command |
| 149 | + try: |
| 150 | + requests.delete( |
| 151 | + f"http://{self.host}:{self.port}/session/dummy-session-id/servo/shutdown", |
| 152 | + timeout=5 |
| 153 | + ) |
| 154 | + except requests.exceptions.ConnectionError: |
| 155 | + self.logger.debug("Browser already shut down (connection refused)") |
162 | 156 | break |
163 | | - time.sleep(0.1) |
| 157 | + except requests.exceptions.RequestException as e: |
| 158 | + self.logger.debug(f"Request exception: {e}") |
| 159 | + break |
| 160 | + except requests.exceptions.Timeout: |
| 161 | + self.logger.debug("Request timed out") |
| 162 | + break |
| 163 | + |
| 164 | + retry_cnt += 1 |
| 165 | + if retry_cnt >= self.shutdown_retry: |
| 166 | + self.logger.debug("Max retry exceeded.") |
| 167 | + break |
| 168 | + time.sleep(1) |
| 169 | + super().stop(force=force) |
164 | 170 |
|
165 | 171 | def find_wpt_prefs(self, logger): |
166 | 172 | default_path = os.path.join("resources", "wpt-prefs.json") |
|
0 commit comments