OLD | NEW |
| (Empty) |
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
2 # Use of this source code is governed by a BSD-style license that can be | |
3 # found in the LICENSE file. | |
4 import os | |
5 | |
6 from telemetry import browser_backend | |
7 from telemetry import browser_credentials | |
8 from telemetry import extension_dict | |
9 from telemetry import tab_list | |
10 from telemetry import temporary_http_server | |
11 from telemetry import wpr_modes | |
12 from telemetry import wpr_server | |
13 | |
14 class Browser(object): | |
15 """A running browser instance that can be controlled in a limited way. | |
16 | |
17 To create a browser instance, use browser_finder.FindBrowser. | |
18 | |
19 Be sure to clean up after yourself by calling Close() when you are done with | |
20 the browser. Or better yet: | |
21 browser_to_create = FindBrowser(options) | |
22 with browser_to_create.Create() as browser: | |
23 ... do all your operations on browser here | |
24 """ | |
25 def __init__(self, backend, platform): | |
26 self._browser_backend = backend | |
27 self._http_server = None | |
28 self._wpr_server = None | |
29 self._platform = platform | |
30 self._tabs = tab_list.TabList(backend.tab_list_backend) | |
31 self._extensions = None | |
32 if backend.supports_extensions: | |
33 self._extensions = extension_dict.ExtensionDict( | |
34 backend.extension_dict_backend) | |
35 self.credentials = browser_credentials.BrowserCredentials() | |
36 | |
37 def __enter__(self): | |
38 return self | |
39 | |
40 def __exit__(self, *args): | |
41 self.Close() | |
42 | |
43 @property | |
44 def platform(self): | |
45 return self._platform | |
46 | |
47 @property | |
48 def browser_type(self): | |
49 return self._browser_backend.browser_type | |
50 | |
51 @property | |
52 def is_content_shell(self): | |
53 """Returns whether this browser is a content shell, only.""" | |
54 return self._browser_backend.is_content_shell | |
55 | |
56 @property | |
57 def supports_extensions(self): | |
58 return self._browser_backend.supports_extensions | |
59 | |
60 @property | |
61 def supports_tab_control(self): | |
62 return self._browser_backend.supports_tab_control | |
63 | |
64 @property | |
65 def tabs(self): | |
66 return self._tabs | |
67 | |
68 @property | |
69 def extensions(self): | |
70 """Returns the extension dictionary if it exists.""" | |
71 if not self.supports_extensions: | |
72 raise browser_backend.ExtensionsNotSupportedException( | |
73 'Extensions not supported') | |
74 return self._extensions | |
75 | |
76 @property | |
77 def supports_tracing(self): | |
78 return self._browser_backend.supports_tracing | |
79 | |
80 def StartTracing(self): | |
81 return self._browser_backend.StartTracing() | |
82 | |
83 def StopTracing(self): | |
84 return self._browser_backend.StopTracing() | |
85 | |
86 def GetTraceResultAndReset(self): | |
87 """Returns the result of the trace, as TraceResult object.""" | |
88 return self._browser_backend.GetTraceResultAndReset() | |
89 | |
90 def Close(self): | |
91 """Closes this browser.""" | |
92 if self._wpr_server: | |
93 self._wpr_server.Close() | |
94 self._wpr_server = None | |
95 | |
96 if self._http_server: | |
97 self._http_server.Close() | |
98 self._http_server = None | |
99 | |
100 self._browser_backend.Close() | |
101 self.credentials = None | |
102 | |
103 @property | |
104 def http_server(self): | |
105 return self._http_server | |
106 | |
107 def SetHTTPServerDirectory(self, path): | |
108 if path: | |
109 abs_path = os.path.abspath(path) | |
110 if self._http_server and self._http_server.path == path: | |
111 return | |
112 else: | |
113 abs_path = None | |
114 | |
115 if self._http_server: | |
116 self._http_server.Close() | |
117 self._http_server = None | |
118 | |
119 if not abs_path: | |
120 return | |
121 | |
122 self._http_server = temporary_http_server.TemporaryHTTPServer( | |
123 self._browser_backend, abs_path) | |
124 | |
125 def SetReplayArchivePath(self, archive_path): | |
126 if self._wpr_server: | |
127 self._wpr_server.Close() | |
128 self._wpr_server = None | |
129 | |
130 if not archive_path: | |
131 return None | |
132 | |
133 if self._browser_backend.wpr_mode == wpr_modes.WPR_OFF: | |
134 return | |
135 | |
136 use_record_mode = self._browser_backend.wpr_mode == wpr_modes.WPR_RECORD | |
137 if not use_record_mode: | |
138 assert os.path.isfile(archive_path) | |
139 | |
140 self._wpr_server = wpr_server.ReplayServer( | |
141 self._browser_backend, | |
142 archive_path, | |
143 use_record_mode, | |
144 self._browser_backend.WEBPAGEREPLAY_HOST, | |
145 self._browser_backend.webpagereplay_local_http_port, | |
146 self._browser_backend.webpagereplay_local_https_port, | |
147 self._browser_backend.webpagereplay_remote_http_port, | |
148 self._browser_backend.webpagereplay_remote_https_port) | |
149 | |
150 def GetStandardOutput(self): | |
151 return self._browser_backend.GetStandardOutput() | |
OLD | NEW |