@@ -38,7 +38,15 @@ m.cefBrowser = g_cefBrowsers[1]
3838
3939'''
4040
41- # PyBrowser.
41+ IF CEF_VERSION == 3 :
42+
43+ cdef CefRefPtr[CefBrowserHost] GetCefBrowserHost(CefRefPtr[CefBrowser] cefBrowser):
44+
45+ cdef CefRefPtr[CefBrowserHost] cefBrowserHost = cefBrowser.get().GetHost()
46+ if < void * > cefBrowserHost != NULL and cefBrowserHost.get():
47+ return cefBrowserHost
48+ raise Exception (" GetCefBrowserHostPtr() failed: this method of Browser object "
49+ " can only be called in the browser process." )
4250
4351class PyBrowser :
4452
@@ -85,15 +93,18 @@ class PyBrowser:
8593 self .__checkClientHandlers(clientHandlers)
8694 self .__clientHandlers = clientHandlers
8795
88- self .__checkJavascriptBindings(javascriptBindings)
89- self .__javascriptBindings = javascriptBindings
96+ IF CEF_VERSION == 1 :
97+ self .__checkJavascriptBindings(javascriptBindings)
98+ self .__javascriptBindings = javascriptBindings
99+
100+ IF CEF_VERSION == 1 :
90101
91- def __checkJavascriptBindings (self , bindings ):
102+ def __checkJavascriptBindings (self , bindings ):
92103
93- if not bindings:
94- return
95- if not isinstance (bindings, JavascriptBindings):
96- raise Exception (" Creating PyBrowser() failed: javascriptBindings is not a JavascriptBindings class." )
104+ if not bindings:
105+ return
106+ if not isinstance (bindings, JavascriptBindings):
107+ raise Exception (" Creating PyBrowser() failed: javascriptBindings is not a JavascriptBindings class." )
97108
98109 def __checkClientHandlers (self , handlers ):
99110
@@ -151,32 +162,24 @@ class PyBrowser:
151162 # PUBLIC API.
152163 # --------------
153164
154- def GetUserData (self , key ):
155-
156- if key in self .__userData:
157- return self .__userData[key]
158- return None
159-
160- def SetUserData (self , key , value ):
161-
162- self .__userData[key] = value
163-
164165 def CanGoBack (self ):
165166
166167 cdef CefRefPtr[CefBrowser] cefBrowser = GetCefBrowserByInnerWindowID(CheckInnerWindowID(self .__innerWindowID))
167- cdef c_bool canGoBack = ( < CefBrowser * > ( cefBrowser.get()) ).CanGoBack()
168+ cdef c_bool canGoBack = cefBrowser.get().CanGoBack()
168169 return canGoBack
169170
170171 def CanGoForward (self ):
171172
172173 cdef CefRefPtr[CefBrowser] cefBrowser = GetCefBrowserByInnerWindowID(CheckInnerWindowID(self .__innerWindowID))
173- cdef c_bool canGoForward = ( < CefBrowser * > ( cefBrowser.get()) ).CanGoForward()
174+ cdef c_bool canGoForward = cefBrowser.get().CanGoForward()
174175 return canGoForward
175176
176- def ClearHistory ( self ) :
177+ IF CEF_VERSION == 1 :
177178
178- cdef CefRefPtr[CefBrowser] cefBrowser = GetCefBrowserByInnerWindowID(CheckInnerWindowID(self .__innerWindowID))
179- (< CefBrowser* > (cefBrowser.get())).ClearHistory()
179+ def ClearHistory (self ):
180+
181+ cdef CefRefPtr[CefBrowser] cefBrowser = GetCefBrowserByInnerWindowID(CheckInnerWindowID(self .__innerWindowID))
182+ cefBrowser.get().ClearHistory()
180183
181184 def CloseBrowser (self ):
182185
@@ -199,33 +202,52 @@ class PyBrowser:
199202 self .__topWindowID = 0
200203 self .__innerWindowID = 0
201204
202- # You do not need to call both, call ParentWindowWillClose for the main application window,
203- # and CloseBrowser() for popup windows created by CEF. In cefclient/cefclient_win.cpp there
204- # is only ParentWindowWillClose() called. CloseBrowser() is called only for popups.
205-
206- (< CefBrowser* > (cefBrowser.get())).ParentWindowWillClose() # only for main window that was created explicitily
207- # (<CefBrowser*>(cefBrowser.get())).CloseBrowser() # call this only for popups.
208-
209- def CloseDevTools (self ):
205+ # You do not need to call both ParentWindowWillClose & CloseBrowser,
206+ # call ParentWindowWillClose for the main application window,
207+ # and CloseBrowser() for popup windows created by CEF.
210208
211- cdef CefRefPtr[CefBrowser] cefBrowser = GetCefBrowserByInnerWindowID(CheckInnerWindowID(self .__innerWindowID))
212- (< CefBrowser* > (cefBrowser.get())).CloseDevTools()
209+ # In cefclient/cefclient_win.cpp there is only ParentWindowWillClose() called.
210+ # CloseBrowser() is called only for popups.
211+
212+ # Only for main window that was created explicitily:
213+ IF CEF_VERSION == 1 :
214+ Debug(" CefBrowser.ParentWindowWillClose()" )
215+ cefBrowser.get().ParentWindowWillClose()
216+ ELIF CEF_VERSION == 3 :
217+ Debug(" CefBrowserHost.ParentWindowWillClose()" )
218+ GetCefBrowserHost(cefBrowser).get().ParentWindowWillClose()
219+
220+ # Call this only for popups.
221+ if cefBrowser.get().IsPopup():
222+ IF CEF_VERSION == 1 :
223+ Debug(" CefBrowser.CloseBrowser()" )
224+ cefBrowser.get().CloseBrowser()
225+ ELIF CEF_VERSION == 3 :
226+ Debug(" CefBrowserHost.CloseBrowser()" )
227+ GetCefBrowserHost(cefBrowser).get().CloseBrowser()
228+
229+ IF CEF_VERSION == 1 :
230+
231+ def CloseDevTools (self ):
232+
233+ cdef CefRefPtr[CefBrowser] cefBrowser = GetCefBrowserByInnerWindowID(CheckInnerWindowID(self .__innerWindowID))
234+ cefBrowser.get().CloseDevTools()
213235
214- def Find (self , searchID , searchText , forward , matchCase , findNext ):
236+ def Find (self , searchID , searchText , forward , matchCase , findNext ):
215237
216- cdef CefRefPtr[CefBrowser] cefBrowser = GetCefBrowserByInnerWindowID(CheckInnerWindowID(self .__innerWindowID))
238+ cdef CefRefPtr[CefBrowser] cefBrowser = GetCefBrowserByInnerWindowID(CheckInnerWindowID(self .__innerWindowID))
217239
218- cdef CefString cefSearchText
219- PyStringToCefString(searchText, cefSearchText)
240+ cdef CefString cefSearchText
241+ PyStringToCefString(searchText, cefSearchText)
220242
221- ( < CefBrowser * > ( cefBrowser.get()) ).Find(
222- < int > searchID, cefSearchText, < c_bool > bool (forward), < c_bool > bool (matchCase), < c_bool > bool (findNext))
243+ cefBrowser.get().Find(
244+ < int > searchID, cefSearchText, bool (forward), bool (matchCase), bool (findNext))
223245
224246 def GetFocusedFrame (self ):
225247
226248 assert IsCurrentThread(TID_UI), " Browser.GetFocusedFrame() may only be called on the UI thread"
227249 cdef CefRefPtr[CefBrowser] cefBrowser = GetCefBrowserByInnerWindowID(CheckInnerWindowID(self .__innerWindowID))
228- cdef CefRefPtr[CefFrame] cefFrame = ( < CefBrowser * > ( cefBrowser.get()) ).GetFocusedFrame()
250+ cdef CefRefPtr[CefFrame] cefFrame = cefBrowser.get().GetFocusedFrame()
229251
230252 return GetPyFrameByCefFrame(cefFrame)
231253
@@ -236,7 +258,7 @@ class PyBrowser:
236258
237259 cdef CefString cefName
238260 PyStringToCefString(name, cefName)
239- cdef CefRefPtr[CefFrame] cefFrame = ( < CefBrowser * > ( cefBrowser.get()) ).GetFrame(cefName)
261+ cdef CefRefPtr[CefFrame] cefFrame = cefBrowser.get().GetFrame(cefName)
240262
241263 return GetPyFrameByCefFrame(cefFrame) # may return None.
242264
@@ -246,7 +268,7 @@ class PyBrowser:
246268 cdef CefRefPtr[CefBrowser] cefBrowser = GetCefBrowserByInnerWindowID(CheckInnerWindowID(self .__innerWindowID))
247269
248270 cdef c_vector[CefString] cefNames
249- ( < CefBrowser * > ( cefBrowser.get()) ).GetFrameNames(cefNames)
271+ cefBrowser.get().GetFrameNames(cefNames)
250272
251273 names = []
252274 cdef c_vector[CefString].iterator iterator = cefNames.begin()
@@ -261,14 +283,20 @@ class PyBrowser:
261283 def GetMainFrame (self ):
262284
263285 cdef CefRefPtr[CefBrowser] cefBrowser = GetCefBrowserByInnerWindowID(CheckInnerWindowID(self .__innerWindowID))
264- cdef CefRefPtr[CefFrame] cefFrame = ( < CefBrowser * > ( cefBrowser.get()) ).GetMainFrame()
286+ cdef CefRefPtr[CefFrame] cefFrame = cefBrowser.get().GetMainFrame()
265287
266288 return GetPyFrameByCefFrame(cefFrame)
267289
268290 def GetOpenerWindowID (self ):
269291
270292 cdef CefRefPtr[CefBrowser] cefBrowser = GetCefBrowserByInnerWindowID(CheckInnerWindowID(self .__innerWindowID))
271- cdef HWND hwnd = (< CefBrowser* > (cefBrowser.get())).GetOpenerWindowHandle()
293+ cdef HWND hwnd
294+
295+ IF CEF_VERSION == 1 :
296+ hwnd = cefBrowser.get().GetOpenerWindowHandle()
297+ ELIF CEF_VERSION == 3 :
298+ hwnd = GetCefBrowserHost(cefBrowser).get().GetOpenerWindowHandle()
299+
272300 openerID = < int > hwnd
273301
274302 if openerID:
@@ -277,6 +305,12 @@ class PyBrowser:
277305
278306 return None
279307
308+ def GetUserData (self , key ):
309+
310+ if key in self .__userData:
311+ return self .__userData[key]
312+ return None
313+
280314 def GetWindowID (self ):
281315
282316 # TODO: This function may be removed or modified in the future as its acting is confusing at the moment.
@@ -300,30 +334,37 @@ class PyBrowser:
300334
301335 def GetZoomLevel (self ):
302336
303- assert IsCurrentThread(TID_UI), " Browser.GetZoomLevel() may only be called on the UI thread"
337+ IF CEF_VERSION == 1 :
338+ assert IsCurrentThread(TID_UI), " Browser.GetZoomLevel() may only be called on the UI thread"
304339 cdef CefRefPtr[CefBrowser] cefBrowser = GetCefBrowserByInnerWindowID(CheckInnerWindowID(self .__innerWindowID))
305- cdef double zoomLevel = (< CefBrowser* > (cefBrowser.get())).GetZoomLevel()
340+ cdef double zoomLevel
341+ IF CEF_VERSION == 1 :
342+ zoomLevel = cefBrowser.get().GetZoomLevel()
343+ ELIF CEF_VERSION == 3 :
344+ zoomLevel = GetCefBrowserHost(cefBrowser).get().GetZoomLevel()
306345 return zoomLevel
307346
308347 def GoBack (self ):
309348
310349 cdef CefRefPtr[CefBrowser] cefBrowser = GetCefBrowserByInnerWindowID(CheckInnerWindowID(self .__innerWindowID))
311- ( < CefBrowser * > ( cefBrowser.get()) ).GoBack()
350+ cefBrowser.get().GoBack()
312351
313352 def GoForward (self ):
314353
315354 cdef CefRefPtr[CefBrowser] cefBrowser = GetCefBrowserByInnerWindowID(CheckInnerWindowID(self .__innerWindowID))
316- ( < CefBrowser * > ( cefBrowser.get()) ).GoForward()
355+ cefBrowser.get().GoForward()
317356
318357 def HasDocument (self ):
319358
320359 cdef CefRefPtr[CefBrowser] cefBrowser = GetCefBrowserByInnerWindowID(CheckInnerWindowID(self .__innerWindowID))
321- return ( < CefBrowser * > ( cefBrowser.get()) ).HasDocument()
360+ return cefBrowser.get().HasDocument()
322361
323- def HidePopup ( self ) :
362+ IF CEF_VERSION == 1 :
324363
325- cdef CefRefPtr[CefBrowser] cefBrowser = GetCefBrowserByInnerWindowID(CheckInnerWindowID(self .__innerWindowID))
326- (< CefBrowser* > (cefBrowser.get())).HidePopup()
364+ def HidePopup (self ):
365+
366+ cdef CefRefPtr[CefBrowser] cefBrowser = GetCefBrowserByInnerWindowID(CheckInnerWindowID(self .__innerWindowID))
367+ cefBrowser.get().HidePopup()
327368
328369 def IsFullscreen (self ):
329370
@@ -332,54 +373,69 @@ class PyBrowser:
332373 def IsPopup (self ):
333374
334375 cdef CefRefPtr[CefBrowser] cefBrowser = GetCefBrowserByInnerWindowID(CheckInnerWindowID(self .__innerWindowID))
335- return ( < CefBrowser * > ( cefBrowser.get()) ).IsPopup()
376+ return cefBrowser.get().IsPopup()
336377
337- def IsPopupVisible ( self ) :
378+ IF CEF_VERSION == 1 :
338379
339- assert IsCurrentThread(TID_UI), " Browser.IsPopupVisible() may only be called on the UI thread"
340- cdef CefRefPtr[CefBrowser] cefBrowser = GetCefBrowserByInnerWindowID(CheckInnerWindowID(self .__innerWindowID))
341- return (< CefBrowser* > (cefBrowser.get())).IsPopupVisible()
380+ def IsPopupVisible (self ):
342381
343- def IsWindowRenderingDisabled (self ):
382+ assert IsCurrentThread(TID_UI), " Browser.IsPopupVisible() may only be called on the UI thread"
383+ cdef CefRefPtr[CefBrowser] cefBrowser = GetCefBrowserByInnerWindowID(CheckInnerWindowID(self .__innerWindowID))
384+ return cefBrowser.get().IsPopupVisible()
344385
345- cdef CefRefPtr[CefBrowser] cefBrowser = GetCefBrowserByInnerWindowID(CheckInnerWindowID(self .__innerWindowID))
346- return (< CefBrowser* > (cefBrowser.get())).IsWindowRenderingDisabled()
386+ def IsWindowRenderingDisabled (self ):
387+
388+ cdef CefRefPtr[CefBrowser] cefBrowser = GetCefBrowserByInnerWindowID(CheckInnerWindowID(self .__innerWindowID))
389+ return cefBrowser.get().IsWindowRenderingDisabled()
347390
348391 def Reload (self ):
349392
350393 cdef CefRefPtr[CefBrowser] cefBrowser = GetCefBrowserByInnerWindowID(CheckInnerWindowID(self .__innerWindowID))
351- ( < CefBrowser * > ( cefBrowser.get()) ).Reload()
394+ cefBrowser.get().Reload()
352395
353396 def ReloadIgnoreCache (self ):
354397
355398 cdef CefRefPtr[CefBrowser] cefBrowser = GetCefBrowserByInnerWindowID(CheckInnerWindowID(self .__innerWindowID))
356- ( < CefBrowser * > ( cefBrowser.get()) ).ReloadIgnoreCache()
399+ cefBrowser.get().ReloadIgnoreCache()
357400
358401 def SetFocus (self , enable ):
359402
360403 cdef CefRefPtr[CefBrowser] cefBrowser = GetCefBrowserByInnerWindowID(CheckInnerWindowID(self .__innerWindowID))
361- (< CefBrowser* > (cefBrowser.get())).SetFocus(< c_bool> bool (enable))
404+ IF CEF_VERSION == 1 :
405+ cefBrowser.get().SetFocus(bool (enable))
406+ ELIF CEF_VERSION == 3 :
407+ GetCefBrowserHost(cefBrowser).get().SetFocus(bool (enable))
408+
409+ def SetUserData (self , key , value ):
410+
411+ self .__userData[key] = value
362412
363413 def SetZoomLevel (self , zoomLevel ):
364414
365415 cdef CefRefPtr[CefBrowser] cefBrowser = GetCefBrowserByInnerWindowID(CheckInnerWindowID(self .__innerWindowID))
366- (< CefBrowser* > (cefBrowser.get())).SetZoomLevel(< double > float (zoomLevel))
367-
416+ IF CEF_VERSION == 1 :
417+ cefBrowser.get().SetZoomLevel(< double > float (zoomLevel))
418+ ELIF CEF_VERSION == 3 :
419+ GetCefBrowserHost(cefBrowser).get().SetZoomLevel(< double > float (zoomLevel))
368420
369- def ShowDevTools ( self ) :
421+ IF CEF_VERSION == 1 :
370422
371- cdef CefRefPtr[CefBrowser] cefBrowser = GetCefBrowserByInnerWindowID(CheckInnerWindowID(self .__innerWindowID))
372- (< CefBrowser* > (cefBrowser.get())).ShowDevTools()
423+ def ShowDevTools (self ):
424+
425+ cdef CefRefPtr[CefBrowser] cefBrowser = GetCefBrowserByInnerWindowID(CheckInnerWindowID(self .__innerWindowID))
426+ cefBrowser.get().ShowDevTools()
373427
374428 def StopLoad (self ):
375429
376430 cdef CefRefPtr[CefBrowser] cefBrowser = GetCefBrowserByInnerWindowID(CheckInnerWindowID(self .__innerWindowID))
377- ( < CefBrowser * > ( cefBrowser.get()) ).StopLoad()
431+ cefBrowser.get().StopLoad()
378432
379- def StopFinding ( self , clearSelection ) :
433+ IF CEF_VERSION == 1 :
380434
381- cdef CefRefPtr[CefBrowser] cefBrowser = GetCefBrowserByInnerWindowID(CheckInnerWindowID(self .__innerWindowID))
382- (< CefBrowser* > (cefBrowser.get())).StopFinding(< c_bool> bool (clearSelection))
435+ def StopFinding (self , clearSelection ):
436+
437+ cdef CefRefPtr[CefBrowser] cefBrowser = GetCefBrowserByInnerWindowID(CheckInnerWindowID(self .__innerWindowID))
438+ cefBrowser.get().StopFinding(bool (clearSelection))
383439
384440 def ToggleFullscreen (self ):
385441
0 commit comments