Chromium Code Reviews| Index: tools/telemetry/telemetry/extension_page.py |
| =================================================================== |
| --- tools/telemetry/telemetry/extension_page.py (revision 0) |
| +++ tools/telemetry/telemetry/extension_page.py (revision 0) |
| @@ -0,0 +1,108 @@ |
| +# Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| +# Use of this source code is governed by a BSD-style license that can be |
| +# found in the LICENSE file. |
| +import json |
| + |
| +from telemetry import util |
| + |
| +class ExtensionEvent(object): |
| + def __init__(self, name, condition = None): |
| + self._name = name |
| + self._condition = condition |
| + |
| + @property |
| + def name(self): |
| + return self._name |
| + |
| + @property |
| + def condition(self): |
| + return self._condition |
| + |
| + |
| +class ExtensionPage(object): |
|
nduca
2013/01/15 05:31:06
I'd like to focus on getting just a plain old exte
|
| + """Represents a an extension page in the browser |
| + |
|
nduca
2013/01/15 05:31:06
The tab_backend vs tab rewrite should really help
|
| + Provides wrapper functions for running extension APIs as: |
| + E.g.: |
| + # Evaluates 1+1 in the extensions's javascript context. |
| + tab.runtime.Evaluate('1+1') |
| + """ |
| + def __init__(self, tab): |
| + self.tab = tab |
| + |
| + def __enter__(self): |
| + return self |
| + |
| + def __exit__(self, *args): |
| + self.tab.Close() |
| + |
| + def _FormatParameters(self, *parameters): |
| + return ','.join([json.dumps(param[0]) for param in parameters]) |
| + |
| + def _RegisterEventListeners(self, events): |
| + self.tab.runtime.Execute('window.__lastCallEventHandler = {};') |
| + for event in events: |
| + command = """ |
| + window.__lastCallEventHandler['%s'] = function() { |
| + window.__lastCallEventArguments['%s'] = arguments; |
| + window.__lastCallEventRaised['%s'] = %s; |
| + }; |
| + %s.addListener(window.__lastCallEventHandler['%s']); |
| + """ % (event.name, event.name, event.name, |
| + 'true' if event.condition is None else event.condition, |
| + event.name, |
| + event.name) |
| + self.tab.runtime.Execute(command) |
| + |
| + def _UnregisterEventListeners(self, events): |
| + for event in events: |
| + self.tab.runtime.Execute(""" |
| + %s.removeListener(window.__lastCallEventHandler['%s']); |
| + """ % (event.name, event.name)) |
| + |
| + self.tab.runtime.Execute('window.__lastCallEventHandler = {};') |
| + |
| + def RunMethodWithEvents(self, events, method_name, *parameters): |
| + self._RegisterEventListeners(events) |
| + command = """ |
| + window.__lastCallEventArguments = {}; |
| + window.__lastCallEventRaised = {}; |
| + window.__lastCallDone = false; |
| + window.__lastCallArguments = false; |
| + %s(%s, function() { |
| + window.__lastCallArguments = arguments; |
| + window.__lastCallDone = true; |
| + }); |
| + """ % (method_name, self._FormatParameters(parameters)) |
| + self.tab.runtime.Execute(command) |
| + def IsDone(): |
| + expr = 'window.__lastCallDone ' + ''.join( |
| + [('&& window.__lastCallEventRaised["%s"]' % event.name) |
| + for event in events]) |
| + return self.tab.runtime.Evaluate(expr) |
| + |
| + util.WaitFor(IsDone, timeout=30) |
| + results = (self.tab.runtime.Evaluate('window.__lastCallArguments'), |
| + self.tab.runtime.Evaluate('window.__lastCallEventArguments')) |
| + self._UnregisterEventListeners(events) |
| + return results |
| + |
| + def RunMethod(self, method_name, *parameters): |
| + self.tab.runtime.Execute(""" |
| + window.__lastCallDone = false; |
| + window.__lastCallArguments = false; |
| + %s(%s, function() { |
| + window.__lastCallArguments = arguments; |
| + window.__lastCallDone = true; |
| + }); |
| + """ % (method_name, self._FormatParameters(parameters))) |
| + def IsDone(): |
| + return self.tab.runtime.Evaluate("window.__lastCallDone") |
| + |
| + util.WaitFor(IsDone, timeout=30) |
| + return self.tab.runtime.Evaluate("window.__lastCallArguments") |
| + |
| + def RunSyncMethod(self, method_name, *parameters): |
| + return self.tab.runtime.Evaluate("%s(%s);" % |
| + (method_name, self._FormatParameters(parameters))) |
| + |
| Property changes on: tools/telemetry/telemetry/extension_page.py |
| ___________________________________________________________________ |
| Added: svn:eol-style |
| + LF |