Skip to content

Commit dddbd6e

Browse files
committed
Added Developer Tools support (Issue 81). See Browser.ShowDevTools and
ApplicationSettings.remote_debugging_port. Updated the wxpython example. Added F12 key to open devtools.
1 parent 7406ba9 commit dddbd6e

8 files changed

Lines changed: 88 additions & 5 deletions

File tree

cefpython/browser.pyx

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -491,10 +491,18 @@ cdef class PyBrowser:
491491
ELIF CEF_VERSION == 3:
492492
self.GetCefBrowserHost().get().SetZoomLevel(zoomLevel)
493493

494-
IF CEF_VERSION == 1:
495-
496-
cpdef py_void ShowDevTools(self):
497-
self.GetCefBrowser().get().ShowDevTools()
494+
cpdef py_void ShowDevTools(self):
495+
cdef CefString cefUrl = self.GetCefBrowserHost().get().GetDevToolsURL(\
496+
True)
497+
cdef py_string url = CefToPyString(cefUrl)
498+
# Example url returned:
499+
# | http://localhost:54008/devtools/devtools.html?ws=localhost:54008
500+
# | /devtools/page/1538ed984a2a4a90e5ed941c7d142a12
501+
# Let's replace "localhost" with "127.0.0.1", using the ip address
502+
# is more reliable.
503+
url = url.replace("localhost:", "127.0.0.1:")
504+
jsCode = ("window.open('%s');" % url)
505+
self.GetMainFrame().ExecuteJavascript(jsCode)
498506

499507
cpdef py_void StopLoad(self):
500508
self.GetCefBrowser().get().StopLoad()

cefpython/cef3/linux/binaries_32bit/wxpython.html

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ <h2>Table of contents</h2>
3737
<li><a href="#user-agent">User agent</a></li>
3838
<li><a href="#popups">Popups</a></li>
3939
<li><a href="#html5-video">HTML 5 video</a></li>
40+
<li><a href="#developer-tools">Developer Tools</a></li>
4041
<li><a href="#downloads">Downloads</a></li>
4142
<li><a href="#browser-object">Browser object</a></li>
4243
<li><a href="#frame-object">Frame object</a></li>
@@ -117,6 +118,22 @@ <h2>HTML5 video and accelerated content</h2>
117118
<a href="http://www.webkit.org/blog-files/3d-transforms/poster-circle.html">
118119
Accelerated layers</a><br>
119120

121+
<!-- ********************************************************************** -->
122+
<!-- Developer Tools -->
123+
<!-- ********************************************************************** -->
124+
125+
<a name="developer-tools"></a>
126+
<h2>Developer Tools</h2>
127+
128+
You can open devtools popup window in a few different ways:
129+
<ol>
130+
<li>Call Browser.ShowDevTools() method:
131+
<a href="javascript:external.ShowDevTools()">
132+
external.ShowDevTools()</a></li>
133+
<li>Through mouse context menu</li>
134+
<li>Through F12 key which is handled in KeyboardHandler.OnKeyEvent</li>
135+
</ol>
136+
120137
<!-- ********************************************************************** -->
121138
<!-- Downloads -->
122139
<!-- ********************************************************************** -->

cefpython/cef3/linux/binaries_32bit/wxpython.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,10 @@ def GetText(self):
246246
self.stringVisitor = StringVisitor()
247247
self.mainBrowser.GetMainFrame().GetText(self.stringVisitor)
248248

249+
def ShowDevTools(self):
250+
print("[wxpython.py] external.ShowDevTools called")
251+
self.mainBrowser.ShowDevTools()
252+
249253
# -------------------------------------------------------------------------
250254
# Cookies
251255
# -------------------------------------------------------------------------
@@ -396,6 +400,12 @@ def OnKeyEvent(self, browser, event, eventHandle):
396400
print("[wxpython.py] Esc pressed, calling browser.StopLoad()")
397401
browser.StopLoad()
398402
return True
403+
# F12
404+
if event["native_key_code"] == 96:
405+
print("[wxpython.py] F12 pressed, calling"\
406+
" browser.ShowDevTools()")
407+
browser.ShowDevTools()
408+
return True
399409
elif platform.system() == "Windows":
400410
# F5 todo
401411
# Escape todo
@@ -692,6 +702,10 @@ def GetSources():
692702
# Downloads are handled automatically. A default SaveAs file
693703
# dialog provided by OS will be displayed.
694704
"downloads_enabled": True,
705+
# Remote debugging port, required for Developer Tools support.
706+
# A value of 0 will generate a random port. To disable devtools
707+
# support set it to -1.
708+
"remote_debugging_port": 0,
695709
}
696710

697711
# Browser settings. You may have different settings for each

