OLD | NEW |
| (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 class EvaluateException(Exception): | |
5 pass | |
6 | |
7 class InspectorRuntime(object): | |
8 def __init__(self, inspector_backend): | |
9 self._inspector_backend = inspector_backend | |
10 self._inspector_backend.RegisterDomain( | |
11 'Runtime', | |
12 self._OnNotification, | |
13 self._OnClose) | |
14 | |
15 def _OnNotification(self, msg): | |
16 pass | |
17 | |
18 def _OnClose(self): | |
19 pass | |
20 | |
21 def Execute(self, expr, timeout=60): | |
22 """Executes expr in javascript. Does not return the result. | |
23 | |
24 If the expression failed to evaluate, EvaluateException will be raised. | |
25 """ | |
26 self.Evaluate(expr + '; 0;', timeout) | |
27 | |
28 def Evaluate(self, expr, timeout=60): | |
29 """Evalutes expr in javascript and returns the JSONized result. | |
30 | |
31 Consider using Execute for cases where the result of the expression is not | |
32 needed. | |
33 | |
34 If evaluation throws in javascript, a python EvaluateException will | |
35 be raised. | |
36 | |
37 If the result of the evaluation cannot be JSONized, then an | |
38 EvaluationException will be raised. | |
39 """ | |
40 request = { | |
41 'method': 'Runtime.evaluate', | |
42 'params': { | |
43 'expression': expr, | |
44 'returnByValue': True | |
45 } | |
46 } | |
47 res = self._inspector_backend.SyncRequest(request, timeout) | |
48 if 'error' in res: | |
49 raise EvaluateException(res['error']['message']) | |
50 | |
51 if 'wasThrown' in res['result'] and res['result']['wasThrown']: | |
52 # TODO(nduca): propagate stacks from javascript up to the python | |
53 # exception. | |
54 raise EvaluateException(res['result']['result']['description']) | |
55 if res['result']['result']['type'] == 'undefined': | |
56 return None | |
57 return res['result']['result']['value'] | |
OLD | NEW |