Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Latest commit

 

History

History
History
91 lines (83 loc) · 3.22 KB

File metadata and controls

91 lines (83 loc) · 3.22 KB
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
# 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
# [callbackId] = (browserId, frameId, func)
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 func
) 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))
g_pythonCallbacks[g_pythonCallbackMaxId] = (browserId, frameId, func)
return binaryValue
cdef public void RemovePythonCallbacksForFrame(
object 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] cefFuncArgs,
) except * with gil:
cdef object func
cdef list funcArgs
cdef object returnValue
try:
global g_pythonCallbacks
if callbackId in g_pythonCallbacks:
func = g_pythonCallbacks[callbackId][2]
funcArgs = CefListValueToPyList(
cefBrowser, cefFuncArgs)
func(*funcArgs)
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)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.