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

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 tab
7 from telemetry import util
8
9 class ExtensionPage(tab.Tab):
10 """Represents a an extension page in the browser
11
12 Provides wrapper functions for running extension APIs as:
13 E.g.:
14 # Evaluates 1+1 in the extensions's javascript context.
15 tab.runtime.Evaluate('1+1')
16 """
17 def __init__(self, browser, inspector_backend):
18 super(ExtensionPage, self).__init__(browser, inspector_backend)
19
20 def _FormatParameters(self, *parameters):
21 json_params = ''
22 for param in parameters:
23 if len(json_params) > 0:
24 json_params += ','
25 json_params += json.dumps(param[0])
26
27 return json_params
28
29 def _RegisterEventListeners(self, event_names):
30 self.runtime.Execute('window.__lastCallEventHandler = {};')
31 for event_name in event_names:
32 self.runtime.Execute("""
33 window.__lastCallEventHandler['%s'] = function() {
34 window.__lastCallEventArguments['%s'] = arguments;
35 };
36 %s.addListener(window.__lastCallEventHandler['%s']);
37 """ % (event_name, event_name, event_name, event_name))
38
39 def _UnregisterEventListeners(self, event_names):
40 for event_name in event_names:
41 self.runtime.Execute("""
42 %s.removeListener(window.__lastCallEventHandler['%s']);
43 """ % (event_name, event_name))
44
45 self.runtime.Execute('window.__lastCallEventHandler = {};')
46
47 def RunMethodWithEvents(self, event_names, method_name, *parameters):
48 self._RegisterEventListeners(event_names)
49 self.runtime.Execute("""
50 window.__lastCallEventArguments = {};
51 window.__lastCallDone = false;
52 window.__lastCallArguments = false;
53 %s(%s, function() {
54 window.__lastCallArguments = arguments;
55 window.__lastCallDone = true;
56 });
57 """ % (method_name, self._FormatParameters(parameters)))
58 def IsDone():
59 expr = 'window.__lastCallDone'
60 for event_name in event_names:
61 expr += " && window.__lastCallEventArguments['%s']" % event_name
62
63 return self.runtime.Evaluate(expr)
64
65 util.WaitFor(IsDone, timeout=30)
66 results = (self.runtime.Evaluate('window.__lastCallArguments'),
67 self.runtime.Evaluate('window.__lastCallEventArguments'))
68 self._UnregisterEventListeners(event_names)
69 return results
70
71 def RunMethod(self, method_name, *parameters):
nduca 2012/11/30 08:16:25 Might try callling this ChromeExtensionsAPI, makin
zel 2012/12/04 03:12:48 I've been thinking about this as the next step - w
72 self.runtime.Execute("""
73 window.__lastCallDone = false;
74 window.__lastCallArguments = false;
75 %s(%s, function() {
76 window.__lastCallArguments = arguments;
77 window.__lastCallDone = true;
78 });
79 """ % (method_name, self._FormatParameters(parameters)))
80 def IsDone():
81 return self.runtime.Evaluate("window.__lastCallDone")
82
83 util.WaitFor(IsDone, timeout=30)
84 return self.runtime.Evaluate("window.__lastCallArguments")
85
86 def RunSyncMethod(self, method_name, *parameters):
87 return self.runtime.Evaluate("%s(%s);" %
88 (method_name, self._FormatParameters(parameters)))
89
OLDNEW
« no previous file with comments | « tools/telemetry/telemetry/browser_backend.py ('k') | tools/telemetry/telemetry_auto/examples/telemetry_extension_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698