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

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

Issue 11819018: [Telemetry] Clean separation between tab (public API) and tab_backend (Chrome implementation). Flat… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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
« no previous file with comments | « tools/telemetry/telemetry/page_runner.py ('k') | tools/telemetry/telemetry/tab_backend.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 from telemetry import inspector_backend 5 from telemetry import tab_backend
6 from telemetry import inspector_console
7 from telemetry import inspector_page
8 from telemetry import inspector_runtime
9 from telemetry import inspector_timeline
10 from telemetry import util
11 6
12 DEFAULT_TAB_TIMEOUT = 60 7 DEFAULT_TAB_TIMEOUT = 60
13 8
14 class Tab(object): 9 class Tab(object):
15 """Represents a tab in the browser 10 """Represents a tab in the browser
16 11
17 The important parts of the Tab object are in the runtime and page objects. 12 The important parts of the Tab object are in the runtime and page objects.
18 E.g.: 13 E.g.:
19 # Navigates the tab to a given url. 14 # Navigates the tab to a given url.
20 tab.page.Navigate('http://www.google.com/') 15 tab.page.Navigate('http://www.google.com/')
21 16
22 # Evaluates 1+1 in the tab's javascript context. 17 # Evaluates 1+1 in the tab's javascript context.
23 tab.runtime.Evaluate('1+1') 18 tab.runtime.Evaluate('1+1')
24 """ 19 """
25 def __init__(self, browser, tab_controller, debugger_url): 20 def __init__(self, browser, tab_controller, debugger_url):
26 self._browser = browser 21 self._backend = tab_backend.TabBackend(
nduca 2013/01/09 01:02:30 Is there a way to pass in the tab_backend on the c
dtu 2013/01/09 01:21:27 Done.
27 self._tab_controller = tab_controller 22 browser, tab_controller, debugger_url)
28 self._debugger_url = debugger_url
29
30 self._inspector_backend = None
31 self._console = None
32 self._page = None
33 self._runtime = None
34 self._timeline = None
35 23
36 def __del__(self): 24 def __del__(self):
37 self.Disconnect() 25 self.Close()
38 26
39 def _Connect(self): 27 @property
40 if self._inspector_backend: 28 def browser(self):
41 return 29 """The browser in which this tab resides."""
30 return self._backend.browser
42 31
43 self._inspector_backend = inspector_backend.InspectorBackend( 32 @property
44 self._tab_controller, self._debugger_url) 33 def url(self):
45 self._console = inspector_console.InspectorConsole( 34 return self._backend.url
46 self._inspector_backend, self)
47 self._page = inspector_page.InspectorPage(self._inspector_backend, self)
48 self._runtime = inspector_runtime.InspectorRuntime(
49 self._inspector_backend, self)
50 self._timeline = inspector_timeline.InspectorTimeline(
51 self._inspector_backend, self)
52
53 def Disconnect(self):
54 """Closes the connection to this tab."""
55 self._console = None
56 self._page = None
57 self._runtime = None
58 self._timeline = None
59 if self._inspector_backend:
60 self._inspector_backend.Close()
61 self._inspector_backend = None
62 self._browser = None
63
64 def Close(self):
65 """Closes this tab.
66
67 Not all browsers or browser versions support this method.
68 Be sure to check browser.supports_tab_control."""
69 self.Disconnect()
70 self._tab_controller.CloseTab(self._debugger_url)
71 35
72 def Activate(self): 36 def Activate(self):
73 """Brings this tab to the foreground asynchronously. 37 """Brings this tab to the foreground asynchronously.
74 38
75 Please note: this is asynchronous. There is a delay between this call 39 Please note: this is asynchronous. There is a delay between this call
76 and the page's documentVisibilityState becoming 'visible', and yet more 40 and the page's documentVisibilityState becoming 'visible', and yet more
77 delay until the actual tab is visible to the user. None of these delays 41 delay until the actual tab is visible to the user. None of these delays
78 are included in this call.""" 42 are included in this call."""
79 self._Connect() 43 self._backend.Activate()
80 self._tab_controller.ActivateTab(self._debugger_url)
81 44
82 @property 45 def Close(self):
83 def browser(self): 46 """Closes this tab.
84 """The browser in which this tab resides."""
85 return self._browser
86 47
87 @property 48 Not all browsers or browser versions support this method.
88 def url(self): 49 Be sure to check browser.supports_tab_control."""
89 return self._tab_controller.GetTabUrl(self._debugger_url) 50 self._backend.Close()
90
91 @property
92 def console(self):
93 """Methods for interacting with the page's console object."""
94 self._Connect()
95 return self._console
96
97 @property
98 def page(self):
99 """Methods for interacting with the current page."""
100 self._Connect()
101 return self._page
102
103 @property
104 def runtime(self):
105 """Methods for interacting with the page's javascript runtime."""
106 self._Connect()
107 return self._runtime
108
109 @property
110 def timeline(self):
111 """Methods for interacting with the inspector timeline."""
112 self._Connect()
113 return self._timeline
114 51
115 def WaitForDocumentReadyStateToBeComplete(self, timeout=DEFAULT_TAB_TIMEOUT): 52 def WaitForDocumentReadyStateToBeComplete(self, timeout=DEFAULT_TAB_TIMEOUT):
116 util.WaitFor( 53 self._backend.WaitForDocumentReadyStateToBeComplete(timeout)
117 lambda: self._runtime.Evaluate('document.readyState') == 'complete',
118 timeout)
119 54
120 def WaitForDocumentReadyStateToBeInteractiveOrBetter( 55 def WaitForDocumentReadyStateToBeInteractiveOrBetter(
121 self, timeout=DEFAULT_TAB_TIMEOUT): 56 self, timeout=DEFAULT_TAB_TIMEOUT):
122 def IsReadyStateInteractiveOrBetter(): 57 self._backend.WaitForDocumentReadyStateToBeInteractiveOrBetter(timeout)
123 rs = self._runtime.Evaluate('document.readyState')
124 return rs == 'complete' or rs == 'interactive'
125 util.WaitFor(IsReadyStateInteractiveOrBetter, timeout)
126 58
59 @property
60 def screenshot_supported(self):
61 """True if the browser instance is capable of capturing screenshots"""
62 return self._backend.screenshot_supported
63
64 def Screenshot(self, timeout=DEFAULT_TAB_TIMEOUT):
65 """Capture a screenshot of the window for rendering validation"""
66 return self._backend.Screenshot(timeout)
67
68 @property
69 def message_output_stream(self):
70 return self._backend.message_output_stream
71
72 @message_output_stream.setter
73 def message_output_stream(self, stream):
74 self._backend.message_output_stream = stream
75
76 def PerformActionAndWaitForNavigate(
77 self, action_function, timeout=DEFAULT_TAB_TIMEOUT):
78 """Executes action_function, and waits for the navigation to complete.
nduca 2013/01/09 01:02:30 what is the type of action_function? Lets make sur
dtu 2013/01/09 01:21:27 Done.
79
80 action_function is expect to result in a navigation. This function returns
81 when the navigation is complete or when the timeout has been exceeded.
82 """
83 self._backend.PerformActionAndWaitForNavigate(action_function, timeout)
84
85 def Navigate(self, url, timeout=DEFAULT_TAB_TIMEOUT):
86 """Navigates to url."""
87 self._backend.Navigate(url, timeout)
88
89 def GetCookieByName(self, name, timeout=DEFAULT_TAB_TIMEOUT):
90 """Returns the value of the cookie by the given |name|."""
91 return self._backend.GetCookieByName(name, timeout)
92
93 def Execute(self, expr, timeout=DEFAULT_TAB_TIMEOUT):
nduca 2013/01/09 01:02:30 ExecuteJavascript
dtu 2013/01/09 01:21:27 Done.
94 """Executes expr in javascript. Does not return the result.
95
96 If the expression failed to evaluate, EvaluateException will be raised.
97 """
98 self._backend.Execute(expr, timeout)
99
100 def Evaluate(self, expr, timeout=DEFAULT_TAB_TIMEOUT):
nduca 2013/01/09 01:02:30 EvaluateJavascript
dtu 2013/01/09 01:21:27 Done.
101 """Evalutes expr in javascript and returns the JSONized result.
102
103 Consider using Execute for cases where the result of the expression is not
104 needed.
105
106 If evaluation throws in javascript, a python EvaluateException will
107 be raised.
108
109 If the result of the evaluation cannot be JSONized, then an
110 EvaluationException will be raised.
111 """
112 return self._backend.Evaluate(expr, timeout)
113
114 @property
115 def timeline_events(self):
116 return self._backend.timeline_events
117
118 def StartRecording(self):
nduca 2013/01/09 01:02:30 StartRecording what?
dtu 2013/01/09 01:21:27 StartTimelineRecording? StartEventRecording? I don
119 self._backend.StartRecording()
120
121 def StopRecording(self):
122 self._backend.StopRecording()
OLDNEW
« no previous file with comments | « tools/telemetry/telemetry/page_runner.py ('k') | tools/telemetry/telemetry/tab_backend.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698