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

Side by Side Diff: tools/telemetry/telemetry/extension_page.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: Created 8 years 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
(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 json
5
6 from telemetry import util
7
8 class ExtensionPage(object):
9 """Represents a an extension page in the browser
10
11 Provides wrapper functions for running extension APIs as:
12 E.g.:
13 # Evaluates 1+1 in the extensions's javascript context.
14 tab.runtime.Evaluate('1+1')
15 """
16 def __init__(self, tab):
nduca 2012/12/07 19:23:47 When we get close to landing this, this shouldn't
17 self.tab = tab
18
19 def __enter__(self):
20 return self
21
22 def __exit__(self, *args):
23 self.tab.Close()
24
25 def _FormatParameters(self, *parameters):
26 json_params = ''
27 for param in parameters:
nduca 2012/12/07 19:23:47 doesn't our code do this for us?
zel 2012/12/12 21:03:42 not sure. what do you think I should be calling in
28 if len(json_params) > 0:
29 json_params += ','
30 json_params += json.dumps(param[0])
31
32 return json_params
33
34 def _RegisterEventListeners(self, event_names):
35 self.tab.runtime.Execute('window.__lastCallEventHandler = {};')
36 for event_name in event_names:
37 self.tab.runtime.Execute("""
38 window.__lastCallEventHandler['%s'] = function() {
39 window.__lastCallEventArguments['%s'] = arguments;
40 };
41 %s.addListener(window.__lastCallEventHandler['%s']);
42 """ % (event_name, event_name, event_name, event_name))
43
44 def _UnregisterEventListeners(self, event_names):
45 for event_name in event_names:
46 self.tab.runtime.Execute("""
47 %s.removeListener(window.__lastCallEventHandler['%s']);
48 """ % (event_name, event_name))
49
50 self.tab.runtime.Execute('window.__lastCallEventHandler = {};')
51
52 def RunMethodWithEvents(self, event_names, method_name, *parameters):
nduca 2012/12/07 19:23:47 This stuff makes me uneasy that the last argument
zel 2012/12/12 21:03:42 we need to chat in person about this one too
53 self._RegisterEventListeners(event_names)
54 self.tab.runtime.Execute("""
55 window.__lastCallEventArguments = {};
56 window.__lastCallDone = false;
57 window.__lastCallArguments = false;
58 %s(%s, function() {
59 window.__lastCallArguments = arguments;
60 window.__lastCallDone = true;
61 });
62 """ % (method_name, self._FormatParameters(parameters)))
63 def IsDone():
64 expr = 'window.__lastCallDone'
65 for event_name in event_names:
66 expr += " && window.__lastCallEventArguments['%s']" % event_name
67
68 return self.tab.runtime.Evaluate(expr)
69
70 util.WaitFor(IsDone, timeout=30)
71 results = (self.tab.runtime.Evaluate('window.__lastCallArguments'),
72 self.tab.runtime.Evaluate('window.__lastCallEventArguments'))
73 self._UnregisterEventListeners(event_names)
74 return results
75
76 def RunMethod(self, method_name, *parameters):
77 self.tab.runtime.Execute("""
78 window.__lastCallDone = false;
79 window.__lastCallArguments = false;
80 %s(%s, function() {
81 window.__lastCallArguments = arguments;
82 window.__lastCallDone = true;
83 });
84 """ % (method_name, self._FormatParameters(parameters)))
85 def IsDone():
86 return self.tab.runtime.Evaluate("window.__lastCallDone")
87
88 util.WaitFor(IsDone, timeout=30)
89 return self.tab.runtime.Evaluate("window.__lastCallArguments")
90
91 def RunSyncMethod(self, method_name, *parameters):
nduca 2012/12/07 19:23:47 I think I'm fine with this on runtime object
92 return self.tab.runtime.Evaluate("%s(%s);" %
93 (method_name, self._FormatParameters(parameters)))
94
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698