diff --git a/.gitignore b/.gitignore index 22753a30f2..8f047f3bfe 100644 --- a/.gitignore +++ b/.gitignore @@ -475,3 +475,5 @@ # /utils/wxrc/ /utils/wxrc/wxrc_vc[789].sln + +/3rdparty/webview2 diff --git a/Makefile.in b/Makefile.in index f47ff00145..0b650a0936 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1650,33 +1650,34 @@ WEBVIEWDLL_CXXFLAGS = $(__webviewdll_PCH_INC) -D__WX$(TOOLKIT)__ \ $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) -DWXBUILDING $(__INC_TIFF_BUILD_p) \ $(__INC_TIFF_p) $(__INC_JPEG_p) $(__INC_PNG_p) $(__INC_ZLIB_p) \ $(__INC_REGEX_p) $(__INC_EXPAT_p) -DWXUSINGDLL -DWXMAKINGDLL_WEBVIEW \ - $(__webviewdll_ext_dir_define_p) $(PIC_FLAG) $(CXXWARNINGS) $(CPPFLAGS) \ - $(CXXFLAGS) + $(__webviewdll_ext_dir_define_p) $(__webview_additional_include_p) \ + $(PIC_FLAG) $(CXXWARNINGS) $(CPPFLAGS) $(CXXFLAGS) WEBVIEWDLL_OBJCXXFLAGS = $(__webviewdll_PCH_INC) -D__WX$(TOOLKIT)__ \ $(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) \ $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) -DWXBUILDING $(__INC_TIFF_BUILD_p) \ $(__INC_TIFF_p) $(__INC_JPEG_p) $(__INC_PNG_p) $(__INC_ZLIB_p) \ $(__INC_REGEX_p) $(__INC_EXPAT_p) -DWXUSINGDLL -DWXMAKINGDLL_WEBVIEW \ - $(__webviewdll_ext_dir_define_p) $(PIC_FLAG) $(CPPFLAGS) $(OBJCXXFLAGS) + $(__webviewdll_ext_dir_define_p) $(__webview_additional_include_p) \ + $(PIC_FLAG) $(CPPFLAGS) $(OBJCXXFLAGS) WEBVIEWDLL_OBJECTS = \ - $(__webviewdll___win32rc) \ $(__WEBVIEW_SRC_PLATFORM_OBJECTS_2) \ webviewdll_webview.o \ webviewdll_webviewarchivehandler.o \ - webviewdll_webviewfshandler.o + webviewdll_webviewfshandler.o \ + $(__webviewdll___win32rc) WEBVIEWDLL_ODEP = $(_____pch_wxprec_webviewdll_wx_wxprec_h_gch___depname) WEBVIEWLIB_CXXFLAGS = $(__webviewlib_PCH_INC) -D__WX$(TOOLKIT)__ \ $(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) \ $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) -DWXBUILDING $(__INC_TIFF_BUILD_p) \ $(__INC_TIFF_p) $(__INC_JPEG_p) $(__INC_PNG_p) $(__INC_ZLIB_p) \ $(__INC_REGEX_p) $(__INC_EXPAT_p) $(__webviewdll_ext_dir_define_p) \ - $(CXXWARNINGS) $(CPPFLAGS) $(CXXFLAGS) + $(__webview_additional_include_p) $(CXXWARNINGS) $(CPPFLAGS) $(CXXFLAGS) WEBVIEWLIB_OBJCXXFLAGS = $(__webviewlib_PCH_INC) -D__WX$(TOOLKIT)__ \ $(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) \ $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) -DWXBUILDING $(__INC_TIFF_BUILD_p) \ $(__INC_TIFF_p) $(__INC_JPEG_p) $(__INC_PNG_p) $(__INC_ZLIB_p) \ $(__INC_REGEX_p) $(__INC_EXPAT_p) $(__webviewdll_ext_dir_define_p) \ - $(CPPFLAGS) $(OBJCXXFLAGS) + $(__webview_additional_include_p) $(CPPFLAGS) $(OBJCXXFLAGS) WEBVIEWLIB_OBJECTS = \ $(__WEBVIEW_SRC_PLATFORM_OBJECTS_3) \ webviewlib_webview.o \ @@ -2260,8 +2261,11 @@ COND_PLATFORM_WIN32_1_GTK_PLATFORM_HDR = \ @COND_TOOLKIT_GTK@WEBVIEW_HDR_PLATFORM = \ @COND_TOOLKIT_GTK@ wx/gtk/webviewhistoryitem_webkit.h \ @COND_TOOLKIT_GTK@ wx/gtk/webview_webkit.h -@COND_TOOLKIT_MSW@WEBVIEW_HDR_PLATFORM = \ -@COND_TOOLKIT_MSW@ wx/msw/webviewhistoryitem_ie.h wx/msw/webview_ie.h +COND_TOOLKIT_MSW_WEBVIEW_HDR_PLATFORM = \ + wx/msw/webviewhistoryitem_ie.h \ + wx/msw/webview_ie.h \ + wx/msw/webview_edge.h +@COND_TOOLKIT_MSW@WEBVIEW_HDR_PLATFORM = $(COND_TOOLKIT_MSW_WEBVIEW_HDR_PLATFORM) @COND_TOOLKIT_COCOA@OPENGL_HDR_PLATFORM = wx/cocoa/glcanvas.h @COND_TOOLKIT_GTK_TOOLKIT_VERSION_@OPENGL_HDR_PLATFORM \ @COND_TOOLKIT_GTK_TOOLKIT_VERSION_@ = wx/gtk1/glcanvas.h wx/unix/glx11.h @@ -6132,7 +6136,8 @@ COND_TOOLKIT_X11___LOWLEVEL_SRC_OBJECTS_1 = \ @COND_PLATFORM_MACOSX_1@ = monodll_osx_webview_webkit.o @COND_TOOLKIT_GTK@__WEBVIEW_SRC_PLATFORM_OBJECTS = \ @COND_TOOLKIT_GTK@ monodll_gtk_webview_webkit.o monodll_webview_webkit2.o -@COND_TOOLKIT_MSW@__WEBVIEW_SRC_PLATFORM_OBJECTS = monodll_webview_ie.o +@COND_TOOLKIT_MSW@__WEBVIEW_SRC_PLATFORM_OBJECTS = \ +@COND_TOOLKIT_MSW@ monodll_webview_ie.o monodll_webview_edge.o @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2@__AUI_GTK_SRC_OBJECTS \ @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2@ = monodll_tabartgtk.o @COND_TOOLKIT_MSW@__AUI_PLATFORM_SRC_OBJECTS = \ @@ -8121,7 +8126,8 @@ COND_TOOLKIT_X11___LOWLEVEL_SRC_OBJECTS_3 = \ @COND_PLATFORM_MACOSX_1@ = monolib_osx_webview_webkit.o @COND_TOOLKIT_GTK@__WEBVIEW_SRC_PLATFORM_OBJECTS_1 = \ @COND_TOOLKIT_GTK@ monolib_gtk_webview_webkit.o monolib_webview_webkit2.o -@COND_TOOLKIT_MSW@__WEBVIEW_SRC_PLATFORM_OBJECTS_1 = monolib_webview_ie.o +@COND_TOOLKIT_MSW@__WEBVIEW_SRC_PLATFORM_OBJECTS_1 = \ +@COND_TOOLKIT_MSW@ monolib_webview_ie.o monolib_webview_edge.o @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2@__AUI_GTK_SRC_OBJECTS_1 \ @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2@ = monolib_tabartgtk.o @COND_TOOLKIT_MSW@__AUI_PLATFORM_SRC_OBJECTS_1 = \ @@ -12324,14 +12330,17 @@ COND_USE_SOTWOSYMLINKS_1___webviewdll___so_symlinks_uninst_cmd = rm -f \ COND_USE_SOVERSOLARIS_1___webviewdll___so_symlinks_uninst_cmd = rm -f \ $(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_webview-$(WX_RELEASE)$(HOST_SUFFIX).$(DLLIMP_SUFFIX) @COND_USE_SOVERSOLARIS_1@__webviewdll___so_symlinks_uninst_cmd = $(COND_USE_SOVERSOLARIS_1___webviewdll___so_symlinks_uninst_cmd) -@COND_PLATFORM_WIN32_1@__webviewdll___win32rc = webviewdll_version_rc.o @COND_PLATFORM_MACOSX_1@__WEBVIEW_SRC_PLATFORM_OBJECTS_2 \ @COND_PLATFORM_MACOSX_1@ = webviewdll_osx_webview_webkit.o @COND_TOOLKIT_GTK@__WEBVIEW_SRC_PLATFORM_OBJECTS_2 = \ @COND_TOOLKIT_GTK@ webviewdll_gtk_webview_webkit.o \ @COND_TOOLKIT_GTK@ webviewdll_webview_webkit2.o @COND_TOOLKIT_MSW@__WEBVIEW_SRC_PLATFORM_OBJECTS_2 = \ -@COND_TOOLKIT_MSW@ webviewdll_webview_ie.o +@COND_TOOLKIT_MSW@ webviewdll_webview_ie.o webviewdll_webview_edge.o +@COND_TOOLKIT_MSW@__webview_additional_include_p_1 = \ +@COND_TOOLKIT_MSW@ --include-dir \ +@COND_TOOLKIT_MSW@ $(top_srcdir)/3rdparty/webview2/build/native/include +@COND_PLATFORM_WIN32_1@__webviewdll___win32rc = webviewdll_version_rc.o COND_MONOLITHIC_0_SHARED_0_USE_GUI_1_USE_WEBVIEW_1___webviewlib___depname = \ $(LIBDIRNAME)/$(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_webview-$(WX_RELEASE)$(HOST_SUFFIX)$(LIBEXT) @COND_MONOLITHIC_0_SHARED_0_USE_GUI_1_USE_WEBVIEW_1@__webviewlib___depname = $(COND_MONOLITHIC_0_SHARED_0_USE_GUI_1_USE_WEBVIEW_1___webviewlib___depname) @@ -12351,7 +12360,7 @@ COND_MONOLITHIC_0_SHARED_0_USE_GUI_1_USE_WEBVIEW_1___webviewlib___depname = \ @COND_TOOLKIT_GTK@ webviewlib_gtk_webview_webkit.o \ @COND_TOOLKIT_GTK@ webviewlib_webview_webkit2.o @COND_TOOLKIT_MSW@__WEBVIEW_SRC_PLATFORM_OBJECTS_3 = \ -@COND_TOOLKIT_MSW@ webviewlib_webview_ie.o +@COND_TOOLKIT_MSW@ webviewlib_webview_ie.o webviewlib_webview_edge.o @COND_SHARED_1@____wxwebview_namedll_DEP = $(__webviewdll___depname) @COND_SHARED_0@____wxwebview_namelib_DEP = $(__webviewlib___depname) COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_QA_1___qadll___depname = \ @@ -13729,6 +13738,8 @@ COND_PLATFORM_MACOSX_1___OSX_LOWLEVEL_SRC_OBJECTS_1_4 = \ @COND_USE_WEBVIEW_WEBKIT2_1@__webviewdll_ext_dir_define_p \ @COND_USE_WEBVIEW_WEBKIT2_1@ = \ @COND_USE_WEBVIEW_WEBKIT2_1@ -DWX_WEB_EXTENSIONS_DIRECTORY=\"$(PLUGINS_INST_DIR)/web-extensions\" +@COND_TOOLKIT_MSW@__webview_additional_include_p = \ +@COND_TOOLKIT_MSW@ -I$(top_srcdir)/3rdparty/webview2/build/native/include @COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_HTML_1@__htmldll_library_link_DEP \ @COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_HTML_1@ = $(__htmldll___depname) @COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_HTML_1@__htmldll_library_link_LIBR \ @@ -14302,7 +14313,7 @@ distclean: clean @COND_MONOLITHIC_0_USE_HTML_1@wxhtml: $(____wxhtml_namedll_DEP) $(____wxhtml_namelib_DEP) -@COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_WEBVIEW_1@$(LIBDIRNAME)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_webview$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf3): $(WEBVIEWDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla___depname) $(__wxexpat___depname) $(__wxzlib___depname) $(__wxregex___depname) $(__webviewdll___win32rc) $(__coredll___depname) $(__basedll___depname) +@COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_WEBVIEW_1@$(LIBDIRNAME)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_webview$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf3): $(WEBVIEWDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla___depname) $(__wxexpat___depname) $(__wxzlib___depname) $(__wxregex___depname) $(__coredll___depname) $(__basedll___depname) $(__webviewdll___win32rc) @COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_WEBVIEW_1@ $(SHARED_LD_CXX) $@ $(WEBVIEWDLL_OBJECTS) -L$(LIBDIRNAME) -L$(LIBDIRNAME) -L$(LIBDIRNAME) $(__webviewdll___macinstnamecmd) $(__webviewdll___importlib) $(__webviewdll___soname_flags) $(WXMACVERSION_CMD) $(LDFLAGS) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) $(EXTRALIBS_FOR_GUI) $(__LIB_ZLIB_p) $(__LIB_REGEX_p) $(__LIB_EXPAT_p) $(EXTRALIBS_FOR_BASE) -lwx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core-$(WX_RELEASE)$(HOST_SUFFIX) -lwx_base$(WXBASEPORT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) $(EXTRALIBS_WEBVIEW) $(LIBS) @COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_WEBVIEW_1@ $(DYLIB_RPATH_POSTLINK) @COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_WEBVIEW_1@ @@ -17108,6 +17119,9 @@ monodll_htmllbox.o: $(srcdir)/src/generic/htmllbox.cpp $(MONODLL_ODEP) monodll_webview_ie.o: $(srcdir)/src/msw/webview_ie.cpp $(MONODLL_ODEP) $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/msw/webview_ie.cpp +monodll_webview_edge.o: $(srcdir)/src/msw/webview_edge.cpp $(MONODLL_ODEP) + $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/msw/webview_edge.cpp + monodll_gtk_webview_webkit.o: $(srcdir)/src/gtk/webview_webkit.cpp $(MONODLL_ODEP) $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/gtk/webview_webkit.cpp @@ -22385,6 +22399,9 @@ monolib_htmllbox.o: $(srcdir)/src/generic/htmllbox.cpp $(MONOLIB_ODEP) monolib_webview_ie.o: $(srcdir)/src/msw/webview_ie.cpp $(MONOLIB_ODEP) $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/msw/webview_ie.cpp +monolib_webview_edge.o: $(srcdir)/src/msw/webview_edge.cpp $(MONOLIB_ODEP) + $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/msw/webview_edge.cpp + monolib_gtk_webview_webkit.o: $(srcdir)/src/gtk/webview_webkit.cpp $(MONOLIB_ODEP) $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/gtk/webview_webkit.cpp @@ -35963,12 +35980,12 @@ htmllib_htmllbox.o: $(srcdir)/src/generic/htmllbox.cpp $(HTMLLIB_ODEP) @COND_PLATFORM_MACOSX_1@htmllib_chm.o: $(srcdir)/src/html/chm.cpp $(HTMLLIB_ODEP) @COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(HTMLLIB_CXXFLAGS) $(srcdir)/src/html/chm.cpp -webviewdll_version_rc.o: $(srcdir)/src/msw/version.rc $(WEBVIEWDLL_ODEP) - $(WINDRES) -i$< -o$@ $(__WIN32_DPI_MANIFEST_p) --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_67) $(__DEBUG_DEFINE_p_66) $(__EXCEPTIONS_DEFINE_p_65) $(__RTTI_DEFINE_p_65) $(__THREAD_DEFINE_p_65) --define WXBUILDING --define WXDLLNAME=$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_webview$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG) $(__RCDEFDIR_p) --include-dir $(top_srcdir)/include $(__INC_TIFF_BUILD_p_66) $(__INC_TIFF_p_66) $(__INC_JPEG_p_66) $(__INC_PNG_p_65) $(__INC_ZLIB_p_67) $(__INC_REGEX_p_65) $(__INC_EXPAT_p_65) --define WXUSINGDLL --define WXMAKINGDLL_WEBVIEW $(__webviewdll_ext_dir_define_p_0) - webviewdll_webview_ie.o: $(srcdir)/src/msw/webview_ie.cpp $(WEBVIEWDLL_ODEP) $(CXXC) -c -o $@ $(WEBVIEWDLL_CXXFLAGS) $(srcdir)/src/msw/webview_ie.cpp +webviewdll_webview_edge.o: $(srcdir)/src/msw/webview_edge.cpp $(WEBVIEWDLL_ODEP) + $(CXXC) -c -o $@ $(WEBVIEWDLL_CXXFLAGS) $(srcdir)/src/msw/webview_edge.cpp + webviewdll_gtk_webview_webkit.o: $(srcdir)/src/gtk/webview_webkit.cpp $(WEBVIEWDLL_ODEP) $(CXXC) -c -o $@ $(WEBVIEWDLL_CXXFLAGS) $(srcdir)/src/gtk/webview_webkit.cpp @@ -35987,9 +36004,15 @@ webviewdll_webviewarchivehandler.o: $(srcdir)/src/common/webviewarchivehandler.c webviewdll_webviewfshandler.o: $(srcdir)/src/common/webviewfshandler.cpp $(WEBVIEWDLL_ODEP) $(CXXC) -c -o $@ $(WEBVIEWDLL_CXXFLAGS) $(srcdir)/src/common/webviewfshandler.cpp +webviewdll_version_rc.o: $(srcdir)/src/msw/version.rc $(WEBVIEWDLL_ODEP) + $(WINDRES) -i$< -o$@ $(__WIN32_DPI_MANIFEST_p) --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_67) $(__DEBUG_DEFINE_p_66) $(__EXCEPTIONS_DEFINE_p_65) $(__RTTI_DEFINE_p_65) $(__THREAD_DEFINE_p_65) --define WXBUILDING --define WXDLLNAME=$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_webview$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG) $(__RCDEFDIR_p) --include-dir $(top_srcdir)/include $(__INC_TIFF_BUILD_p_66) $(__INC_TIFF_p_66) $(__INC_JPEG_p_66) $(__INC_PNG_p_65) $(__INC_ZLIB_p_67) $(__INC_REGEX_p_65) $(__INC_EXPAT_p_65) --define WXUSINGDLL --define WXMAKINGDLL_WEBVIEW $(__webviewdll_ext_dir_define_p_0) $(__webview_additional_include_p_1) + webviewlib_webview_ie.o: $(srcdir)/src/msw/webview_ie.cpp $(WEBVIEWLIB_ODEP) $(CXXC) -c -o $@ $(WEBVIEWLIB_CXXFLAGS) $(srcdir)/src/msw/webview_ie.cpp +webviewlib_webview_edge.o: $(srcdir)/src/msw/webview_edge.cpp $(WEBVIEWLIB_ODEP) + $(CXXC) -c -o $@ $(WEBVIEWLIB_CXXFLAGS) $(srcdir)/src/msw/webview_edge.cpp + webviewlib_gtk_webview_webkit.o: $(srcdir)/src/gtk/webview_webkit.cpp $(WEBVIEWLIB_ODEP) $(CXXC) -c -o $@ $(WEBVIEWLIB_CXXFLAGS) $(srcdir)/src/gtk/webview_webkit.cpp diff --git a/build/bakefiles/files.bkl b/build/bakefiles/files.bkl index 88ad21a562..c0f237f83f 100644 --- a/build/bakefiles/files.bkl +++ b/build/bakefiles/files.bkl @@ -3015,7 +3015,10 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! - src/msw/webview_ie.cpp + + src/msw/webview_ie.cpp + src/msw/webview_edge.cpp + src/gtk/webview_webkit.cpp src/gtk/webview_webkit2.cpp @@ -3036,6 +3039,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! wx/msw/webviewhistoryitem_ie.h wx/msw/webview_ie.h + wx/msw/webview_edge.h wx/gtk/webviewhistoryitem_webkit.h diff --git a/build/bakefiles/multilib.bkl b/build/bakefiles/multilib.bkl index dedebdb51a..b9ec796c82 100644 --- a/build/bakefiles/multilib.bkl +++ b/build/bakefiles/multilib.bkl @@ -176,6 +176,10 @@ + + $(TOP_SRCDIR)3rdparty/webview2/build/native/include + + WXUSINGDLL @@ -186,6 +190,7 @@ basedll $(EXTRALIBS_WEBVIEW) $(WEBVIEW_HDR) + $(webview_additional_include) $(webviewdll_ext_dir_define) $(WEBVIEW_SRC) $(WEBVIEW_HDR) + $(webview_additional_include) @@ -404,7 +410,7 @@ $(STC_SRC) $(STC_HDR) - + stc=stclib+stcdll diff --git a/build/cmake/files.cmake b/build/cmake/files.cmake index 8df1296a50..cb8d420c1e 100644 --- a/build/cmake/files.cmake +++ b/build/cmake/files.cmake @@ -2835,6 +2835,7 @@ set(HTML_CMN_HDR set(WEBVIEW_MSW_SRC src/msw/webview_ie.cpp + src/msw/webview_edge.cpp ) set(WEBVIEW_CMN_SRC @@ -2846,6 +2847,7 @@ set(WEBVIEW_CMN_SRC set(WEBVIEW_MSW_HDR wx/msw/webviewhistoryitem_ie.h wx/msw/webview_ie.h + wx/msw/webview_edge.h ) set(WEBVIEW_CMN_HDR diff --git a/build/cmake/init.cmake b/build/cmake/init.cmake index a0cfe8c541..f57863deb2 100644 --- a/build/cmake/init.cmake +++ b/build/cmake/init.cmake @@ -406,8 +406,8 @@ if(wxUSE_GUI) wx_option_force_value(wxUSE_WEBVIEW OFF) endif() elseif(WXMSW) - if(NOT wxUSE_WEBVIEW_IE) - message(WARNING "WebviewIE not found or enabled, wxWebview won't be available") + if(NOT wxUSE_WEBVIEW_IE AND NOT wxUSE_WEBVIEW_EDGE) + message(WARNING "WebviewIE and WebviewEdge not found or enabled, wxWebview won't be available") wx_option_force_value(wxUSE_WEBVIEW OFF) endif() elseif(APPLE) diff --git a/build/cmake/lib/webview/CMakeLists.txt b/build/cmake/lib/webview/CMakeLists.txt index ac4caca35e..4645032097 100644 --- a/build/cmake/lib/webview/CMakeLists.txt +++ b/build/cmake/lib/webview/CMakeLists.txt @@ -34,6 +34,21 @@ endif() if(APPLE) wx_lib_link_libraries(webview PUBLIC "-framework WebKit") +elseif(WXMSW) + if(wxUSE_WEBVIEW_EDGE) + wx_lib_include_directories(webview PRIVATE "${PROJECT_SOURCE_DIR}/3rdparty/webview2/build/native/include") + + if (CMAKE_SIZEOF_VOID_P EQUAL 4) + set(WEBVIEW2_ARCH x86) + else() + set(WEBVIEW2_ARCH x64) + endif() + + add_custom_command(TARGET webview POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + "${PROJECT_SOURCE_DIR}/3rdparty/webview2/build/native/${WEBVIEW2_ARCH}/WebView2Loader.dll" + "$/WebView2Loader.dll") + endif() elseif(WXGTK) if(LIBSOUP_FOUND) wx_lib_include_directories(webview PUBLIC ${LIBSOUP_INCLUDE_DIRS}) diff --git a/build/cmake/options.cmake b/build/cmake/options.cmake index c9196f766e..1c0cfb8c82 100644 --- a/build/cmake/options.cmake +++ b/build/cmake/options.cmake @@ -420,6 +420,7 @@ if(WIN32) wx_option(wxUSE_TASKBARICON_BALLOONS "enable wxTaskBarIcon::ShowBalloon() method (Win32 only)") wx_option(wxUSE_UXTHEME "enable support for Windows XP themed look (Win32 only)") wx_option(wxUSE_WEBVIEW_IE "use wxWebView IE backend (Win32 only)") + wx_option(wxUSE_WEBVIEW_EDGE "use wxWebView Edge (Chromium) backend (Windows 7+ only)" OFF) wx_option(wxUSE_WXDIB "use wxDIB class (Win32 only)") if(MSVC_VERSION GREATER 1600 AND NOT CMAKE_VS_PLATFORM_TOOLSET MATCHES "_xp$") set(wxUSE_WINRT_DEFAULT ON) diff --git a/build/cmake/setup.h.in b/build/cmake/setup.h.in index 2b5c6a29a1..c18154227b 100644 --- a/build/cmake/setup.h.in +++ b/build/cmake/setup.h.in @@ -336,6 +336,8 @@ #cmakedefine01 wxUSE_WEBVIEW_IE #endif +#cmakedefine01 wxUSE_WEBVIEW_EDGE + #if (defined(__WXGTK__) && !defined(__WXGTK3__)) || defined(__WXOSX__) #cmakedefine01 wxUSE_WEBVIEW_WEBKIT #else @@ -629,7 +631,6 @@ #cmakedefine01 wxUSE_THEME_MONO #cmakedefine01 wxUSE_THEME_WIN32 - /* --- end common options --- */ /* diff --git a/build/files b/build/files index 31e387eaf6..6799e46bd0 100644 --- a/build/files +++ b/build/files @@ -2788,6 +2788,7 @@ HTML_CMN_HDR = WEBVIEW_MSW_SRC = src/msw/webview_ie.cpp + src/msw/webview_edge.cpp WEBVIEW_CMN_SRC = src/common/webview.cpp src/common/webviewarchivehandler.cpp @@ -2796,6 +2797,7 @@ WEBVIEW_CMN_SRC = WEBVIEW_MSW_HDR = wx/msw/webviewhistoryitem_ie.h wx/msw/webview_ie.h + wx/msw/webview_edge.h WEBVIEW_CMN_HDR = wx/webview.h wx/webviewarchivehandler.h diff --git a/build/msw/makefile.bcc b/build/msw/makefile.bcc index 0c9399730d..fefb2ee256 100644 --- a/build/msw/makefile.bcc +++ b/build/msw/makefile.bcc @@ -1127,11 +1127,12 @@ WEBVIEWDLL_CXXFLAGS = $(__RUNTIME_LIBS) -I$(BCCDIR)\include $(__DEBUGINFO) \ -I$(SETUPHDIR) -I..\..\include $(____CAIRO_INCLUDEDIR_FILENAMES) \ -DWXBUILDING -I..\..\src\tiff\libtiff -I..\..\src\jpeg -I..\..\src\png \ -I..\..\src\zlib -I..\..\src\regex -I..\..\src\expat\expat\lib -DWXUSINGDLL \ - -DWXMAKINGDLL_WEBVIEW -Hu -H=$(OBJS)\wxprec_webviewdll.csm $(CPPFLAGS) \ - $(CXXFLAGS) + -DWXMAKINGDLL_WEBVIEW -I..\..\3rdparty\webview2\build\native\include -Hu \ + -H=$(OBJS)\wxprec_webviewdll.csm $(CPPFLAGS) $(CXXFLAGS) WEBVIEWDLL_OBJECTS = \ $(OBJS)\webviewdll_dummy.obj \ $(OBJS)\webviewdll_webview_ie.obj \ + $(OBJS)\webviewdll_webview_edge.obj \ $(OBJS)\webviewdll_webview.obj \ $(OBJS)\webviewdll_webviewarchivehandler.obj \ $(OBJS)\webviewdll_webviewfshandler.obj @@ -1141,11 +1142,13 @@ WEBVIEWLIB_CXXFLAGS = $(__RUNTIME_LIBS) -I$(BCCDIR)\include $(__DEBUGINFO) \ $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) $(__UNICODE_DEFINE_p) \ -I$(SETUPHDIR) -I..\..\include $(____CAIRO_INCLUDEDIR_FILENAMES) \ -DWXBUILDING -I..\..\src\tiff\libtiff -I..\..\src\jpeg -I..\..\src\png \ - -I..\..\src\zlib -I..\..\src\regex -I..\..\src\expat\expat\lib -Hu \ + -I..\..\src\zlib -I..\..\src\regex -I..\..\src\expat\expat\lib \ + -I..\..\3rdparty\webview2\build\native\include -Hu \ -H=$(OBJS)\wxprec_webviewlib.csm $(CPPFLAGS) $(CXXFLAGS) WEBVIEWLIB_OBJECTS = \ $(OBJS)\webviewlib_dummy.obj \ $(OBJS)\webviewlib_webview_ie.obj \ + $(OBJS)\webviewlib_webview_edge.obj \ $(OBJS)\webviewlib_webview.obj \ $(OBJS)\webviewlib_webviewarchivehandler.obj \ $(OBJS)\webviewlib_webviewfshandler.obj @@ -1677,6 +1680,7 @@ ____MONOLIB_GUI_SRC_FILENAMES_OBJECTS = \ $(OBJS)\monodll_winpars.obj \ $(OBJS)\monodll_htmllbox.obj \ $(OBJS)\monodll_webview_ie.obj \ + $(OBJS)\monodll_webview_edge.obj \ $(OBJS)\monodll_webview.obj \ $(OBJS)\monodll_webviewarchivehandler.obj \ $(OBJS)\monodll_webviewfshandler.obj \ @@ -2510,6 +2514,7 @@ ____MONOLIB_GUI_SRC_FILENAMES_1_OBJECTS = \ $(OBJS)\monolib_winpars.obj \ $(OBJS)\monolib_htmllbox.obj \ $(OBJS)\monolib_webview_ie.obj \ + $(OBJS)\monolib_webview_edge.obj \ $(OBJS)\monolib_webview.obj \ $(OBJS)\monolib_webviewarchivehandler.obj \ $(OBJS)\monolib_webviewfshandler.obj \ @@ -5351,7 +5356,7 @@ wxhtml: $(____wxhtml_namedll_DEP) $(____wxhtml_namelib_DEP) !endif !if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "1" && "$(USE_GUI)" == "1" && "$(USE_WEBVIEW)" == "1" -$(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_webview$(WXCOMPILER)$(VENDORTAG).dll: $(OBJS)\webviewdll_dummy.obj $(WEBVIEWDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib $(OBJS)\webviewdll_version.res $(__coredll___depname) $(__basedll___depname) +$(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_webview$(WXCOMPILER)$(VENDORTAG).dll: $(OBJS)\webviewdll_dummy.obj $(WEBVIEWDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib $(__coredll___depname) $(__basedll___depname) $(OBJS)\webviewdll_version.res ilink32 -Tpd -q -L$(BCCDIR)\lib -L$(BCCDIR)\lib\psdk $(__DEBUGINFO) -L$(LIBDIRNAME) $(____CAIRO_LIBDIR_FILENAMES) $(LDFLAGS) @&&| c0d32.obj $(WEBVIEWDLL_OBJECTS),$@,, $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__CAIRO_LIB_p) ole2w32.lib oleacc.lib uxtheme.lib $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core.lib $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib import32.lib cw32$(__THREADSFLAG_14)$(__RUNTIME_LIBS_5).lib,, $(OBJS)\webviewdll_version.res | @@ -7235,6 +7240,9 @@ $(OBJS)\monodll_htmllbox.obj: ..\..\src\generic\htmllbox.cpp $(OBJS)\monodll_webview_ie.obj: ..\..\src\msw\webview_ie.cpp $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\msw\webview_ie.cpp +$(OBJS)\monodll_webview_edge.obj: ..\..\src\msw\webview_edge.cpp + $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\msw\webview_edge.cpp + $(OBJS)\monodll_webview.obj: ..\..\src\common\webview.cpp $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\common\webview.cpp @@ -9787,6 +9795,9 @@ $(OBJS)\monolib_htmllbox.obj: ..\..\src\generic\htmllbox.cpp $(OBJS)\monolib_webview_ie.obj: ..\..\src\msw\webview_ie.cpp $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\msw\webview_ie.cpp +$(OBJS)\monolib_webview_edge.obj: ..\..\src\msw\webview_edge.cpp + $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\msw\webview_edge.cpp + $(OBJS)\monolib_webview.obj: ..\..\src\common\webview.cpp $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\webview.cpp @@ -15976,12 +15987,12 @@ $(OBJS)\htmllib_htmllbox.obj: ..\..\src\generic\htmllbox.cpp $(OBJS)\webviewdll_dummy.obj: ..\..\src\common\dummy.cpp $(CXX) -q -c -P -o$@ $(WEBVIEWDLL_CXXFLAGS) -H ..\..\src\common\dummy.cpp -$(OBJS)\webviewdll_version.res: ..\..\src\msw\version.rc - brcc32 -32 -r -fo$@ -i$(BCCDIR)\include -dwxUSE_DPI_AWARE_MANIFEST=$(USE_DPI_AWARE_MANIFEST) -d__WXMSW__ $(__WXUNIV_DEFINE_p_67) $(__DEBUG_DEFINE_p_66) $(__NDEBUG_DEFINE_p_65) $(__EXCEPTIONS_DEFINE_p_65) $(__RTTI_DEFINE_p_65) $(__THREAD_DEFINE_p_65) $(__UNICODE_DEFINE_p_67) -i$(SETUPHDIR) -i..\..\include $(____CAIRO_INCLUDEDIR_FILENAMES_4) -dWXBUILDING -dWXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_webview$(WXCOMPILER)$(VENDORTAG) -i$(BCCDIR)\include\windows\sdk -i..\..\src\tiff\libtiff -i..\..\src\jpeg -i..\..\src\png -i..\..\src\zlib -i..\..\src\regex -i..\..\src\expat\expat\lib -dWXUSINGDLL -dWXMAKINGDLL_WEBVIEW ..\..\src\msw\version.rc - $(OBJS)\webviewdll_webview_ie.obj: ..\..\src\msw\webview_ie.cpp $(CXX) -q -c -P -o$@ $(WEBVIEWDLL_CXXFLAGS) ..\..\src\msw\webview_ie.cpp +$(OBJS)\webviewdll_webview_edge.obj: ..\..\src\msw\webview_edge.cpp + $(CXX) -q -c -P -o$@ $(WEBVIEWDLL_CXXFLAGS) ..\..\src\msw\webview_edge.cpp + $(OBJS)\webviewdll_webview.obj: ..\..\src\common\webview.cpp $(CXX) -q -c -P -o$@ $(WEBVIEWDLL_CXXFLAGS) ..\..\src\common\webview.cpp @@ -15991,12 +16002,18 @@ $(OBJS)\webviewdll_webviewarchivehandler.obj: ..\..\src\common\webviewarchivehan $(OBJS)\webviewdll_webviewfshandler.obj: ..\..\src\common\webviewfshandler.cpp $(CXX) -q -c -P -o$@ $(WEBVIEWDLL_CXXFLAGS) ..\..\src\common\webviewfshandler.cpp +$(OBJS)\webviewdll_version.res: ..\..\src\msw\version.rc + brcc32 -32 -r -fo$@ -i$(BCCDIR)\include -dwxUSE_DPI_AWARE_MANIFEST=$(USE_DPI_AWARE_MANIFEST) -d__WXMSW__ $(__WXUNIV_DEFINE_p_67) $(__DEBUG_DEFINE_p_66) $(__NDEBUG_DEFINE_p_65) $(__EXCEPTIONS_DEFINE_p_65) $(__RTTI_DEFINE_p_65) $(__THREAD_DEFINE_p_65) $(__UNICODE_DEFINE_p_67) -i$(SETUPHDIR) -i..\..\include $(____CAIRO_INCLUDEDIR_FILENAMES_4) -dWXBUILDING -dWXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_webview$(WXCOMPILER)$(VENDORTAG) -i$(BCCDIR)\include\windows\sdk -i..\..\src\tiff\libtiff -i..\..\src\jpeg -i..\..\src\png -i..\..\src\zlib -i..\..\src\regex -i..\..\src\expat\expat\lib -dWXUSINGDLL -dWXMAKINGDLL_WEBVIEW -i..\..\3rdparty\webview2\build\native\include ..\..\src\msw\version.rc + $(OBJS)\webviewlib_dummy.obj: ..\..\src\common\dummy.cpp $(CXX) -q -c -P -o$@ $(WEBVIEWLIB_CXXFLAGS) -H ..\..\src\common\dummy.cpp $(OBJS)\webviewlib_webview_ie.obj: ..\..\src\msw\webview_ie.cpp $(CXX) -q -c -P -o$@ $(WEBVIEWLIB_CXXFLAGS) ..\..\src\msw\webview_ie.cpp +$(OBJS)\webviewlib_webview_edge.obj: ..\..\src\msw\webview_edge.cpp + $(CXX) -q -c -P -o$@ $(WEBVIEWLIB_CXXFLAGS) ..\..\src\msw\webview_edge.cpp + $(OBJS)\webviewlib_webview.obj: ..\..\src\common\webview.cpp $(CXX) -q -c -P -o$@ $(WEBVIEWLIB_CXXFLAGS) ..\..\src\common\webview.cpp diff --git a/build/msw/makefile.gcc b/build/msw/makefile.gcc index 33ab759620..c1c27dcc5f 100644 --- a/build/msw/makefile.gcc +++ b/build/msw/makefile.gcc @@ -1127,15 +1127,17 @@ WEBVIEWDLL_CXXFLAGS = $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) \ -I$(SETUPHDIR) -I..\..\include $(____CAIRO_INCLUDEDIR_FILENAMES) -W -Wall \ -DWXBUILDING -I..\..\src\tiff\libtiff -I..\..\src\jpeg -I..\..\src\png \ -I..\..\src\zlib -I..\..\src\regex -I..\..\src\expat\expat\lib -DWXUSINGDLL \ - -DWXMAKINGDLL_WEBVIEW $(__RTTIFLAG) $(__EXCEPTIONSFLAG) \ - -Wno-ctor-dtor-privacy $(CPPFLAGS) $(CXXFLAGS) + -DWXMAKINGDLL_WEBVIEW -I..\..\3rdparty\webview2\build\native\include \ + $(__RTTIFLAG) $(__EXCEPTIONSFLAG) -Wno-ctor-dtor-privacy $(CPPFLAGS) \ + $(CXXFLAGS) WEBVIEWDLL_OBJECTS = \ $(OBJS)\webviewdll_dummy.o \ - $(OBJS)\webviewdll_version_rc.o \ $(OBJS)\webviewdll_webview_ie.o \ + $(OBJS)\webviewdll_webview_edge.o \ $(OBJS)\webviewdll_webview.o \ $(OBJS)\webviewdll_webviewarchivehandler.o \ - $(OBJS)\webviewdll_webviewfshandler.o + $(OBJS)\webviewdll_webviewfshandler.o \ + $(OBJS)\webviewdll_version_rc.o WEBVIEWLIB_CXXFLAGS = $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) \ $(GCCFLAGS) -DHAVE_W32API_H -D__WXMSW__ $(__WXUNIV_DEFINE_p) \ $(__DEBUG_DEFINE_p) $(__NDEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) \ @@ -1143,11 +1145,12 @@ WEBVIEWLIB_CXXFLAGS = $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) \ -I$(SETUPHDIR) -I..\..\include $(____CAIRO_INCLUDEDIR_FILENAMES) -W -Wall \ -DWXBUILDING -I..\..\src\tiff\libtiff -I..\..\src\jpeg -I..\..\src\png \ -I..\..\src\zlib -I..\..\src\regex -I..\..\src\expat\expat\lib \ - $(__RTTIFLAG) $(__EXCEPTIONSFLAG) -Wno-ctor-dtor-privacy $(CPPFLAGS) \ - $(CXXFLAGS) + -I..\..\3rdparty\webview2\build\native\include $(__RTTIFLAG) \ + $(__EXCEPTIONSFLAG) -Wno-ctor-dtor-privacy $(CPPFLAGS) $(CXXFLAGS) WEBVIEWLIB_OBJECTS = \ $(OBJS)\webviewlib_dummy.o \ $(OBJS)\webviewlib_webview_ie.o \ + $(OBJS)\webviewlib_webview_edge.o \ $(OBJS)\webviewlib_webview.o \ $(OBJS)\webviewlib_webviewarchivehandler.o \ $(OBJS)\webviewlib_webviewfshandler.o @@ -1702,6 +1705,7 @@ ____MONOLIB_GUI_SRC_FILENAMES_OBJECTS = \ $(OBJS)\monodll_winpars.o \ $(OBJS)\monodll_htmllbox.o \ $(OBJS)\monodll_webview_ie.o \ + $(OBJS)\monodll_webview_edge.o \ $(OBJS)\monodll_webview.o \ $(OBJS)\monodll_webviewarchivehandler.o \ $(OBJS)\monodll_webviewfshandler.o \ @@ -2541,6 +2545,7 @@ ____MONOLIB_GUI_SRC_FILENAMES_1_OBJECTS = \ $(OBJS)\monolib_winpars.o \ $(OBJS)\monolib_htmllbox.o \ $(OBJS)\monolib_webview_ie.o \ + $(OBJS)\monolib_webview_edge.o \ $(OBJS)\monolib_webview.o \ $(OBJS)\monolib_webviewarchivehandler.o \ $(OBJS)\monolib_webviewfshandler.o \ @@ -5540,7 +5545,7 @@ ifeq ($(MONOLITHIC),0) ifeq ($(SHARED),1) ifeq ($(USE_GUI),1) ifeq ($(USE_WEBVIEW),1) -$(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_webview$(WXCOMPILER)$(VENDORTAG).dll: $(WEBVIEWDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\libwxexpat$(WXDEBUGFLAG).a $(LIBDIRNAME)\libwxzlib$(WXDEBUGFLAG).a $(LIBDIRNAME)\libwxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).a $(OBJS)\webviewdll_version_rc.o $(__coredll___depname) $(__basedll___depname) +$(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_webview$(WXCOMPILER)$(VENDORTAG).dll: $(WEBVIEWDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\libwxexpat$(WXDEBUGFLAG).a $(LIBDIRNAME)\libwxzlib$(WXDEBUGFLAG).a $(LIBDIRNAME)\libwxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).a $(__coredll___depname) $(__basedll___depname) $(OBJS)\webviewdll_version_rc.o $(foreach f,$(subst \,/,$(WEBVIEWDLL_OBJECTS)),$(shell echo $f >> $(subst \,/,$@).rsp.tmp)) @move /y $@.rsp.tmp $@.rsp >nul $(CXX) $(LINK_DLL_FLAGS) -fPIC -o $@ @$@.rsp $(__DEBUGINFO) $(__THREADSFLAG) -L$(LIBDIRNAME) -Wl,--out-implib=$(LIBDIRNAME)\libwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_webview.a $(____CAIRO_LIBDIR_FILENAMES) $(LDFLAGS) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) -lwxzlib$(WXDEBUGFLAG) -lwxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG) -lwxexpat$(WXDEBUGFLAG) $(EXTRALIBS_FOR_BASE) $(__CAIRO_LIB_p) -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lshlwapi -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lversion -lwsock32 -lwininet -loleacc -luxtheme $(LIBDIRNAME)\libwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core.a $(LIBDIRNAME)\libwxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).a @@ -7540,6 +7545,9 @@ $(OBJS)\monodll_htmllbox.o: ../../src/generic/htmllbox.cpp $(OBJS)\monodll_webview_ie.o: ../../src/msw/webview_ie.cpp $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $< +$(OBJS)\monodll_webview_edge.o: ../../src/msw/webview_edge.cpp + $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $< + $(OBJS)\monodll_webview.o: ../../src/common/webview.cpp $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $< @@ -10092,6 +10100,9 @@ $(OBJS)\monolib_htmllbox.o: ../../src/generic/htmllbox.cpp $(OBJS)\monolib_webview_ie.o: ../../src/msw/webview_ie.cpp $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $< +$(OBJS)\monolib_webview_edge.o: ../../src/msw/webview_edge.cpp + $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $< + $(OBJS)\monolib_webview.o: ../../src/common/webview.cpp $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $< @@ -16281,12 +16292,12 @@ $(OBJS)\htmllib_htmllbox.o: ../../src/generic/htmllbox.cpp $(OBJS)\webviewdll_dummy.o: ../../src/common/dummy.cpp $(CXX) -c -o $@ $(WEBVIEWDLL_CXXFLAGS) $(CPPDEPS) $< -$(OBJS)\webviewdll_version_rc.o: ../../src/msw/version.rc - $(WINDRES) -i$< -o$@ --define wxUSE_DPI_AWARE_MANIFEST=$(USE_DPI_AWARE_MANIFEST) --define __WXMSW__ $(__WXUNIV_DEFINE_p_67) $(__DEBUG_DEFINE_p_66) $(__NDEBUG_DEFINE_p_65) $(__EXCEPTIONS_DEFINE_p_65) $(__RTTI_DEFINE_p_65) $(__THREAD_DEFINE_p_65) $(__UNICODE_DEFINE_p_67) --include-dir $(SETUPHDIR) --include-dir ../../include $(__CAIRO_INCLUDEDIR_p) --define WXBUILDING --define WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_webview$(WXCOMPILER)$(VENDORTAG) --include-dir ../../src/tiff/libtiff --include-dir ../../src/jpeg --include-dir ../../src/png --include-dir ../../src/zlib --include-dir ../../src/regex --include-dir ../../src/expat/expat/lib --define WXUSINGDLL --define WXMAKINGDLL_WEBVIEW - $(OBJS)\webviewdll_webview_ie.o: ../../src/msw/webview_ie.cpp $(CXX) -c -o $@ $(WEBVIEWDLL_CXXFLAGS) $(CPPDEPS) $< +$(OBJS)\webviewdll_webview_edge.o: ../../src/msw/webview_edge.cpp + $(CXX) -c -o $@ $(WEBVIEWDLL_CXXFLAGS) $(CPPDEPS) $< + $(OBJS)\webviewdll_webview.o: ../../src/common/webview.cpp $(CXX) -c -o $@ $(WEBVIEWDLL_CXXFLAGS) $(CPPDEPS) $< @@ -16296,12 +16307,18 @@ $(OBJS)\webviewdll_webviewarchivehandler.o: ../../src/common/webviewarchivehandl $(OBJS)\webviewdll_webviewfshandler.o: ../../src/common/webviewfshandler.cpp $(CXX) -c -o $@ $(WEBVIEWDLL_CXXFLAGS) $(CPPDEPS) $< +$(OBJS)\webviewdll_version_rc.o: ../../src/msw/version.rc + $(WINDRES) -i$< -o$@ --define wxUSE_DPI_AWARE_MANIFEST=$(USE_DPI_AWARE_MANIFEST) --define __WXMSW__ $(__WXUNIV_DEFINE_p_67) $(__DEBUG_DEFINE_p_66) $(__NDEBUG_DEFINE_p_65) $(__EXCEPTIONS_DEFINE_p_65) $(__RTTI_DEFINE_p_65) $(__THREAD_DEFINE_p_65) $(__UNICODE_DEFINE_p_67) --include-dir $(SETUPHDIR) --include-dir ../../include $(__CAIRO_INCLUDEDIR_p) --define WXBUILDING --define WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_webview$(WXCOMPILER)$(VENDORTAG) --include-dir ../../src/tiff/libtiff --include-dir ../../src/jpeg --include-dir ../../src/png --include-dir ../../src/zlib --include-dir ../../src/regex --include-dir ../../src/expat/expat/lib --define WXUSINGDLL --define WXMAKINGDLL_WEBVIEW --include-dir ../../3rdparty/webview2/build/native/include + $(OBJS)\webviewlib_dummy.o: ../../src/common/dummy.cpp $(CXX) -c -o $@ $(WEBVIEWLIB_CXXFLAGS) $(CPPDEPS) $< $(OBJS)\webviewlib_webview_ie.o: ../../src/msw/webview_ie.cpp $(CXX) -c -o $@ $(WEBVIEWLIB_CXXFLAGS) $(CPPDEPS) $< +$(OBJS)\webviewlib_webview_edge.o: ../../src/msw/webview_edge.cpp + $(CXX) -c -o $@ $(WEBVIEWLIB_CXXFLAGS) $(CPPDEPS) $< + $(OBJS)\webviewlib_webview.o: ../../src/common/webview.cpp $(CXX) -c -o $@ $(WEBVIEWLIB_CXXFLAGS) $(CPPDEPS) $< diff --git a/build/msw/makefile.vc b/build/msw/makefile.vc index d5bb450255..8f828728ba 100644 --- a/build/msw/makefile.vc +++ b/build/msw/makefile.vc @@ -1232,11 +1232,13 @@ WEBVIEWDLL_CXXFLAGS = /M$(__RUNTIME_LIBS_333)$(__DEBUGRUNTIME) /DWIN32 \ $(____CAIRO_INCLUDEDIR_FILENAMES) /W4 /DWXBUILDING /I..\..\src\tiff\libtiff \ /I..\..\src\jpeg /I..\..\src\png /I..\..\src\zlib /I..\..\src\regex \ /I..\..\src\expat\expat\lib /DWXUSINGDLL /DWXMAKINGDLL_WEBVIEW \ - $(__RTTIFLAG) $(__EXCEPTIONSFLAG) /Yu"wx/wxprec.h" \ - /Fp"$(OBJS)\wxprec_webviewdll.pch" $(CPPFLAGS) $(CXXFLAGS) + /I..\..\3rdparty\webview2\build\native\include $(__RTTIFLAG) \ + $(__EXCEPTIONSFLAG) /Yu"wx/wxprec.h" /Fp"$(OBJS)\wxprec_webviewdll.pch" \ + $(CPPFLAGS) $(CXXFLAGS) WEBVIEWDLL_OBJECTS = \ $(OBJS)\webviewdll_dummy.obj \ $(OBJS)\webviewdll_webview_ie.obj \ + $(OBJS)\webviewdll_webview_edge.obj \ $(OBJS)\webviewdll_webview.obj \ $(OBJS)\webviewdll_webviewarchivehandler.obj \ $(OBJS)\webviewdll_webviewfshandler.obj @@ -1252,11 +1254,14 @@ WEBVIEWLIB_CXXFLAGS = /M$(__RUNTIME_LIBS_348)$(__DEBUGRUNTIME) /DWIN32 \ $(__THREAD_DEFINE_p) $(__UNICODE_DEFINE_p) /I$(SETUPHDIR) /I..\..\include \ $(____CAIRO_INCLUDEDIR_FILENAMES) /W4 /DWXBUILDING /I..\..\src\tiff\libtiff \ /I..\..\src\jpeg /I..\..\src\png /I..\..\src\zlib /I..\..\src\regex \ - /I..\..\src\expat\expat\lib $(__RTTIFLAG) $(__EXCEPTIONSFLAG) \ - /Yu"wx/wxprec.h" /Fp"$(OBJS)\wxprec_webviewlib.pch" $(CPPFLAGS) $(CXXFLAGS) + /I..\..\src\expat\expat\lib \ + /I..\..\3rdparty\webview2\build\native\include $(__RTTIFLAG) \ + $(__EXCEPTIONSFLAG) /Yu"wx/wxprec.h" /Fp"$(OBJS)\wxprec_webviewlib.pch" \ + $(CPPFLAGS) $(CXXFLAGS) WEBVIEWLIB_OBJECTS = \ $(OBJS)\webviewlib_dummy.obj \ $(OBJS)\webviewlib_webview_ie.obj \ + $(OBJS)\webviewlib_webview_edge.obj \ $(OBJS)\webviewlib_webview.obj \ $(OBJS)\webviewlib_webviewarchivehandler.obj \ $(OBJS)\webviewlib_webviewfshandler.obj @@ -2034,6 +2039,7 @@ ____MONOLIB_GUI_SRC_FILENAMES_OBJECTS = \ $(OBJS)\monodll_winpars.obj \ $(OBJS)\monodll_htmllbox.obj \ $(OBJS)\monodll_webview_ie.obj \ + $(OBJS)\monodll_webview_edge.obj \ $(OBJS)\monodll_webview.obj \ $(OBJS)\monodll_webviewarchivehandler.obj \ $(OBJS)\monodll_webviewfshandler.obj \ @@ -2873,6 +2879,7 @@ ____MONOLIB_GUI_SRC_FILENAMES_1_OBJECTS = \ $(OBJS)\monolib_winpars.obj \ $(OBJS)\monolib_htmllbox.obj \ $(OBJS)\monolib_webview_ie.obj \ + $(OBJS)\monolib_webview_edge.obj \ $(OBJS)\monolib_webview.obj \ $(OBJS)\monolib_webviewarchivehandler.obj \ $(OBJS)\monolib_webviewfshandler.obj \ @@ -6111,7 +6118,7 @@ wxhtml: $(____wxhtml_namedll_DEP) $(____wxhtml_namelib_DEP) !endif !if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "1" && "$(USE_GUI)" == "1" && "$(USE_WEBVIEW)" == "1" -$(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_webview$(WXCOMPILER)$(VENDORTAG).dll: $(OBJS)\webviewdll_dummy.obj $(WEBVIEWDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib $(OBJS)\webviewdll_version.res $(__coredll___depname) $(__basedll___depname) +$(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_webview$(WXCOMPILER)$(VENDORTAG).dll: $(OBJS)\webviewdll_dummy.obj $(WEBVIEWDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib $(__coredll___depname) $(__basedll___depname) $(OBJS)\webviewdll_version.res link /DLL /NOLOGO /OUT:$@ $(__DEBUGINFO_6) /pdb:"$(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_webview$(WXCOMPILER)$(VENDORTAG).pdb" $(__DEBUGINFO_325) $(WIN32_DPI_LINKFLAG) $(LINK_TARGET_CPU) /LIBPATH:$(LIBDIRNAME) $(____CAIRO_LIBDIR_FILENAMES) $(LDFLAGS) @<< $(WEBVIEWDLL_OBJECTS) $(WEBVIEWDLL_RESOURCES) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__CAIRO_LIB_p) kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib shlwapi.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib version.lib wsock32.lib wininet.lib $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core.lib $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib /IMPLIB:$(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_webview.lib << @@ -7984,6 +7991,9 @@ $(OBJS)\monodll_htmllbox.obj: ..\..\src\generic\htmllbox.cpp $(OBJS)\monodll_webview_ie.obj: ..\..\src\msw\webview_ie.cpp $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\msw\webview_ie.cpp +$(OBJS)\monodll_webview_edge.obj: ..\..\src\msw\webview_edge.cpp + $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\msw\webview_edge.cpp + $(OBJS)\monodll_webview.obj: ..\..\src\common\webview.cpp $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\common\webview.cpp @@ -10536,6 +10546,9 @@ $(OBJS)\monolib_htmllbox.obj: ..\..\src\generic\htmllbox.cpp $(OBJS)\monolib_webview_ie.obj: ..\..\src\msw\webview_ie.cpp $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\msw\webview_ie.cpp +$(OBJS)\monolib_webview_edge.obj: ..\..\src\msw\webview_edge.cpp + $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\msw\webview_edge.cpp + $(OBJS)\monolib_webview.obj: ..\..\src\common\webview.cpp $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\webview.cpp @@ -16725,12 +16738,12 @@ $(OBJS)\htmllib_htmllbox.obj: ..\..\src\generic\htmllbox.cpp $(OBJS)\webviewdll_dummy.obj: ..\..\src\common\dummy.cpp $(CXX) /c /nologo /TP /Fo$@ $(WEBVIEWDLL_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp -$(OBJS)\webviewdll_version.res: ..\..\src\msw\version.rc - rc /fo$@ /d WIN32 $(____DEBUGRUNTIME_6) /d _CRT_SECURE_NO_DEPRECATE=1 /d _CRT_NON_CONFORMING_SWPRINTFS=1 /d _SCL_SECURE_NO_WARNINGS=1 $(__NO_VC_CRTDBG_p_72) /d __WXMSW__ $(__WXUNIV_DEFINE_p_67) $(__DEBUG_DEFINE_p_66) $(__NDEBUG_DEFINE_p_65) $(__EXCEPTIONS_DEFINE_p_65) $(__RTTI_DEFINE_p_65) $(__THREAD_DEFINE_p_65) $(__UNICODE_DEFINE_p_67) /i $(SETUPHDIR) /i ..\..\include $(____CAIRO_INCLUDEDIR_FILENAMES_4) /d WXBUILDING /d WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_webview$(WXCOMPILER)$(VENDORTAG) /i ..\..\src\tiff\libtiff /i ..\..\src\jpeg /i ..\..\src\png /i ..\..\src\zlib /i ..\..\src\regex /i ..\..\src\expat\expat\lib /d WXUSINGDLL /d WXMAKINGDLL_WEBVIEW ..\..\src\msw\version.rc - $(OBJS)\webviewdll_webview_ie.obj: ..\..\src\msw\webview_ie.cpp $(CXX) /c /nologo /TP /Fo$@ $(WEBVIEWDLL_CXXFLAGS) ..\..\src\msw\webview_ie.cpp +$(OBJS)\webviewdll_webview_edge.obj: ..\..\src\msw\webview_edge.cpp + $(CXX) /c /nologo /TP /Fo$@ $(WEBVIEWDLL_CXXFLAGS) ..\..\src\msw\webview_edge.cpp + $(OBJS)\webviewdll_webview.obj: ..\..\src\common\webview.cpp $(CXX) /c /nologo /TP /Fo$@ $(WEBVIEWDLL_CXXFLAGS) ..\..\src\common\webview.cpp @@ -16740,12 +16753,18 @@ $(OBJS)\webviewdll_webviewarchivehandler.obj: ..\..\src\common\webviewarchivehan $(OBJS)\webviewdll_webviewfshandler.obj: ..\..\src\common\webviewfshandler.cpp $(CXX) /c /nologo /TP /Fo$@ $(WEBVIEWDLL_CXXFLAGS) ..\..\src\common\webviewfshandler.cpp +$(OBJS)\webviewdll_version.res: ..\..\src\msw\version.rc + rc /fo$@ /d WIN32 $(____DEBUGRUNTIME_6) /d _CRT_SECURE_NO_DEPRECATE=1 /d _CRT_NON_CONFORMING_SWPRINTFS=1 /d _SCL_SECURE_NO_WARNINGS=1 $(__NO_VC_CRTDBG_p_72) /d __WXMSW__ $(__WXUNIV_DEFINE_p_67) $(__DEBUG_DEFINE_p_66) $(__NDEBUG_DEFINE_p_65) $(__EXCEPTIONS_DEFINE_p_65) $(__RTTI_DEFINE_p_65) $(__THREAD_DEFINE_p_65) $(__UNICODE_DEFINE_p_67) /i $(SETUPHDIR) /i ..\..\include $(____CAIRO_INCLUDEDIR_FILENAMES_4) /d WXBUILDING /d WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_webview$(WXCOMPILER)$(VENDORTAG) /i ..\..\src\tiff\libtiff /i ..\..\src\jpeg /i ..\..\src\png /i ..\..\src\zlib /i ..\..\src\regex /i ..\..\src\expat\expat\lib /d WXUSINGDLL /d WXMAKINGDLL_WEBVIEW /i ..\..\3rdparty\webview2\build\native\include ..\..\src\msw\version.rc + $(OBJS)\webviewlib_dummy.obj: ..\..\src\common\dummy.cpp $(CXX) /c /nologo /TP /Fo$@ $(WEBVIEWLIB_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp $(OBJS)\webviewlib_webview_ie.obj: ..\..\src\msw\webview_ie.cpp $(CXX) /c /nologo /TP /Fo$@ $(WEBVIEWLIB_CXXFLAGS) ..\..\src\msw\webview_ie.cpp +$(OBJS)\webviewlib_webview_edge.obj: ..\..\src\msw\webview_edge.cpp + $(CXX) /c /nologo /TP /Fo$@ $(WEBVIEWLIB_CXXFLAGS) ..\..\src\msw\webview_edge.cpp + $(OBJS)\webviewlib_webview.obj: ..\..\src\common\webview.cpp $(CXX) /c /nologo /TP /Fo$@ $(WEBVIEWLIB_CXXFLAGS) ..\..\src\common\webview.cpp diff --git a/build/msw/wx_vc7_core.vcproj b/build/msw/wx_vc7_core.vcproj index c68a883d47..55c4d683e1 100644 --- a/build/msw/wx_vc7_core.vcproj +++ b/build/msw/wx_vc7_core.vcproj @@ -1793,6 +1793,9 @@ + + diff --git a/build/msw/wx_vc7_webview.vcproj b/build/msw/wx_vc7_webview.vcproj index dc9d7c4519..1c72c3dd22 100644 --- a/build/msw/wx_vc7_webview.vcproj +++ b/build/msw/wx_vc7_webview.vcproj @@ -27,7 +27,7 @@ + AdditionalIncludeDirectories="..\..\lib\vc_lib\mswud;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\expat\lib;..\..\3rdparty\webview2\build\native\include"/> + AdditionalIncludeDirectories="..\..\lib\vc_lib\mswud;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\expat\lib;..\..\3rdparty\webview2\build\native\include"/> + AdditionalIncludeDirectories="..\..\lib\vc_lib\mswu;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\expat\lib;..\..\3rdparty\webview2\build\native\include"/> + AdditionalIncludeDirectories="..\..\lib\vc_lib\mswu;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\expat\lib;..\..\3rdparty\webview2\build\native\include"/> + AdditionalIncludeDirectories="..\..\lib\vc_dll\mswud;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\expat\lib;..\..\3rdparty\webview2\build\native\include"/> + AdditionalIncludeDirectories="..\..\lib\vc_dll\mswud;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\expat\lib;..\..\3rdparty\webview2\build\native\include"/> + AdditionalIncludeDirectories="..\..\lib\vc_dll\mswu;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\expat\lib;..\..\3rdparty\webview2\build\native\include"/> + AdditionalIncludeDirectories="..\..\lib\vc_dll\mswu;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\expat\lib;..\..\3rdparty\webview2\build\native\include"/> + + @@ -421,6 +424,9 @@ AdditionalDependencies=""..\..\lib\vc_dll\mswu\wx\msw""/> + + diff --git a/build/msw/wx_vc8_core.vcproj b/build/msw/wx_vc8_core.vcproj index 6cbef6dee7..3cb6c2ee35 100644 --- a/build/msw/wx_vc8_core.vcproj +++ b/build/msw/wx_vc8_core.vcproj @@ -2893,6 +2893,10 @@ RelativePath="..\..\include\wx\msw\uxtheme.h" > + + diff --git a/build/msw/wx_vc8_webview.vcproj b/build/msw/wx_vc8_webview.vcproj index 47c4496db4..61ceb1174c 100644 --- a/build/msw/wx_vc8_webview.vcproj +++ b/build/msw/wx_vc8_webview.vcproj @@ -48,12 +48,12 @@ + + @@ -1064,6 +1068,10 @@ /> + + diff --git a/build/msw/wx_vc9_core.vcproj b/build/msw/wx_vc9_core.vcproj index e99e775b5a..eea014effd 100644 --- a/build/msw/wx_vc9_core.vcproj +++ b/build/msw/wx_vc9_core.vcproj @@ -2889,6 +2889,10 @@ RelativePath="..\..\include\wx\msw\uxtheme.h" > + + diff --git a/build/msw/wx_vc9_webview.vcproj b/build/msw/wx_vc9_webview.vcproj index 1d434bcda9..597702e788 100644 --- a/build/msw/wx_vc9_webview.vcproj +++ b/build/msw/wx_vc9_webview.vcproj @@ -48,13 +48,13 @@ + + @@ -1060,6 +1064,10 @@ /> + + diff --git a/build/msw/wx_webview.vcxproj b/build/msw/wx_webview.vcxproj index bfb29eaab2..3dbcbd65ad 100644 --- a/build/msw/wx_webview.vcxproj +++ b/build/msw/wx_webview.vcxproj @@ -138,7 +138,7 @@ Disabled - $(OutDir)$(wxIncSubDir);..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib;%(AdditionalIncludeDirectories) + $(OutDir)$(wxIncSubDir);..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib;..\..\3rdparty\webview2\build\native\include;%(AdditionalIncludeDirectories) WIN32;_LIB;_DEBUG;_CRT_SECURE_NO_DEPRECATE=1;_CRT_NON_CONFORMING_SWPRINTFS=1;_SCL_SECURE_NO_WARNINGS=1;__WXMSW__;_UNICODE;WXBUILDING;%(PreprocessorDefinitions) Sync EnableFastChecks @@ -173,7 +173,7 @@ Disabled - $(OutDir)$(wxIncSubDir);..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib;%(AdditionalIncludeDirectories) + $(OutDir)$(wxIncSubDir);..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib;..\..\3rdparty\webview2\build\native\include;%(AdditionalIncludeDirectories) WIN32;_LIB;_DEBUG;_CRT_SECURE_NO_DEPRECATE=1;_CRT_NON_CONFORMING_SWPRINTFS=1;_SCL_SECURE_NO_WARNINGS=1;__WXMSW__;_UNICODE;WXBUILDING;%(PreprocessorDefinitions) Sync EnableFastChecks @@ -209,7 +209,7 @@ MaxSpeed - $(OutDir)$(wxIncSubDir);..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib;%(AdditionalIncludeDirectories) + $(OutDir)$(wxIncSubDir);..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib;..\..\3rdparty\webview2\build\native\include;%(AdditionalIncludeDirectories) WIN32;_LIB;_CRT_SECURE_NO_DEPRECATE=1;_CRT_NON_CONFORMING_SWPRINTFS=1;_SCL_SECURE_NO_WARNINGS=1;__WXMSW__;NDEBUG;_UNICODE;WXBUILDING;%(PreprocessorDefinitions) Sync MultiThreadedDLL @@ -247,7 +247,7 @@ MaxSpeed - $(OutDir)$(wxIncSubDir);..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib;%(AdditionalIncludeDirectories) + $(OutDir)$(wxIncSubDir);..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib;..\..\3rdparty\webview2\build\native\include;%(AdditionalIncludeDirectories) WIN32;_LIB;_CRT_SECURE_NO_DEPRECATE=1;_CRT_NON_CONFORMING_SWPRINTFS=1;_SCL_SECURE_NO_WARNINGS=1;__WXMSW__;NDEBUG;_UNICODE;WXBUILDING;%(PreprocessorDefinitions) Sync MultiThreadedDLL @@ -284,7 +284,7 @@ Disabled - $(OutDir)$(wxIncSubDir);..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib;%(AdditionalIncludeDirectories) + $(OutDir)$(wxIncSubDir);..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib;..\..\3rdparty\webview2\build\native\include;%(AdditionalIncludeDirectories) WIN32;_USRDLL;DLL_EXPORTS;_DEBUG;_CRT_SECURE_NO_DEPRECATE=1;_CRT_NON_CONFORMING_SWPRINTFS=1;_SCL_SECURE_NO_WARNINGS=1;__WXMSW__;_UNICODE;WXBUILDING;WXUSINGDLL;WXMAKINGDLL_WEBVIEW;%(PreprocessorDefinitions) Sync EnableFastChecks @@ -325,7 +325,7 @@ Disabled - $(OutDir)$(wxIncSubDir);..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib;%(AdditionalIncludeDirectories) + $(OutDir)$(wxIncSubDir);..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib;..\..\3rdparty\webview2\build\native\include;%(AdditionalIncludeDirectories) WIN32;_USRDLL;DLL_EXPORTS;_DEBUG;_CRT_SECURE_NO_DEPRECATE=1;_CRT_NON_CONFORMING_SWPRINTFS=1;_SCL_SECURE_NO_WARNINGS=1;__WXMSW__;_UNICODE;WXBUILDING;WXUSINGDLL;WXMAKINGDLL_WEBVIEW;%(PreprocessorDefinitions) Sync EnableFastChecks @@ -365,7 +365,7 @@ MaxSpeed - $(OutDir)$(wxIncSubDir);..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib;%(AdditionalIncludeDirectories) + $(OutDir)$(wxIncSubDir);..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib;..\..\3rdparty\webview2\build\native\include;%(AdditionalIncludeDirectories) WIN32;_USRDLL;DLL_EXPORTS;_CRT_SECURE_NO_DEPRECATE=1;_CRT_NON_CONFORMING_SWPRINTFS=1;_SCL_SECURE_NO_WARNINGS=1;__WXMSW__;NDEBUG;_UNICODE;WXBUILDING;WXUSINGDLL;WXMAKINGDLL_WEBVIEW;%(PreprocessorDefinitions) Sync MultiThreadedDLL @@ -409,7 +409,7 @@ MaxSpeed - $(OutDir)$(wxIncSubDir);..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib;%(AdditionalIncludeDirectories) + $(OutDir)$(wxIncSubDir);..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib;..\..\3rdparty\webview2\build\native\include;%(AdditionalIncludeDirectories) WIN32;_USRDLL;DLL_EXPORTS;_CRT_SECURE_NO_DEPRECATE=1;_CRT_NON_CONFORMING_SWPRINTFS=1;_SCL_SECURE_NO_WARNINGS=1;__WXMSW__;NDEBUG;_UNICODE;WXBUILDING;WXUSINGDLL;WXMAKINGDLL_WEBVIEW;%(PreprocessorDefinitions) Sync MultiThreadedDLL @@ -460,6 +460,7 @@ + @@ -495,9 +496,9 @@ - + - \ No newline at end of file + diff --git a/build/msw/wx_webview.vcxproj.filters b/build/msw/wx_webview.vcxproj.filters index 3dda95cd8a..a53014e96b 100644 --- a/build/msw/wx_webview.vcxproj.filters +++ b/build/msw/wx_webview.vcxproj.filters @@ -30,6 +30,9 @@ Common Sources + + MSW Sources + MSW Sources @@ -40,10 +43,10 @@ - + MSW Headers - + MSW Headers diff --git a/include/wx/android/setup.h b/include/wx/android/setup.h index 0906ca46b3..af4585828d 100644 --- a/include/wx/android/setup.h +++ b/include/wx/android/setup.h @@ -759,6 +759,13 @@ #define wxUSE_WEBVIEW_IE 0 #endif +// Use the Edge (Chromium) wxWebView backend (Requires WebView2 SDK) +// +// Default is 0 because WebView2 is not always available, set it to 1 if you do have it. +// +// Recommended setting: 1 when building for Windows with WebView2 SDK +#define wxUSE_WEBVIEW_EDGE 0 + // Use the WebKit wxWebView backend // // Default is 1 on GTK and OSX @@ -1552,7 +1559,6 @@ #define wxUSE_THEME_MONO 0 #define wxUSE_THEME_WIN32 0 - /* --- end common options --- */ /* --- start MSW options --- */ diff --git a/include/wx/chkconf.h b/include/wx/chkconf.h index 47c9f9c489..9d0e7f743c 100644 --- a/include/wx/chkconf.h +++ b/include/wx/chkconf.h @@ -2290,7 +2290,8 @@ # endif #endif /* wxUSE_TREELISTCTRL */ -#if wxUSE_WEBVIEW && !(wxUSE_WEBVIEW_WEBKIT || wxUSE_WEBVIEW_WEBKIT2 || wxUSE_WEBVIEW_IE) +#if wxUSE_WEBVIEW && !(wxUSE_WEBVIEW_WEBKIT || wxUSE_WEBVIEW_WEBKIT2 || \ + wxUSE_WEBVIEW_IE || wxUSE_WEBVIEW_EDGE) # ifdef wxABORT_ON_CONFIG_ERROR # error "wxUSE_WEBVIEW requires at least one backend" # else diff --git a/include/wx/gtk/setup0.h b/include/wx/gtk/setup0.h index 8355fbf4b3..639f912d52 100644 --- a/include/wx/gtk/setup0.h +++ b/include/wx/gtk/setup0.h @@ -760,6 +760,13 @@ #define wxUSE_WEBVIEW_IE 0 #endif +// Use the Edge (Chromium) wxWebView backend (Requires WebView2 SDK) +// +// Default is 0 because WebView2 is not always available, set it to 1 if you do have it. +// +// Recommended setting: 1 when building for Windows with WebView2 SDK +#define wxUSE_WEBVIEW_EDGE 0 + // Use the WebKit wxWebView backend // // Default is 1 on GTK and OSX @@ -1553,7 +1560,6 @@ #define wxUSE_THEME_MONO 0 #define wxUSE_THEME_WIN32 0 - /* --- end common options --- */ /* --- start MSW options --- */ diff --git a/include/wx/motif/setup0.h b/include/wx/motif/setup0.h index 8d9bc1f23d..7f7ff9eb8a 100644 --- a/include/wx/motif/setup0.h +++ b/include/wx/motif/setup0.h @@ -760,6 +760,13 @@ #define wxUSE_WEBVIEW_IE 0 #endif +// Use the Edge (Chromium) wxWebView backend (Requires WebView2 SDK) +// +// Default is 0 because WebView2 is not always available, set it to 1 if you do have it. +// +// Recommended setting: 1 when building for Windows with WebView2 SDK +#define wxUSE_WEBVIEW_EDGE 0 + // Use the WebKit wxWebView backend // // Default is 1 on GTK and OSX @@ -1553,7 +1560,6 @@ #define wxUSE_THEME_MONO 0 #define wxUSE_THEME_WIN32 0 - /* --- end common options --- */ #endif // _WX_SETUP_H_ diff --git a/include/wx/msw/private/webview_edge.h b/include/wx/msw/private/webview_edge.h new file mode 100644 index 0000000000..c5c05448c4 --- /dev/null +++ b/include/wx/msw/private/webview_edge.h @@ -0,0 +1,71 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: include/wx/msw/private/webview_edge.h +// Purpose: wxMSW Edge Chromium wxWebView backend private classes +// Author: Tobias Taschner +// Created: 2020-01-15 +// Copyright: (c) 2020 wxWidgets development team +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef wxWebViewEdge_PRIVATE_H +#define wxWebViewEdge_PRIVATE_H + +#include "wx/dynlib.h" +#include "wx/msw/private/comptr.h" + +#include + +class wxWebViewEdgeImpl +{ +public: + explicit wxWebViewEdgeImpl(wxWebViewEdge* webview); + ~wxWebViewEdgeImpl(); + + bool Create(); + + wxWebViewEdge* m_ctrl; + + wxCOMPtr m_webViewEnvironment; + wxCOMPtr m_webView; + + bool m_initialized; + bool m_isBusy; + wxString m_pendingURL; + + // WebView Events tokens + EventRegistrationToken m_navigationStartingToken = { }; + EventRegistrationToken m_navigationCompletedToken = { }; + EventRegistrationToken m_newWindowRequestedToken = { }; + EventRegistrationToken m_documentTitleChangedToken = { }; + EventRegistrationToken m_documentStateChangedToken = { }; + + // WebView Event handlers + HRESULT OnNavigationStarting(IWebView2WebView* sender, IWebView2NavigationStartingEventArgs* args); + HRESULT OnNavigationCompleted(IWebView2WebView* sender, IWebView2NavigationCompletedEventArgs* args); + HRESULT OnNewWindowRequested(IWebView2WebView* sender, IWebView2NewWindowRequestedEventArgs* args); + HRESULT OnDocumentTitleChanged(IWebView2WebView* sender, IUnknown* args); + HRESULT OnDocumentStateChanged(IWebView2WebView* sender, IWebView2DocumentStateChangedEventArgs* args); + + HRESULT OnEnvironmentCreated(HRESULT result, IWebView2Environment* environment); + HRESULT OnWebViewCreated(HRESULT result, IWebView2WebView* webview); + + wxVector > m_historyList; + int m_historyPosition; + bool m_historyLoadingFromList; + bool m_historyEnabled; + + void UpdateBounds(); + + IWebView2Settings2* GetSettings(); + + static int ms_isAvailable; + static wxDynamicLibrary ms_loaderDll; + + static bool Initialize(); + + static void Uninitalize(); + + friend class wxWebViewEdgeModule; +}; + +#endif // wxWebViewEdge_PRIVATE_H diff --git a/include/wx/msw/setup0.h b/include/wx/msw/setup0.h index 22ba9acf3b..e7b9d06668 100644 --- a/include/wx/msw/setup0.h +++ b/include/wx/msw/setup0.h @@ -760,6 +760,13 @@ #define wxUSE_WEBVIEW_IE 0 #endif +// Use the Edge (Chromium) wxWebView backend (Requires WebView2 SDK) +// +// Default is 0 because WebView2 is not always available, set it to 1 if you do have it. +// +// Recommended setting: 1 when building for Windows with WebView2 SDK +#define wxUSE_WEBVIEW_EDGE 0 + // Use the WebKit wxWebView backend // // Default is 1 on GTK and OSX @@ -1553,7 +1560,6 @@ #define wxUSE_THEME_MONO 0 #define wxUSE_THEME_WIN32 0 - /* --- end common options --- */ /* --- start MSW options --- */ diff --git a/include/wx/msw/webview_edge.h b/include/wx/msw/webview_edge.h new file mode 100644 index 0000000000..e1ccdcefab --- /dev/null +++ b/include/wx/msw/webview_edge.h @@ -0,0 +1,158 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: include/wx/msw/webview_edge.h +// Purpose: wxMSW Edge Chromium wxWebView backend +// Author: Markus Pingel +// Created: 2019-12-15 +// Copyright: (c) 2019 wxWidgets development team +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef wxWebViewEdge_H +#define wxWebViewEdge_H + +#include "wx/setup.h" + +#if wxUSE_WEBVIEW && wxUSE_WEBVIEW_EDGE && defined(__WXMSW__) + +#include "wx/control.h" +#include "wx/webview.h" + +class wxWebViewEdgeImpl; + +class WXDLLIMPEXP_WEBVIEW wxWebViewEdge : public wxWebView +{ +public: + + wxWebViewEdge() {} + + wxWebViewEdge(wxWindow* parent, + wxWindowID id, + const wxString& url = wxWebViewDefaultURLStr, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0, + const wxString& name = wxWebViewNameStr) + { + Create(parent, id, url, pos, size, style, name); + } + + ~wxWebViewEdge(); + + bool Create(wxWindow* parent, + wxWindowID id, + const wxString& url = wxWebViewDefaultURLStr, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0, + const wxString& name = wxWebViewNameStr) wxOVERRIDE; + + virtual void LoadURL(const wxString& url) wxOVERRIDE; + virtual void LoadHistoryItem(wxSharedPtr item) wxOVERRIDE; + virtual wxVector > GetBackwardHistory() wxOVERRIDE; + virtual wxVector > GetForwardHistory() wxOVERRIDE; + + virtual bool CanGoForward() const wxOVERRIDE; + virtual bool CanGoBack() const wxOVERRIDE; + virtual void GoBack() wxOVERRIDE; + virtual void GoForward() wxOVERRIDE; + virtual void ClearHistory() wxOVERRIDE; + virtual void EnableHistory(bool enable = true) wxOVERRIDE; + virtual void Stop() wxOVERRIDE; + virtual void Reload(wxWebViewReloadFlags flags = wxWEBVIEW_RELOAD_DEFAULT) wxOVERRIDE; + + virtual wxString GetPageSource() const wxOVERRIDE; + virtual wxString GetPageText() const wxOVERRIDE; + + virtual bool IsBusy() const wxOVERRIDE; + virtual wxString GetCurrentURL() const wxOVERRIDE; + virtual wxString GetCurrentTitle() const wxOVERRIDE; + + virtual void SetZoomType(wxWebViewZoomType) wxOVERRIDE; + virtual wxWebViewZoomType GetZoomType() const wxOVERRIDE; + virtual bool CanSetZoomType(wxWebViewZoomType type) const wxOVERRIDE; + + virtual void Print() wxOVERRIDE; + + virtual wxWebViewZoom GetZoom() const wxOVERRIDE; + virtual void SetZoom(wxWebViewZoom zoom) wxOVERRIDE; + + //Clipboard functions + virtual bool CanCut() const wxOVERRIDE; + virtual bool CanCopy() const wxOVERRIDE; + virtual bool CanPaste() const wxOVERRIDE; + virtual void Cut() wxOVERRIDE; + virtual void Copy() wxOVERRIDE; + virtual void Paste() wxOVERRIDE; + + //Undo / redo functionality + virtual bool CanUndo() const wxOVERRIDE; + virtual bool CanRedo() const wxOVERRIDE; + virtual void Undo() wxOVERRIDE; + virtual void Redo() wxOVERRIDE; + + //Find function + virtual long Find(const wxString& text, int flags = wxWEBVIEW_FIND_DEFAULT) wxOVERRIDE; + + //Editing functions + virtual void SetEditable(bool enable = true) wxOVERRIDE; + virtual bool IsEditable() const wxOVERRIDE; + + //Selection + virtual void SelectAll() wxOVERRIDE; + virtual bool HasSelection() const wxOVERRIDE; + virtual void DeleteSelection() wxOVERRIDE; + virtual wxString GetSelectedText() const wxOVERRIDE; + virtual wxString GetSelectedSource() const wxOVERRIDE; + virtual void ClearSelection() wxOVERRIDE; + + virtual void EnableContextMenu(bool enable = true) wxOVERRIDE; + virtual bool IsContextMenuEnabled() const wxOVERRIDE; + + virtual void EnableAccessToDevTools(bool enable = true) wxOVERRIDE; + virtual bool IsAccessToDevToolsEnabled() const wxOVERRIDE; + + bool QueryCommandEnabled(const wxString& command) const; + void ExecCommand(const wxString& command); + + virtual bool RunScript(const wxString& javascript, wxString* output = NULL) wxOVERRIDE; + + virtual void RegisterHandler(wxSharedPtr handler) wxOVERRIDE; + + virtual void* GetNativeBackend() const wxOVERRIDE; + + // ---- Edge-specific methods + + static bool IsAvailable(); + +protected: + virtual void DoSetPage(const wxString& html, const wxString& baseUrl) wxOVERRIDE; + +private: + wxWebViewEdgeImpl* m_impl; + + void OnSize(wxSizeEvent& event); + + bool RunScriptSync(const wxString& javascript, wxString* output = NULL); + + wxDECLARE_DYNAMIC_CLASS(wxWebViewEdge); +}; + +class WXDLLIMPEXP_WEBVIEW wxWebViewFactoryEdge : public wxWebViewFactory +{ +public: + virtual wxWebView* Create() wxOVERRIDE { return new wxWebViewEdge; } + virtual wxWebView* Create(wxWindow* parent, + wxWindowID id, + const wxString& url = wxWebViewDefaultURLStr, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0, + const wxString& name = wxWebViewNameStr) wxOVERRIDE + { + return new wxWebViewEdge(parent, id, url, pos, size, style, name); + } +}; + +#endif // wxUSE_WEBVIEW && wxUSE_WEBVIEW_EDGE && defined(__WXMSW__) + +#endif // wxWebViewEdge_H diff --git a/include/wx/msw/webviewhistoryitem_ie.h b/include/wx/msw/webviewhistoryitem_ie.h index 6edfbb3932..b34dd08f06 100644 --- a/include/wx/msw/webviewhistoryitem_ie.h +++ b/include/wx/msw/webviewhistoryitem_ie.h @@ -11,7 +11,7 @@ #include "wx/setup.h" -#if wxUSE_WEBVIEW && wxUSE_WEBVIEW_IE && defined(__WXMSW__) +#if wxUSE_WEBVIEW && (wxUSE_WEBVIEW_IE || wxUSE_WEBVIEW_EDGE) && defined(__WXMSW__) class WXDLLIMPEXP_WEBVIEW wxWebViewHistoryItem { diff --git a/include/wx/osx/setup0.h b/include/wx/osx/setup0.h index dcf2fc0333..d45ea59db7 100644 --- a/include/wx/osx/setup0.h +++ b/include/wx/osx/setup0.h @@ -766,6 +766,13 @@ #define wxUSE_WEBVIEW_IE 0 #endif +// Use the Edge (Chromium) wxWebView backend (Requires WebView2 SDK) +// +// Default is 0 because WebView2 is not always available, set it to 1 if you do have it. +// +// Recommended setting: 1 when building for Windows with WebView2 SDK +#define wxUSE_WEBVIEW_EDGE 0 + // Use the WebKit wxWebView backend // // Default is 1 on GTK and OSX @@ -1559,7 +1566,6 @@ #define wxUSE_THEME_MONO 0 #define wxUSE_THEME_WIN32 0 - /* --- end common options --- */ /* --- start OSX options --- */ diff --git a/include/wx/private/json.h b/include/wx/private/json.h new file mode 100644 index 0000000000..f9ddff7fca --- /dev/null +++ b/include/wx/private/json.h @@ -0,0 +1,87 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/private/json.h +// Purpose: Helper functions to handle JSON data +// Author: Tobias Taschner +// Created: 2020-01-17 +// Copyright: (c) 2020 wxWidgets development team +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_PRIVATE_JSON_H_ +#define _WX_PRIVATE_JSON_H_ + +namespace wxJSON +{ + +// Decode a string literal including escape sequences +// Returns false if the input string is not a valid JSON string +bool DecodeString(const wxString& in, wxString* out) +{ + const wxWCharBuffer buf = in.wc_str(); + const wchar_t* ch = buf.data(); + // String has to chart with a quote + if (*(ch++) != '"') + return false; + out->reserve(buf.length()); + const wchar_t* end = buf.data() + buf.length() - 1; + for (; ch < end; ++ch) + { + if (*ch == '\\') + { + switch (*(++ch)) + { + case 'b': + out->append('\b'); + break; + case 'n': + out->append('\n'); + break; + case 'r': + out->append('\r'); + break; + case 't': + out->append('\t'); + break; + case 'f': + out->append('\f'); + break; + case '/': + out->append('/'); + break; + case '"': + out->append('"'); + break; + case '\\': + out->append('\\'); + break; + case 'u': +#if SIZEOF_WCHAR_T == 2 + // In this case, we handle surrogates without doing anything special was wchar_t strings use UTF-17 encoding. + if (wxIsxdigit(ch[1]) && wxIsxdigit(ch[2]) && + wxIsxdigit(ch[3]) && wxIsxdigit(ch[4])) + { + wchar_t uchar = wxHexToDec(wxString(&ch[3], 2)) | + wxHexToDec(wxString(&ch[1], 2)) >> 8; + out->append(uchar); + ch += 4; + } +#else + #error Implement correct surrogate handling. +#endif + break; + default: + return false; + break; + } + } + else + out->append(*ch); + } + + // String has to end with a quote + return (*ch) == '"'; +} + +} // namespace JSON + +#endif // _WX_PRIVATE_JSON_H_ diff --git a/include/wx/private/jsscriptwrapper.h b/include/wx/private/jsscriptwrapper.h index 4bd061197e..e60070fc1e 100644 --- a/include/wx/private/jsscriptwrapper.h +++ b/include/wx/private/jsscriptwrapper.h @@ -150,6 +150,8 @@ public: #endif } + const wxString& GetUnwrappedOutputCode() { return m_outputVarName; } + // Execute the code returned by this function to let the output of the code // we executed be garbage-collected. wxString GetCleanUpCode() const diff --git a/include/wx/setup_inc.h b/include/wx/setup_inc.h index 76b0149ffe..99e95fd8b7 100644 --- a/include/wx/setup_inc.h +++ b/include/wx/setup_inc.h @@ -756,6 +756,13 @@ #define wxUSE_WEBVIEW_IE 0 #endif +// Use the Edge (Chromium) wxWebView backend (Requires WebView2 SDK) +// +// Default is 0 because WebView2 is not always available, set it to 1 if you do have it. +// +// Recommended setting: 1 when building for Windows with WebView2 SDK +#define wxUSE_WEBVIEW_EDGE 0 + // Use the WebKit wxWebView backend // // Default is 1 on GTK and OSX @@ -1549,4 +1556,3 @@ #define wxUSE_THEME_MONO 0 #define wxUSE_THEME_WIN32 0 - diff --git a/include/wx/univ/setup0.h b/include/wx/univ/setup0.h index 35f85aa0a2..7c2852039b 100644 --- a/include/wx/univ/setup0.h +++ b/include/wx/univ/setup0.h @@ -759,6 +759,13 @@ #define wxUSE_WEBVIEW_IE 0 #endif +// Use the Edge (Chromium) wxWebView backend (Requires WebView2 SDK) +// +// Default is 0 because WebView2 is not always available, set it to 1 if you do have it. +// +// Recommended setting: 1 when building for Windows with WebView2 SDK +#define wxUSE_WEBVIEW_EDGE 0 + // Use the WebKit wxWebView backend // // Default is 1 on GTK and OSX @@ -1552,7 +1559,6 @@ #define wxUSE_THEME_MONO 0 #define wxUSE_THEME_WIN32 0 - /* --- end common options --- */ /* --- start MSW options --- */ diff --git a/include/wx/webview.h b/include/wx/webview.h index 9975325392..9573ac99bf 100644 --- a/include/wx/webview.h +++ b/include/wx/webview.h @@ -101,6 +101,7 @@ extern WXDLLIMPEXP_DATA_WEBVIEW(const char) wxWebViewNameStr[]; extern WXDLLIMPEXP_DATA_WEBVIEW(const char) wxWebViewDefaultURLStr[]; extern WXDLLIMPEXP_DATA_WEBVIEW(const char) wxWebViewBackendDefault[]; extern WXDLLIMPEXP_DATA_WEBVIEW(const char) wxWebViewBackendIE[]; +extern WXDLLIMPEXP_DATA_WEBVIEW(const char) wxWebViewBackendEdge[]; extern WXDLLIMPEXP_DATA_WEBVIEW(const char) wxWebViewBackendWebKit[]; class WXDLLIMPEXP_WEBVIEW wxWebViewFactory : public wxObject @@ -151,12 +152,14 @@ public: static void RegisterFactory(const wxString& backend, wxSharedPtr factory); + static bool IsBackendAvailable(const wxString& backend); // General methods virtual void EnableContextMenu(bool enable = true) { m_showMenu = enable; } + virtual void EnableAccessToDevTools(bool WXUNUSED(enable) = true) { } virtual wxString GetCurrentTitle() const = 0; virtual wxString GetCurrentURL() const = 0; // TODO: handle choosing a frame when calling GetPageSource()? @@ -164,6 +167,7 @@ public: virtual wxString GetPageText() const = 0; virtual bool IsBusy() const = 0; virtual bool IsContextMenuEnabled() const { return m_showMenu; } + virtual bool IsAccessToDevToolsEnabled() 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 685760d60b..99c15ace6e 100644 --- a/interface/wx/webview.h +++ b/interface/wx/webview.h @@ -279,6 +279,32 @@ public: this article for more information. This backend has full support for custom schemes and virtual file systems. + @par wxWEBVIEW_BACKEND_EDGE (MSW) + + The Edge (Chromium) backend uses Microsoft's + Edge WebView2. + It is available for Windows 7 and newer. + The following features are currently unsupported with this backend: + virtual filesystems, custom urls, find. + + This backend is not enabled by default, to build it follow these steps: + - Visual Studio 2015, or newer, is required + - Download the WebView2 SDK + nuget package (Version 0.8.355 or newer) + - Extract the package (it's a zip archive) to @c wxWidgets/3rdparty/webview2 + (you should have @c 3rdparty/webview2/build/native/include/WebView2.h + file after unpacking it) + - Enable @c wxUSE_WEBVIEW_EDGE in CMake or @c setup.h + - Build wxWidgets webview library + - Copy @c WebView2Loader.dll from the subdirectory corresponding to the + architecture used (x86 or x64) of @c wxWidgets/3rdparty/webview2/build/ + to your applications executable + - At runtime you can use wxWebView::IsBackendAvailable() to check if the + backend can be used (it will be available if @c WebView2Loader.dll can be + loaded and Edge (Chromium) is installed) + - Make sure to add a note about using the WebView2 SDK to your application + documentation, as required by its licence + @par wxWEBVIEW_WEBKIT (GTK) Under GTK the WebKit backend uses @@ -427,6 +453,14 @@ public: static void RegisterFactory(const wxString& backend, wxSharedPtr factory); + /** + Allows to check if a specific backend is currently available. + + @since 3.1.4 + */ + static bool IsBackendAvailable(const wxString& backend); + + /** Get the title of the current web page, or its URL/path if title is not available. @@ -512,6 +546,7 @@ public: /** Reload the currently displayed URL. @param flags A bit array that may optionally contain reload options. + @note The flags are ignored by the edge backend. */ virtual void Reload(wxWebViewReloadFlags flags = wxWEBVIEW_RELOAD_DEFAULT) = 0; @@ -589,7 +624,7 @@ public: relative paths, for instance. @note When using @c wxWEBVIEW_BACKEND_IE you must wait for the current page to finish loading before calling SetPage(). The baseURL - parameter is not used in this backend. + parameter is not used in this backend and the edge backend. */ virtual void SetPage(const wxString& html, const wxString& baseUrl) = 0; @@ -669,6 +704,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 EnableAccessToDevTools(bool enable = true); + + /** + Returns @true if dev tools are available to the user. + + @since 3.1.4 + */ + virtual bool IsAccessToDevToolsEnabled() const; + /** @name History */ diff --git a/samples/webview/webview.cpp b/samples/webview/webview.cpp index 60160c56ce..aae3218750 100644 --- a/samples/webview/webview.cpp +++ b/samples/webview/webview.cpp @@ -21,7 +21,7 @@ #include "wx/wx.h" #endif -#if !wxUSE_WEBVIEW_WEBKIT && !wxUSE_WEBVIEW_WEBKIT2 && !wxUSE_WEBVIEW_IE +#if !wxUSE_WEBVIEW_WEBKIT && !wxUSE_WEBVIEW_WEBKIT2 && !wxUSE_WEBVIEW_IE && !wxUSE_WEBVIEW_EDGE #error "A wxWebView backend is required by this sample" #endif @@ -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; @@ -364,8 +366,23 @@ WebFrame::WebFrame(const wxString& url) : m_info = new wxInfoBar(this); topsizer->Add(m_info, wxSizerFlags().Expand()); + // Create a log window + new wxLogWindow(this, _("Logging"), true, false); + // Create the webview - m_browser = wxWebView::New(this, wxID_ANY, url); + wxString backend = wxWebViewBackendDefault; +#ifdef __WXMSW__ + if (wxWebView::IsBackendAvailable(wxWebViewBackendEdge)) + { + wxLogMessage("Using Edge backend"); + backend = wxWebViewBackendEdge; + } + else + { + wxLogMessage("Edge backend not available"); + } +#endif + m_browser = wxWebView::New(this, wxID_ANY, url, wxDefaultPosition, wxDefaultSize, backend); topsizer->Add(m_browser, wxSizerFlags().Expand().Proportion(1)); //We register the wxfs:// protocol for testing purposes @@ -378,9 +395,6 @@ WebFrame::WebFrame(const wxString& url) : //Set a more sensible size for web browsing SetSize(wxSize(800, 600)); - // Create a log window - new wxLogWindow(this, _("Logging"), true, false); - // Create the Tools menu m_tools_menu = new wxMenu(); wxMenuItem* print = m_tools_menu->Append(wxID_ANY , _("Print")); @@ -444,9 +458,12 @@ WebFrame::WebFrame(const wxString& url) : m_script_null = script_menu->Append(wxID_ANY, "Return null"); m_script_date = script_menu->Append(wxID_ANY, "Return Date"); #if wxUSE_WEBVIEW_IE - m_script_object_el = script_menu->Append(wxID_ANY, "Return JSON object changing emulation level"); - m_script_date_el = script_menu->Append(wxID_ANY, "Return Date changing emulation level"); - m_script_array_el = script_menu->Append(wxID_ANY, "Return array changing emulation level"); + if (!wxWebView::IsBackendAvailable(wxWebViewBackendEdge)) + { + m_script_object_el = script_menu->Append(wxID_ANY, "Return JSON object changing emulation level"); + m_script_date_el = script_menu->Append(wxID_ANY, "Return Date changing emulation level"); + m_script_array_el = script_menu->Append(wxID_ANY, "Return array changing emulation level"); + } #endif m_script_custom = script_menu->Append(wxID_ANY, "Custom script"); m_tools_menu->AppendSubMenu(script_menu, _("Run Script")); @@ -463,6 +480,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(); @@ -532,9 +550,12 @@ WebFrame::WebFrame(const wxString& url) : Bind(wxEVT_MENU, &WebFrame::OnRunScriptNull, this, m_script_null->GetId()); Bind(wxEVT_MENU, &WebFrame::OnRunScriptDate, this, m_script_date->GetId()); #if wxUSE_WEBVIEW_IE - Bind(wxEVT_MENU, &WebFrame::OnRunScriptObjectWithEmulationLevel, this, m_script_object_el->GetId()); - Bind(wxEVT_MENU, &WebFrame::OnRunScriptDateWithEmulationLevel, this, m_script_date_el->GetId()); - Bind(wxEVT_MENU, &WebFrame::OnRunScriptArrayWithEmulationLevel, this, m_script_array_el->GetId()); + if (!wxWebView::IsBackendAvailable(wxWebViewBackendEdge)) + { + Bind(wxEVT_MENU, &WebFrame::OnRunScriptObjectWithEmulationLevel, this, m_script_object_el->GetId()); + Bind(wxEVT_MENU, &WebFrame::OnRunScriptDateWithEmulationLevel, this, m_script_date_el->GetId()); + Bind(wxEVT_MENU, &WebFrame::OnRunScriptArrayWithEmulationLevel, this, m_script_array_el->GetId()); + } #endif Bind(wxEVT_MENU, &WebFrame::OnRunScriptCustom, this, m_script_custom->GetId()); Bind(wxEVT_MENU, &WebFrame::OnClearSelection, this, m_selection_clear->GetId()); @@ -544,6 +565,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); @@ -705,6 +727,11 @@ void WebFrame::OnEnableContextMenu(wxCommandEvent& evt) m_browser->EnableContextMenu(evt.IsChecked()); } +void WebFrame::OnEnableDevTools(wxCommandEvent& evt) +{ + m_browser->EnableAccessToDevTools(evt.IsChecked()); +} + void WebFrame::OnFind(wxCommandEvent& WXUNUSED(evt)) { wxString value = m_browser->GetSelectedText(); @@ -938,6 +965,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->IsAccessToDevToolsEnabled()); //Firstly we clear the existing menu items, then we add the current ones wxMenuHistoryMap::const_iterator it; diff --git a/setup.h.in b/setup.h.in index b2491c00df..26ed7a7d14 100644 --- a/setup.h.in +++ b/setup.h.in @@ -336,6 +336,8 @@ #define wxUSE_WEBVIEW_IE 0 #endif +#define wxUSE_WEBVIEW_EDGE 0 + #if (defined(__WXGTK__) && !defined(__WXGTK3__)) || defined(__WXOSX__) #define wxUSE_WEBVIEW_WEBKIT 0 #else @@ -629,7 +631,6 @@ #define wxUSE_THEME_MONO 0 #define wxUSE_THEME_WIN32 0 - /* --- end common options --- */ /* diff --git a/src/common/webview.cpp b/src/common/webview.cpp index 5121e385eb..0a46c5fccd 100644 --- a/src/common/webview.cpp +++ b/src/common/webview.cpp @@ -23,6 +23,7 @@ #include "wx/gtk/webview_webkit.h" #elif defined(__WXMSW__) #include "wx/msw/webview_ie.h" +#include "wx/msw/webview_edge.h" #endif // DLL options compatibility check: @@ -32,6 +33,7 @@ WX_CHECK_BUILD_OPTIONS("wxWEBVIEW") extern WXDLLIMPEXP_DATA_WEBVIEW(const char) wxWebViewNameStr[] = "wxWebView"; extern WXDLLIMPEXP_DATA_WEBVIEW(const char) wxWebViewDefaultURLStr[] = "about:blank"; extern WXDLLIMPEXP_DATA_WEBVIEW(const char) wxWebViewBackendIE[] = "wxWebViewIE"; +extern WXDLLIMPEXP_DATA_WEBVIEW(const char) wxWebViewBackendEdge[] = "wxWebViewEdge"; extern WXDLLIMPEXP_DATA_WEBVIEW(const char) wxWebViewBackendWebKit[] = "wxWebViewWebKit"; #ifdef __WXMSW__ @@ -86,6 +88,13 @@ void wxWebView::RegisterFactory(const wxString& backend, } // static +bool wxWebView::IsBackendAvailable(const wxString& backend) +{ + wxStringWebViewFactoryMap::iterator iter = FindFactory(backend); + return iter != m_factoryMap.end(); +} + +// static wxStringWebViewFactoryMap::iterator wxWebView::FindFactory(const wxString &backend) { // Initialise the map, it checks internally for existing factories @@ -98,9 +107,19 @@ wxStringWebViewFactoryMap::iterator wxWebView::FindFactory(const wxString &backe void wxWebView::InitFactoryMap() { #ifdef __WXMSW__ +#if wxUSE_WEBVIEW_IE if(m_factoryMap.find(wxWebViewBackendIE) == m_factoryMap.end()) RegisterFactory(wxWebViewBackendIE, wxSharedPtr (new wxWebViewFactoryIE)); +#endif + +#if wxUSE_WEBVIEW_EDGE + if (wxWebViewEdge::IsAvailable() && + m_factoryMap.find(wxWebViewBackendEdge) == m_factoryMap.end()) + RegisterFactory(wxWebViewBackendEdge, wxSharedPtr + (new wxWebViewFactoryEdge)); +#endif + #else if(m_factoryMap.find(wxWebViewBackendWebKit) == m_factoryMap.end()) RegisterFactory(wxWebViewBackendWebKit, wxSharedPtr diff --git a/src/msw/webview_edge.cpp b/src/msw/webview_edge.cpp new file mode 100644 index 0000000000..df38961a3f --- /dev/null +++ b/src/msw/webview_edge.cpp @@ -0,0 +1,872 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: src/msw/webview_edge.cpp +// Purpose: wxMSW Edge Chromium wxWebView backend implementation +// Author: Markus Pingel +// Created: 2019-12-15 +// Copyright: (c) 2019 wxWidgets development team +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#if defined(__BORLANDC__) +#pragma hdrstop +#endif + +#include "wx/msw/webview_edge.h" + +#if wxUSE_WEBVIEW && wxUSE_WEBVIEW_EDGE + +#include "wx/filename.h" +#include "wx/module.h" +#include "wx/log.h" +#include "wx/stdpaths.h" +#include "wx/thread.h" +#include "wx/private/jsscriptwrapper.h" +#include "wx/private/json.h" +#include "wx/msw/private.h" +#include "wx/msw/private/webview_edge.h" + +#include +#include + +using namespace Microsoft::WRL; + +wxIMPLEMENT_DYNAMIC_CLASS(wxWebViewEdge, wxWebView); + +#define WX_ERROR2_CASE(error, wxerror) \ + case error: \ + event.SetString(#error); \ + event.SetInt(wxerror); \ + break; + +// WebView2Loader typedefs +typedef HRESULT (__stdcall *CreateWebView2EnvironmentWithDetails_t)( + PCWSTR browserExecutableFolder, + PCWSTR userDataFolder, + PCWSTR additionalBrowserArguments, + IWebView2CreateWebView2EnvironmentCompletedHandler* environment_created_handler); +typedef HRESULT(__stdcall *GetWebView2BrowserVersionInfo_t)( + PCWSTR browserExecutableFolder, + LPWSTR* versionInfo); + +CreateWebView2EnvironmentWithDetails_t wxCreateWebView2EnvironmentWithDetails = NULL; +GetWebView2BrowserVersionInfo_t wxGetWebView2BrowserVersionInfo = NULL; + +int wxWebViewEdgeImpl::ms_isAvailable = -1; +wxDynamicLibrary wxWebViewEdgeImpl::ms_loaderDll; + +wxWebViewEdgeImpl::wxWebViewEdgeImpl(wxWebViewEdge* webview): + m_ctrl(webview) +{ + +} + +wxWebViewEdgeImpl::~wxWebViewEdgeImpl() +{ + if (m_webView) + { + m_webView->remove_NavigationCompleted(m_navigationCompletedToken); + m_webView->remove_NavigationStarting(m_navigationStartingToken); + m_webView->remove_NewWindowRequested(m_newWindowRequestedToken); + m_webView->remove_DocumentTitleChanged(m_documentTitleChangedToken); + m_webView->remove_DocumentStateChanged(m_documentStateChangedToken); + } +} + +bool wxWebViewEdgeImpl::Create() +{ + m_initialized = false; + m_isBusy = false; + + m_historyLoadingFromList = false; + m_historyEnabled = true; + m_historyPosition = -1; + + wxString userDataPath = wxStandardPaths::Get().GetUserLocalDataDir(); + + HRESULT hr = wxCreateWebView2EnvironmentWithDetails( + nullptr, + userDataPath.wc_str(), + nullptr, + Callback(this, + &wxWebViewEdgeImpl::OnEnvironmentCreated).Get()); + if (FAILED(hr)) + { + wxLogApiError("CreateWebView2EnvironmentWithDetails", hr); + return false; + } + else + return true; +} + +HRESULT wxWebViewEdgeImpl::OnEnvironmentCreated( + HRESULT WXUNUSED(result), IWebView2Environment* environment) +{ + environment->QueryInterface(IID_PPV_ARGS(&m_webViewEnvironment)); + m_webViewEnvironment->CreateWebView( + m_ctrl->GetHWND(), + Callback( + this, &wxWebViewEdgeImpl::OnWebViewCreated).Get()); + return S_OK; +} + +bool wxWebViewEdgeImpl::Initialize() +{ + if (!ms_loaderDll.Load("WebView2Loader.dll", wxDL_DEFAULT | wxDL_QUIET)) + return false; + + // Try to load functions from loader DLL + wxDL_INIT_FUNC(wx, CreateWebView2EnvironmentWithDetails, ms_loaderDll); + wxDL_INIT_FUNC(wx, GetWebView2BrowserVersionInfo, ms_loaderDll); + if (!wxGetWebView2BrowserVersionInfo || !wxCreateWebView2EnvironmentWithDetails) + return false; + + // Check if a Edge browser can be found by the loader DLL + LPWSTR versionStr; + HRESULT hr = wxGetWebView2BrowserVersionInfo(NULL, &versionStr); + if (SUCCEEDED(hr)) + { + if (versionStr) + { + CoTaskMemFree(versionStr); + return true; + } + } + else + wxLogApiError("GetWebView2BrowserVersionInfo", hr); + + return false; +} + +void wxWebViewEdgeImpl::Uninitalize() +{ + if (ms_isAvailable == 1) + { + ms_loaderDll.Unload(); + ms_isAvailable = -1; + } +} + +void wxWebViewEdgeImpl::UpdateBounds() +{ + RECT r; + wxCopyRectToRECT(m_ctrl->GetClientRect(), r); + if (m_webView) + m_webView->put_Bounds(r); +} + +HRESULT wxWebViewEdgeImpl::OnNavigationStarting(IWebView2WebView* WXUNUSED(sender), IWebView2NavigationStartingEventArgs* args) +{ + m_isBusy = true; + wxString evtURL; + LPWSTR uri; + if (SUCCEEDED(args->get_Uri(&uri))) + { + evtURL = wxString(uri); + CoTaskMemFree(uri); + } + wxWebViewEvent event(wxEVT_WEBVIEW_NAVIGATING, m_ctrl->GetId(), evtURL, wxString()); + event.SetEventObject(m_ctrl); + m_ctrl->HandleWindowEvent(event); + + if (!event.IsAllowed()) + args->put_Cancel(true); + + return S_OK; +} + +HRESULT wxWebViewEdgeImpl::OnNavigationCompleted(IWebView2WebView* WXUNUSED(sender), IWebView2NavigationCompletedEventArgs* args) +{ + BOOL isSuccess; + if (FAILED(args->get_IsSuccess(&isSuccess))) + isSuccess = false; + m_isBusy = false; + wxString uri = m_ctrl->GetCurrentURL(); + + if (!isSuccess) + { + WEBVIEW2_WEB_ERROR_STATUS status; + + wxWebViewEvent event(wxEVT_WEBVIEW_ERROR, m_ctrl->GetId(), uri, wxString()); + event.SetEventObject(m_ctrl); + + if (SUCCEEDED(args->get_WebErrorStatus(&status))) + { + switch (status) + { + WX_ERROR2_CASE(WEBVIEW2_WEB_ERROR_STATUS_UNKNOWN, wxWEBVIEW_NAV_ERR_OTHER) + WX_ERROR2_CASE(WEBVIEW2_WEB_ERROR_STATUS_CERTIFICATE_COMMON_NAME_IS_INCORRECT, wxWEBVIEW_NAV_ERR_CERTIFICATE) + WX_ERROR2_CASE(WEBVIEW2_WEB_ERROR_STATUS_CERTIFICATE_EXPIRED, wxWEBVIEW_NAV_ERR_CERTIFICATE) + WX_ERROR2_CASE(WEBVIEW2_WEB_ERROR_STATUS_CLIENT_CERTIFICATE_CONTAINS_ERRORS, wxWEBVIEW_NAV_ERR_CERTIFICATE) + WX_ERROR2_CASE(WEBVIEW2_WEB_ERROR_STATUS_CERTIFICATE_REVOKED, wxWEBVIEW_NAV_ERR_CERTIFICATE) + WX_ERROR2_CASE(WEBVIEW2_WEB_ERROR_STATUS_CERTIFICATE_IS_INVALID, wxWEBVIEW_NAV_ERR_CERTIFICATE) + WX_ERROR2_CASE(WEBVIEW2_WEB_ERROR_STATUS_SERVER_UNREACHABLE, wxWEBVIEW_NAV_ERR_CONNECTION) + WX_ERROR2_CASE(WEBVIEW2_WEB_ERROR_STATUS_TIMEOUT, wxWEBVIEW_NAV_ERR_CONNECTION) + WX_ERROR2_CASE(WEBVIEW2_WEB_ERROR_STATUS_ERROR_HTTP_INVALID_SERVER_RESPONSE, wxWEBVIEW_NAV_ERR_CONNECTION) + WX_ERROR2_CASE(WEBVIEW2_WEB_ERROR_STATUS_CONNECTION_ABORTED, wxWEBVIEW_NAV_ERR_CONNECTION) + WX_ERROR2_CASE(WEBVIEW2_WEB_ERROR_STATUS_CONNECTION_RESET, wxWEBVIEW_NAV_ERR_CONNECTION) + WX_ERROR2_CASE(WEBVIEW2_WEB_ERROR_STATUS_DISCONNECTED, wxWEBVIEW_NAV_ERR_CONNECTION) + WX_ERROR2_CASE(WEBVIEW2_WEB_ERROR_STATUS_CANNOT_CONNECT, wxWEBVIEW_NAV_ERR_CONNECTION) + WX_ERROR2_CASE(WEBVIEW2_WEB_ERROR_STATUS_HOST_NAME_NOT_RESOLVED, wxWEBVIEW_NAV_ERR_CONNECTION) + WX_ERROR2_CASE(WEBVIEW2_WEB_ERROR_STATUS_OPERATION_CANCELED, wxWEBVIEW_NAV_ERR_USER_CANCELLED) + WX_ERROR2_CASE(WEBVIEW2_WEB_ERROR_STATUS_REDIRECT_FAILED, wxWEBVIEW_NAV_ERR_OTHER) + WX_ERROR2_CASE(WEBVIEW2_WEB_ERROR_STATUS_UNEXPECTED_ERROR, wxWEBVIEW_NAV_ERR_OTHER) + } + } + m_ctrl->HandleWindowEvent(event); + } + else + { + if (m_historyEnabled && !m_historyLoadingFromList && + (uri == m_ctrl->GetCurrentURL()) || + (m_ctrl->GetCurrentURL().substr(0, 4) == "file" && + wxFileName::URLToFileName(m_ctrl->GetCurrentURL()).GetFullPath() == uri)) + { + // If we are not at the end of the list, then erase everything + // between us and the end before adding the new page + if (m_historyPosition != static_cast(m_historyList.size()) - 1) + { + m_historyList.erase(m_historyList.begin() + m_historyPosition + 1, + m_historyList.end()); + } + wxSharedPtr item(new wxWebViewHistoryItem(uri, m_ctrl->GetCurrentTitle())); + m_historyList.push_back(item); + m_historyPosition++; + } + //Reset as we are done now + m_historyLoadingFromList = false; + wxWebViewEvent evt(wxEVT_WEBVIEW_NAVIGATED, m_ctrl->GetId(), uri, wxString()); + m_ctrl->HandleWindowEvent(evt); + } + return S_OK; +} + +HRESULT wxWebViewEdgeImpl::OnNewWindowRequested(IWebView2WebView* WXUNUSED(sender), IWebView2NewWindowRequestedEventArgs* args) +{ + LPWSTR uri; + wxString evtURL; + if (SUCCEEDED(args->get_Uri(&uri))) + { + evtURL = wxString(uri); + CoTaskMemFree(uri); + } + wxWebViewEvent evt(wxEVT_WEBVIEW_NEWWINDOW, m_ctrl->GetId(), evtURL, wxString()); + m_ctrl->HandleWindowEvent(evt); + args->put_Handled(true); + return S_OK; +} + +HRESULT wxWebViewEdgeImpl::OnDocumentTitleChanged(IWebView2WebView* WXUNUSED(sender), IUnknown* WXUNUSED(args)) +{ + wxWebViewEvent event(wxEVT_WEBVIEW_TITLE_CHANGED, + m_ctrl->GetId(), m_ctrl->GetCurrentURL(), ""); + event.SetString(m_ctrl->GetCurrentTitle()); + event.SetEventObject(m_ctrl); + m_ctrl->HandleWindowEvent(event); + return S_OK; +} + +HRESULT wxWebViewEdgeImpl::OnDocumentStateChanged(IWebView2WebView* WXUNUSED(sender), IWebView2DocumentStateChangedEventArgs* WXUNUSED(args)) +{ + wxWebViewEvent event(wxEVT_WEBVIEW_LOADED, m_ctrl->GetId(), + m_ctrl->GetCurrentURL(), ""); + event.SetEventObject(m_ctrl); + m_ctrl->HandleWindowEvent(event); + return S_OK; +} + +HRESULT wxWebViewEdgeImpl::OnWebViewCreated(HRESULT result, IWebView2WebView* webview) +{ + if (FAILED(result)) + { + wxLogApiError("WebView2::WebViewCreated", result); + return result; + } + + webview->QueryInterface(IID_PPV_ARGS(&m_webView)); + + m_initialized = true; + UpdateBounds(); + + // Connect and handle the various WebView events + m_webView->add_NavigationStarting( + Callback( + this, &wxWebViewEdgeImpl::OnNavigationStarting).Get(), + &m_navigationStartingToken); + m_webView->add_NavigationCompleted( + Callback( + this, &wxWebViewEdgeImpl::OnNavigationCompleted).Get(), + &m_navigationCompletedToken); + m_webView->add_NewWindowRequested( + Callback( + this, &wxWebViewEdgeImpl::OnNewWindowRequested).Get(), + &m_newWindowRequestedToken); + m_webView->add_DocumentTitleChanged( + Callback( + this, &wxWebViewEdgeImpl::OnDocumentTitleChanged).Get(), + &m_documentTitleChangedToken); + m_webView->add_DocumentStateChanged( + Callback( + this, &wxWebViewEdgeImpl::OnDocumentStateChanged).Get(), + &m_documentStateChangedToken); + + if (!m_pendingURL.empty()) + { + m_ctrl->LoadURL(m_pendingURL); + m_pendingURL.clear(); + } + + return S_OK; +} + +IWebView2Settings2* wxWebViewEdgeImpl::GetSettings() +{ + IWebView2Settings* settings; + HRESULT hr = m_webView->get_Settings(&settings); + if (FAILED(hr)) + { + wxLogApiError("WebView2::get_Settings", hr); + return NULL; + } + + IWebView2Settings2* settings2; + hr = settings->QueryInterface(IID_PPV_ARGS(&settings2)); + if (FAILED(hr)) + return NULL; + + return settings2; +} + +bool wxWebViewEdge::IsAvailable() +{ + if (wxWebViewEdgeImpl::ms_isAvailable == -1) + { + if (!wxWebViewEdgeImpl::Initialize()) + wxWebViewEdgeImpl::ms_isAvailable = 0; + else + wxWebViewEdgeImpl::ms_isAvailable = 1; + } + + return wxWebViewEdgeImpl::ms_isAvailable == 1; +} + +wxWebViewEdge::~wxWebViewEdge() +{ + delete m_impl; +} + +bool wxWebViewEdge::Create(wxWindow* parent, + wxWindowID id, + const wxString& url, + const wxPoint& pos, + const wxSize& size, + long style, + const wxString& name) +{ + if (!IsAvailable()) + return false; + + if (!wxControl::Create(parent, id, pos, size, style, + wxDefaultValidator, name)) + { + return false; + } + + m_impl = new wxWebViewEdgeImpl(this); + if (!m_impl->Create()) + return false; + Bind(wxEVT_SIZE, &wxWebViewEdge::OnSize, this); + + LoadURL(url); + return true; +} + +void wxWebViewEdge::OnSize(wxSizeEvent& event) +{ + m_impl->UpdateBounds(); + event.Skip(); +} + +void wxWebViewEdge::LoadURL(const wxString& url) +{ + if (!m_impl->m_webView) + { + m_impl->m_pendingURL = url; + return; + } + HRESULT hr = m_impl->m_webView->Navigate(url.wc_str()); + if (FAILED(hr)) + wxLogApiError("WebView2::Navigate", hr); +} + +void wxWebViewEdge::LoadHistoryItem(wxSharedPtr item) +{ + int pos = -1; + for (unsigned int i = 0; i < m_impl->m_historyList.size(); i++) + { + //We compare the actual pointers to find the correct item + if (m_impl->m_historyList[i].get() == item.get()) + pos = i; + } + wxASSERT_MSG(pos != static_cast(m_impl->m_historyList.size()), "invalid history item"); + m_impl->m_historyLoadingFromList = true; + LoadURL(item->GetUrl()); + m_impl->m_historyPosition = pos; +} + +wxVector > wxWebViewEdge::GetBackwardHistory() +{ + wxVector > backhist; + //As we don't have std::copy or an iterator constructor in the wxwidgets + //native vector we construct it by hand + for (int i = 0; i < m_impl->m_historyPosition; i++) + { + backhist.push_back(m_impl->m_historyList[i]); + } + return backhist; +} + +wxVector > wxWebViewEdge::GetForwardHistory() +{ + wxVector > forwardhist; + //As we don't have std::copy or an iterator constructor in the wxwidgets + //native vector we construct it by hand + for (int i = m_impl->m_historyPosition + 1; i < static_cast(m_impl->m_historyList.size()); i++) + { + forwardhist.push_back(m_impl->m_historyList[i]); + } + return forwardhist; +} + +bool wxWebViewEdge::CanGoForward() const +{ + if (m_impl->m_historyEnabled) + return m_impl->m_historyPosition != static_cast(m_impl->m_historyList.size()) - 1; + else + return false; +} + +bool wxWebViewEdge::CanGoBack() const +{ + if (m_impl->m_historyEnabled) + return m_impl->m_historyPosition > 0; + else + return false; +} + +void wxWebViewEdge::GoBack() +{ + LoadHistoryItem(m_impl->m_historyList[m_impl->m_historyPosition - 1]); +} + +void wxWebViewEdge::GoForward() +{ + LoadHistoryItem(m_impl->m_historyList[m_impl->m_historyPosition + 1]); +} + +void wxWebViewEdge::ClearHistory() +{ + m_impl->m_historyList.clear(); + m_impl->m_historyPosition = -1; +} + +void wxWebViewEdge::EnableHistory(bool enable) +{ + m_impl->m_historyEnabled = enable; + m_impl->m_historyList.clear(); + m_impl->m_historyPosition = -1; +} + +void wxWebViewEdge::Stop() +{ + if (m_impl->m_webView) + m_impl->m_webView->Stop(); +} + +void wxWebViewEdge::Reload(wxWebViewReloadFlags WXUNUSED(flags)) +{ + if (m_impl->m_webView) + m_impl->m_webView->Reload(); +} + +wxString wxWebViewEdge::GetPageSource() const +{ + wxString text; + const_cast(this)->RunScript("document.documentElement.outerHTML;", &text); + return text; +} + +wxString wxWebViewEdge::GetPageText() const +{ + wxString text; + const_cast(this)->RunScript("document.body.innerText;", &text); + return text; +} + +bool wxWebViewEdge::IsBusy() const +{ + return m_impl->m_isBusy; +} + +wxString wxWebViewEdge::GetCurrentURL() const +{ + LPWSTR uri; + if (m_impl->m_webView && SUCCEEDED(m_impl->m_webView->get_Source(&uri))) + { + wxString uriStr(uri); + CoTaskMemFree(uri); + return uriStr; + } + else + return wxString(); +} + +wxString wxWebViewEdge::GetCurrentTitle() const +{ + LPWSTR title; + if (m_impl->m_webView && SUCCEEDED(m_impl->m_webView->get_DocumentTitle(&title))) + { + wxString titleStr(title); + CoTaskMemFree(title); + return titleStr; + } + else + return wxString(); +} + +void wxWebViewEdge::SetZoomType(wxWebViewZoomType) +{ + // only wxWEBVIEW_ZOOM_TYPE_LAYOUT is supported +} + +wxWebViewZoomType wxWebViewEdge::GetZoomType() const +{ + return wxWEBVIEW_ZOOM_TYPE_LAYOUT; +} + +bool wxWebViewEdge::CanSetZoomType(wxWebViewZoomType type) const +{ + return (type == wxWEBVIEW_ZOOM_TYPE_LAYOUT); +} + +void wxWebViewEdge::Print() +{ + RunScript("window.print();"); +} + +wxWebViewZoom wxWebViewEdge::GetZoom() const +{ + double old_zoom_factor = 0.0; + m_impl->m_webView->get_ZoomFactor(&old_zoom_factor); + if (old_zoom_factor > 1.7) + return wxWEBVIEW_ZOOM_LARGEST; + if (old_zoom_factor > 1.3) + return wxWEBVIEW_ZOOM_LARGE; + if (old_zoom_factor > 0.8) + return wxWEBVIEW_ZOOM_MEDIUM; + if (old_zoom_factor > 0.6) + return wxWEBVIEW_ZOOM_SMALL; + return wxWEBVIEW_ZOOM_TINY; +} + +void wxWebViewEdge::SetZoom(wxWebViewZoom zoom) +{ + double old_zoom_factor = 0.0; + m_impl->m_webView->get_ZoomFactor(&old_zoom_factor); + double zoom_factor = 1.0; + switch (zoom) + { + case wxWEBVIEW_ZOOM_LARGEST: + zoom_factor = 2.0; + break; + case wxWEBVIEW_ZOOM_LARGE: + zoom_factor = 1.5; + break; + case wxWEBVIEW_ZOOM_MEDIUM: + zoom_factor = 1.0; + break; + case wxWEBVIEW_ZOOM_SMALL: + zoom_factor = 0.75; + break; + case wxWEBVIEW_ZOOM_TINY: + zoom_factor = 0.5; + break; + default: + break; + } + m_impl->m_webView->put_ZoomFactor(zoom_factor); +} + +bool wxWebViewEdge::CanCut() const +{ + return QueryCommandEnabled("cut"); +} + +bool wxWebViewEdge::CanCopy() const +{ + return QueryCommandEnabled("copy"); +} + +bool wxWebViewEdge::CanPaste() const +{ + return QueryCommandEnabled("paste"); +} + +void wxWebViewEdge::Cut() +{ + ExecCommand("cut"); +} + +void wxWebViewEdge::Copy() +{ + ExecCommand("copy"); +} + +void wxWebViewEdge::Paste() +{ + ExecCommand("paste"); +} + +bool wxWebViewEdge::CanUndo() const +{ + return QueryCommandEnabled("undo"); +} + +bool wxWebViewEdge::CanRedo() const +{ + return QueryCommandEnabled("redo"); +} + +void wxWebViewEdge::Undo() +{ + ExecCommand("undo"); +} + +void wxWebViewEdge::Redo() +{ + ExecCommand("redo"); +} + +long wxWebViewEdge::Find(const wxString& WXUNUSED(text), int WXUNUSED(flags)) +{ + // TODO: not implemented in SDK (could probably be implemented by script) + return -1; +} + +//Editing functions +void wxWebViewEdge::SetEditable(bool WXUNUSED(enable)) +{ + wxLogError("Not available"); +} + +bool wxWebViewEdge::IsEditable() const +{ + return false; +} + +void wxWebViewEdge::SelectAll() +{ + RunScript("window.getSelection().selectAllChildren(document);"); +} + +bool wxWebViewEdge::HasSelection() const +{ + wxString rangeCountStr; + const_cast(this)->RunScript("window.getSelection().rangeCount;", &rangeCountStr); + return rangeCountStr != "0"; +} + +void wxWebViewEdge::DeleteSelection() +{ + ExecCommand("delete"); +} + +wxString wxWebViewEdge::GetSelectedText() const +{ + wxString selectedText; + const_cast(this)->RunScript("window.getSelection().toString();", &selectedText); + return selectedText; +} + +wxString wxWebViewEdge::GetSelectedSource() const +{ + // TODO: not implemented in SDK (could probably be implemented by script) + return wxString(); +} + +void wxWebViewEdge::ClearSelection() +{ + RunScript("window.getSelection().empty();"); +} + +void wxWebViewEdge::EnableContextMenu(bool enable) +{ + wxCOMPtr settings(m_impl->GetSettings()); + if (settings) + settings->put_AreDefaultContextMenusEnabled(enable); +} + +bool wxWebViewEdge::IsContextMenuEnabled() const +{ + wxCOMPtr settings(m_impl->GetSettings()); + if (settings) + { + BOOL menusEnabled = TRUE; + settings->get_AreDefaultContextMenusEnabled(&menusEnabled); + + if (!menusEnabled) + return false; + } + return true; +} + +void wxWebViewEdge::EnableAccessToDevTools(bool enable) +{ + wxCOMPtr settings(m_impl->GetSettings()); + if (settings) + settings->put_AreDevToolsEnabled(enable); +} + +bool wxWebViewEdge::IsAccessToDevToolsEnabled() const +{ + wxCOMPtr settings(m_impl->GetSettings()); + if (settings) + { + BOOL devToolsEnabled = TRUE; + settings->get_AreDevToolsEnabled(&devToolsEnabled); + + if (!devToolsEnabled) + return false; + } + + return true; +} + +void* wxWebViewEdge::GetNativeBackend() const +{ + return m_impl->m_webView; +} + +bool wxWebViewEdge::QueryCommandEnabled(const wxString& command) const +{ + wxString resultStr; + const_cast(this)->RunScript( + wxString::Format("function f(){ return document.queryCommandEnabled('%s'); } f();", command), &resultStr); + return resultStr.IsSameAs("true", false); +} + +void wxWebViewEdge::ExecCommand(const wxString& command) +{ + RunScript(wxString::Format("document.execCommand('%s');", command)); +} + +bool wxWebViewEdge::RunScriptSync(const wxString& javascript, wxString* output) +{ + bool scriptExecuted = false; + + // Start script execution + HRESULT executionResult = m_impl->m_webView->ExecuteScript(javascript.wc_str(), Callback( + [&scriptExecuted, &executionResult, output](HRESULT error, PCWSTR result) -> HRESULT + { + // Handle script execution callback + if (error == S_OK) + { + if (output) + output->assign(result); + } + else + executionResult = error; + + scriptExecuted = true; + + return S_OK; + }).Get()); + + // Wait for script exection + while (!scriptExecuted) + wxYield(); + + if (FAILED(executionResult)) + { + if (output) + output->Printf("%s (0x%08lx)", wxSysErrorMsgStr(executionResult), executionResult); + return false; + } + else + return true; +} + +bool wxWebViewEdge::RunScript(const wxString& javascript, wxString* output) +{ + wxJSScriptWrapper wrapJS(javascript, &m_runScriptCount); + + // This string is also used as an error indicator: it's cleared if there is + // no error or used in the warning message below if there is one. + wxString result; + if (RunScriptSync(wrapJS.GetWrappedCode(), &result) + && result == wxS("true")) + { + if (RunScriptSync(wrapJS.GetUnwrappedOutputCode() + ";", &result)) + { + if (output) + // Try to decode JSON string or return original + // result if it's not a valid JSON string + if (!wxJSON::DecodeString(result, output)) + *output = result; + result.clear(); + } + + RunScriptSync(wrapJS.GetCleanUpCode()); + } + + if (!result.empty()) + { + wxLogWarning(_("Error running JavaScript: %s"), result); + return false; + } + + return true; +} + +void wxWebViewEdge::RegisterHandler(wxSharedPtr handler) +{ + // TODO: could maybe be implemented via IWebView2WebView5::add_WebResourceRequested + wxLogDebug("Registering handlers is not supported"); +} + +void wxWebViewEdge::DoSetPage(const wxString& html, const wxString& WXUNUSED(baseUrl)) +{ + if (m_impl->m_webView) + m_impl->m_webView->NavigateToString(html.wc_str()); +} + +// ---------------------------------------------------------------------------- +// Module ensuring all global/singleton objects are destroyed on shutdown. +// ---------------------------------------------------------------------------- + +class wxWebViewEdgeModule : public wxModule +{ +public: + wxWebViewEdgeModule() + { + } + + virtual bool OnInit() wxOVERRIDE + { + return true; + } + + virtual void OnExit() wxOVERRIDE + { + wxWebViewEdgeImpl::Uninitalize(); + } + +private: + wxDECLARE_DYNAMIC_CLASS(wxWebViewEdgeModule); +}; + +wxIMPLEMENT_DYNAMIC_CLASS(wxWebViewEdgeModule, wxModule); + +#endif // wxUSE_WEBVIEW && wxUSE_WEBVIEW_EDGE