Skip to content

Commit 1af1a98

Browse files
CzarekCzarek
authored andcommitted
Added new methods to RequestHandler: OnBeforeBrowse(),
OnBeforeResourceLoad(). See request handler tests in linux/wxpython.py script.
1 parent 061ddbc commit 1af1a98

4 files changed

Lines changed: 95 additions & 17 deletions

File tree

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<!doctype html>
2+
<html>
3+
<head>
4+
<meta charset=utf-8>
5+
<title>CefSimple (utf-8: ąś)</title>
6+
<style>
7+
body { font: 13px Segoe UI, Arial; line-height: 1.4em; }
8+
pre { background: #ddd; font: 12px Consolas, Courier New; }
9+
</style>
10+
</head>
11+
<body>
12+
13+
Use mouse context menu to go Back/Forward in history navigation.
14+
15+
<h3>Google Search</h3>
16+
<a href="http://www.google.com/">http://www.google.com/</a>
17+
18+
<h3>User agent</h3>
19+
<script>document.write(navigator.userAgent)</script>
20+
21+
<h3>Popup</h3>
22+
<a href="javascript:window.open('cefsimple.html')">
23+
window.open('cefsimple.html')</a>
24+
25+
<h3>RequestHandler tests</h3>
26+
27+
<p>See messages in the console.</p>
28+
29+
OnBeforeBrowse() - navigate to see message:
30+
<a href="wxpython.html">wxpython.html</a>
31+
<br>
32+
33+
OnBeforeResourceLoad() - try loading nonexistent css file locally:
34+
<a href="javascript:LoadCssFile('nonexistent.css')">
35+
LoadCssFile('nonexistent.css')</a>
36+
<script>
37+
function LoadCssFile(url) {
38+
var cssFile=document.createElement("link")
39+
cssFile.setAttribute("rel", "stylesheet")
40+
cssFile.setAttribute("type", "text/css")
41+
cssFile.setAttribute("href", url)
42+
document.getElementsByTagName("head")[0].appendChild(cssFile)
43+
}
44+
</script>
45+
<br>
46+
47+
OnResourceRedirect() - try loading this url:
48+
<a href="http://tinyurl.com/google404redirect">
49+
http://tinyurl.com/google404redirect</a>
50+
<br>
51+
52+
OnResourceResponse() - try loading nonexistent css file via http:
53+
<a href="javascript:LoadCssFile('http://www.google.com/404.css')">
54+
LoadCssFile('http://www.google.com/404.css')</a>
55+
56+
<br><br><br><br><br><br><br><br><br><br><br>
57+
<br><br><br><br><br><br><br><br><br><br><br>
58+
<br><br><br><br><br><br><br><br><br><br><br>
59+
60+
</body>
61+
</html>

cefpython/cef1/linux/binaries_64bit/wxpython.py

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ class MainFrame(wx.Frame):
7676

7777
def __init__(self):
7878
wx.Frame.__init__(self, parent=None, id=wx.ID_ANY,
79-
title='wxPython example', size=(600,400))
79+
title='wxPython example', size=(800,600))
8080
self.CreateMenu()
8181

8282
windowInfo = cefpython.WindowInfo()
@@ -88,7 +88,9 @@ def __init__(self):
8888
# Flash will crash app in CEF 1 on Linux, setting
8989
# plugins_disabled to True.
9090
browserSettings={"plugins_disabled": True},
91-
navigateUrl="file://"+GetApplicationPath("cefsimple.html"))
91+
navigateUrl="file://"+GetApplicationPath("wxpython.html"))
92+
93+
self.browser.SetClientHandler(ClientHandler())
9294

9395
self.Bind(wx.EVT_CLOSE, self.OnClose)
9496
if USE_EVT_IDLE:
@@ -115,6 +117,29 @@ def OnIdle(self, event):
115117
print("wxpython.py: OnIdle() %d" % self.idleCount)
116118
cefpython.MessageLoopWork()
117119