cefpython/cef3/linux/binaries_64bit/wxpython.html

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ <h2>Table of contents</h2>
3737
<li><a href="#user-agent">User agent</a></li>
3838
<li><a href="#popups">Popups</a></li>
3939
<li><a href="#html5-video">HTML 5 video</a></li>
40+
<li><a href="#developer-tools">Developer Tools</a></li>
4041
<li><a href="#downloads">Downloads</a></li>
4142
<li><a href="#browser-object">Browser object</a></li>
4243
<li><a href="#frame-object">Frame object</a></li>
@@ -117,6 +118,22 @@ <h2>HTML5 video and accelerated content</h2>
117118
<a href="http://www.webkit.org/blog-files/3d-transforms/poster-circle.html">
118119
Accelerated layers</a><br>
119120

121+
<!-- ********************************************************************** -->
122+
<!-- Developer Tools -->
123+
<!-- ********************************************************************** -->
124+
125+
<a name="developer-tools"></a>
126+
<h2>Developer Tools</h2>
127+
128+
You can open devtools popup window in a few different ways:
129+
<ol>
130+
<li>Call Browser.ShowDevTools() method:
131+
<a href="javascript:external.ShowDevTools()">
132+
external.ShowDevTools()</a></li>
133+
<li>Through mouse context menu</li>
134+
<li>Through F12 key which is handled in KeyboardHandler.OnKeyEvent</li>
135+
</ol>
136+
120137
<!-- ********************************************************************** -->
121138
<!-- Downloads -->
122139
<!-- ********************************************************************** -->

cefpython/cef3/linux/binaries_64bit/wxpython.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,10 @@ def GetText(self):
246246
self.stringVisitor = StringVisitor()
247247
self.mainBrowser.GetMainFrame().GetText(self.stringVisitor)
248248

249+
def ShowDevTools(self):
250+
print("[wxpython.py] external.ShowDevTools called")
251+
self.mainBrowser.ShowDevTools()
252+
249253
# -------------------------------------------------------------------------
250254
# Cookies
251255
# -------------------------------------------------------------------------
@@ -396,6 +400,12 @@ def OnKeyEvent(self, browser, event, eventHandle):
396400
print("[wxpython.py] Esc pressed, calling browser.StopLoad()")
397401
browser.StopLoad()
398402
return True
403+
# F12
404+
if event["native_key_code"] == 96:
405+
print("[wxpython.py] F12 pressed, calling"\
406+
" browser.ShowDevTools()")
407+
browser.ShowDevTools()
408+
return True
399409
elif platform.system() == "Windows":
400410
# F5 todo
401411
# Escape todo
@@ -692,6 +702,10 @@ def GetSources():
692702
# Downloads are handled automatically. A default SaveAs file
693703
# dialog provided by OS will be displayed.
694704
"downloads_enabled": True,
705+
# Remote debugging port, required for Developer Tools support.
706+
# A value of 0 will generate a random port. To disable devtools
707+
# support set it to -1.
708+
"remote_debugging_port": 0,
695709
}
696710

697711
# Browser settings. You may have different settings for each

cefpython/cefpython.pyx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,18 @@ def Initialize(applicationSettings=None, commandLineSwitches=None):
237237
applicationSettings["unique_request_context_per_browser"] = False
238238
if "downloads_enabled" not in applicationSettings:
239239
applicationSettings["downloads_enabled"] = True
240+
if "remote_debugging_port" not in applicationSettings:
241+
applicationSettings["remote_debugging_port"] = 0
242+
243+
# Remote debugging port. If value is 0 we will generate a random
244+
# port. To disable remote debugging set value to -1.
245+
if applicationSettings["remote_debugging_port"] == 0:
246+
# Generate a random port.
247+
applicationSettings["remote_debugging_port"] =\
248+
random.randint(49152, 65535)
249+
elif applicationSettings["remote_debugging_port"] == -1:
250+
# Disable remote debugging
251+
applicationSettings["remote_debugging_port"] = 0
240252

241253
# CEF options - default values.
242254
if not "multi_threaded_message_loop" in applicationSettings:

cefpython/cython_includes/cef_browser.pxd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ cdef extern from "include/cef_browser.h":
9999
double GetZoomLevel()
100100
void SetZoomLevel(double zoomLevel)
101101

102-
# virtual CefString GetDevToolsURL(bool http_scheme) =0;
102+
CefString GetDevToolsURL(cpp_bool http_scheme)
103103
# virtual void RunFileDialog(FileDialogMode mode,
104104
# const CefString& title,
105105
# const CefString& default_file_name,

cefpython/imports.pyx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import inspect # used by JavascriptBindings.__SetObjectMethods()
1515
import urllib
1616
import json
1717
import datetime
18+
import random
1819

1920
if sys.version_info.major == 2:
2021
import urlparse

0 commit comments

Comments
 (0)