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 5DEFAULT_WEB_CONTENTS_TIMEOUT = 60 6 7# TODO(achuith, dtu, nduca): Add unit tests specifically for WebContents, 8# independent of Tab. 9class WebContents(object): 10 """Represents web contents in the browser""" 11 def __init__(self, inspector_backend): 12 self._inspector_backend = inspector_backend 13 14 def __del__(self): 15 self.Disconnect() 16 17 def Disconnect(self): 18 self._inspector_backend.Disconnect() 19 20 def Close(self): 21 """Closes this page. 22 23 Not all browsers or browser versions support this method. 24 Be sure to check browser.supports_tab_control.""" 25 self._inspector_backend.Close() 26 27 def WaitForDocumentReadyStateToBeComplete(self, 28 timeout=DEFAULT_WEB_CONTENTS_TIMEOUT): 29 self._inspector_backend.WaitForDocumentReadyStateToBeComplete(timeout) 30 31 def WaitForDocumentReadyStateToBeInteractiveOrBetter(self, 32 timeout=DEFAULT_WEB_CONTENTS_TIMEOUT): 33 self._inspector_backend.WaitForDocumentReadyStateToBeInteractiveOrBetter( 34 timeout) 35 36 def ExecuteJavaScript(self, expr, timeout=DEFAULT_WEB_CONTENTS_TIMEOUT): 37 """Executes expr in JavaScript. Does not return the result. 38 39 If the expression failed to evaluate, EvaluateException will be raised. 40 """ 41 self._inspector_backend.ExecuteJavaScript(expr, timeout) 42 43 def EvaluateJavaScript(self, expr, timeout=DEFAULT_WEB_CONTENTS_TIMEOUT): 44 """Evalutes expr in JavaScript and returns the JSONized result. 45 46 Consider using ExecuteJavaScript for cases where the result of the 47 expression is not needed. 48 49 If evaluation throws in JavaScript, a Python EvaluateException will 50 be raised. 51 52 If the result of the evaluation cannot be JSONized, then an 53 EvaluationException will be raised. 54 """ 55 return self._inspector_backend.EvaluateJavaScript(expr, timeout) 56 57 @property 58 def message_output_stream(self): 59 return self._inspector_backend.message_output_stream 60 61 @message_output_stream.setter 62 def message_output_stream(self, stream): 63 self._inspector_backend.message_output_stream = stream 64 65 @property 66 def timeline_model(self): 67 return self._inspector_backend.timeline_model 68 69 def StartTimelineRecording(self): 70 self._inspector_backend.StartTimelineRecording() 71 72 def StopTimelineRecording(self): 73 self._inspector_backend.StopTimelineRecording() 74