Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(147)

Side by Side Diff: tools/telemetry/telemetry/core/chrome/browser_backend.py

Issue 20672002: [telemetry] Add a webdriver backend with support for IE. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments. Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 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 urllib2 5 import urllib2
6 import httplib 6 import httplib
7 import socket 7 import socket
8 import json 8 import json
9 import re 9 import re
10 import sys 10 import sys
11 11
12 from telemetry.core import util 12 from telemetry.core import util
13 from telemetry.core import exceptions 13 from telemetry.core import exceptions
14 from telemetry.core import user_agent 14 from telemetry.core import user_agent
15 from telemetry.core import web_contents 15 from telemetry.core import web_contents
16 from telemetry.core import wpr_modes 16 from telemetry.core import wpr_modes
17 from telemetry.core import wpr_server 17 from telemetry.core import wpr_server
18 from telemetry.core import browser_backend as _browser_backend
18 from telemetry.core.chrome import extension_dict_backend 19 from telemetry.core.chrome import extension_dict_backend
19 from telemetry.core.chrome import tab_list_backend 20 from telemetry.core.chrome import tab_list_backend
20 from telemetry.core.chrome import tracing_backend 21 from telemetry.core.chrome import tracing_backend
21 from telemetry.core.chrome import misc_web_contents_backend 22 from telemetry.core.chrome import misc_web_contents_backend
22 from telemetry.unittest import options_for_unittests 23 from telemetry.unittest import options_for_unittests
23 24
24 class ExtensionsNotSupportedException(Exception): 25 class ExtensionsNotSupportedException(Exception):
25 pass 26 pass
26 27
27 class BrowserBackend(object): 28 class BrowserBackend(_browser_backend.BrowserBackend): # pylint: disable=w0223
28 """A base class for browser backends. Provides basic functionality 29 """A base class for chrome browser backends. Provides basic functionality
29 once a remote-debugger port has been established.""" 30 once a remote-debugger port has been established."""
30 31
31 WEBPAGEREPLAY_HOST = '127.0.0.1'
32
33 def __init__(self, is_content_shell, supports_extensions, options): 32 def __init__(self, is_content_shell, supports_extensions, options):
34 self.browser_type = options.browser_type 33 super(BrowserBackend, self).__init__(
35 self.is_content_shell = is_content_shell 34 is_content_shell=is_content_shell,
36 self._supports_extensions = supports_extensions 35 supports_extensions=supports_extensions,
37 self.options = options 36 options=options,
38 self._browser = None 37 tab_list_backend=tab_list_backend.TabListBackend)
39 self._port = None 38 self._port = None
40 39
41 self._inspector_protocol_version = 0 40 self._inspector_protocol_version = 0
42 self._chrome_branch_number = 0 41 self._chrome_branch_number = 0
43 self._tracing_backend = None 42 self._tracing_backend = None
44 43
45 self.webpagereplay_local_http_port = util.GetAvailableLocalPort() 44 self.webpagereplay_local_http_port = util.GetAvailableLocalPort()
46 self.webpagereplay_local_https_port = util.GetAvailableLocalPort() 45 self.webpagereplay_local_https_port = util.GetAvailableLocalPort()
47 self.webpagereplay_remote_http_port = self.webpagereplay_local_http_port 46 self.webpagereplay_remote_http_port = self.webpagereplay_local_http_port
48 self.webpagereplay_remote_https_port = self.webpagereplay_local_https_port 47 self.webpagereplay_remote_https_port = self.webpagereplay_local_https_port
49 48
50 if options.dont_override_profile and not options_for_unittests.AreSet(): 49 if options.dont_override_profile and not options_for_unittests.AreSet():
51 sys.stderr.write('Warning: Not overriding profile. This can cause ' 50 sys.stderr.write('Warning: Not overriding profile. This can cause '
52 'unexpected effects due to profile-specific settings, ' 51 'unexpected effects due to profile-specific settings, '
53 'such as about:flags settings, cookies, and ' 52 'such as about:flags settings, cookies, and '
54 'extensions.\n') 53 'extensions.\n')
55 self._misc_web_contents_backend = ( 54 self._misc_web_contents_backend = (
56 misc_web_contents_backend.MiscWebContentsBackend(self)) 55 misc_web_contents_backend.MiscWebContentsBackend(self))
57 self._tab_list_backend = tab_list_backend.TabListBackend(self)
58 self._extension_dict_backend = None 56 self._extension_dict_backend = None
59 if supports_extensions: 57 if supports_extensions:
60 self._extension_dict_backend = ( 58 self._extension_dict_backend = (
61 extension_dict_backend.ExtensionDictBackend(self)) 59 extension_dict_backend.ExtensionDictBackend(self))
62 60
63 def SetBrowser(self, browser): 61 def CustomizeReplayServerWithOptions(self, options):
64 self._browser = browser 62 options.append('--no-dns_forwarding')
65 self._tab_list_backend.Init()
66
67 @property
68 def browser(self):
69 return self._browser
70
71 @property
72 def supports_extensions(self):
73 """True if this browser backend supports extensions."""
74 return self._supports_extensions
75 63
76 @property 64 @property
77 def misc_web_contents_backend(self): 65 def misc_web_contents_backend(self):
78 """Access to chrome://oobe/login page which is neither a tab nor an 66 """Access to chrome://oobe/login page which is neither a tab nor an
79 extension.""" 67 extension."""
80 return self._misc_web_contents_backend 68 return self._misc_web_contents_backend
81 69
82 @property 70 @property
83 def tab_list_backend(self):
84 return self._tab_list_backend
85
86 @property
87 def extension_dict_backend(self): 71 def extension_dict_backend(self):
88 return self._extension_dict_backend 72 return self._extension_dict_backend
89 73
90 def GetBrowserStartupArgs(self): 74 def GetBrowserStartupArgs(self):
91 args = [] 75 args = []
92 args.extend(self.options.extra_browser_args) 76 args.extend(self.options.extra_browser_args)
93 args.append('--disable-background-networking') 77 args.append('--disable-background-networking')
94 args.append('--metrics-recording-only') 78 args.append('--metrics-recording-only')
95 args.append('--no-first-run') 79 args.append('--no-first-run')
96 if self.options.wpr_mode != wpr_modes.WPR_OFF: 80 if self.options.wpr_mode != wpr_modes.WPR_OFF:
(...skipping 14 matching lines...) Expand all
111 self.options.extensions_to_load if extension.is_component] 95 self.options.extensions_to_load if extension.is_component]
112 component_extension_str = ','.join(component_extensions) 96 component_extension_str = ','.join(component_extensions)
113 if len(component_extensions) > 0: 97 if len(component_extensions) > 0:
114 args.append('--load-component-extension=%s' % component_extension_str) 98 args.append('--load-component-extension=%s' % component_extension_str)
115 99
116 if self.options.no_proxy_server: 100 if self.options.no_proxy_server:
117 args.append('--no-proxy-server') 101 args.append('--no-proxy-server')
118 102
119 return args 103 return args
120 104
121 @property
122 def wpr_mode(self):
123 return self.options.wpr_mode
124
125 def _WaitForBrowserToComeUp(self, timeout=None): 105 def _WaitForBrowserToComeUp(self, timeout=None):
126 def IsBrowserUp(): 106 def IsBrowserUp():
127 try: 107 try:
128 self.Request('', timeout=timeout) 108 self.Request('', timeout=timeout)
129 except (socket.error, httplib.BadStatusLine, urllib2.URLError): 109 except (socket.error, httplib.BadStatusLine, urllib2.URLError):
130 return False 110 return False
131 else: 111 else:
132 return True 112 return True
133 try: 113 try:
134 util.WaitFor(IsBrowserUp, timeout=30) 114 util.WaitFor(IsBrowserUp, timeout=30)
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 """Returns a user-friendly name for the process of the given |cmd_line|.""" 204 """Returns a user-friendly name for the process of the given |cmd_line|."""
225 if 'nacl_helper_bootstrap' in cmd_line: 205 if 'nacl_helper_bootstrap' in cmd_line:
226 return 'nacl_helper_bootstrap' 206 return 'nacl_helper_bootstrap'
227 if ':sandboxed_process' in cmd_line: 207 if ':sandboxed_process' in cmd_line:
228 return 'renderer' 208 return 'renderer'
229 m = re.match(r'.* --type=([^\s]*) .*', cmd_line) 209 m = re.match(r'.* --type=([^\s]*) .*', cmd_line)
230 if not m: 210 if not m:
231 return 'browser' 211 return 'browser'
232 return m.group(1) 212 return m.group(1)
233 213
234 def GetRemotePort(self, _):
235 return util.GetAvailableLocalPort()
236
237 def Close(self): 214 def Close(self):
238 if self._tracing_backend: 215 if self._tracing_backend:
239 self._tracing_backend.Close() 216 self._tracing_backend.Close()
240 self._tracing_backend = None 217 self._tracing_backend = None
241
242 def CreateForwarder(self, *port_pairs):
243 raise NotImplementedError()
244
245 def IsBrowserRunning(self):
246 raise NotImplementedError()
247
248 def GetStandardOutput(self):
249 raise NotImplementedError()
250
251 def GetStackTrace(self):
252 raise NotImplementedError()
253
254 class DoNothingForwarder(object):
255 def __init__(self, *port_pairs):
256 self._host_port = port_pairs[0].local_port
257
258 @property
259 def url(self):
260 assert self._host_port
261 return 'http://127.0.0.1:%i' % self._host_port
262
263 def Close(self):
264 self._host_port = None
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698