Skip to content

Commit 582efc8

Browse files
committed
Changes:
- DisplayHandler implemented. - Popups have window titles set, also icons are inherited from parent window.
1 parent 1be7046 commit 582efc8

File tree

15 files changed

+345
-60
lines changed

15 files changed

+345
-60
lines changed

browser.pyx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,10 @@ class PyBrowser:
9090
allowedHandlers += ["OnBeforeBrowse", "OnBeforeResourceLoad", "OnResourceRedirect", "OnResourceResponse",
9191
"OnProtocolExecution", "GetDownloadHandler", "GetAuthCredentials", "GetCookieManager"]
9292

93+
# CefDisplayHandler.
94+
allowedHandlers += ["OnAddressChange", "OnConsoleMessage", "OnContentsSizeChange", "OnNavStateChange",
95+
"OnStatusMessage", "OnTitleChange", "OnTooltip"]
96+
9397
for key in handlers:
9498
handler = handlers[key]
9599
if type(handler) == tuple and len(handler) != 3:
@@ -104,8 +108,8 @@ class PyBrowser:
104108
# Internal.
105109
def IsPopup(self):
106110

107-
# TODO: implement LifeSpanHandler.OnBeforePopup() to detect popups.
108-
return self.__topWindowID == -1
111+
cdef CefRefPtr[CefBrowser] cefBrowser = GetCefBrowserByInnerWindowID(CheckInnerWindowID(self.__innerWindowID))
112+
return (<CefBrowser*>(cefBrowser.get())).IsPopup()
109113

110114
# Internal.
111115
def GetJavascriptBindings(self):
@@ -353,9 +357,6 @@ class PyBrowser:
353357
cdef CefRefPtr[CefBrowser] cefBrowser = GetCefBrowserByInnerWindowID(CheckInnerWindowID(self.__innerWindowID))
354358
(<CefBrowser*>(cefBrowser.get())).StopLoad()
355359

356-
def IsPopup(self):
357-
358-
pass
359360

360361

361362

