From d72e5874ebf267f83be9250fca637ceb1fd0ef52 Mon Sep 17 00:00:00 2001 From: Tobias Taschner Date: Fri, 10 Jan 2020 17:02:44 +0100 Subject: [PATCH] Add wxWebView methods to enable dev tools Currently only implemented for the Edge (Chromium) backend. --- include/wx/msw/webview_edgec.h | 3 +++ include/wx/webview.h | 2 ++ interface/wx/webview.h | 21 +++++++++++++++++++++ samples/webview/webview.cpp | 10 ++++++++++ src/msw/webview_edgec.cpp | 27 +++++++++++++++++++++++++-- 5 files changed, 61 insertions(+), 2 deletions(-) diff --git a/include/wx/msw/webview_edgec.h b/include/wx/msw/webview_edgec.h index abb7ad6192..4ff3320dbf 100644 --- a/include/wx/msw/webview_edgec.h +++ b/include/wx/msw/webview_edgec.h @@ -111,6 +111,9 @@ public: virtual void EnableContextMenu(bool enable = true) wxOVERRIDE; virtual bool IsContextMenuEnabled() const wxOVERRIDE; + virtual void EnableDevTools(bool enable = true) wxOVERRIDE; + virtual bool IsDevToolsEnabled() const wxOVERRIDE; + virtual bool RunScript(const wxString& javascript, wxString* output = NULL) wxOVERRIDE; virtual void RegisterHandler(wxSharedPtr handler) wxOVERRIDE; diff --git a/include/wx/webview.h b/include/wx/webview.h index 6e5e4aafdd..cea7a11e26 100644 --- a/include/wx/webview.h +++ b/include/wx/webview.h @@ -159,6 +159,7 @@ public: { m_showMenu = enable; } + virtual void EnableDevTools(bool WXUNUSED(enable) = true) { } virtual wxString GetCurrentTitle() const = 0; virtual wxString GetCurrentURL() const = 0; // TODO: handle choosing a frame when calling GetPageSource()? @@ -166,6 +167,7 @@ public: virtual wxString GetPageText() const = 0; virtual bool IsBusy() const = 0; virtual bool IsContextMenuEnabled() const { return m_showMenu; } + virtual bool IsDevToolsEnabled() const { return false; } virtual bool IsEditable() const = 0; virtual void LoadURL(const wxString& url) = 0; virtual void Print() = 0; diff --git a/interface/wx/webview.h b/interface/wx/webview.h index c1d5f1da11..cc3ac18f67 100644 --- a/interface/wx/webview.h +++ b/interface/wx/webview.h @@ -687,6 +687,27 @@ public: */ virtual bool IsContextMenuEnabled() const; + /** + @name Dev Tools + */ + + /** + Enable or disable access to dev tools for the user. + + This is currently only implemented for the Edge (Chromium) backend + where the dev tools are enabled by default. + + @since 3.1.4 + */ + virtual void EnableDevTools(bool enable = true); + + /** + Returns @true if dev tools are available to the user. + + @since 3.1.4 + */ + virtual bool IsDevToolsEnabled() const; + /** @name History */ diff --git a/samples/webview/webview.cpp b/samples/webview/webview.cpp index d7c7c16667..d5ec2dffcf 100644 --- a/samples/webview/webview.cpp +++ b/samples/webview/webview.cpp @@ -164,6 +164,7 @@ public: void OnFindText(wxCommandEvent& evt); void OnFindOptions(wxCommandEvent& evt); void OnEnableContextMenu(wxCommandEvent& evt); + void OnEnableDevTools(wxCommandEvent& evt); private: wxTextCtrl* m_url; @@ -226,6 +227,7 @@ private: wxMenuItem* m_selection_delete; wxMenuItem* m_find; wxMenuItem* m_context_menu; + wxMenuItem* m_dev_tools; wxInfoBar *m_info; wxStaticText* m_info_text; @@ -468,6 +470,7 @@ WebFrame::WebFrame(const wxString& url) : wxMenuItem* usememoryfs = m_tools_menu->Append(wxID_ANY, _("Memory File System Example")); m_context_menu = m_tools_menu->AppendCheckItem(wxID_ANY, _("Enable Context Menu")); + m_dev_tools = m_tools_menu->AppendCheckItem(wxID_ANY, _("Enable Dev Tools")); //By default we want to handle navigation and new windows m_tools_handle_navigation->Check(); @@ -549,6 +552,7 @@ WebFrame::WebFrame(const wxString& url) : Bind(wxEVT_MENU, &WebFrame::OnUseMemoryFS, this, usememoryfs->GetId()); Bind(wxEVT_MENU, &WebFrame::OnFind, this, m_find->GetId()); Bind(wxEVT_MENU, &WebFrame::OnEnableContextMenu, this, m_context_menu->GetId()); + Bind(wxEVT_MENU, &WebFrame::OnEnableDevTools, this, m_dev_tools->GetId()); //Connect the idle events Bind(wxEVT_IDLE, &WebFrame::OnIdle, this); @@ -710,6 +714,11 @@ void WebFrame::OnEnableContextMenu(wxCommandEvent& evt) m_browser->EnableContextMenu(evt.IsChecked()); } +void WebFrame::OnEnableDevTools(wxCommandEvent& evt) +{ + m_browser->EnableDevTools(evt.IsChecked()); +} + void WebFrame::OnFind(wxCommandEvent& WXUNUSED(evt)) { wxString value = m_browser->GetSelectedText(); @@ -943,6 +952,7 @@ void WebFrame::OnToolsClicked(wxCommandEvent& WXUNUSED(evt)) m_selection_delete->Enable(m_browser->HasSelection()); m_context_menu->Check(m_browser->IsContextMenuEnabled()); + m_dev_tools->Check(m_browser->IsDevToolsEnabled()); //Firstly we clear the existing menu items, then we add the current ones wxMenuHistoryMap::const_iterator it; diff --git a/src/msw/webview_edgec.cpp b/src/msw/webview_edgec.cpp index 13b57a7d0a..ddd725422a 100644 --- a/src/msw/webview_edgec.cpp +++ b/src/msw/webview_edgec.cpp @@ -49,8 +49,7 @@ typedef HRESULT(__stdcall *PFNWXGetWebView2BrowserVersionInfo)( PFNWXCreateWebView2EnvironmentWithDetails wxCreateWebView2EnvironmentWithDetails = NULL; PFNWXGetWebView2BrowserVersionInfo wxGetWebView2BrowserVersionInfo = NULL; -int wxWebViewEdgeChromium::ms_isAvailable = -1; -wxDynamicLibrary wxWebViewEdgeChromium::ms_loaderDll; +wxDynamicLibrary wxWebViewEdge::ms_loaderDll; bool wxWebViewEdge::IsAvailable() { @@ -655,6 +654,30 @@ bool wxWebViewEdge::IsContextMenuEnabled() const return true; } +void wxWebViewEdge::EnableDevTools(bool enable) +{ + wxCOMPtr settings; + if (SUCCEEDED(m_webView->get_Settings(&settings))) + { + settings->put_AreDevToolsEnabled(enable); + } +} + +bool wxWebViewEdge::IsDevToolsEnabled() const +{ + wxCOMPtr settings; + if (SUCCEEDED(m_webView->get_Settings(&settings))) + { + BOOL devToolsEnabled = TRUE; + settings->get_AreDevToolsEnabled(&devToolsEnabled); + + if (!devToolsEnabled) + return false; + } + + return true; +} + bool wxWebViewEdge::RunScriptSync(const wxString& javascript, wxString* output) { bool scriptExecuted = false;