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

Side by Side Diff: tools/telemetry/telemetry/cros_browser_backend.py

Issue 11412238: Proof of concept for running extension API stack through dev tools. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 11 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 | Annotate | Revision Log
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 import logging 4 import logging
5 import os
6 import socket 5 import socket
7 import subprocess 6 import subprocess
8 7
9 from telemetry import browser_backend 8 from telemetry import browser_backend
10 from telemetry import util 9 from telemetry import util
11 10
12 class CrOSBrowserBackend(browser_backend.BrowserBackend): 11 class CrOSBrowserBackend(browser_backend.BrowserBackend):
13 def __init__(self, browser_type, options, is_content_shell, cri): 12 def __init__(self, browser_type, options, is_content_shell, cri):
14 super(CrOSBrowserBackend, self).__init__(is_content_shell, options) 13 super(CrOSBrowserBackend, self).__init__(is_content_shell, options)
15 # Initialize fields so that an explosion during init doesn't break in Close. 14 # Initialize fields so that an explosion during init doesn't break in Close.
16 self._options = options 15 self._options = options
17 assert not is_content_shell 16 assert not is_content_shell
18 self._cri = cri 17 self._cri = cri
19 self._browser_type = browser_type 18 self._browser_type = browser_type
20 19
21 self._remote_debugging_port = self._cri.GetRemotePort() 20 self._remote_debugging_port = 8666 # self._cri.GetRemotePort()
22 self._login_ext_dir = '/tmp/chromeos_login_ext'
23 21
24 # Ensure the UI is running and logged out. 22 # Ensure the UI is running and logged out.
25 self._RestartUI() 23 self._RestartUI()
26 24
27 # Delete test@test.test's cryptohome vault (user data directory). 25 # Delete test@test.test's cryptohome vault (user data directory).
28 if not options.dont_override_profile: 26 if not options.dont_override_profile:
29 logging.info('Deleting user\'s cryptohome vault (the user data dir)') 27 logging.info('Deleting user\'s cryptohome vault (the user data dir)')
30 self._cri.GetCmdOutput( 28 self._cri.GetCmdOutput(
31 ['cryptohome', '--action=remove', '--force', '--user=test@test.test']) 29 ['cryptohome', '--action=remove', '--force', '--user=test@test.test'])
32 30
33 # Push a dummy login extension to the device.
34 # This extension automatically logs in as test@test.test
35 logging.info('Copying dummy login extension to the device')
36 cri.PushFile(
37 os.path.join(os.path.dirname(__file__), 'chromeos_login_ext'), '/tmp/')
38 cri.GetCmdOutput(['chown', '-R', 'chronos:chronos', self._login_ext_dir])
39
40 # Restart Chrome with the login extension and remote debugging.
41 logging.info('Restarting Chrome with flags and login')
42 args = ['dbus-send', '--system', '--type=method_call',
43 '--dest=org.chromium.SessionManager',
44 '/org/chromium/SessionManager',
45 'org.chromium.SessionManagerInterface.EnableChromeTesting',
46 'boolean:true',
47 'array:string:"%s"' % '","'.join(self.GetBrowserStartupArgs())]
48 cri.GetCmdOutput(args)
49
50 # Find a free local port. 31 # Find a free local port.
51 tmp = socket.socket() 32 tmp = socket.socket()
52 tmp.bind(('', 0)) 33 tmp.bind(('', 0))
53 self._port = tmp.getsockname()[1] 34 self._port = tmp.getsockname()[1]
54 tmp.close() 35 tmp.close()
55 36
56 # Forward the remote debugging port. 37 # Forward the remote debugging port.
57 logging.info('Forwarding remote debugging port') 38 logging.info('Forwarding remote debugging port')
58 self._forwarder = SSHForwarder( 39 self._forwarder = SSHForwarder(
59 cri, 'L', 40 cri, 'L',
60 util.PortPair(self._port, self._remote_debugging_port)) 41 util.PortPair(self._port, self._remote_debugging_port))
61 42
62 # Wait for the browser to come up. 43 # Wait for the browser to come up.
63 logging.info('Waiting for browser to be ready') 44 logging.info('Waiting for browser to be ready')
64 try: 45 try:
65 self._WaitForBrowserToComeUp() 46 self._WaitForBrowserToComeUp()
66 self._PostBrowserStartupInitialization() 47 self._PostBrowserStartupInitialization()
67 except: 48 except:
68 import traceback 49 import traceback
69 traceback.print_exc() 50 traceback.print_exc()
70 self.Close() 51 self.Close()
71 raise 52 raise
72 53
54 logging.info('Browser is up!')
73 55
74 logging.info('Browser is up!') 56 def _InstallExtension(self, local_path, device_path):
57 # Push a dummy login extension to the device.
58 # This extension automatically logs in as test@test.test
59 logging.info('Copying extension from "%s" to the device "%s"' %
60 (local_path, device_path))
61 self._cri.PushFile(local_path, '/tmp/')
62 self._cri.GetCmdOutput(['chown', '-R', 'chronos:chronos', device_path])
75 63
76 def GetBrowserStartupArgs(self): 64 def GetBrowserStartupArgs(self):
77 args = super(CrOSBrowserBackend, self).GetBrowserStartupArgs() 65 args = super(CrOSBrowserBackend, self).GetBrowserStartupArgs()
78 66
79 args.extend([ 67 args.extend([
80 '--allow-webui-compositing', 68 '--allow-webui-compositing',
81 '--aura-host-window-use-fullscreen', 69 '--aura-host-window-use-fullscreen',
82 '--enable-smooth-scrolling', 70 '--enable-smooth-scrolling',
83 '--enable-threaded-compositing', 71 '--enable-threaded-compositing',
84 '--enable-per-tile-painting', 72 '--enable-per-tile-painting',
85 '--enable-gpu-sandboxing', 73 '--enable-gpu-sandboxing',
86 '--force-compositing-mode', 74 '--force-compositing-mode',
87 '--remote-debugging-port=%i' % self._remote_debugging_port, 75 '--remote-debugging-port=%i' % self._remote_debugging_port,
88 '--auth-ext-path=%s' % self._login_ext_dir, 76 '--auth-ext-path=%s' % self._login_ext_dir,
77 '--load-component-extension=%s' % self._auto_ext_dir,
89 '--start-maximized']) 78 '--start-maximized'])
90 79
91 return args 80 return args
92 81
93 def SetBrowser(self, browser): 82 def SetBrowser(self, browser):
94 super(CrOSBrowserBackend, self).SetBrowser(browser) 83 super(CrOSBrowserBackend, self).SetBrowser(browser)
95 84
96 # TODO(hartmanng): crbug.com/166886 (Remove these temporary hacks when 85 # TODO(hartmanng): crbug.com/166886 (Remove these temporary hacks when
97 # _ListTabs is fixed) 86 # _ListTabs is fixed)
98 87
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 119
131 def Close(self): 120 def Close(self):
132 super(CrOSBrowserBackend, self).Close() 121 super(CrOSBrowserBackend, self).Close()
133 122
134 self._RestartUI() # Logs out. 123 self._RestartUI() # Logs out.
135 124
136 if self._forwarder: 125 if self._forwarder:
137 self._forwarder.Close() 126 self._forwarder.Close()
138 self._forwarder = None 127 self._forwarder = None
139 128
140 if self._login_ext_dir:
141 self._cri.RmRF(self._login_ext_dir)
142 self._login_ext_dir = None
143
144 self._cri = None 129 self._cri = None
145 130
146 def IsBrowserRunning(self): 131 def IsBrowserRunning(self):
147 # On ChromeOS, there should always be a browser running. 132 # On ChromeOS, there should always be a browser running.
148 for _, process in self._cri.ListProcesses(): 133 for _, process in self._cri.ListProcesses():
149 if process.startswith('/opt/google/chrome/chrome'): 134 if process.startswith('/opt/google/chrome/chrome'):
150 return True 135 return True
151 return False 136 return False
152 137
153 def GetStandardOutput(self): 138 def GetStandardOutput(self):
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 190
206 @property 191 @property
207 def url(self): 192 def url(self):
208 assert self._proc 193 assert self._proc
209 return 'http://localhost:%i' % self._host_port 194 return 'http://localhost:%i' % self._host_port
210 195
211 def Close(self): 196 def Close(self):
212 if self._proc: 197 if self._proc:
213 self._proc.kill() 198 self._proc.kill()
214 self._proc = None 199 self._proc = None
OLDNEW
« no previous file with comments | « tools/telemetry/telemetry/browser_unittest.py ('k') | tools/telemetry/telemetry/cros_browser_finder.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698