120+
class ClientHandler:
121+
122+
# Request handler, see documentation at:
123+
# https://code.google.com/p/cefpython/wiki/RequestHandler
124+
125+
def OnBeforeBrowse(self, browser, frame, request, navType, isRedirect):
126+
# frame.GetUrl() returns current url
127+
# request.GetUrl() returns new url
128+
# Return true to cancel the navigation or false to allow
129+
# the navigation to proceed.
130+
print("wxpython.py: OnBeforeBrowse()")
131+
132+
def OnBeforeResourceLoad(self, browser, request, redirectUrl,
133+
resourceStream, response, loadFlags):
134+
print("wxpython.py: OnBeforeResourceLoad()")
135+
136+
def OnResourceRedirect(self, browser, oldUrl, newUrl):
137+
print("wxpython.py: OnResourceRedirect(): oldUrl: %s, newUrl: %s" % (
138+
oldUrl, newUrl[0]))
139+
140+
def OnResourceResponse(self, browser, url, response, contentFilter):
141+
print("wxpython.py: OnResourceResponse()")
142+
118143
class MyApp(wx.App):
119144
timer = None
120145
timerID = 1

cefpython/request_handler.pyx

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,6 @@ cdef public cpp_bool RequestHandler_OnBeforeBrowse(
1717
cef_types.cef_handler_navtype_t navType,
1818
cpp_bool isRedirect
1919
) except * with gil:
20-
# TODO: not yet implemented.
21-
return False
22-
2320
cdef PyBrowser pyBrowser
2421
cdef PyFrame pyFrame
2522
# cdef PyRequest pyRequest
@@ -46,26 +43,23 @@ cdef public cpp_bool RequestHandler_OnBeforeResourceLoad(
4643
CefRefPtr[CefResponse] cefResponse,
4744
int loadFlags
4845
) except * with gil:
49-
# TODO: not yet implemented.
50-
return False
51-
5246
cdef PyBrowser pyBrowser
5347
# cdef PyRequest pyRequest
5448
cdef list pyRedirectUrl
5549
# cdef PyResourceStream pyResourceStream
56-
# cdef PyResponse pyResponse
50+
cdef PyResponse pyResponse
5751
cdef object callback
5852
cdef py_bool ret
5953
try:
6054
pyBrowser = GetPyBrowser(cefBrowser)
6155
pyRequest = None
6256
pyRedirectUrl = [""]
6357
pyResourceStream = None
64-
pyResponse = None
58+
pyResponse = CreatePyResponse(cefResponse)
6559
callback = pyBrowser.GetClientCallback("OnBeforeResourceLoad")
6660
if callback:
67-
ret = callback(
68-
pyBrowser, pyRequest, pyRedirectUrl, pyResourceStream, pyResponse)
61+
ret = callback(pyBrowser, pyRequest, pyRedirectUrl,
62+
pyResourceStream, pyResponse, loadFlags)
6963
assert type(pyRedirectUrl) == list
7064
assert type(pyRedirectUrl[0]) == str
7165
if pyRedirectUrl[0]:
@@ -82,11 +76,9 @@ cdef public void RequestHandler_OnResourceRedirect(
8276
CefString& cefOldUrl,
8377
CefString& cefNewUrl
8478
) except * with gil:
85-
# TODO: needs testing.
8679
cdef PyBrowser pyBrowser
8780
cdef str pyOldUrl
88-
# [""] pass by reference (out).
89-
cdef list pyNewUrl
81+
cdef list pyNewUrl # [""] pass by reference (out).
9082
cdef object callback
9183
try:
9284
pyBrowser = GetPyBrowser(cefBrowser)
@@ -109,7 +101,7 @@ cdef public void RequestHandler_OnResourceResponse(
109101
) except * with gil:
110102
cdef PyBrowser pyBrowser
111103
cdef str pyUrl
112-
# cdef PyResponse pyResponse
104+
cdef PyResponse pyResponse
113105
# cdef PyContentFilter pyContentFilter
114106
cdef object callback
115107
try:

cefpython/response.pyx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# License: New BSD License.
33
# Website: http://code.google.com/p/cefpython/
44

5-
cdef object CreatePyResponse(CefRefPtr[CefResponse] cefResponse):
5+
cdef PyResponse CreatePyResponse(CefRefPtr[CefResponse] cefResponse):
66
cdef PyResponse pyResponse = PyResponse()
77
pyResponse.cefResponse = cefResponse
88
return pyResponse

0 commit comments

Comments
 (0)