| OLD | NEW |
| 1 # Copyright 2012 The Chromium Authors. All rights reserved. | 1 # Copyright 2012 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 import os | 5 import os |
| 6 | 6 |
| 7 from telemetry import decorators | 7 from telemetry import decorators |
| 8 from telemetry.core import app | 8 from telemetry.core import app |
| 9 from telemetry.core import browser_credentials | 9 from telemetry.core import browser_credentials |
| 10 from telemetry.core import exceptions | 10 from telemetry.core import exceptions |
| 11 from telemetry.core import extension_dict | 11 from telemetry.core import extension_dict |
| 12 from telemetry.core import local_server | 12 from telemetry.core import local_server |
| 13 from telemetry.core import memory_cache_http_server | 13 from telemetry.core import memory_cache_http_server |
| 14 from telemetry.core import pywebsocket_server |
| 14 from telemetry.core import tab_list | 15 from telemetry.core import tab_list |
| 15 from telemetry.core.backends import browser_backend | 16 from telemetry.core.backends import browser_backend |
| 16 | 17 |
| 17 | 18 |
| 18 class Browser(app.App): | 19 class Browser(app.App): |
| 19 """A running browser instance that can be controlled in a limited way. | 20 """A running browser instance that can be controlled in a limited way. |
| 20 | 21 |
| 21 To create a browser instance, use browser_finder.FindBrowser. | 22 To create a browser instance, use browser_finder.FindBrowser. |
| 22 | 23 |
| 23 Be sure to clean up after yourself by calling Close() when you are done with | 24 Be sure to clean up after yourself by calling Close() when you are done with |
| (...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 218 | 219 |
| 219 self._local_server_controller.Close() | 220 self._local_server_controller.Close() |
| 220 self._browser_backend.Close() | 221 self._browser_backend.Close() |
| 221 self.credentials = None | 222 self.credentials = None |
| 222 | 223 |
| 223 @property | 224 @property |
| 224 def http_server(self): | 225 def http_server(self): |
| 225 return self._local_server_controller.GetRunningServer( | 226 return self._local_server_controller.GetRunningServer( |
| 226 memory_cache_http_server.MemoryCacheHTTPServer, None) | 227 memory_cache_http_server.MemoryCacheHTTPServer, None) |
| 227 | 228 |
| 229 @property |
| 230 def pywebsocket_server(self): |
| 231 return self._local_server_controller.GetRunningServer( |
| 232 pywebsocket_server.PywebsocketServer, None) |
| 233 |
| 228 def SetHTTPServerDirectories(self, paths): | 234 def SetHTTPServerDirectories(self, paths): |
| 229 """Returns True if the HTTP server was started, False otherwise.""" | 235 """Returns True if the HTTP server was started, False otherwise.""" |
| 230 if isinstance(paths, basestring): | 236 if isinstance(paths, basestring): |
| 231 paths = set([paths]) | 237 paths = set([paths]) |
| 232 paths = set(os.path.realpath(p) for p in paths) | 238 paths = set(os.path.realpath(p) for p in paths) |
| 233 | 239 |
| 234 # If any path is in a subdirectory of another, remove the subdirectory. | 240 # If any path is in a subdirectory of another, remove the subdirectory. |
| 235 duplicates = set() | 241 duplicates = set() |
| 236 for parent_path in paths: | 242 for parent_path in paths: |
| 237 for sub_path in paths: | 243 for sub_path in paths: |
| 238 if parent_path == sub_path: | 244 if parent_path == sub_path: |
| 239 continue | 245 continue |
| 240 if os.path.commonprefix((parent_path, sub_path)) == parent_path: | 246 if os.path.commonprefix((parent_path, sub_path)) == parent_path: |
| 241 duplicates.add(sub_path) | 247 duplicates.add(sub_path) |
| 242 paths -= duplicates | 248 paths -= duplicates |
| 243 | 249 |
| 244 if self.http_server: | 250 if self.http_server: |
| 245 if paths and self.http_server.paths == paths: | 251 if paths and self.http_server.paths == paths: |
| 246 return False | 252 return False |
| 247 | 253 |
| 248 self.http_server.Close() | 254 self.http_server.Close() |
| 249 | 255 |
| 250 if not paths: | 256 if not paths: |
| 251 return False | 257 return False |
| 252 | 258 |
| 253 server = memory_cache_http_server.MemoryCacheHTTPServer(paths) | 259 server = memory_cache_http_server.MemoryCacheHTTPServer(paths) |
| 254 self.StartLocalServer(server) | 260 self.StartLocalServer(server) |
| 255 return True | 261 return True |
| 256 | 262 |
| 263 def StartPywebsocketServer(self): |
| 264 if self.pywebsocket_server: |
| 265 return False |
| 266 |
| 267 server = pywebsocket_server.PywebsocketServer() |
| 268 self.StartLocalServer(server) |
| 269 return True |
| 270 |
| 257 def StartLocalServer(self, server): | 271 def StartLocalServer(self, server): |
| 258 """Starts a LocalServer and associates it with this browser. | 272 """Starts a LocalServer and associates it with this browser. |
| 259 | 273 |
| 260 It will be closed when the browser closes. | 274 It will be closed when the browser closes. |
| 261 """ | 275 """ |
| 262 self._local_server_controller.StartServer(server) | 276 self._local_server_controller.StartServer(server) |
| 263 | 277 |
| 264 @property | 278 @property |
| 265 def local_servers(self): | 279 def local_servers(self): |
| 266 """Returns the currently running local servers.""" | 280 """Returns the currently running local servers.""" |
| 267 return self._local_server_controller.local_servers | 281 return self._local_server_controller.local_servers |
| 268 | 282 |
| 269 def GetStandardOutput(self): | 283 def GetStandardOutput(self): |
| 270 return self._browser_backend.GetStandardOutput() | 284 return self._browser_backend.GetStandardOutput() |
| 271 | 285 |
| 272 def GetStackTrace(self): | 286 def GetStackTrace(self): |
| 273 return self._browser_backend.GetStackTrace() | 287 return self._browser_backend.GetStackTrace() |
| 274 | 288 |
| 275 @property | 289 @property |
| 276 def supports_system_info(self): | 290 def supports_system_info(self): |
| 277 return self._browser_backend.supports_system_info | 291 return self._browser_backend.supports_system_info |
| 278 | 292 |
| 279 def GetSystemInfo(self): | 293 def GetSystemInfo(self): |
| 280 """Returns low-level information about the system, if available. | 294 """Returns low-level information about the system, if available. |
| 281 | 295 |
| 282 See the documentation of the SystemInfo class for more details.""" | 296 See the documentation of the SystemInfo class for more details.""" |
| 283 return self._browser_backend.GetSystemInfo() | 297 return self._browser_backend.GetSystemInfo() |
| OLD | NEW |