cefexample/cefadvanced.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<!doctype html>
22
<html>
33
<head>
4+
<title>CefAdvanced</title>
45
<style>
56
body { font: 13px Arial; }
67
pre { background: #ddd; }
@@ -142,6 +143,7 @@ <h3>Moving and resizing window</h3>
142143

143144
<h3>Popups</h3>
144145

146+
<a href="javascript:window.open('cefsimple.html', '', 'width=600,height=400')">window.open('cefsimple.html')</a><br>
145147
<a href="javascript:window.open('cefadvanced.html', '', 'width=600,height=400')">window.open('cefadvanced.html')</a>
146148

147149
<h3>Overwriting window.alert()</h3>

cefexample/cefadvanced.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ def CefAdvanced():
5252
browserSettings["file_access_from_file_urls_allowed"] = True
5353

5454
handlers = dict()
55+
# Handler function may be a tuple. Tuple is currently allowed only for LoadHandler.
56+
# tuple[0] - the handler to call for the main frame.
57+
# tuple[1] - the handler to call for the inner frames (not in popups).
58+
# tuple[2] - the handler to call for the popups (only main frame).
5559
handlers["OnLoadStart"] = (OnLoadStart, None, OnLoadStart) # Document is ready. Developer tools window is also a popup, this handler may be called.
5660
handlers["OnLoadError"] = OnLoadError
5761
handlers["OnKeyEvent"] = (OnKeyEvent, None, OnKeyEvent)

cefexample/cefsimple.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<!doctype html>
22
<html>
33
<head>
4+
<title>CefSimple</title>
45
<style>
56
body { font: 13px Arial; }
67
</style>

cefpython.pyx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ include "v8utils.pyx"
4747
include "javascriptcallback.pyx"
4848
include "pythoncallback.pyx"
4949
include "requesthandler.pyx"
50+
include "displayhandler.pyx"
5051

5152
# Client handler.
5253
cdef CefRefPtr[ClientHandler] __clientHandler = <CefRefPtr[ClientHandler]>new ClientHandler()

clienthandler/clienthandler.cpp

Lines changed: 71 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,12 @@
11
#include "clienthandler.h"
2+
#include <stdio.h>
23

34
// Cython doesn't know nothing about 'const' so we need to remove it,
45
// otherwise you get compile error.
56

6-
bool ClientHandler::OnBeforeResourceLoad(
7-
CefRefPtr<CefBrowser> browser,
8-
CefRefPtr<CefRequest> request,
9-
CefString& redirectUrl,
10-
CefRefPtr<CefStreamReader>& resourceStream,
11-
CefRefPtr<CefResponse> response,
12-
int loadFlags)
13-
{
14-
REQUIRE_IO_THREAD();
15-
return RequestHandler_OnBeforeResourceLoad(browser, request, redirectUrl, resourceStream, response, loadFlags);
16-
}
7+
//
8+
// CefRequestHandler
9+
//
1710

1811
bool ClientHandler::OnBeforeBrowse(
1912
CefRefPtr<CefBrowser> browser,
@@ -26,6 +19,18 @@ bool ClientHandler::OnBeforeBrowse(
2619
return RequestHandler_OnBeforeBrowse(browser, frame, request, navType, isRedirect);
2720
}
2821

22+
bool ClientHandler::OnBeforeResourceLoad(
23+
CefRefPtr<CefBrowser> browser,
24+
CefRefPtr<CefRequest> request,
25+
CefString& redirectUrl,
26+
CefRefPtr<CefStreamReader>& resourceStream,
27+
CefRefPtr<CefResponse> response,
28+
int loadFlags)
29+
{
30+
REQUIRE_IO_THREAD();
31+
return RequestHandler_OnBeforeResourceLoad(browser, request, redirectUrl, resourceStream, response, loadFlags);
32+
}
33+
2934
void ClientHandler::OnResourceRedirect(
3035
CefRefPtr<CefBrowser> browser,
3136
const CefString& old_url,
@@ -87,3 +92,58 @@ CefRefPtr<CefCookieManager> ClientHandler::GetCookieManager(
8792
REQUIRE_IO_THREAD();
8893
return RequestHandler_GetCookieManager(browser, const_cast<CefString&>(main_url));
8994
}
95+
96+
//
97+
// CefDisplayHandler
98+
//
99+
100+
void ClientHandler::OnAddressChange(CefRefPtr<CefBrowser> browser,
101+
CefRefPtr<CefFrame> frame,
102+
const CefString& url)
103+
{
104+
DisplayHandler_OnAddressChange(browser, frame, const_cast<CefString&>(url));
105+
}
106+
107+
bool ClientHandler::OnConsoleMessage(CefRefPtr<CefBrowser> browser,
108+
const CefString& message,
109+
const CefString& source,
110+
int line)
111+
{
112+
return DisplayHandler_OnConsoleMessage(browser, const_cast<CefString&>(message), const_cast<CefString&>(source), line);
113+
}
114+
115+
void ClientHandler::OnContentsSizeChange(CefRefPtr<CefBrowser> browser,
116+
CefRefPtr<CefFrame> frame,
117+
int width,
118+
int height)
119+
{
120+
DisplayHandler_OnContentsSizeChange(browser, frame, width, height);
121+
}
122+
123+
void ClientHandler::OnNavStateChange(CefRefPtr<CefBrowser> browser,
124+
bool canGoBack,
125+
bool canGoForward)
126+
{
127+
DisplayHandler_OnNavStateChange(browser, canGoBack, canGoForward);
128+
}
129+
130+
void ClientHandler::OnStatusMessage(CefRefPtr<CefBrowser> browser,
131+
const CefString& value,
132+
StatusType type)
133+
{
134+
DisplayHandler_OnStatusMessage(browser, const_cast<CefString&>(value), type);
135+
}
136+
137+
138+
void ClientHandler::OnTitleChange(CefRefPtr<CefBrowser> browser,
139+
const CefString& title)
140+
{
141+
DisplayHandler_OnTitleChange(browser, const_cast<CefString&>(title));
142+
}
143+
144+
bool ClientHandler::OnTooltip(CefRefPtr<CefBrowser> browser,
145+
CefString& text)
146+
{
147+
return DisplayHandler_OnTooltip(browser, text);
148+
}
149+

clienthandler/clienthandler.h

Lines changed: 52 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,10 @@ class ClientHandler : public CefClient,
5959
public CefLoadHandler,
6060
public CefKeyboardHandler,
6161
public CefV8ContextHandler,
62-
public CefRequestHandler
62+
public CefRequestHandler,
63+
public CefDisplayHandler
6364
/*
6465
public CefLifeSpanHandler,
65-
public CefDisplayHandler,
6666
public CefFocusHandler,
6767
public CefPrintHandler,
6868
public CefDragHandler,
@@ -74,24 +74,30 @@ class ClientHandler : public CefClient,
7474
ClientHandler(){}
7575
virtual ~ClientHandler(){}
7676

77-
// CefClient methods
78-
virtual CefRefPtr<CefLifeSpanHandler> GetLifeSpanHandler() OVERRIDE
79-
{ return NULL; }
77+
// Implemented handlers:
8078

8179
virtual CefRefPtr<CefLoadHandler> GetLoadHandler() OVERRIDE
82-
{ return this; }
80+
{ return this; }
8381

8482
virtual CefRefPtr<CefRequestHandler> GetRequestHandler() OVERRIDE
85-
{ return this; }
83+
{ return this; }
8684

8785
virtual CefRefPtr<CefDisplayHandler> GetDisplayHandler() OVERRIDE
88-
{ return NULL; }
86+
{ return this; }
8987

88+
virtual CefRefPtr<CefKeyboardHandler> GetKeyboardHandler() OVERRIDE
89+
{ return this; }
90+
91+
virtual CefRefPtr<CefV8ContextHandler> GetV8ContextHandler() OVERRIDE
92+
{ return this; }
93+
94+
// Still NOT implemented handlers:
95+
9096
virtual CefRefPtr<CefFocusHandler> GetFocusHandler() OVERRIDE
9197
{ return NULL; }
92-
93-
virtual CefRefPtr<CefKeyboardHandler> GetKeyboardHandler() OVERRIDE
94-
{ return this; }
98+
99+
virtual CefRefPtr<CefLifeSpanHandler> GetLifeSpanHandler() OVERRIDE
100+
{ return NULL; }
95101

96102
virtual CefRefPtr<CefMenuHandler> GetMenuHandler() OVERRIDE
97103
{ return NULL; }
@@ -106,10 +112,7 @@ class ClientHandler : public CefClient,
106112
{ return NULL; }
107113

108114
virtual CefRefPtr<CefJSDialogHandler> GetJSDialogHandler() OVERRIDE
109-
{ return NULL; }
110-
111-
virtual CefRefPtr<CefV8ContextHandler> GetV8ContextHandler() OVERRIDE
112-
{ return this; }
115+
{ return NULL; }
113116

114117
virtual CefRefPtr<CefRenderHandler> GetRenderHandler() OVERRIDE
115118
{ return NULL; }
@@ -219,7 +222,6 @@ class ClientHandler : public CefClient,
219222
}
220223

221224
// OnContextReleased.
222-
223225
// Not implementing.
224226

225227
//
@@ -277,6 +279,40 @@ class ClientHandler : public CefClient,
277279
virtual CefRefPtr<CefCookieManager> GetCookieManager(
278280
CefRefPtr<CefBrowser> browser,
279281
const CefString& main_url) OVERRIDE;
282+
283+
//
284+
// CefDisplayHandler
285+
//
286+
287+
virtual void OnAddressChange(CefRefPtr<CefBrowser> browser,
288+
CefRefPtr<CefFrame> frame,
289+
const CefString& url) OVERRIDE;
290+
291+
virtual bool OnConsoleMessage(CefRefPtr<CefBrowser> browser,
292+
const CefString& message,
293+
const CefString& source,
294+
int line) OVERRIDE;
295+
296+
virtual void OnContentsSizeChange(CefRefPtr<CefBrowser> browser,
297+
CefRefPtr<CefFrame> frame,
298+
int width,
299+
int height) OVERRIDE;
300+
301+
virtual void OnNavStateChange(CefRefPtr<CefBrowser> browser,
302+
bool canGoBack,
303+
bool canGoForward) OVERRIDE;
304+
305+
virtual void OnStatusMessage(CefRefPtr<CefBrowser> browser,
306+
const CefString& value,
307+
StatusType type) OVERRIDE;
308+
309+
virtual void OnTitleChange(CefRefPtr<CefBrowser> browser,
310+
const CefString& title) OVERRIDE;
311+
312+
virtual bool OnTooltip(CefRefPtr<CefBrowser> browser,
313+
CefString& text) OVERRIDE;
314+
315+
280316

281317
protected:
282318

0 commit comments

Comments
 (0)