FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
cefpython/src/python_callback.pyx at cefpython49-winxp · git-thinh/cefpython · GitHub
git-thinh
cefpython
Repository navigation
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
cefpython
/
src
/
python_callback.pyx
Copy path
More file actions
More file actions
Latest commit
History
History
History
95 lines (88 loc) · 3.62 KB
Breadcrumbs
cefpython
/
src
/
python_callback.pyx
Copy path
File metadata and controls
95 lines (88 loc) · 3.62 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#
Copyright (c) 2013 CEF Python, see the Authors file.
#
All rights reserved. Licensed under BSD 3-clause license.
#
Project website: https://github.com/cztomczak/cefpython
include
"
cefpython.pyx
"
cdef
int
g_pythonCallbackMaxId
=
0
cdef
dict
g_pythonCallbacks
=
{}
#
TODO: send callbackId using CefBinaryNamedValue, see:
#
http://www.magpcss.org/ceforum/viewtopic.php?f=6&t=10881
cdef
struct
PythonCallback:
int
callbackId
char
uniqueCefBinaryValueSize[
16
]
cdef CefRefPtr[CefBinaryValue] PutPythonCallback(
object
browserId,
object
frameId,
object
function
)
except
*
:
global
g_pythonCallbacks
global
g_pythonCallbackMaxId
if
not
browserId:
raise
Exception
(
"
PutPythonCallback() FAILED: browserId is empty
"
)
if
not
frameId:
raise
Exception
(
"
PutPythonCallback() FAILED: frameId is empty
"
)
cdef PythonCallback pyCallback
g_pythonCallbackMaxId
+=
1
pyCallback.callbackId
=
g_pythonCallbackMaxId
cdef CefRefPtr[CefBinaryValue] binaryValue
=
CefBinaryValue_Create(
&
pyCallback, sizeof(pyCallback))
#
[0] browserId, [1] frameId, [2] function.
g_pythonCallbacks[g_pythonCallbackMaxId]
=
(browserId, frameId, function)
return
binaryValue
cdef public
void
RemovePythonCallbacksForFrame(
int
frameId
)
except
*
with
gil:
#
Cannot remove elements from g_pythonCallbacks (dict) while iterating.
cdef
list
toRemove
=
[]
try
:
global
g_pythonCallbacks
for
callbackId, value
in
g_pythonCallbacks.iteritems():
if
value[
1
]
==
frameId:
toRemove.append(callbackId)
for
callbackId
in
toRemove:
del
g_pythonCallbacks[callbackId]
Debug(
"
RemovePythonCallbacksForFrame():
"
\
"
removed python callback, callbackId =
%s
"
\
%
callbackId)
except
:
(exc_type, exc_value, exc_trace)
=
sys.exc_info()
sys.excepthook(exc_type, exc_value, exc_trace)
cdef
void
RemovePythonCallbacksForBrowser(
int
browserId)
except
*
:
cdef
list
toRemove
=
[]
global
g_pythonCallbacks
for
callbackId, value
in
g_pythonCallbacks.iteritems():
if
value[
0
]
==
browserId:
toRemove.append(callbackId)
for
callbackId
in
toRemove:
del
g_pythonCallbacks[callbackId]
Debug(
"
RemovePythonCallbacksForBrowser():
"
\
"
removed python callback, callbackId =
%s
"
\
%
callbackId)
cdef public cpp_bool ExecutePythonCallback(
CefRefPtr[CefBrowser] cefBrowser,
int
callbackId,
CefRefPtr[CefListValue] cefFunctionArguments,
)
except
*
with
gil:
cdef
object
function
cdef
list
functionArguments
cdef
object
returnValue
try
:
global
g_pythonCallbacks
if
callbackId
in
g_pythonCallbacks:
#
[0] browserId, [1] frameId, [2] function.
function
=
g_pythonCallbacks[callbackId][
2
]
functionArguments
=
CefListValueToPyList(
cefBrowser, cefFunctionArguments)
returnValue
=
function(
*
functionArguments)
if
returnValue
is
not
None
:
Debug(
"
ExecutePythonCallback() WARNING: function returned
"
\
"
value, but returning values to javascript is not
"
\
"
supported, function name =
%s
"
%
function.
__name__
)
return
True
else
:
Debug(
"
ExecutePythonCallback() FAILED: callback not found,
"
\
"
callbackId =
%s
"
%
callbackId)
return
False
except
:
(exc_type, exc_value, exc_trace)
=
sys.exc_info()
sys.excepthook(exc_type, exc_value, exc_trace)
Back
|
FazBrowse Home
|
New Git URL