Repository navigation
Expand file tree
/
Copy pathcontent_filter.pyx
More file actions
84 lines (72 loc) · 3.1 KB
/
Copy pathcontent_filter.pyx
File metadata and controls
84 lines (72 loc) · 3.1 KB
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
# Copyright (c) 2012-2013 CEF Python Authors. All rights reserved.
# License: New BSD License.
# Website: http://code.google.com/p/cefpython/
cdef object g_contentFilters = weakref.WeakValueDictionary()
cdef int g_contentFilterMaxId = 0
# ------------------------------------------------------------------------------
# PyContentFilter
# ------------------------------------------------------------------------------
cdef PyContentFilter GetPyContentFilter(int contentFilterId):
global g_contentFilters
if contentFilterId in g_contentFilters:
return g_contentFilters[contentFilterId]
return None
cdef class PyContentFilter:
cdef object __weakref__ # see g_contentFilters
cdef int contentFilterId
cdef CefRefPtr[CefContentFilter] cefContentFilter
cdef object handler
def __init__(self):
global g_contentFilterMaxId
global g_contentFilters
g_contentFilterMaxId += 1
self.contentFilterId = g_contentFilterMaxId
g_contentFilters[self.contentFilterId] = self
self.cefContentFilter = (
<CefRefPtr[CefContentFilter]?>new ContentFilterHandler(
self.contentFilterId))
def SetHandler(self, handler):
self.handler = handler
def HasHandler(self):
return bool(self.handler)
cdef object GetCallback(self, str funcName):
if not self.handler:
return None
if hasattr(self.handler, funcName) and (
callable(getattr(self.handler, funcName))):
return getattr(self.handler, funcName)
cdef CefRefPtr[CefContentFilter] GetCefContentFilter(self) except *:
return self.cefContentFilter
# ------------------------------------------------------------------------------
# ContentFilterHandler
# ------------------------------------------------------------------------------
cdef public void ContentFilterHandler_ProcessData(
int contentFilterId,
const void* data,
int data_size,
CefRefPtr[CefStreamReader]& substitute_data
) except * with gil:
cdef PyContentFilter contentFilter = GetPyContentFilter(contentFilterId)
cdef object callback
cdef PyStreamReader pyStreamReader
if contentFilter:
callback = contentFilter.GetCallback("ProcessData")
if callback:
pyStreamReader = PyStreamReader()
callback(VoidPtrToStr(data, data_size), pyStreamReader)
if pyStreamReader.HasCefStreamReader():
(&substitute_data)[0] = pyStreamReader.GetCefStreamReader()
cdef public void ContentFilterHandler_Drain(
int contentFilterId,
CefRefPtr[CefStreamReader]& remainder
) except * with gil:
cdef PyContentFilter contentFilter = GetPyContentFilter(contentFilterId)
cdef object callback
cdef PyStreamReader pyStreamReader
if contentFilter:
callback = contentFilter.GetCallback("Drain")
if callback:
pyStreamReader = PyStreamReader()
callback(pyStreamReader)
if pyStreamReader.HasCefStreamReader():
(&remainder)[0] = pyStreamReader.GetCefStreamReader()