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

Unified Diff: tools/telemetry/telemetry/extension_page.py

Issue 11882033: Telemetry support for extensions. (Closed) Base URL: svn://chrome-svn/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 side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698