From 58bc47a157ab7f3ccb5a97c57a66b745fd84b5b0 Mon Sep 17 00:00:00 2001 From: Shreyas Mididoddi Date: Tue, 19 Oct 2021 19:45:31 +0530 Subject: [PATCH] feat: Implemented basic dart bindings - added webview repo - modified the wv repo to just its barebones - wrapped most of the api - Maybe not fully functional - works with example --- .gitignore | 1 + .vscode/c_cpp_properties.json | 20 + example/webview_dart_example.dart | 9 +- lib/src/bindings.dart | 87 + lib/src/webview_dart_api.dart | 68 + lib/src/webview_dart_base.dart | 6 - lib/webview_dart.dart | 2 +- library/webview/.gitattributes | 1 + library/webview/.gitignore | 2 + library/webview/.vscode/c_cpp_properties.json | 17 + library/webview/LICENSE | 21 + library/webview/main.cc | 18 + library/webview/script/WebView2.h | 6515 +++++++++++++++++ library/webview/script/build.bat | 54 + library/webview/script/build.macos.sh | 3 + library/webview/script/build.sh | 4 + .../.signature.p7s | Bin 0 -> 18694 bytes .../LICENSE.txt | 27 + .../Microsoft.Web.WebView2.nuspec | 20 + .../WebView2.idl | 2598 +++++++ .../WebView2.tlb | Bin 0 -> 40824 bytes .../[Content_Types].xml | 13 + .../_rels/.rels | 5 + .../c7f0a730736d49398070dd725ddecb6a.psmdcp | 9 + .../.signature.p7s | Bin 0 -> 18695 bytes .../LICENSE.txt | 27 + .../Microsoft.Web.WebView2.nuspec | 21 + .../WebView2.idl | 2755 +++++++ .../WebView2.tlb | Bin 0 -> 41864 bytes .../[Content_Types].xml | 14 + .../_rels/.rels | 5 + .../net462/Microsoft.Web.WebView2.Core.dll | Bin 0 -> 121752 bytes .../net462/Microsoft.Web.WebView2.Core.xml | 2444 +++++++ .../Microsoft.Web.WebView2.WinForms.dll | Bin 0 -> 27040 bytes .../Microsoft.Web.WebView2.WinForms.xml | 360 + .../lib/net462/Microsoft.Web.WebView2.Wpf.dll | Bin 0 -> 30616 bytes .../lib/net462/Microsoft.Web.WebView2.Wpf.xml | 674 ++ .../Microsoft.Web.WebView2.Core.dll | Bin 0 -> 121752 bytes .../Microsoft.Web.WebView2.Core.xml | 2444 +++++++ .../Microsoft.Web.WebView2.WinForms.dll | Bin 0 -> 27544 bytes .../Microsoft.Web.WebView2.WinForms.xml | 360 + .../Microsoft.Web.WebView2.Wpf.dll | Bin 0 -> 30616 bytes .../Microsoft.Web.WebView2.Wpf.xml | 674 ++ .../f1ba39472b9b4e14a0ebe2816e3adec7.psmdcp | 10 + .../win-arm/native/WebView2Loader.dll | Bin 0 -> 124832 bytes .../win-x64/native/WebView2Loader.dll | Bin 0 -> 137120 bytes .../win-x86/native/WebView2Loader.dll | Bin 0 -> 109984 bytes library/webview/webview.cc | 3 + library/webview/webview.h | 1388 ++++ pubspec.yaml | 2 + 50 files changed, 20672 insertions(+), 9 deletions(-) create mode 100644 .vscode/c_cpp_properties.json create mode 100644 lib/src/bindings.dart create mode 100644 lib/src/webview_dart_api.dart delete mode 100644 lib/src/webview_dart_base.dart create mode 100644 library/webview/.gitattributes create mode 100644 library/webview/.gitignore create mode 100644 library/webview/.vscode/c_cpp_properties.json create mode 100644 library/webview/LICENSE create mode 100644 library/webview/main.cc create mode 100644 library/webview/script/WebView2.h create mode 100644 library/webview/script/build.bat create mode 100644 library/webview/script/build.macos.sh create mode 100644 library/webview/script/build.sh create mode 100644 library/webview/script/microsoft.web.webview2.0.9.488/.signature.p7s create mode 100644 library/webview/script/microsoft.web.webview2.0.9.488/LICENSE.txt create mode 100644 library/webview/script/microsoft.web.webview2.0.9.488/Microsoft.Web.WebView2.nuspec create mode 100644 library/webview/script/microsoft.web.webview2.0.9.488/WebView2.idl create mode 100644 library/webview/script/microsoft.web.webview2.0.9.488/WebView2.tlb create mode 100644 library/webview/script/microsoft.web.webview2.0.9.488/[Content_Types].xml create mode 100644 library/webview/script/microsoft.web.webview2.0.9.488/_rels/.rels create mode 100644 library/webview/script/microsoft.web.webview2.0.9.488/package/services/metadata/core-properties/c7f0a730736d49398070dd725ddecb6a.psmdcp create mode 100644 library/webview/script/microsoft.web.webview2.1.0.664.37/.signature.p7s create mode 100644 library/webview/script/microsoft.web.webview2.1.0.664.37/LICENSE.txt create mode 100644 library/webview/script/microsoft.web.webview2.1.0.664.37/Microsoft.Web.WebView2.nuspec create mode 100644 library/webview/script/microsoft.web.webview2.1.0.664.37/WebView2.idl create mode 100644 library/webview/script/microsoft.web.webview2.1.0.664.37/WebView2.tlb create mode 100644 library/webview/script/microsoft.web.webview2.1.0.664.37/[Content_Types].xml create mode 100644 library/webview/script/microsoft.web.webview2.1.0.664.37/_rels/.rels create mode 100644 library/webview/script/microsoft.web.webview2.1.0.664.37/lib/net462/Microsoft.Web.WebView2.Core.dll create mode 100644 library/webview/script/microsoft.web.webview2.1.0.664.37/lib/net462/Microsoft.Web.WebView2.Core.xml create mode 100644 library/webview/script/microsoft.web.webview2.1.0.664.37/lib/net462/Microsoft.Web.WebView2.WinForms.dll create mode 100644 library/webview/script/microsoft.web.webview2.1.0.664.37/lib/net462/Microsoft.Web.WebView2.WinForms.xml create mode 100644 library/webview/script/microsoft.web.webview2.1.0.664.37/lib/net462/Microsoft.Web.WebView2.Wpf.dll create mode 100644 library/webview/script/microsoft.web.webview2.1.0.664.37/lib/net462/Microsoft.Web.WebView2.Wpf.xml create mode 100644 library/webview/script/microsoft.web.webview2.1.0.664.37/lib/netcoreapp3.0/Microsoft.Web.WebView2.Core.dll create mode 100644 library/webview/script/microsoft.web.webview2.1.0.664.37/lib/netcoreapp3.0/Microsoft.Web.WebView2.Core.xml create mode 100644 library/webview/script/microsoft.web.webview2.1.0.664.37/lib/netcoreapp3.0/Microsoft.Web.WebView2.WinForms.dll create mode 100644 library/webview/script/microsoft.web.webview2.1.0.664.37/lib/netcoreapp3.0/Microsoft.Web.WebView2.WinForms.xml create mode 100644 library/webview/script/microsoft.web.webview2.1.0.664.37/lib/netcoreapp3.0/Microsoft.Web.WebView2.Wpf.dll create mode 100644 library/webview/script/microsoft.web.webview2.1.0.664.37/lib/netcoreapp3.0/Microsoft.Web.WebView2.Wpf.xml create mode 100644 library/webview/script/microsoft.web.webview2.1.0.664.37/package/services/metadata/core-properties/f1ba39472b9b4e14a0ebe2816e3adec7.psmdcp create mode 100644 library/webview/script/microsoft.web.webview2.1.0.664.37/runtimes/win-arm/native/WebView2Loader.dll create mode 100644 library/webview/script/microsoft.web.webview2.1.0.664.37/runtimes/win-x64/native/WebView2Loader.dll create mode 100644 library/webview/script/microsoft.web.webview2.1.0.664.37/runtimes/win-x86/native/WebView2Loader.dll create mode 100644 library/webview/webview.cc create mode 100644 library/webview/webview.h diff --git a/.gitignore b/.gitignore index 65c34dc..cc96a9c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ # Files and directories created by pub. .dart_tool/ .packages +out/ # Conventional directory for build outputs. build/ diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..8fc4089 --- /dev/null +++ b/.vscode/c_cpp_properties.json @@ -0,0 +1,20 @@ +{ + "configurations": [ + { + "name": "Linux", + "includePath": [ + "${default}", + "/usr/include/webkitgtk-4.0", + "/usr/include/gtk-3.0", + "/usr/include/glib-2.0", + "/usr/include/libsoup-2.4", + "/usr/include/cairo" + ], + "compilerPath": "/usr/bin/gcc", + "cStandard": "gnu17", + "cppStandard": "gnu++14", + "intelliSenseMode": "linux-gcc-x64" + } + ], + "version": 4 +} \ No newline at end of file diff --git a/example/webview_dart_example.dart b/example/webview_dart_example.dart index 26706e0..7244e46 100644 --- a/example/webview_dart_example.dart +++ b/example/webview_dart_example.dart @@ -1,6 +1,11 @@ import 'package:webview_dart/webview_dart.dart'; void main() { - var awesome = Awesome(); - print('awesome: ${awesome.isAwesome}'); + final url = "https://www.google.com"; + Webview(true) + .setTitle("title") + .setSize(1280, 800, SIzeHint.none) + .navigate(url) + .eval("setTimeout(() => console.log('hello'), 1000)") + .run(); } diff --git a/lib/src/bindings.dart b/lib/src/bindings.dart new file mode 100644 index 0000000..7c3ad42 --- /dev/null +++ b/lib/src/bindings.dart @@ -0,0 +1,87 @@ +import 'dart:ffi'; +import 'package:ffi/ffi.dart'; + +export 'dart:ffi' show nullptr; +export 'package:ffi/ffi.dart' show StringUtf8Pointer; + +typedef WebviewLib = DynamicLibrary; +typedef WindowHandle = Pointer; + +// Native Functions +typedef NativeCreateFunction = WindowHandle Function(Int32, WindowHandle); +typedef NativeDestroyFunction = Void Function(WindowHandle); +typedef NativeRunFunction = Void Function(WindowHandle); +typedef NativeTerminateFunction = Void Function(WindowHandle); +typedef NativeSetTitleFunction = Void Function(WindowHandle, Pointer); +typedef NativeSetSizeFunction = Void Function( + WindowHandle, Int32, Int32, Int32); +typedef NativeNavigateFunction = Void Function(WindowHandle, Pointer); +typedef NativeInitFunction = Void Function(WindowHandle, Pointer); +typedef NativeEvalFunction = Void Function(WindowHandle, Pointer); + +// darty functions +typedef CreateFunction = WindowHandle Function(int, WindowHandle); +typedef DestroyFunction = void Function(WindowHandle); +typedef RunFunction = void Function(WindowHandle); +typedef TerminateFunction = void Function(WindowHandle); +typedef SetTitleFunction = void Function(WindowHandle, Pointer); +typedef SetSizeFunction = void Function(WindowHandle, int, int, int); +typedef NavigateFunction = void Function(WindowHandle, Pointer); +typedef InitFunction = void Function(WindowHandle, Pointer); +typedef EvalFunction = void Function(WindowHandle, Pointer); + +DynamicLibrary? _library; + +// lookups +WebviewLib loadLibrary(String path) { + try { + _library ??= DynamicLibrary.open(path); + } catch (e) { + rethrow; + } + return _library!; +} + +CreateFunction webviewCreate(DynamicLibrary webview) { + return webview + .lookupFunction("webview_create"); +} + +DestroyFunction webviewDestroy(DynamicLibrary webview) { + return webview.lookupFunction( + "webview_destroy"); +} + +RunFunction webviewRun(DynamicLibrary webview) { + return webview.lookupFunction("webview_run"); +} + +TerminateFunction webviewTerminate(DynamicLibrary webview) { + return webview.lookupFunction( + "webview_terminate"); +} + +SetTitleFunction webviewSetTitle(DynamicLibrary webview) { + return webview.lookupFunction( + "webview_set_title"); +} + +SetSizeFunction webviewSetSize(DynamicLibrary webview) { + return webview.lookupFunction( + "webview_set_size"); +} + +NavigateFunction webviewNavigate(DynamicLibrary webview) { + return webview.lookupFunction( + "webview_navigate"); +} + +InitFunction webviewInit(DynamicLibrary webview) { + return webview + .lookupFunction("webview_init"); +} + +EvalFunction webviewEval(DynamicLibrary webview) { + return webview + .lookupFunction("webview_eval"); +} diff --git a/lib/src/webview_dart_api.dart b/lib/src/webview_dart_api.dart new file mode 100644 index 0000000..4a63d22 --- /dev/null +++ b/lib/src/webview_dart_api.dart @@ -0,0 +1,68 @@ +import 'dart:io'; + +import 'bindings.dart'; + +enum SIzeHint { none, min, max, fixed } + +class Webview { + static final WebviewLib _lib = loadLibrary( + Directory( + Directory.current.path + + "/webview.${Platform.isWindows ? 'dll' : Platform.isLinux ? 'so' : 'dylib'}", + ).absolute.path.replaceAll("\\", "/"), + ); + static final CreateFunction _create = webviewCreate(_lib); + static final DestroyFunction _destroy = webviewDestroy(_lib); + static final RunFunction _run = webviewRun(_lib); + static final TerminateFunction _terminate = webviewTerminate(_lib); + static final SetTitleFunction _setTitle = webviewSetTitle(_lib); + static final SetSizeFunction _setSize = webviewSetSize(_lib); + static final NavigateFunction _navigate = webviewNavigate(_lib); + static final InitFunction _init = webviewInit(_lib); + static final EvalFunction _eval = webviewEval(_lib); + + late final WindowHandle _handle; + + Webview([bool debug = false]) { + _handle = _create(debug ? 1 : 0, nullptr); + } + + void terminate() { + _terminate(_handle); + } + + Webview setTitle(String title) { + _setTitle(_handle, title.toNativeUtf8()); + return this; + } + + Webview setSize(final int width, final int height, + [SIzeHint sIzeHint = SIzeHint.none]) { + _setSize(_handle, width, height, sIzeHint.index); + return this; + } + + Webview navigate(String url) { + _navigate(_handle, url.toNativeUtf8()); + return this; + } + + Webview init(String js) { + _init(_handle, js.toNativeUtf8()); + return this; + } + + Webview eval(String js) { + _eval(_handle, js.toNativeUtf8()); + return this; + } + + void run([bool autoDestroy = true]) { + _run(_handle); + if (autoDestroy) destroy(); + } + + void destroy() { + _destroy(_handle); + } +} diff --git a/lib/src/webview_dart_base.dart b/lib/src/webview_dart_base.dart deleted file mode 100644 index e8a6f15..0000000 --- a/lib/src/webview_dart_base.dart +++ /dev/null @@ -1,6 +0,0 @@ -// TODO: Put public facing types in this file. - -/// Checks if you are awesome. Spoiler: you are. -class Awesome { - bool get isAwesome => true; -} diff --git a/lib/webview_dart.dart b/lib/webview_dart.dart index cb60116..82ebccd 100644 --- a/lib/webview_dart.dart +++ b/lib/webview_dart.dart @@ -3,6 +3,6 @@ /// More dartdocs go here. library webview_dart; -export 'src/webview_dart_base.dart'; +export 'src/webview_dart_api.dart'; // TODO: Export any libraries intended for clients of this package. diff --git a/library/webview/.gitattributes b/library/webview/.gitattributes new file mode 100644 index 0000000..8a8ea54 --- /dev/null +++ b/library/webview/.gitattributes @@ -0,0 +1 @@ +*.h linguist-language=c diff --git a/library/webview/.gitignore b/library/webview/.gitignore new file mode 100644 index 0000000..a168dff --- /dev/null +++ b/library/webview/.gitignore @@ -0,0 +1,2 @@ +# Build atrifacts +/build diff --git a/library/webview/.vscode/c_cpp_properties.json b/library/webview/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..876060f --- /dev/null +++ b/library/webview/.vscode/c_cpp_properties.json @@ -0,0 +1,17 @@ +{ + "configurations": [ + { + "name": "Win32", + "includePath": [ + "${default}", + "${workspaceFolder}/script" + ], + "windowsSdkVersion": "10.0.19041.0", + "compilerPath": "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.29.30133\\bin\\Hostx64\\x64\\cl.exe", + "cStandard": "c17", + "cppStandard": "c++17", + "intelliSenseMode": "windows-msvc-x64" + } + ], + "version": 4 +} \ No newline at end of file diff --git a/library/webview/LICENSE b/library/webview/LICENSE new file mode 100644 index 0000000..e05af27 --- /dev/null +++ b/library/webview/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 Serge Zaitsev + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/library/webview/main.cc b/library/webview/main.cc new file mode 100644 index 0000000..5d4a1cb --- /dev/null +++ b/library/webview/main.cc @@ -0,0 +1,18 @@ +//bin/echo; [ $(uname) = "Darwin" ] && FLAGS="-framework Webkit" || FLAGS="$(pkg-config --cflags --libs gtk+-3.0 webkit2gtk-4.0)" ; c++ "$0" $FLAGS -std=c++11 -g -o webview && ./webview ; exit +// +build ignore + +#include "webview.h" +#ifdef WIN32 +int WINAPI WinMain(HINSTANCE hInt, HINSTANCE hPrevInst, LPSTR lpCmdLine, + int nCmdShow) { +#else +int main() { +#endif + webview_t w = webview_create(0, NULL); + webview_set_title(w, "Webview Example"); + webview_set_size(w, 480, 320, WEBVIEW_HINT_NONE); + webview_navigate(w, "https://en.m.wikipedia.org/wiki/Main_Page"); + webview_run(w); + webview_destroy(w); + return 0; +} diff --git a/library/webview/script/WebView2.h b/library/webview/script/WebView2.h new file mode 100644 index 0000000..a08fe7a --- /dev/null +++ b/library/webview/script/WebView2.h @@ -0,0 +1,6515 @@ + + +/* this ALWAYS GENERATED file contains the definitions for the interfaces */ + + + /* File created by MIDL compiler version 8.xx.xxxx */ +/* at a redacted point in time + */ +/* Compiler settings for ../../edge_embedded_browser/client/win/current/webview2.idl: + Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 8.xx.xxxx + protocol : dce , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +/* @@MIDL_FILE_HEADING( ) */ + +#pragma warning( disable: 4049 ) /* more than 64k source lines */ + + +/* verify that the version is high enough to compile this file*/ +#ifndef __REQUIRED_RPCNDR_H_VERSION__ +#define __REQUIRED_RPCNDR_H_VERSION__ 475 +#endif + +#include "rpc.h" +#include "rpcndr.h" + +#ifndef __RPCNDR_H_VERSION__ +#error this stub requires an updated version of +#endif /* __RPCNDR_H_VERSION__ */ + + +#ifndef __webview2_h__ +#define __webview2_h__ + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#pragma once +#endif + +/* Forward Declarations */ + +#ifndef __ICoreWebView2AcceleratorKeyPressedEventArgs_FWD_DEFINED__ +#define __ICoreWebView2AcceleratorKeyPressedEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2AcceleratorKeyPressedEventArgs ICoreWebView2AcceleratorKeyPressedEventArgs; + +#endif /* __ICoreWebView2AcceleratorKeyPressedEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2AcceleratorKeyPressedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2AcceleratorKeyPressedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2AcceleratorKeyPressedEventHandler ICoreWebView2AcceleratorKeyPressedEventHandler; + +#endif /* __ICoreWebView2AcceleratorKeyPressedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler; + +#endif /* __ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2CallDevToolsProtocolMethodCompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2CallDevToolsProtocolMethodCompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2CallDevToolsProtocolMethodCompletedHandler ICoreWebView2CallDevToolsProtocolMethodCompletedHandler; + +#endif /* __ICoreWebView2CallDevToolsProtocolMethodCompletedHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2CapturePreviewCompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2CapturePreviewCompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2CapturePreviewCompletedHandler ICoreWebView2CapturePreviewCompletedHandler; + +#endif /* __ICoreWebView2CapturePreviewCompletedHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2_FWD_DEFINED__ +#define __ICoreWebView2_FWD_DEFINED__ +typedef interface ICoreWebView2 ICoreWebView2; + +#endif /* __ICoreWebView2_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Controller_FWD_DEFINED__ +#define __ICoreWebView2Controller_FWD_DEFINED__ +typedef interface ICoreWebView2Controller ICoreWebView2Controller; + +#endif /* __ICoreWebView2Controller_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ContentLoadingEventArgs_FWD_DEFINED__ +#define __ICoreWebView2ContentLoadingEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2ContentLoadingEventArgs ICoreWebView2ContentLoadingEventArgs; + +#endif /* __ICoreWebView2ContentLoadingEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ContentLoadingEventHandler_FWD_DEFINED__ +#define __ICoreWebView2ContentLoadingEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2ContentLoadingEventHandler ICoreWebView2ContentLoadingEventHandler; + +#endif /* __ICoreWebView2ContentLoadingEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2DocumentTitleChangedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2DocumentTitleChangedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2DocumentTitleChangedEventHandler ICoreWebView2DocumentTitleChangedEventHandler; + +#endif /* __ICoreWebView2DocumentTitleChangedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ContainsFullScreenElementChangedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2ContainsFullScreenElementChangedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2ContainsFullScreenElementChangedEventHandler ICoreWebView2ContainsFullScreenElementChangedEventHandler; + +#endif /* __ICoreWebView2ContainsFullScreenElementChangedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2CreateCoreWebView2ControllerCompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2CreateCoreWebView2ControllerCompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2CreateCoreWebView2ControllerCompletedHandler ICoreWebView2CreateCoreWebView2ControllerCompletedHandler; + +#endif /* __ICoreWebView2CreateCoreWebView2ControllerCompletedHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler; + +#endif /* __ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Deferral_FWD_DEFINED__ +#define __ICoreWebView2Deferral_FWD_DEFINED__ +typedef interface ICoreWebView2Deferral ICoreWebView2Deferral; + +#endif /* __ICoreWebView2Deferral_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2DevToolsProtocolEventReceivedEventArgs_FWD_DEFINED__ +#define __ICoreWebView2DevToolsProtocolEventReceivedEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2DevToolsProtocolEventReceivedEventArgs ICoreWebView2DevToolsProtocolEventReceivedEventArgs; + +#endif /* __ICoreWebView2DevToolsProtocolEventReceivedEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2DevToolsProtocolEventReceivedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2DevToolsProtocolEventReceivedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2DevToolsProtocolEventReceivedEventHandler ICoreWebView2DevToolsProtocolEventReceivedEventHandler; + +#endif /* __ICoreWebView2DevToolsProtocolEventReceivedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2DevToolsProtocolEventReceiver_FWD_DEFINED__ +#define __ICoreWebView2DevToolsProtocolEventReceiver_FWD_DEFINED__ +typedef interface ICoreWebView2DevToolsProtocolEventReceiver ICoreWebView2DevToolsProtocolEventReceiver; + +#endif /* __ICoreWebView2DevToolsProtocolEventReceiver_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment_FWD_DEFINED__ +#define __ICoreWebView2Environment_FWD_DEFINED__ +typedef interface ICoreWebView2Environment ICoreWebView2Environment; + +#endif /* __ICoreWebView2Environment_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2EnvironmentOptions_FWD_DEFINED__ +#define __ICoreWebView2EnvironmentOptions_FWD_DEFINED__ +typedef interface ICoreWebView2EnvironmentOptions ICoreWebView2EnvironmentOptions; + +#endif /* __ICoreWebView2EnvironmentOptions_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ExecuteScriptCompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2ExecuteScriptCompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2ExecuteScriptCompletedHandler ICoreWebView2ExecuteScriptCompletedHandler; + +#endif /* __ICoreWebView2ExecuteScriptCompletedHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2FocusChangedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2FocusChangedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2FocusChangedEventHandler ICoreWebView2FocusChangedEventHandler; + +#endif /* __ICoreWebView2FocusChangedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2HistoryChangedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2HistoryChangedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2HistoryChangedEventHandler ICoreWebView2HistoryChangedEventHandler; + +#endif /* __ICoreWebView2HistoryChangedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2HttpHeadersCollectionIterator_FWD_DEFINED__ +#define __ICoreWebView2HttpHeadersCollectionIterator_FWD_DEFINED__ +typedef interface ICoreWebView2HttpHeadersCollectionIterator ICoreWebView2HttpHeadersCollectionIterator; + +#endif /* __ICoreWebView2HttpHeadersCollectionIterator_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2HttpRequestHeaders_FWD_DEFINED__ +#define __ICoreWebView2HttpRequestHeaders_FWD_DEFINED__ +typedef interface ICoreWebView2HttpRequestHeaders ICoreWebView2HttpRequestHeaders; + +#endif /* __ICoreWebView2HttpRequestHeaders_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2HttpResponseHeaders_FWD_DEFINED__ +#define __ICoreWebView2HttpResponseHeaders_FWD_DEFINED__ +typedef interface ICoreWebView2HttpResponseHeaders ICoreWebView2HttpResponseHeaders; + +#endif /* __ICoreWebView2HttpResponseHeaders_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2MoveFocusRequestedEventArgs_FWD_DEFINED__ +#define __ICoreWebView2MoveFocusRequestedEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2MoveFocusRequestedEventArgs ICoreWebView2MoveFocusRequestedEventArgs; + +#endif /* __ICoreWebView2MoveFocusRequestedEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2MoveFocusRequestedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2MoveFocusRequestedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2MoveFocusRequestedEventHandler ICoreWebView2MoveFocusRequestedEventHandler; + +#endif /* __ICoreWebView2MoveFocusRequestedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2NavigationCompletedEventArgs_FWD_DEFINED__ +#define __ICoreWebView2NavigationCompletedEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2NavigationCompletedEventArgs ICoreWebView2NavigationCompletedEventArgs; + +#endif /* __ICoreWebView2NavigationCompletedEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2NavigationCompletedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2NavigationCompletedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2NavigationCompletedEventHandler ICoreWebView2NavigationCompletedEventHandler; + +#endif /* __ICoreWebView2NavigationCompletedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2NavigationStartingEventArgs_FWD_DEFINED__ +#define __ICoreWebView2NavigationStartingEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2NavigationStartingEventArgs ICoreWebView2NavigationStartingEventArgs; + +#endif /* __ICoreWebView2NavigationStartingEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2NavigationStartingEventHandler_FWD_DEFINED__ +#define __ICoreWebView2NavigationStartingEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2NavigationStartingEventHandler ICoreWebView2NavigationStartingEventHandler; + +#endif /* __ICoreWebView2NavigationStartingEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2NewBrowserVersionAvailableEventHandler_FWD_DEFINED__ +#define __ICoreWebView2NewBrowserVersionAvailableEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2NewBrowserVersionAvailableEventHandler ICoreWebView2NewBrowserVersionAvailableEventHandler; + +#endif /* __ICoreWebView2NewBrowserVersionAvailableEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2NewWindowRequestedEventArgs_FWD_DEFINED__ +#define __ICoreWebView2NewWindowRequestedEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2NewWindowRequestedEventArgs ICoreWebView2NewWindowRequestedEventArgs; + +#endif /* __ICoreWebView2NewWindowRequestedEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2NewWindowRequestedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2NewWindowRequestedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2NewWindowRequestedEventHandler ICoreWebView2NewWindowRequestedEventHandler; + +#endif /* __ICoreWebView2NewWindowRequestedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2PermissionRequestedEventArgs_FWD_DEFINED__ +#define __ICoreWebView2PermissionRequestedEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2PermissionRequestedEventArgs ICoreWebView2PermissionRequestedEventArgs; + +#endif /* __ICoreWebView2PermissionRequestedEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2PermissionRequestedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2PermissionRequestedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2PermissionRequestedEventHandler ICoreWebView2PermissionRequestedEventHandler; + +#endif /* __ICoreWebView2PermissionRequestedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ProcessFailedEventArgs_FWD_DEFINED__ +#define __ICoreWebView2ProcessFailedEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2ProcessFailedEventArgs ICoreWebView2ProcessFailedEventArgs; + +#endif /* __ICoreWebView2ProcessFailedEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ProcessFailedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2ProcessFailedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2ProcessFailedEventHandler ICoreWebView2ProcessFailedEventHandler; + +#endif /* __ICoreWebView2ProcessFailedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ScriptDialogOpeningEventArgs_FWD_DEFINED__ +#define __ICoreWebView2ScriptDialogOpeningEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2ScriptDialogOpeningEventArgs ICoreWebView2ScriptDialogOpeningEventArgs; + +#endif /* __ICoreWebView2ScriptDialogOpeningEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ScriptDialogOpeningEventHandler_FWD_DEFINED__ +#define __ICoreWebView2ScriptDialogOpeningEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2ScriptDialogOpeningEventHandler ICoreWebView2ScriptDialogOpeningEventHandler; + +#endif /* __ICoreWebView2ScriptDialogOpeningEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Settings_FWD_DEFINED__ +#define __ICoreWebView2Settings_FWD_DEFINED__ +typedef interface ICoreWebView2Settings ICoreWebView2Settings; + +#endif /* __ICoreWebView2Settings_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2SourceChangedEventArgs_FWD_DEFINED__ +#define __ICoreWebView2SourceChangedEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2SourceChangedEventArgs ICoreWebView2SourceChangedEventArgs; + +#endif /* __ICoreWebView2SourceChangedEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2SourceChangedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2SourceChangedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2SourceChangedEventHandler ICoreWebView2SourceChangedEventHandler; + +#endif /* __ICoreWebView2SourceChangedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2WebMessageReceivedEventArgs_FWD_DEFINED__ +#define __ICoreWebView2WebMessageReceivedEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2WebMessageReceivedEventArgs ICoreWebView2WebMessageReceivedEventArgs; + +#endif /* __ICoreWebView2WebMessageReceivedEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2WebMessageReceivedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2WebMessageReceivedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2WebMessageReceivedEventHandler ICoreWebView2WebMessageReceivedEventHandler; + +#endif /* __ICoreWebView2WebMessageReceivedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2WebResourceRequest_FWD_DEFINED__ +#define __ICoreWebView2WebResourceRequest_FWD_DEFINED__ +typedef interface ICoreWebView2WebResourceRequest ICoreWebView2WebResourceRequest; + +#endif /* __ICoreWebView2WebResourceRequest_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2WebResourceRequestedEventArgs_FWD_DEFINED__ +#define __ICoreWebView2WebResourceRequestedEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2WebResourceRequestedEventArgs ICoreWebView2WebResourceRequestedEventArgs; + +#endif /* __ICoreWebView2WebResourceRequestedEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2WebResourceRequestedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2WebResourceRequestedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2WebResourceRequestedEventHandler ICoreWebView2WebResourceRequestedEventHandler; + +#endif /* __ICoreWebView2WebResourceRequestedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2WebResourceResponse_FWD_DEFINED__ +#define __ICoreWebView2WebResourceResponse_FWD_DEFINED__ +typedef interface ICoreWebView2WebResourceResponse ICoreWebView2WebResourceResponse; + +#endif /* __ICoreWebView2WebResourceResponse_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2WindowCloseRequestedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2WindowCloseRequestedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2WindowCloseRequestedEventHandler ICoreWebView2WindowCloseRequestedEventHandler; + +#endif /* __ICoreWebView2WindowCloseRequestedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ZoomFactorChangedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2ZoomFactorChangedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2ZoomFactorChangedEventHandler ICoreWebView2ZoomFactorChangedEventHandler; + +#endif /* __ICoreWebView2ZoomFactorChangedEventHandler_FWD_DEFINED__ */ + + +/* header files for imported files */ +#include "objidl.h" +#include "oaidl.h" +#include "EventToken.h" + +#ifdef __cplusplus +extern "C"{ +#endif + + + +#ifndef __WebView2_LIBRARY_DEFINED__ +#define __WebView2_LIBRARY_DEFINED__ + +/* library WebView2 */ +/* [version][uuid] */ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT + { + COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT_PNG = 0, + COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT_JPEG = ( COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT_PNG + 1 ) + } COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_SCRIPT_DIALOG_KIND + { + COREWEBVIEW2_SCRIPT_DIALOG_KIND_ALERT = 0, + COREWEBVIEW2_SCRIPT_DIALOG_KIND_CONFIRM = ( COREWEBVIEW2_SCRIPT_DIALOG_KIND_ALERT + 1 ) , + COREWEBVIEW2_SCRIPT_DIALOG_KIND_PROMPT = ( COREWEBVIEW2_SCRIPT_DIALOG_KIND_CONFIRM + 1 ) , + COREWEBVIEW2_SCRIPT_DIALOG_KIND_BEFOREUNLOAD = ( COREWEBVIEW2_SCRIPT_DIALOG_KIND_PROMPT + 1 ) + } COREWEBVIEW2_SCRIPT_DIALOG_KIND; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_PROCESS_FAILED_KIND + { + COREWEBVIEW2_PROCESS_FAILED_KIND_BROWSER_PROCESS_EXITED = 0, + COREWEBVIEW2_PROCESS_FAILED_KIND_RENDER_PROCESS_EXITED = ( COREWEBVIEW2_PROCESS_FAILED_KIND_BROWSER_PROCESS_EXITED + 1 ) , + COREWEBVIEW2_PROCESS_FAILED_KIND_RENDER_PROCESS_UNRESPONSIVE = ( COREWEBVIEW2_PROCESS_FAILED_KIND_RENDER_PROCESS_EXITED + 1 ) + } COREWEBVIEW2_PROCESS_FAILED_KIND; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_PERMISSION_KIND + { + COREWEBVIEW2_PERMISSION_KIND_UNKNOWN_PERMISSION = 0, + COREWEBVIEW2_PERMISSION_KIND_MICROPHONE = ( COREWEBVIEW2_PERMISSION_KIND_UNKNOWN_PERMISSION + 1 ) , + COREWEBVIEW2_PERMISSION_KIND_CAMERA = ( COREWEBVIEW2_PERMISSION_KIND_MICROPHONE + 1 ) , + COREWEBVIEW2_PERMISSION_KIND_GEOLOCATION = ( COREWEBVIEW2_PERMISSION_KIND_CAMERA + 1 ) , + COREWEBVIEW2_PERMISSION_KIND_NOTIFICATIONS = ( COREWEBVIEW2_PERMISSION_KIND_GEOLOCATION + 1 ) , + COREWEBVIEW2_PERMISSION_KIND_OTHER_SENSORS = ( COREWEBVIEW2_PERMISSION_KIND_NOTIFICATIONS + 1 ) , + COREWEBVIEW2_PERMISSION_KIND_CLIPBOARD_READ = ( COREWEBVIEW2_PERMISSION_KIND_OTHER_SENSORS + 1 ) + } COREWEBVIEW2_PERMISSION_KIND; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_PERMISSION_STATE + { + COREWEBVIEW2_PERMISSION_STATE_DEFAULT = 0, + COREWEBVIEW2_PERMISSION_STATE_ALLOW = ( COREWEBVIEW2_PERMISSION_STATE_DEFAULT + 1 ) , + COREWEBVIEW2_PERMISSION_STATE_DENY = ( COREWEBVIEW2_PERMISSION_STATE_ALLOW + 1 ) + } COREWEBVIEW2_PERMISSION_STATE; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_WEB_ERROR_STATUS + { + COREWEBVIEW2_WEB_ERROR_STATUS_UNKNOWN = 0, + COREWEBVIEW2_WEB_ERROR_STATUS_CERTIFICATE_COMMON_NAME_IS_INCORRECT = ( COREWEBVIEW2_WEB_ERROR_STATUS_UNKNOWN + 1 ) , + COREWEBVIEW2_WEB_ERROR_STATUS_CERTIFICATE_EXPIRED = ( COREWEBVIEW2_WEB_ERROR_STATUS_CERTIFICATE_COMMON_NAME_IS_INCORRECT + 1 ) , + COREWEBVIEW2_WEB_ERROR_STATUS_CLIENT_CERTIFICATE_CONTAINS_ERRORS = ( COREWEBVIEW2_WEB_ERROR_STATUS_CERTIFICATE_EXPIRED + 1 ) , + COREWEBVIEW2_WEB_ERROR_STATUS_CERTIFICATE_REVOKED = ( COREWEBVIEW2_WEB_ERROR_STATUS_CLIENT_CERTIFICATE_CONTAINS_ERRORS + 1 ) , + COREWEBVIEW2_WEB_ERROR_STATUS_CERTIFICATE_IS_INVALID = ( COREWEBVIEW2_WEB_ERROR_STATUS_CERTIFICATE_REVOKED + 1 ) , + COREWEBVIEW2_WEB_ERROR_STATUS_SERVER_UNREACHABLE = ( COREWEBVIEW2_WEB_ERROR_STATUS_CERTIFICATE_IS_INVALID + 1 ) , + COREWEBVIEW2_WEB_ERROR_STATUS_TIMEOUT = ( COREWEBVIEW2_WEB_ERROR_STATUS_SERVER_UNREACHABLE + 1 ) , + COREWEBVIEW2_WEB_ERROR_STATUS_ERROR_HTTP_INVALID_SERVER_RESPONSE = ( COREWEBVIEW2_WEB_ERROR_STATUS_TIMEOUT + 1 ) , + COREWEBVIEW2_WEB_ERROR_STATUS_CONNECTION_ABORTED = ( COREWEBVIEW2_WEB_ERROR_STATUS_ERROR_HTTP_INVALID_SERVER_RESPONSE + 1 ) , + COREWEBVIEW2_WEB_ERROR_STATUS_CONNECTION_RESET = ( COREWEBVIEW2_WEB_ERROR_STATUS_CONNECTION_ABORTED + 1 ) , + COREWEBVIEW2_WEB_ERROR_STATUS_DISCONNECTED = ( COREWEBVIEW2_WEB_ERROR_STATUS_CONNECTION_RESET + 1 ) , + COREWEBVIEW2_WEB_ERROR_STATUS_CANNOT_CONNECT = ( COREWEBVIEW2_WEB_ERROR_STATUS_DISCONNECTED + 1 ) , + COREWEBVIEW2_WEB_ERROR_STATUS_HOST_NAME_NOT_RESOLVED = ( COREWEBVIEW2_WEB_ERROR_STATUS_CANNOT_CONNECT + 1 ) , + COREWEBVIEW2_WEB_ERROR_STATUS_OPERATION_CANCELED = ( COREWEBVIEW2_WEB_ERROR_STATUS_HOST_NAME_NOT_RESOLVED + 1 ) , + COREWEBVIEW2_WEB_ERROR_STATUS_REDIRECT_FAILED = ( COREWEBVIEW2_WEB_ERROR_STATUS_OPERATION_CANCELED + 1 ) , + COREWEBVIEW2_WEB_ERROR_STATUS_UNEXPECTED_ERROR = ( COREWEBVIEW2_WEB_ERROR_STATUS_REDIRECT_FAILED + 1 ) + } COREWEBVIEW2_WEB_ERROR_STATUS; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_WEB_RESOURCE_CONTEXT + { + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_ALL = 0, + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_DOCUMENT = ( COREWEBVIEW2_WEB_RESOURCE_CONTEXT_ALL + 1 ) , + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_STYLESHEET = ( COREWEBVIEW2_WEB_RESOURCE_CONTEXT_DOCUMENT + 1 ) , + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_IMAGE = ( COREWEBVIEW2_WEB_RESOURCE_CONTEXT_STYLESHEET + 1 ) , + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_MEDIA = ( COREWEBVIEW2_WEB_RESOURCE_CONTEXT_IMAGE + 1 ) , + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_FONT = ( COREWEBVIEW2_WEB_RESOURCE_CONTEXT_MEDIA + 1 ) , + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_SCRIPT = ( COREWEBVIEW2_WEB_RESOURCE_CONTEXT_FONT + 1 ) , + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_XML_HTTP_REQUEST = ( COREWEBVIEW2_WEB_RESOURCE_CONTEXT_SCRIPT + 1 ) , + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_FETCH = ( COREWEBVIEW2_WEB_RESOURCE_CONTEXT_XML_HTTP_REQUEST + 1 ) , + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_TEXT_TRACK = ( COREWEBVIEW2_WEB_RESOURCE_CONTEXT_FETCH + 1 ) , + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_EVENT_SOURCE = ( COREWEBVIEW2_WEB_RESOURCE_CONTEXT_TEXT_TRACK + 1 ) , + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_WEBSOCKET = ( COREWEBVIEW2_WEB_RESOURCE_CONTEXT_EVENT_SOURCE + 1 ) , + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_MANIFEST = ( COREWEBVIEW2_WEB_RESOURCE_CONTEXT_WEBSOCKET + 1 ) , + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_SIGNED_EXCHANGE = ( COREWEBVIEW2_WEB_RESOURCE_CONTEXT_MANIFEST + 1 ) , + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_PING = ( COREWEBVIEW2_WEB_RESOURCE_CONTEXT_SIGNED_EXCHANGE + 1 ) , + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_CSP_VIOLATION_REPORT = ( COREWEBVIEW2_WEB_RESOURCE_CONTEXT_PING + 1 ) , + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_OTHER = ( COREWEBVIEW2_WEB_RESOURCE_CONTEXT_CSP_VIOLATION_REPORT + 1 ) + } COREWEBVIEW2_WEB_RESOURCE_CONTEXT; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_MOVE_FOCUS_REASON + { + COREWEBVIEW2_MOVE_FOCUS_REASON_PROGRAMMATIC = 0, + COREWEBVIEW2_MOVE_FOCUS_REASON_NEXT = ( COREWEBVIEW2_MOVE_FOCUS_REASON_PROGRAMMATIC + 1 ) , + COREWEBVIEW2_MOVE_FOCUS_REASON_PREVIOUS = ( COREWEBVIEW2_MOVE_FOCUS_REASON_NEXT + 1 ) + } COREWEBVIEW2_MOVE_FOCUS_REASON; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_KEY_EVENT_KIND + { + COREWEBVIEW2_KEY_EVENT_KIND_KEY_DOWN = 0, + COREWEBVIEW2_KEY_EVENT_KIND_KEY_UP = ( COREWEBVIEW2_KEY_EVENT_KIND_KEY_DOWN + 1 ) , + COREWEBVIEW2_KEY_EVENT_KIND_SYSTEM_KEY_DOWN = ( COREWEBVIEW2_KEY_EVENT_KIND_KEY_UP + 1 ) , + COREWEBVIEW2_KEY_EVENT_KIND_SYSTEM_KEY_UP = ( COREWEBVIEW2_KEY_EVENT_KIND_SYSTEM_KEY_DOWN + 1 ) + } COREWEBVIEW2_KEY_EVENT_KIND; + +typedef struct COREWEBVIEW2_PHYSICAL_KEY_STATUS + { + UINT32 RepeatCount; + UINT32 ScanCode; + BOOL IsExtendedKey; + BOOL IsMenuKeyDown; + BOOL WasKeyDown; + BOOL IsKeyReleased; + } COREWEBVIEW2_PHYSICAL_KEY_STATUS; + +STDAPI CreateCoreWebView2EnvironmentWithOptions( + PCWSTR browserExecutableFolder, + PCWSTR userDataFolder, + ICoreWebView2EnvironmentOptions* environmentOptions, + ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler* environment_created_handler); +STDAPI CreateCoreWebView2EnvironmentWithDetails( + PCWSTR browserExecutableFolder, + PCWSTR userDataFolder, + PCWSTR additionalBrowserArguments, + ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler* environment_created_handler); +STDAPI CreateCoreWebView2Environment( + ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler* environment_created_handler); +STDAPI GetAvailableCoreWebView2BrowserVersionString( + PCWSTR browserExecutableFolder, + LPWSTR* versionInfo); +STDAPI CompareBrowserVersions( + PCWSTR version1, + PCWSTR version2, + int* result); + +EXTERN_C const IID LIBID_WebView2; + +#ifndef __ICoreWebView2AcceleratorKeyPressedEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2AcceleratorKeyPressedEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2AcceleratorKeyPressedEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2AcceleratorKeyPressedEventArgs; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("9224476E-D8C3-4EB7-BB65-2FD7792B27CE") + ICoreWebView2AcceleratorKeyPressedEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_KeyEventKind( + /* [retval][out] */ COREWEBVIEW2_KEY_EVENT_KIND *keyEventKind) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_VirtualKey( + /* [retval][out] */ UINT *virtualKey) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_KeyEventLParam( + /* [retval][out] */ INT *lParam) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_PhysicalKeyStatus( + /* [retval][out] */ COREWEBVIEW2_PHYSICAL_KEY_STATUS *physicalKeyStatus) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Handled( + /* [retval][out] */ BOOL *handled) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Handled( + /* [in] */ BOOL handled) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2AcceleratorKeyPressedEventArgsVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2AcceleratorKeyPressedEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2AcceleratorKeyPressedEventArgs * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2AcceleratorKeyPressedEventArgs * This); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_KeyEventKind )( + ICoreWebView2AcceleratorKeyPressedEventArgs * This, + /* [retval][out] */ COREWEBVIEW2_KEY_EVENT_KIND *keyEventKind); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_VirtualKey )( + ICoreWebView2AcceleratorKeyPressedEventArgs * This, + /* [retval][out] */ UINT *virtualKey); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_KeyEventLParam )( + ICoreWebView2AcceleratorKeyPressedEventArgs * This, + /* [retval][out] */ INT *lParam); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PhysicalKeyStatus )( + ICoreWebView2AcceleratorKeyPressedEventArgs * This, + /* [retval][out] */ COREWEBVIEW2_PHYSICAL_KEY_STATUS *physicalKeyStatus); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Handled )( + ICoreWebView2AcceleratorKeyPressedEventArgs * This, + /* [retval][out] */ BOOL *handled); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Handled )( + ICoreWebView2AcceleratorKeyPressedEventArgs * This, + /* [in] */ BOOL handled); + + END_INTERFACE + } ICoreWebView2AcceleratorKeyPressedEventArgsVtbl; + + interface ICoreWebView2AcceleratorKeyPressedEventArgs + { + CONST_VTBL struct ICoreWebView2AcceleratorKeyPressedEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2AcceleratorKeyPressedEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2AcceleratorKeyPressedEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2AcceleratorKeyPressedEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2AcceleratorKeyPressedEventArgs_get_KeyEventKind(This,keyEventKind) \ + ( (This)->lpVtbl -> get_KeyEventKind(This,keyEventKind) ) + +#define ICoreWebView2AcceleratorKeyPressedEventArgs_get_VirtualKey(This,virtualKey) \ + ( (This)->lpVtbl -> get_VirtualKey(This,virtualKey) ) + +#define ICoreWebView2AcceleratorKeyPressedEventArgs_get_KeyEventLParam(This,lParam) \ + ( (This)->lpVtbl -> get_KeyEventLParam(This,lParam) ) + +#define ICoreWebView2AcceleratorKeyPressedEventArgs_get_PhysicalKeyStatus(This,physicalKeyStatus) \ + ( (This)->lpVtbl -> get_PhysicalKeyStatus(This,physicalKeyStatus) ) + +#define ICoreWebView2AcceleratorKeyPressedEventArgs_get_Handled(This,handled) \ + ( (This)->lpVtbl -> get_Handled(This,handled) ) + +#define ICoreWebView2AcceleratorKeyPressedEventArgs_put_Handled(This,handled) \ + ( (This)->lpVtbl -> put_Handled(This,handled) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2AcceleratorKeyPressedEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2AcceleratorKeyPressedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2AcceleratorKeyPressedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2AcceleratorKeyPressedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2AcceleratorKeyPressedEventHandler; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("A7D303F9-503C-4B7E-BC40-5C7CE6CABAAA") + ICoreWebView2AcceleratorKeyPressedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2Controller *sender, + /* [in] */ ICoreWebView2AcceleratorKeyPressedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2AcceleratorKeyPressedEventHandlerVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2AcceleratorKeyPressedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2AcceleratorKeyPressedEventHandler * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2AcceleratorKeyPressedEventHandler * This); + + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2AcceleratorKeyPressedEventHandler * This, + /* [in] */ ICoreWebView2Controller *sender, + /* [in] */ ICoreWebView2AcceleratorKeyPressedEventArgs *args); + + END_INTERFACE + } ICoreWebView2AcceleratorKeyPressedEventHandlerVtbl; + + interface ICoreWebView2AcceleratorKeyPressedEventHandler + { + CONST_VTBL struct ICoreWebView2AcceleratorKeyPressedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2AcceleratorKeyPressedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2AcceleratorKeyPressedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2AcceleratorKeyPressedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2AcceleratorKeyPressedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2AcceleratorKeyPressedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("7082ABED-0591-428F-A722-60C2F814546B") + ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ HRESULT errorCode, + /* [in] */ LPCWSTR id) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandlerVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler * This); + + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler * This, + /* [in] */ HRESULT errorCode, + /* [in] */ LPCWSTR id); + + END_INTERFACE + } ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandlerVtbl; + + interface ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler + { + CONST_VTBL struct ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler_Invoke(This,errorCode,id) \ + ( (This)->lpVtbl -> Invoke(This,errorCode,id) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2CallDevToolsProtocolMethodCompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2CallDevToolsProtocolMethodCompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2CallDevToolsProtocolMethodCompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2CallDevToolsProtocolMethodCompletedHandler; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("C20CF895-BA7C-493B-AB2E-8A6E3A3602A2") + ICoreWebView2CallDevToolsProtocolMethodCompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ HRESULT errorCode, + /* [in] */ LPCWSTR returnObjectAsJson) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2CallDevToolsProtocolMethodCompletedHandlerVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2CallDevToolsProtocolMethodCompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2CallDevToolsProtocolMethodCompletedHandler * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2CallDevToolsProtocolMethodCompletedHandler * This); + + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2CallDevToolsProtocolMethodCompletedHandler * This, + /* [in] */ HRESULT errorCode, + /* [in] */ LPCWSTR returnObjectAsJson); + + END_INTERFACE + } ICoreWebView2CallDevToolsProtocolMethodCompletedHandlerVtbl; + + interface ICoreWebView2CallDevToolsProtocolMethodCompletedHandler + { + CONST_VTBL struct ICoreWebView2CallDevToolsProtocolMethodCompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2CallDevToolsProtocolMethodCompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2CallDevToolsProtocolMethodCompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2CallDevToolsProtocolMethodCompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2CallDevToolsProtocolMethodCompletedHandler_Invoke(This,errorCode,returnObjectAsJson) \ + ( (This)->lpVtbl -> Invoke(This,errorCode,returnObjectAsJson) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2CallDevToolsProtocolMethodCompletedHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2CapturePreviewCompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2CapturePreviewCompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2CapturePreviewCompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2CapturePreviewCompletedHandler; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("DCED64F8-D9C7-4A3C-B9FD-FBBCA0B43496") + ICoreWebView2CapturePreviewCompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ HRESULT result) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2CapturePreviewCompletedHandlerVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2CapturePreviewCompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2CapturePreviewCompletedHandler * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2CapturePreviewCompletedHandler * This); + + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2CapturePreviewCompletedHandler * This, + /* [in] */ HRESULT result); + + END_INTERFACE + } ICoreWebView2CapturePreviewCompletedHandlerVtbl; + + interface ICoreWebView2CapturePreviewCompletedHandler + { + CONST_VTBL struct ICoreWebView2CapturePreviewCompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2CapturePreviewCompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2CapturePreviewCompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2CapturePreviewCompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2CapturePreviewCompletedHandler_Invoke(This,result) \ + ( (This)->lpVtbl -> Invoke(This,result) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2CapturePreviewCompletedHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2_INTERFACE_DEFINED__ +#define __ICoreWebView2_INTERFACE_DEFINED__ + +/* interface ICoreWebView2 */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("189B8AAF-0426-4748-B9AD-243F537EB46B") + ICoreWebView2 : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Settings( + /* [retval][out] */ ICoreWebView2Settings **settings) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Source( + /* [retval][out] */ LPWSTR *uri) = 0; + + virtual HRESULT STDMETHODCALLTYPE Navigate( + /* [in] */ LPCWSTR uri) = 0; + + virtual HRESULT STDMETHODCALLTYPE NavigateToString( + /* [in] */ LPCWSTR htmlContent) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_NavigationStarting( + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_NavigationStarting( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_ContentLoading( + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_ContentLoading( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_SourceChanged( + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_SourceChanged( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_HistoryChanged( + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_HistoryChanged( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_NavigationCompleted( + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_NavigationCompleted( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_FrameNavigationStarting( + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_FrameNavigationStarting( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_FrameNavigationCompleted( + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_FrameNavigationCompleted( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_ScriptDialogOpening( + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_ScriptDialogOpening( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_PermissionRequested( + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_PermissionRequested( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_ProcessFailed( + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_ProcessFailed( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE AddScriptToExecuteOnDocumentCreated( + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler) = 0; + + virtual HRESULT STDMETHODCALLTYPE RemoveScriptToExecuteOnDocumentCreated( + /* [in] */ LPCWSTR id) = 0; + + virtual HRESULT STDMETHODCALLTYPE ExecuteScript( + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler) = 0; + + virtual HRESULT STDMETHODCALLTYPE CapturePreview( + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler) = 0; + + virtual HRESULT STDMETHODCALLTYPE Reload( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE PostWebMessageAsJson( + /* [in] */ LPCWSTR webMessageAsJson) = 0; + + virtual HRESULT STDMETHODCALLTYPE PostWebMessageAsString( + /* [in] */ LPCWSTR webMessageAsString) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_WebMessageReceived( + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_WebMessageReceived( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE CallDevToolsProtocolMethod( + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_BrowserProcessId( + /* [retval][out] */ UINT32 *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_CanGoBack( + /* [retval][out] */ BOOL *canGoBack) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_CanGoForward( + /* [retval][out] */ BOOL *canGoForward) = 0; + + virtual HRESULT STDMETHODCALLTYPE GoBack( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE GoForward( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetDevToolsProtocolEventReceiver( + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver) = 0; + + virtual HRESULT STDMETHODCALLTYPE Stop( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_NewWindowRequested( + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_NewWindowRequested( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_DocumentTitleChanged( + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_DocumentTitleChanged( + /* [in] */ EventRegistrationToken token) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_DocumentTitle( + /* [retval][out] */ LPWSTR *title) = 0; + + virtual HRESULT STDMETHODCALLTYPE AddHostObjectToScript( + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object) = 0; + + virtual HRESULT STDMETHODCALLTYPE RemoveHostObjectFromScript( + /* [in] */ LPCWSTR name) = 0; + + virtual HRESULT STDMETHODCALLTYPE OpenDevToolsWindow( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_ContainsFullScreenElementChanged( + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_ContainsFullScreenElementChanged( + /* [in] */ EventRegistrationToken token) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ContainsFullScreenElement( + /* [retval][out] */ BOOL *containsFullScreenElement) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_WebResourceRequested( + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_WebResourceRequested( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE AddWebResourceRequestedFilter( + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext) = 0; + + virtual HRESULT STDMETHODCALLTYPE RemoveWebResourceRequestedFilter( + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_WindowCloseRequested( + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_WindowCloseRequested( + /* [in] */ EventRegistrationToken token) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Vtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2 * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2 * This); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2 * This, + /* [retval][out] */ LPWSTR *uri); + + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2 * This, + /* [in] */ LPCWSTR uri); + + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2 * This, + /* [in] */ LPCWSTR htmlContent); + + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2 * This, + /* [in] */ EventRegistrationToken token); + + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2 * This, + /* [in] */ EventRegistrationToken token); + + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2 * This, + /* [in] */ EventRegistrationToken token); + + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2 * This, + /* [in] */ EventRegistrationToken token); + + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2 * This, + /* [in] */ EventRegistrationToken token); + + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2 * This, + /* [in] */ EventRegistrationToken token); + + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2 * This, + /* [in] */ EventRegistrationToken token); + + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2 * This, + /* [in] */ EventRegistrationToken token); + + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2 * This, + /* [in] */ EventRegistrationToken token); + + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2 * This, + /* [in] */ EventRegistrationToken token); + + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2 * This, + /* [in] */ LPCWSTR id); + + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2 * This); + + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2 * This, + /* [in] */ LPCWSTR webMessageAsString); + + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2 * This, + /* [in] */ EventRegistrationToken token); + + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2 * This, + /* [retval][out] */ UINT32 *value); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2 * This, + /* [retval][out] */ BOOL *canGoBack); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2 * This, + /* [retval][out] */ BOOL *canGoForward); + + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2 * This); + + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2 * This); + + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2 * This); + + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2 * This, + /* [in] */ EventRegistrationToken token); + + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2 * This, + /* [in] */ EventRegistrationToken token); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2 * This, + /* [retval][out] */ LPWSTR *title); + + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2 * This, + /* [in] */ LPCWSTR name); + + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2 * This); + + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2 * This, + /* [in] */ EventRegistrationToken token); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2 * This, + /* [in] */ EventRegistrationToken token); + + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2 * This, + /* [in] */ EventRegistrationToken token); + + END_INTERFACE + } ICoreWebView2Vtbl; + + interface ICoreWebView2 + { + CONST_VTBL struct ICoreWebView2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Controller_INTERFACE_DEFINED__ +#define __ICoreWebView2Controller_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Controller */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2Controller; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("7CCC5C7F-8351-4572-9077-9C1C80913835") + ICoreWebView2Controller : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsVisible( + /* [retval][out] */ BOOL *isVisible) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_IsVisible( + /* [in] */ BOOL isVisible) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Bounds( + /* [retval][out] */ RECT *bounds) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Bounds( + /* [in] */ RECT bounds) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ZoomFactor( + /* [retval][out] */ double *zoomFactor) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_ZoomFactor( + /* [in] */ double zoomFactor) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_ZoomFactorChanged( + /* [in] */ ICoreWebView2ZoomFactorChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_ZoomFactorChanged( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetBoundsAndZoomFactor( + /* [in] */ RECT bounds, + /* [in] */ double zoomFactor) = 0; + + virtual HRESULT STDMETHODCALLTYPE MoveFocus( + /* [in] */ COREWEBVIEW2_MOVE_FOCUS_REASON reason) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_MoveFocusRequested( + /* [in] */ ICoreWebView2MoveFocusRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_MoveFocusRequested( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_GotFocus( + /* [in] */ ICoreWebView2FocusChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_GotFocus( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_LostFocus( + /* [in] */ ICoreWebView2FocusChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_LostFocus( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_AcceleratorKeyPressed( + /* [in] */ ICoreWebView2AcceleratorKeyPressedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_AcceleratorKeyPressed( + /* [in] */ EventRegistrationToken token) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ParentWindow( + /* [retval][out] */ HWND *topLevelWindow) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_ParentWindow( + /* [in] */ HWND topLevelWindow) = 0; + + virtual HRESULT STDMETHODCALLTYPE NotifyParentWindowPositionChanged( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE Close( void) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_CoreWebView2( + /* [retval][out] */ ICoreWebView2 **coreWebView2) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ControllerVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Controller * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Controller * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Controller * This); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsVisible )( + ICoreWebView2Controller * This, + /* [retval][out] */ BOOL *isVisible); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsVisible )( + ICoreWebView2Controller * This, + /* [in] */ BOOL isVisible); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Bounds )( + ICoreWebView2Controller * This, + /* [retval][out] */ RECT *bounds); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Bounds )( + ICoreWebView2Controller * This, + /* [in] */ RECT bounds); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ZoomFactor )( + ICoreWebView2Controller * This, + /* [retval][out] */ double *zoomFactor); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ZoomFactor )( + ICoreWebView2Controller * This, + /* [in] */ double zoomFactor); + + HRESULT ( STDMETHODCALLTYPE *add_ZoomFactorChanged )( + ICoreWebView2Controller * This, + /* [in] */ ICoreWebView2ZoomFactorChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + HRESULT ( STDMETHODCALLTYPE *remove_ZoomFactorChanged )( + ICoreWebView2Controller * This, + /* [in] */ EventRegistrationToken token); + + HRESULT ( STDMETHODCALLTYPE *SetBoundsAndZoomFactor )( + ICoreWebView2Controller * This, + /* [in] */ RECT bounds, + /* [in] */ double zoomFactor); + + HRESULT ( STDMETHODCALLTYPE *MoveFocus )( + ICoreWebView2Controller * This, + /* [in] */ COREWEBVIEW2_MOVE_FOCUS_REASON reason); + + HRESULT ( STDMETHODCALLTYPE *add_MoveFocusRequested )( + ICoreWebView2Controller * This, + /* [in] */ ICoreWebView2MoveFocusRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + HRESULT ( STDMETHODCALLTYPE *remove_MoveFocusRequested )( + ICoreWebView2Controller * This, + /* [in] */ EventRegistrationToken token); + + HRESULT ( STDMETHODCALLTYPE *add_GotFocus )( + ICoreWebView2Controller * This, + /* [in] */ ICoreWebView2FocusChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + HRESULT ( STDMETHODCALLTYPE *remove_GotFocus )( + ICoreWebView2Controller * This, + /* [in] */ EventRegistrationToken token); + + HRESULT ( STDMETHODCALLTYPE *add_LostFocus )( + ICoreWebView2Controller * This, + /* [in] */ ICoreWebView2FocusChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + HRESULT ( STDMETHODCALLTYPE *remove_LostFocus )( + ICoreWebView2Controller * This, + /* [in] */ EventRegistrationToken token); + + HRESULT ( STDMETHODCALLTYPE *add_AcceleratorKeyPressed )( + ICoreWebView2Controller * This, + /* [in] */ ICoreWebView2AcceleratorKeyPressedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + HRESULT ( STDMETHODCALLTYPE *remove_AcceleratorKeyPressed )( + ICoreWebView2Controller * This, + /* [in] */ EventRegistrationToken token); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ParentWindow )( + ICoreWebView2Controller * This, + /* [retval][out] */ HWND *topLevelWindow); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ParentWindow )( + ICoreWebView2Controller * This, + /* [in] */ HWND topLevelWindow); + + HRESULT ( STDMETHODCALLTYPE *NotifyParentWindowPositionChanged )( + ICoreWebView2Controller * This); + + HRESULT ( STDMETHODCALLTYPE *Close )( + ICoreWebView2Controller * This); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CoreWebView2 )( + ICoreWebView2Controller * This, + /* [retval][out] */ ICoreWebView2 **coreWebView2); + + END_INTERFACE + } ICoreWebView2ControllerVtbl; + + interface ICoreWebView2Controller + { + CONST_VTBL struct ICoreWebView2ControllerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Controller_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Controller_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Controller_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Controller_get_IsVisible(This,isVisible) \ + ( (This)->lpVtbl -> get_IsVisible(This,isVisible) ) + +#define ICoreWebView2Controller_put_IsVisible(This,isVisible) \ + ( (This)->lpVtbl -> put_IsVisible(This,isVisible) ) + +#define ICoreWebView2Controller_get_Bounds(This,bounds) \ + ( (This)->lpVtbl -> get_Bounds(This,bounds) ) + +#define ICoreWebView2Controller_put_Bounds(This,bounds) \ + ( (This)->lpVtbl -> put_Bounds(This,bounds) ) + +#define ICoreWebView2Controller_get_ZoomFactor(This,zoomFactor) \ + ( (This)->lpVtbl -> get_ZoomFactor(This,zoomFactor) ) + +#define ICoreWebView2Controller_put_ZoomFactor(This,zoomFactor) \ + ( (This)->lpVtbl -> put_ZoomFactor(This,zoomFactor) ) + +#define ICoreWebView2Controller_add_ZoomFactorChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ZoomFactorChanged(This,eventHandler,token) ) + +#define ICoreWebView2Controller_remove_ZoomFactorChanged(This,token) \ + ( (This)->lpVtbl -> remove_ZoomFactorChanged(This,token) ) + +#define ICoreWebView2Controller_SetBoundsAndZoomFactor(This,bounds,zoomFactor) \ + ( (This)->lpVtbl -> SetBoundsAndZoomFactor(This,bounds,zoomFactor) ) + +#define ICoreWebView2Controller_MoveFocus(This,reason) \ + ( (This)->lpVtbl -> MoveFocus(This,reason) ) + +#define ICoreWebView2Controller_add_MoveFocusRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_MoveFocusRequested(This,eventHandler,token) ) + +#define ICoreWebView2Controller_remove_MoveFocusRequested(This,token) \ + ( (This)->lpVtbl -> remove_MoveFocusRequested(This,token) ) + +#define ICoreWebView2Controller_add_GotFocus(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_GotFocus(This,eventHandler,token) ) + +#define ICoreWebView2Controller_remove_GotFocus(This,token) \ + ( (This)->lpVtbl -> remove_GotFocus(This,token) ) + +#define ICoreWebView2Controller_add_LostFocus(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_LostFocus(This,eventHandler,token) ) + +#define ICoreWebView2Controller_remove_LostFocus(This,token) \ + ( (This)->lpVtbl -> remove_LostFocus(This,token) ) + +#define ICoreWebView2Controller_add_AcceleratorKeyPressed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_AcceleratorKeyPressed(This,eventHandler,token) ) + +#define ICoreWebView2Controller_remove_AcceleratorKeyPressed(This,token) \ + ( (This)->lpVtbl -> remove_AcceleratorKeyPressed(This,token) ) + +#define ICoreWebView2Controller_get_ParentWindow(This,topLevelWindow) \ + ( (This)->lpVtbl -> get_ParentWindow(This,topLevelWindow) ) + +#define ICoreWebView2Controller_put_ParentWindow(This,topLevelWindow) \ + ( (This)->lpVtbl -> put_ParentWindow(This,topLevelWindow) ) + +#define ICoreWebView2Controller_NotifyParentWindowPositionChanged(This) \ + ( (This)->lpVtbl -> NotifyParentWindowPositionChanged(This) ) + +#define ICoreWebView2Controller_Close(This) \ + ( (This)->lpVtbl -> Close(This) ) + +#define ICoreWebView2Controller_get_CoreWebView2(This,coreWebView2) \ + ( (This)->lpVtbl -> get_CoreWebView2(This,coreWebView2) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Controller_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ContentLoadingEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2ContentLoadingEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ContentLoadingEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2ContentLoadingEventArgs; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("2A800835-2179-45D6-A745-6657E9A546B9") + ICoreWebView2ContentLoadingEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsErrorPage( + /* [retval][out] */ BOOL *isErrorPage) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_NavigationId( + /* [retval][out] */ UINT64 *navigation_id) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ContentLoadingEventArgsVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ContentLoadingEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ContentLoadingEventArgs * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ContentLoadingEventArgs * This); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsErrorPage )( + ICoreWebView2ContentLoadingEventArgs * This, + /* [retval][out] */ BOOL *isErrorPage); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_NavigationId )( + ICoreWebView2ContentLoadingEventArgs * This, + /* [retval][out] */ UINT64 *navigation_id); + + END_INTERFACE + } ICoreWebView2ContentLoadingEventArgsVtbl; + + interface ICoreWebView2ContentLoadingEventArgs + { + CONST_VTBL struct ICoreWebView2ContentLoadingEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ContentLoadingEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ContentLoadingEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ContentLoadingEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ContentLoadingEventArgs_get_IsErrorPage(This,isErrorPage) \ + ( (This)->lpVtbl -> get_IsErrorPage(This,isErrorPage) ) + +#define ICoreWebView2ContentLoadingEventArgs_get_NavigationId(This,navigation_id) \ + ( (This)->lpVtbl -> get_NavigationId(This,navigation_id) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ContentLoadingEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ContentLoadingEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2ContentLoadingEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ContentLoadingEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2ContentLoadingEventHandler; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("7AF5CC82-AE19-4964-BD71-B9BC5F03E85D") + ICoreWebView2ContentLoadingEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *webview, + /* [in] */ ICoreWebView2ContentLoadingEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ContentLoadingEventHandlerVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ContentLoadingEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ContentLoadingEventHandler * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ContentLoadingEventHandler * This); + + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2ContentLoadingEventHandler * This, + /* [in] */ ICoreWebView2 *webview, + /* [in] */ ICoreWebView2ContentLoadingEventArgs *args); + + END_INTERFACE + } ICoreWebView2ContentLoadingEventHandlerVtbl; + + interface ICoreWebView2ContentLoadingEventHandler + { + CONST_VTBL struct ICoreWebView2ContentLoadingEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ContentLoadingEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ContentLoadingEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ContentLoadingEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ContentLoadingEventHandler_Invoke(This,webview,args) \ + ( (This)->lpVtbl -> Invoke(This,webview,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ContentLoadingEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2DocumentTitleChangedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2DocumentTitleChangedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2DocumentTitleChangedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2DocumentTitleChangedEventHandler; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("6423D6B1-5A57-46C5-BA46-DBB3735EE7C9") + ICoreWebView2DocumentTitleChangedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2DocumentTitleChangedEventHandlerVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2DocumentTitleChangedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2DocumentTitleChangedEventHandler * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2DocumentTitleChangedEventHandler * This); + + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2DocumentTitleChangedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2DocumentTitleChangedEventHandlerVtbl; + + interface ICoreWebView2DocumentTitleChangedEventHandler + { + CONST_VTBL struct ICoreWebView2DocumentTitleChangedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2DocumentTitleChangedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2DocumentTitleChangedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2DocumentTitleChangedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2DocumentTitleChangedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2DocumentTitleChangedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ContainsFullScreenElementChangedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2ContainsFullScreenElementChangedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ContainsFullScreenElementChangedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2ContainsFullScreenElementChangedEventHandler; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("120888E3-4CAD-4EC2-B627-B2016D05612D") + ICoreWebView2ContainsFullScreenElementChangedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ContainsFullScreenElementChangedEventHandlerVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ContainsFullScreenElementChangedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ContainsFullScreenElementChangedEventHandler * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ContainsFullScreenElementChangedEventHandler * This); + + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2ContainsFullScreenElementChangedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2ContainsFullScreenElementChangedEventHandlerVtbl; + + interface ICoreWebView2ContainsFullScreenElementChangedEventHandler + { + CONST_VTBL struct ICoreWebView2ContainsFullScreenElementChangedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ContainsFullScreenElementChangedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ContainsFullScreenElementChangedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ContainsFullScreenElementChangedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ContainsFullScreenElementChangedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ContainsFullScreenElementChangedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2CreateCoreWebView2ControllerCompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2CreateCoreWebView2ControllerCompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2CreateCoreWebView2ControllerCompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2CreateCoreWebView2ControllerCompletedHandler; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("86EF6808-3C3F-4C6F-975E-8CE0B98F70BA") + ICoreWebView2CreateCoreWebView2ControllerCompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + HRESULT result, + ICoreWebView2Controller *createdController) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2CreateCoreWebView2ControllerCompletedHandlerVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2CreateCoreWebView2ControllerCompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2CreateCoreWebView2ControllerCompletedHandler * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2CreateCoreWebView2ControllerCompletedHandler * This); + + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2CreateCoreWebView2ControllerCompletedHandler * This, + HRESULT result, + ICoreWebView2Controller *createdController); + + END_INTERFACE + } ICoreWebView2CreateCoreWebView2ControllerCompletedHandlerVtbl; + + interface ICoreWebView2CreateCoreWebView2ControllerCompletedHandler + { + CONST_VTBL struct ICoreWebView2CreateCoreWebView2ControllerCompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2CreateCoreWebView2ControllerCompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2CreateCoreWebView2ControllerCompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2CreateCoreWebView2ControllerCompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2CreateCoreWebView2ControllerCompletedHandler_Invoke(This,result,createdController) \ + ( (This)->lpVtbl -> Invoke(This,result,createdController) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2CreateCoreWebView2ControllerCompletedHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("8B4F98CE-DB0D-4E71-85FD-C4C4EF1F2630") + ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + HRESULT result, + ICoreWebView2Environment *created_environment) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandlerVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler * This); + + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler * This, + HRESULT result, + ICoreWebView2Environment *created_environment); + + END_INTERFACE + } ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandlerVtbl; + + interface ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler + { + CONST_VTBL struct ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler_Invoke(This,result,created_environment) \ + ( (This)->lpVtbl -> Invoke(This,result,created_environment) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Deferral_INTERFACE_DEFINED__ +#define __ICoreWebView2Deferral_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Deferral */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2Deferral; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("A7ED8BF0-3EC9-4E39-8427-3D6F157BD285") + ICoreWebView2Deferral : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Complete( void) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2DeferralVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Deferral * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Deferral * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Deferral * This); + + HRESULT ( STDMETHODCALLTYPE *Complete )( + ICoreWebView2Deferral * This); + + END_INTERFACE + } ICoreWebView2DeferralVtbl; + + interface ICoreWebView2Deferral + { + CONST_VTBL struct ICoreWebView2DeferralVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Deferral_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Deferral_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Deferral_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Deferral_Complete(This) \ + ( (This)->lpVtbl -> Complete(This) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Deferral_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2DevToolsProtocolEventReceivedEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2DevToolsProtocolEventReceivedEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2DevToolsProtocolEventReceivedEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2DevToolsProtocolEventReceivedEventArgs; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("F661B1C2-5FF5-4700-B723-C439034539B4") + ICoreWebView2DevToolsProtocolEventReceivedEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ParameterObjectAsJson( + /* [retval][out] */ LPWSTR *parameterObjectAsJson) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2DevToolsProtocolEventReceivedEventArgsVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2DevToolsProtocolEventReceivedEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2DevToolsProtocolEventReceivedEventArgs * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2DevToolsProtocolEventReceivedEventArgs * This); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ParameterObjectAsJson )( + ICoreWebView2DevToolsProtocolEventReceivedEventArgs * This, + /* [retval][out] */ LPWSTR *parameterObjectAsJson); + + END_INTERFACE + } ICoreWebView2DevToolsProtocolEventReceivedEventArgsVtbl; + + interface ICoreWebView2DevToolsProtocolEventReceivedEventArgs + { + CONST_VTBL struct ICoreWebView2DevToolsProtocolEventReceivedEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2DevToolsProtocolEventReceivedEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2DevToolsProtocolEventReceivedEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2DevToolsProtocolEventReceivedEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2DevToolsProtocolEventReceivedEventArgs_get_ParameterObjectAsJson(This,parameterObjectAsJson) \ + ( (This)->lpVtbl -> get_ParameterObjectAsJson(This,parameterObjectAsJson) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2DevToolsProtocolEventReceivedEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2DevToolsProtocolEventReceivedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2DevToolsProtocolEventReceivedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2DevToolsProtocolEventReceivedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2DevToolsProtocolEventReceivedEventHandler; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("8E1DED79-A40B-4271-8BE6-57640C167F4A") + ICoreWebView2DevToolsProtocolEventReceivedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2DevToolsProtocolEventReceivedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2DevToolsProtocolEventReceivedEventHandlerVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2DevToolsProtocolEventReceivedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2DevToolsProtocolEventReceivedEventHandler * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2DevToolsProtocolEventReceivedEventHandler * This); + + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2DevToolsProtocolEventReceivedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2DevToolsProtocolEventReceivedEventArgs *args); + + END_INTERFACE + } ICoreWebView2DevToolsProtocolEventReceivedEventHandlerVtbl; + + interface ICoreWebView2DevToolsProtocolEventReceivedEventHandler + { + CONST_VTBL struct ICoreWebView2DevToolsProtocolEventReceivedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2DevToolsProtocolEventReceivedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2DevToolsProtocolEventReceivedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2DevToolsProtocolEventReceivedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2DevToolsProtocolEventReceivedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2DevToolsProtocolEventReceivedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2DevToolsProtocolEventReceiver_INTERFACE_DEFINED__ +#define __ICoreWebView2DevToolsProtocolEventReceiver_INTERFACE_DEFINED__ + +/* interface ICoreWebView2DevToolsProtocolEventReceiver */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2DevToolsProtocolEventReceiver; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("FE59C48C-540C-4A3C-8898-8E1602E0055D") + ICoreWebView2DevToolsProtocolEventReceiver : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE add_DevToolsProtocolEventReceived( + /* [in] */ ICoreWebView2DevToolsProtocolEventReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_DevToolsProtocolEventReceived( + /* [in] */ EventRegistrationToken token) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2DevToolsProtocolEventReceiverVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2DevToolsProtocolEventReceiver * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2DevToolsProtocolEventReceiver * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2DevToolsProtocolEventReceiver * This); + + HRESULT ( STDMETHODCALLTYPE *add_DevToolsProtocolEventReceived )( + ICoreWebView2DevToolsProtocolEventReceiver * This, + /* [in] */ ICoreWebView2DevToolsProtocolEventReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + HRESULT ( STDMETHODCALLTYPE *remove_DevToolsProtocolEventReceived )( + ICoreWebView2DevToolsProtocolEventReceiver * This, + /* [in] */ EventRegistrationToken token); + + END_INTERFACE + } ICoreWebView2DevToolsProtocolEventReceiverVtbl; + + interface ICoreWebView2DevToolsProtocolEventReceiver + { + CONST_VTBL struct ICoreWebView2DevToolsProtocolEventReceiverVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2DevToolsProtocolEventReceiver_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2DevToolsProtocolEventReceiver_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2DevToolsProtocolEventReceiver_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2DevToolsProtocolEventReceiver_add_DevToolsProtocolEventReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_DevToolsProtocolEventReceived(This,handler,token) ) + +#define ICoreWebView2DevToolsProtocolEventReceiver_remove_DevToolsProtocolEventReceived(This,token) \ + ( (This)->lpVtbl -> remove_DevToolsProtocolEventReceived(This,token) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2DevToolsProtocolEventReceiver_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment_INTERFACE_DEFINED__ +#define __ICoreWebView2Environment_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Environment */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2Environment; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("DA66D884-6DA8-410E-9630-8C48F8B3A40E") + ICoreWebView2Environment : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE CreateCoreWebView2Controller( + HWND parentWindow, + ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler) = 0; + + virtual HRESULT STDMETHODCALLTYPE CreateWebResourceResponse( + /* [in] */ IStream *content, + /* [in] */ int statusCode, + /* [in] */ LPCWSTR reasonPhrase, + /* [in] */ LPCWSTR headers, + /* [retval][out] */ ICoreWebView2WebResourceResponse **response) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_BrowserVersionString( + /* [retval][out] */ LPWSTR *versionInfo) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_NewBrowserVersionAvailable( + /* [in] */ ICoreWebView2NewBrowserVersionAvailableEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_NewBrowserVersionAvailable( + /* [in] */ EventRegistrationToken token) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2EnvironmentVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Environment * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Environment * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Environment * This); + + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2Controller )( + ICoreWebView2Environment * This, + HWND parentWindow, + ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler); + + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceResponse )( + ICoreWebView2Environment * This, + /* [in] */ IStream *content, + /* [in] */ int statusCode, + /* [in] */ LPCWSTR reasonPhrase, + /* [in] */ LPCWSTR headers, + /* [retval][out] */ ICoreWebView2WebResourceResponse **response); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserVersionString )( + ICoreWebView2Environment * This, + /* [retval][out] */ LPWSTR *versionInfo); + + HRESULT ( STDMETHODCALLTYPE *add_NewBrowserVersionAvailable )( + ICoreWebView2Environment * This, + /* [in] */ ICoreWebView2NewBrowserVersionAvailableEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + HRESULT ( STDMETHODCALLTYPE *remove_NewBrowserVersionAvailable )( + ICoreWebView2Environment * This, + /* [in] */ EventRegistrationToken token); + + END_INTERFACE + } ICoreWebView2EnvironmentVtbl; + + interface ICoreWebView2Environment + { + CONST_VTBL struct ICoreWebView2EnvironmentVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Environment_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Environment_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Environment_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Environment_CreateCoreWebView2Controller(This,parentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2Controller(This,parentWindow,handler) ) + +#define ICoreWebView2Environment_CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) \ + ( (This)->lpVtbl -> CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) ) + +#define ICoreWebView2Environment_get_BrowserVersionString(This,versionInfo) \ + ( (This)->lpVtbl -> get_BrowserVersionString(This,versionInfo) ) + +#define ICoreWebView2Environment_add_NewBrowserVersionAvailable(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewBrowserVersionAvailable(This,eventHandler,token) ) + +#define ICoreWebView2Environment_remove_NewBrowserVersionAvailable(This,token) \ + ( (This)->lpVtbl -> remove_NewBrowserVersionAvailable(This,token) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Environment_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2EnvironmentOptions_INTERFACE_DEFINED__ +#define __ICoreWebView2EnvironmentOptions_INTERFACE_DEFINED__ + +/* interface ICoreWebView2EnvironmentOptions */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2EnvironmentOptions; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("97E9FBD9-646A-4B75-8682-149B71DACE59") + ICoreWebView2EnvironmentOptions : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_AdditionalBrowserArguments( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_AdditionalBrowserArguments( + /* [in] */ LPCWSTR value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Language( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Language( + /* [in] */ LPCWSTR value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_TargetCompatibleBrowserVersion( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_TargetCompatibleBrowserVersion( + /* [in] */ LPCWSTR value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2EnvironmentOptionsVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2EnvironmentOptions * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2EnvironmentOptions * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2EnvironmentOptions * This); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AdditionalBrowserArguments )( + ICoreWebView2EnvironmentOptions * This, + /* [retval][out] */ LPWSTR *value); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AdditionalBrowserArguments )( + ICoreWebView2EnvironmentOptions * This, + /* [in] */ LPCWSTR value); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Language )( + ICoreWebView2EnvironmentOptions * This, + /* [retval][out] */ LPWSTR *value); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Language )( + ICoreWebView2EnvironmentOptions * This, + /* [in] */ LPCWSTR value); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_TargetCompatibleBrowserVersion )( + ICoreWebView2EnvironmentOptions * This, + /* [retval][out] */ LPWSTR *value); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_TargetCompatibleBrowserVersion )( + ICoreWebView2EnvironmentOptions * This, + /* [in] */ LPCWSTR value); + + END_INTERFACE + } ICoreWebView2EnvironmentOptionsVtbl; + + interface ICoreWebView2EnvironmentOptions + { + CONST_VTBL struct ICoreWebView2EnvironmentOptionsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2EnvironmentOptions_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2EnvironmentOptions_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2EnvironmentOptions_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2EnvironmentOptions_get_AdditionalBrowserArguments(This,value) \ + ( (This)->lpVtbl -> get_AdditionalBrowserArguments(This,value) ) + +#define ICoreWebView2EnvironmentOptions_put_AdditionalBrowserArguments(This,value) \ + ( (This)->lpVtbl -> put_AdditionalBrowserArguments(This,value) ) + +#define ICoreWebView2EnvironmentOptions_get_Language(This,value) \ + ( (This)->lpVtbl -> get_Language(This,value) ) + +#define ICoreWebView2EnvironmentOptions_put_Language(This,value) \ + ( (This)->lpVtbl -> put_Language(This,value) ) + +#define ICoreWebView2EnvironmentOptions_get_TargetCompatibleBrowserVersion(This,value) \ + ( (This)->lpVtbl -> get_TargetCompatibleBrowserVersion(This,value) ) + +#define ICoreWebView2EnvironmentOptions_put_TargetCompatibleBrowserVersion(This,value) \ + ( (This)->lpVtbl -> put_TargetCompatibleBrowserVersion(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2EnvironmentOptions_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ExecuteScriptCompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2ExecuteScriptCompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ExecuteScriptCompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2ExecuteScriptCompletedHandler; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("3B717C93-3ED5-4450-9B13-7F56AA367AC7") + ICoreWebView2ExecuteScriptCompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ HRESULT errorCode, + /* [in] */ LPCWSTR resultObjectAsJson) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ExecuteScriptCompletedHandlerVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ExecuteScriptCompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ExecuteScriptCompletedHandler * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ExecuteScriptCompletedHandler * This); + + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2ExecuteScriptCompletedHandler * This, + /* [in] */ HRESULT errorCode, + /* [in] */ LPCWSTR resultObjectAsJson); + + END_INTERFACE + } ICoreWebView2ExecuteScriptCompletedHandlerVtbl; + + interface ICoreWebView2ExecuteScriptCompletedHandler + { + CONST_VTBL struct ICoreWebView2ExecuteScriptCompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ExecuteScriptCompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ExecuteScriptCompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ExecuteScriptCompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ExecuteScriptCompletedHandler_Invoke(This,errorCode,resultObjectAsJson) \ + ( (This)->lpVtbl -> Invoke(This,errorCode,resultObjectAsJson) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ExecuteScriptCompletedHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2FocusChangedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2FocusChangedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2FocusChangedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2FocusChangedEventHandler; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("76E67C71-663F-4C17-B71A-9381CCF3B94B") + ICoreWebView2FocusChangedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2Controller *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2FocusChangedEventHandlerVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2FocusChangedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2FocusChangedEventHandler * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2FocusChangedEventHandler * This); + + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2FocusChangedEventHandler * This, + /* [in] */ ICoreWebView2Controller *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2FocusChangedEventHandlerVtbl; + + interface ICoreWebView2FocusChangedEventHandler + { + CONST_VTBL struct ICoreWebView2FocusChangedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2FocusChangedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2FocusChangedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2FocusChangedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2FocusChangedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2FocusChangedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2HistoryChangedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2HistoryChangedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2HistoryChangedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2HistoryChangedEventHandler; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("54C9B7D7-D9E9-4158-861F-F97E1C3C6631") + ICoreWebView2HistoryChangedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *webview, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2HistoryChangedEventHandlerVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2HistoryChangedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2HistoryChangedEventHandler * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2HistoryChangedEventHandler * This); + + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2HistoryChangedEventHandler * This, + /* [in] */ ICoreWebView2 *webview, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2HistoryChangedEventHandlerVtbl; + + interface ICoreWebView2HistoryChangedEventHandler + { + CONST_VTBL struct ICoreWebView2HistoryChangedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2HistoryChangedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2HistoryChangedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2HistoryChangedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2HistoryChangedEventHandler_Invoke(This,webview,args) \ + ( (This)->lpVtbl -> Invoke(This,webview,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2HistoryChangedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2HttpHeadersCollectionIterator_INTERFACE_DEFINED__ +#define __ICoreWebView2HttpHeadersCollectionIterator_INTERFACE_DEFINED__ + +/* interface ICoreWebView2HttpHeadersCollectionIterator */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2HttpHeadersCollectionIterator; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("4212F3A7-0FBC-4C9C-8118-17ED6370C1B3") + ICoreWebView2HttpHeadersCollectionIterator : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetCurrentHeader( + /* [out] */ LPWSTR *name, + /* [out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_HasCurrentHeader( + /* [retval][out] */ BOOL *hasCurrent) = 0; + + virtual HRESULT STDMETHODCALLTYPE MoveNext( + /* [out] */ BOOL *hasNext) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2HttpHeadersCollectionIteratorVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2HttpHeadersCollectionIterator * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2HttpHeadersCollectionIterator * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2HttpHeadersCollectionIterator * This); + + HRESULT ( STDMETHODCALLTYPE *GetCurrentHeader )( + ICoreWebView2HttpHeadersCollectionIterator * This, + /* [out] */ LPWSTR *name, + /* [out] */ LPWSTR *value); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_HasCurrentHeader )( + ICoreWebView2HttpHeadersCollectionIterator * This, + /* [retval][out] */ BOOL *hasCurrent); + + HRESULT ( STDMETHODCALLTYPE *MoveNext )( + ICoreWebView2HttpHeadersCollectionIterator * This, + /* [out] */ BOOL *hasNext); + + END_INTERFACE + } ICoreWebView2HttpHeadersCollectionIteratorVtbl; + + interface ICoreWebView2HttpHeadersCollectionIterator + { + CONST_VTBL struct ICoreWebView2HttpHeadersCollectionIteratorVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2HttpHeadersCollectionIterator_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2HttpHeadersCollectionIterator_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2HttpHeadersCollectionIterator_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2HttpHeadersCollectionIterator_GetCurrentHeader(This,name,value) \ + ( (This)->lpVtbl -> GetCurrentHeader(This,name,value) ) + +#define ICoreWebView2HttpHeadersCollectionIterator_get_HasCurrentHeader(This,hasCurrent) \ + ( (This)->lpVtbl -> get_HasCurrentHeader(This,hasCurrent) ) + +#define ICoreWebView2HttpHeadersCollectionIterator_MoveNext(This,hasNext) \ + ( (This)->lpVtbl -> MoveNext(This,hasNext) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2HttpHeadersCollectionIterator_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2HttpRequestHeaders_INTERFACE_DEFINED__ +#define __ICoreWebView2HttpRequestHeaders_INTERFACE_DEFINED__ + +/* interface ICoreWebView2HttpRequestHeaders */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2HttpRequestHeaders; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("2C1F04DF-C90E-49E4-BD25-4A659300337B") + ICoreWebView2HttpRequestHeaders : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetHeader( + /* [in] */ LPCWSTR name, + /* [retval][out] */ LPWSTR *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetHeaders( + /* [in] */ LPCWSTR name, + /* [retval][out] */ ICoreWebView2HttpHeadersCollectionIterator **iterator) = 0; + + virtual HRESULT STDMETHODCALLTYPE Contains( + /* [in] */ LPCWSTR name, + /* [retval][out] */ BOOL *contains) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetHeader( + /* [in] */ LPCWSTR name, + /* [in] */ LPCWSTR value) = 0; + + virtual HRESULT STDMETHODCALLTYPE RemoveHeader( + /* [in] */ LPCWSTR name) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetIterator( + /* [retval][out] */ ICoreWebView2HttpHeadersCollectionIterator **iterator) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2HttpRequestHeadersVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2HttpRequestHeaders * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2HttpRequestHeaders * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2HttpRequestHeaders * This); + + HRESULT ( STDMETHODCALLTYPE *GetHeader )( + ICoreWebView2HttpRequestHeaders * This, + /* [in] */ LPCWSTR name, + /* [retval][out] */ LPWSTR *value); + + HRESULT ( STDMETHODCALLTYPE *GetHeaders )( + ICoreWebView2HttpRequestHeaders * This, + /* [in] */ LPCWSTR name, + /* [retval][out] */ ICoreWebView2HttpHeadersCollectionIterator **iterator); + + HRESULT ( STDMETHODCALLTYPE *Contains )( + ICoreWebView2HttpRequestHeaders * This, + /* [in] */ LPCWSTR name, + /* [retval][out] */ BOOL *contains); + + HRESULT ( STDMETHODCALLTYPE *SetHeader )( + ICoreWebView2HttpRequestHeaders * This, + /* [in] */ LPCWSTR name, + /* [in] */ LPCWSTR value); + + HRESULT ( STDMETHODCALLTYPE *RemoveHeader )( + ICoreWebView2HttpRequestHeaders * This, + /* [in] */ LPCWSTR name); + + HRESULT ( STDMETHODCALLTYPE *GetIterator )( + ICoreWebView2HttpRequestHeaders * This, + /* [retval][out] */ ICoreWebView2HttpHeadersCollectionIterator **iterator); + + END_INTERFACE + } ICoreWebView2HttpRequestHeadersVtbl; + + interface ICoreWebView2HttpRequestHeaders + { + CONST_VTBL struct ICoreWebView2HttpRequestHeadersVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2HttpRequestHeaders_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2HttpRequestHeaders_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2HttpRequestHeaders_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2HttpRequestHeaders_GetHeader(This,name,value) \ + ( (This)->lpVtbl -> GetHeader(This,name,value) ) + +#define ICoreWebView2HttpRequestHeaders_GetHeaders(This,name,iterator) \ + ( (This)->lpVtbl -> GetHeaders(This,name,iterator) ) + +#define ICoreWebView2HttpRequestHeaders_Contains(This,name,contains) \ + ( (This)->lpVtbl -> Contains(This,name,contains) ) + +#define ICoreWebView2HttpRequestHeaders_SetHeader(This,name,value) \ + ( (This)->lpVtbl -> SetHeader(This,name,value) ) + +#define ICoreWebView2HttpRequestHeaders_RemoveHeader(This,name) \ + ( (This)->lpVtbl -> RemoveHeader(This,name) ) + +#define ICoreWebView2HttpRequestHeaders_GetIterator(This,iterator) \ + ( (This)->lpVtbl -> GetIterator(This,iterator) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2HttpRequestHeaders_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2HttpResponseHeaders_INTERFACE_DEFINED__ +#define __ICoreWebView2HttpResponseHeaders_INTERFACE_DEFINED__ + +/* interface ICoreWebView2HttpResponseHeaders */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2HttpResponseHeaders; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("B5F6D4D5-1BFF-4869-85B8-158153017B04") + ICoreWebView2HttpResponseHeaders : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE AppendHeader( + /* [in] */ LPCWSTR name, + /* [in] */ LPCWSTR value) = 0; + + virtual HRESULT STDMETHODCALLTYPE Contains( + /* [in] */ LPCWSTR name, + /* [retval][out] */ BOOL *contains) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetHeader( + /* [in] */ LPCWSTR name, + /* [retval][out] */ LPWSTR *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetHeaders( + /* [in] */ LPCWSTR name, + /* [retval][out] */ ICoreWebView2HttpHeadersCollectionIterator **iterator) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetIterator( + /* [retval][out] */ ICoreWebView2HttpHeadersCollectionIterator **iterator) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2HttpResponseHeadersVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2HttpResponseHeaders * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2HttpResponseHeaders * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2HttpResponseHeaders * This); + + HRESULT ( STDMETHODCALLTYPE *AppendHeader )( + ICoreWebView2HttpResponseHeaders * This, + /* [in] */ LPCWSTR name, + /* [in] */ LPCWSTR value); + + HRESULT ( STDMETHODCALLTYPE *Contains )( + ICoreWebView2HttpResponseHeaders * This, + /* [in] */ LPCWSTR name, + /* [retval][out] */ BOOL *contains); + + HRESULT ( STDMETHODCALLTYPE *GetHeader )( + ICoreWebView2HttpResponseHeaders * This, + /* [in] */ LPCWSTR name, + /* [retval][out] */ LPWSTR *value); + + HRESULT ( STDMETHODCALLTYPE *GetHeaders )( + ICoreWebView2HttpResponseHeaders * This, + /* [in] */ LPCWSTR name, + /* [retval][out] */ ICoreWebView2HttpHeadersCollectionIterator **iterator); + + HRESULT ( STDMETHODCALLTYPE *GetIterator )( + ICoreWebView2HttpResponseHeaders * This, + /* [retval][out] */ ICoreWebView2HttpHeadersCollectionIterator **iterator); + + END_INTERFACE + } ICoreWebView2HttpResponseHeadersVtbl; + + interface ICoreWebView2HttpResponseHeaders + { + CONST_VTBL struct ICoreWebView2HttpResponseHeadersVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2HttpResponseHeaders_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2HttpResponseHeaders_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2HttpResponseHeaders_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2HttpResponseHeaders_AppendHeader(This,name,value) \ + ( (This)->lpVtbl -> AppendHeader(This,name,value) ) + +#define ICoreWebView2HttpResponseHeaders_Contains(This,name,contains) \ + ( (This)->lpVtbl -> Contains(This,name,contains) ) + +#define ICoreWebView2HttpResponseHeaders_GetHeader(This,name,value) \ + ( (This)->lpVtbl -> GetHeader(This,name,value) ) + +#define ICoreWebView2HttpResponseHeaders_GetHeaders(This,name,iterator) \ + ( (This)->lpVtbl -> GetHeaders(This,name,iterator) ) + +#define ICoreWebView2HttpResponseHeaders_GetIterator(This,iterator) \ + ( (This)->lpVtbl -> GetIterator(This,iterator) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2HttpResponseHeaders_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2MoveFocusRequestedEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2MoveFocusRequestedEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2MoveFocusRequestedEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2MoveFocusRequestedEventArgs; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("71922903-B180-49D0-AED2-C9F9D10064B1") + ICoreWebView2MoveFocusRequestedEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Reason( + /* [retval][out] */ COREWEBVIEW2_MOVE_FOCUS_REASON *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Handled( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Handled( + /* [in] */ BOOL value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2MoveFocusRequestedEventArgsVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2MoveFocusRequestedEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2MoveFocusRequestedEventArgs * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2MoveFocusRequestedEventArgs * This); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Reason )( + ICoreWebView2MoveFocusRequestedEventArgs * This, + /* [retval][out] */ COREWEBVIEW2_MOVE_FOCUS_REASON *value); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Handled )( + ICoreWebView2MoveFocusRequestedEventArgs * This, + /* [retval][out] */ BOOL *value); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Handled )( + ICoreWebView2MoveFocusRequestedEventArgs * This, + /* [in] */ BOOL value); + + END_INTERFACE + } ICoreWebView2MoveFocusRequestedEventArgsVtbl; + + interface ICoreWebView2MoveFocusRequestedEventArgs + { + CONST_VTBL struct ICoreWebView2MoveFocusRequestedEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2MoveFocusRequestedEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2MoveFocusRequestedEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2MoveFocusRequestedEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2MoveFocusRequestedEventArgs_get_Reason(This,value) \ + ( (This)->lpVtbl -> get_Reason(This,value) ) + +#define ICoreWebView2MoveFocusRequestedEventArgs_get_Handled(This,value) \ + ( (This)->lpVtbl -> get_Handled(This,value) ) + +#define ICoreWebView2MoveFocusRequestedEventArgs_put_Handled(This,value) \ + ( (This)->lpVtbl -> put_Handled(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2MoveFocusRequestedEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2MoveFocusRequestedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2MoveFocusRequestedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2MoveFocusRequestedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2MoveFocusRequestedEventHandler; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("4B21D6DD-3DE7-47B0-8019-7D3ACE6E3631") + ICoreWebView2MoveFocusRequestedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2Controller *sender, + /* [in] */ ICoreWebView2MoveFocusRequestedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2MoveFocusRequestedEventHandlerVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2MoveFocusRequestedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2MoveFocusRequestedEventHandler * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2MoveFocusRequestedEventHandler * This); + + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2MoveFocusRequestedEventHandler * This, + /* [in] */ ICoreWebView2Controller *sender, + /* [in] */ ICoreWebView2MoveFocusRequestedEventArgs *args); + + END_INTERFACE + } ICoreWebView2MoveFocusRequestedEventHandlerVtbl; + + interface ICoreWebView2MoveFocusRequestedEventHandler + { + CONST_VTBL struct ICoreWebView2MoveFocusRequestedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2MoveFocusRequestedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2MoveFocusRequestedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2MoveFocusRequestedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2MoveFocusRequestedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2MoveFocusRequestedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2NavigationCompletedEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2NavigationCompletedEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2NavigationCompletedEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2NavigationCompletedEventArgs; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("361F5621-EA7F-4C55-95EC-3C5E6992EA4A") + ICoreWebView2NavigationCompletedEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsSuccess( + /* [retval][out] */ BOOL *isSuccess) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_WebErrorStatus( + /* [retval][out] */ COREWEBVIEW2_WEB_ERROR_STATUS *COREWEBVIEW2_WEB_ERROR_STATUS) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_NavigationId( + /* [retval][out] */ UINT64 *navigation_id) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2NavigationCompletedEventArgsVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2NavigationCompletedEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2NavigationCompletedEventArgs * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2NavigationCompletedEventArgs * This); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuccess )( + ICoreWebView2NavigationCompletedEventArgs * This, + /* [retval][out] */ BOOL *isSuccess); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_WebErrorStatus )( + ICoreWebView2NavigationCompletedEventArgs * This, + /* [retval][out] */ COREWEBVIEW2_WEB_ERROR_STATUS *COREWEBVIEW2_WEB_ERROR_STATUS); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_NavigationId )( + ICoreWebView2NavigationCompletedEventArgs * This, + /* [retval][out] */ UINT64 *navigation_id); + + END_INTERFACE + } ICoreWebView2NavigationCompletedEventArgsVtbl; + + interface ICoreWebView2NavigationCompletedEventArgs + { + CONST_VTBL struct ICoreWebView2NavigationCompletedEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2NavigationCompletedEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2NavigationCompletedEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2NavigationCompletedEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2NavigationCompletedEventArgs_get_IsSuccess(This,isSuccess) \ + ( (This)->lpVtbl -> get_IsSuccess(This,isSuccess) ) + +#define ICoreWebView2NavigationCompletedEventArgs_get_WebErrorStatus(This,COREWEBVIEW2_WEB_ERROR_STATUS) \ + ( (This)->lpVtbl -> get_WebErrorStatus(This,COREWEBVIEW2_WEB_ERROR_STATUS) ) + +#define ICoreWebView2NavigationCompletedEventArgs_get_NavigationId(This,navigation_id) \ + ( (This)->lpVtbl -> get_NavigationId(This,navigation_id) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2NavigationCompletedEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2NavigationCompletedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2NavigationCompletedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2NavigationCompletedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2NavigationCompletedEventHandler; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("9F921239-20C4-455F-9E3F-6047A50E248B") + ICoreWebView2NavigationCompletedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2NavigationCompletedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2NavigationCompletedEventHandlerVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2NavigationCompletedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2NavigationCompletedEventHandler * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2NavigationCompletedEventHandler * This); + + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2NavigationCompletedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2NavigationCompletedEventArgs *args); + + END_INTERFACE + } ICoreWebView2NavigationCompletedEventHandlerVtbl; + + interface ICoreWebView2NavigationCompletedEventHandler + { + CONST_VTBL struct ICoreWebView2NavigationCompletedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2NavigationCompletedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2NavigationCompletedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2NavigationCompletedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2NavigationCompletedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2NavigationCompletedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2NavigationStartingEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2NavigationStartingEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2NavigationStartingEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2NavigationStartingEventArgs; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("EE1938CE-D385-4CB0-854B-F498F78C3D88") + ICoreWebView2NavigationStartingEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Uri( + /* [retval][out] */ LPWSTR *uri) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsUserInitiated( + /* [retval][out] */ BOOL *isUserInitiated) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsRedirected( + /* [retval][out] */ BOOL *isRedirected) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_RequestHeaders( + /* [retval][out] */ ICoreWebView2HttpRequestHeaders **requestHeaders) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Cancel( + /* [retval][out] */ BOOL *cancel) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Cancel( + /* [in] */ BOOL cancel) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_NavigationId( + /* [retval][out] */ UINT64 *navigation_id) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2NavigationStartingEventArgsVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2NavigationStartingEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2NavigationStartingEventArgs * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2NavigationStartingEventArgs * This); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Uri )( + ICoreWebView2NavigationStartingEventArgs * This, + /* [retval][out] */ LPWSTR *uri); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsUserInitiated )( + ICoreWebView2NavigationStartingEventArgs * This, + /* [retval][out] */ BOOL *isUserInitiated); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsRedirected )( + ICoreWebView2NavigationStartingEventArgs * This, + /* [retval][out] */ BOOL *isRedirected); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_RequestHeaders )( + ICoreWebView2NavigationStartingEventArgs * This, + /* [retval][out] */ ICoreWebView2HttpRequestHeaders **requestHeaders); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Cancel )( + ICoreWebView2NavigationStartingEventArgs * This, + /* [retval][out] */ BOOL *cancel); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Cancel )( + ICoreWebView2NavigationStartingEventArgs * This, + /* [in] */ BOOL cancel); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_NavigationId )( + ICoreWebView2NavigationStartingEventArgs * This, + /* [retval][out] */ UINT64 *navigation_id); + + END_INTERFACE + } ICoreWebView2NavigationStartingEventArgsVtbl; + + interface ICoreWebView2NavigationStartingEventArgs + { + CONST_VTBL struct ICoreWebView2NavigationStartingEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2NavigationStartingEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2NavigationStartingEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2NavigationStartingEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2NavigationStartingEventArgs_get_Uri(This,uri) \ + ( (This)->lpVtbl -> get_Uri(This,uri) ) + +#define ICoreWebView2NavigationStartingEventArgs_get_IsUserInitiated(This,isUserInitiated) \ + ( (This)->lpVtbl -> get_IsUserInitiated(This,isUserInitiated) ) + +#define ICoreWebView2NavigationStartingEventArgs_get_IsRedirected(This,isRedirected) \ + ( (This)->lpVtbl -> get_IsRedirected(This,isRedirected) ) + +#define ICoreWebView2NavigationStartingEventArgs_get_RequestHeaders(This,requestHeaders) \ + ( (This)->lpVtbl -> get_RequestHeaders(This,requestHeaders) ) + +#define ICoreWebView2NavigationStartingEventArgs_get_Cancel(This,cancel) \ + ( (This)->lpVtbl -> get_Cancel(This,cancel) ) + +#define ICoreWebView2NavigationStartingEventArgs_put_Cancel(This,cancel) \ + ( (This)->lpVtbl -> put_Cancel(This,cancel) ) + +#define ICoreWebView2NavigationStartingEventArgs_get_NavigationId(This,navigation_id) \ + ( (This)->lpVtbl -> get_NavigationId(This,navigation_id) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2NavigationStartingEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2NavigationStartingEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2NavigationStartingEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2NavigationStartingEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2NavigationStartingEventHandler; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("073337A4-64D2-4C7E-AC9F-987F0F613497") + ICoreWebView2NavigationStartingEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2NavigationStartingEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2NavigationStartingEventHandlerVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2NavigationStartingEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2NavigationStartingEventHandler * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2NavigationStartingEventHandler * This); + + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2NavigationStartingEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2NavigationStartingEventArgs *args); + + END_INTERFACE + } ICoreWebView2NavigationStartingEventHandlerVtbl; + + interface ICoreWebView2NavigationStartingEventHandler + { + CONST_VTBL struct ICoreWebView2NavigationStartingEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2NavigationStartingEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2NavigationStartingEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2NavigationStartingEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2NavigationStartingEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2NavigationStartingEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2NewBrowserVersionAvailableEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2NewBrowserVersionAvailableEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2NewBrowserVersionAvailableEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2NewBrowserVersionAvailableEventHandler; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("E82E8242-EE39-4A57-A065-E13256D60342") + ICoreWebView2NewBrowserVersionAvailableEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2Environment *webviewEnvironment, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2NewBrowserVersionAvailableEventHandlerVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2NewBrowserVersionAvailableEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2NewBrowserVersionAvailableEventHandler * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2NewBrowserVersionAvailableEventHandler * This); + + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2NewBrowserVersionAvailableEventHandler * This, + /* [in] */ ICoreWebView2Environment *webviewEnvironment, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2NewBrowserVersionAvailableEventHandlerVtbl; + + interface ICoreWebView2NewBrowserVersionAvailableEventHandler + { + CONST_VTBL struct ICoreWebView2NewBrowserVersionAvailableEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2NewBrowserVersionAvailableEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2NewBrowserVersionAvailableEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2NewBrowserVersionAvailableEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2NewBrowserVersionAvailableEventHandler_Invoke(This,webviewEnvironment,args) \ + ( (This)->lpVtbl -> Invoke(This,webviewEnvironment,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2NewBrowserVersionAvailableEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2NewWindowRequestedEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2NewWindowRequestedEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2NewWindowRequestedEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2NewWindowRequestedEventArgs; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("9EDC7F5F-C6EA-4F3C-827B-A8880794C0A9") + ICoreWebView2NewWindowRequestedEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Uri( + /* [retval][out] */ LPWSTR *uri) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_NewWindow( + /* [in] */ ICoreWebView2 *newWindow) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_NewWindow( + /* [retval][out] */ ICoreWebView2 **newWindow) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Handled( + /* [in] */ BOOL handled) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Handled( + /* [retval][out] */ BOOL *handled) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsUserInitiated( + /* [retval][out] */ BOOL *isUserInitiated) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetDeferral( + /* [retval][out] */ ICoreWebView2Deferral **deferral) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2NewWindowRequestedEventArgsVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2NewWindowRequestedEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2NewWindowRequestedEventArgs * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2NewWindowRequestedEventArgs * This); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Uri )( + ICoreWebView2NewWindowRequestedEventArgs * This, + /* [retval][out] */ LPWSTR *uri); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_NewWindow )( + ICoreWebView2NewWindowRequestedEventArgs * This, + /* [in] */ ICoreWebView2 *newWindow); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_NewWindow )( + ICoreWebView2NewWindowRequestedEventArgs * This, + /* [retval][out] */ ICoreWebView2 **newWindow); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Handled )( + ICoreWebView2NewWindowRequestedEventArgs * This, + /* [in] */ BOOL handled); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Handled )( + ICoreWebView2NewWindowRequestedEventArgs * This, + /* [retval][out] */ BOOL *handled); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsUserInitiated )( + ICoreWebView2NewWindowRequestedEventArgs * This, + /* [retval][out] */ BOOL *isUserInitiated); + + HRESULT ( STDMETHODCALLTYPE *GetDeferral )( + ICoreWebView2NewWindowRequestedEventArgs * This, + /* [retval][out] */ ICoreWebView2Deferral **deferral); + + END_INTERFACE + } ICoreWebView2NewWindowRequestedEventArgsVtbl; + + interface ICoreWebView2NewWindowRequestedEventArgs + { + CONST_VTBL struct ICoreWebView2NewWindowRequestedEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2NewWindowRequestedEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2NewWindowRequestedEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2NewWindowRequestedEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2NewWindowRequestedEventArgs_get_Uri(This,uri) \ + ( (This)->lpVtbl -> get_Uri(This,uri) ) + +#define ICoreWebView2NewWindowRequestedEventArgs_put_NewWindow(This,newWindow) \ + ( (This)->lpVtbl -> put_NewWindow(This,newWindow) ) + +#define ICoreWebView2NewWindowRequestedEventArgs_get_NewWindow(This,newWindow) \ + ( (This)->lpVtbl -> get_NewWindow(This,newWindow) ) + +#define ICoreWebView2NewWindowRequestedEventArgs_put_Handled(This,handled) \ + ( (This)->lpVtbl -> put_Handled(This,handled) ) + +#define ICoreWebView2NewWindowRequestedEventArgs_get_Handled(This,handled) \ + ( (This)->lpVtbl -> get_Handled(This,handled) ) + +#define ICoreWebView2NewWindowRequestedEventArgs_get_IsUserInitiated(This,isUserInitiated) \ + ( (This)->lpVtbl -> get_IsUserInitiated(This,isUserInitiated) ) + +#define ICoreWebView2NewWindowRequestedEventArgs_GetDeferral(This,deferral) \ + ( (This)->lpVtbl -> GetDeferral(This,deferral) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2NewWindowRequestedEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2NewWindowRequestedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2NewWindowRequestedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2NewWindowRequestedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2NewWindowRequestedEventHandler; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("ACAA30EF-A40C-47BD-9CB9-D9C2AADC9FCB") + ICoreWebView2NewWindowRequestedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2NewWindowRequestedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2NewWindowRequestedEventHandlerVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2NewWindowRequestedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2NewWindowRequestedEventHandler * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2NewWindowRequestedEventHandler * This); + + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2NewWindowRequestedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2NewWindowRequestedEventArgs *args); + + END_INTERFACE + } ICoreWebView2NewWindowRequestedEventHandlerVtbl; + + interface ICoreWebView2NewWindowRequestedEventHandler + { + CONST_VTBL struct ICoreWebView2NewWindowRequestedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2NewWindowRequestedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2NewWindowRequestedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2NewWindowRequestedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2NewWindowRequestedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2NewWindowRequestedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2PermissionRequestedEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2PermissionRequestedEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2PermissionRequestedEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2PermissionRequestedEventArgs; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("774B5EA1-3FAD-435C-B1FC-A77D1ACD5EAF") + ICoreWebView2PermissionRequestedEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Uri( + /* [retval][out] */ LPWSTR *uri) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_PermissionKind( + /* [retval][out] */ COREWEBVIEW2_PERMISSION_KIND *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsUserInitiated( + /* [retval][out] */ BOOL *isUserInitiated) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_State( + /* [retval][out] */ COREWEBVIEW2_PERMISSION_STATE *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_State( + /* [in] */ COREWEBVIEW2_PERMISSION_STATE value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetDeferral( + /* [retval][out] */ ICoreWebView2Deferral **deferral) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2PermissionRequestedEventArgsVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2PermissionRequestedEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2PermissionRequestedEventArgs * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2PermissionRequestedEventArgs * This); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Uri )( + ICoreWebView2PermissionRequestedEventArgs * This, + /* [retval][out] */ LPWSTR *uri); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PermissionKind )( + ICoreWebView2PermissionRequestedEventArgs * This, + /* [retval][out] */ COREWEBVIEW2_PERMISSION_KIND *value); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsUserInitiated )( + ICoreWebView2PermissionRequestedEventArgs * This, + /* [retval][out] */ BOOL *isUserInitiated); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_State )( + ICoreWebView2PermissionRequestedEventArgs * This, + /* [retval][out] */ COREWEBVIEW2_PERMISSION_STATE *value); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_State )( + ICoreWebView2PermissionRequestedEventArgs * This, + /* [in] */ COREWEBVIEW2_PERMISSION_STATE value); + + HRESULT ( STDMETHODCALLTYPE *GetDeferral )( + ICoreWebView2PermissionRequestedEventArgs * This, + /* [retval][out] */ ICoreWebView2Deferral **deferral); + + END_INTERFACE + } ICoreWebView2PermissionRequestedEventArgsVtbl; + + interface ICoreWebView2PermissionRequestedEventArgs + { + CONST_VTBL struct ICoreWebView2PermissionRequestedEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2PermissionRequestedEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2PermissionRequestedEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2PermissionRequestedEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2PermissionRequestedEventArgs_get_Uri(This,uri) \ + ( (This)->lpVtbl -> get_Uri(This,uri) ) + +#define ICoreWebView2PermissionRequestedEventArgs_get_PermissionKind(This,value) \ + ( (This)->lpVtbl -> get_PermissionKind(This,value) ) + +#define ICoreWebView2PermissionRequestedEventArgs_get_IsUserInitiated(This,isUserInitiated) \ + ( (This)->lpVtbl -> get_IsUserInitiated(This,isUserInitiated) ) + +#define ICoreWebView2PermissionRequestedEventArgs_get_State(This,value) \ + ( (This)->lpVtbl -> get_State(This,value) ) + +#define ICoreWebView2PermissionRequestedEventArgs_put_State(This,value) \ + ( (This)->lpVtbl -> put_State(This,value) ) + +#define ICoreWebView2PermissionRequestedEventArgs_GetDeferral(This,deferral) \ + ( (This)->lpVtbl -> GetDeferral(This,deferral) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2PermissionRequestedEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2PermissionRequestedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2PermissionRequestedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2PermissionRequestedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2PermissionRequestedEventHandler; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("543B4ADE-9B0B-4748-9AB7-D76481B223AA") + ICoreWebView2PermissionRequestedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2PermissionRequestedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2PermissionRequestedEventHandlerVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2PermissionRequestedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2PermissionRequestedEventHandler * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2PermissionRequestedEventHandler * This); + + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2PermissionRequestedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2PermissionRequestedEventArgs *args); + + END_INTERFACE + } ICoreWebView2PermissionRequestedEventHandlerVtbl; + + interface ICoreWebView2PermissionRequestedEventHandler + { + CONST_VTBL struct ICoreWebView2PermissionRequestedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2PermissionRequestedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2PermissionRequestedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2PermissionRequestedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2PermissionRequestedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2PermissionRequestedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ProcessFailedEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2ProcessFailedEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ProcessFailedEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2ProcessFailedEventArgs; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("EA45D1F4-75C0-471F-A6E9-803FBFF8FEF2") + ICoreWebView2ProcessFailedEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ProcessFailedKind( + /* [retval][out] */ COREWEBVIEW2_PROCESS_FAILED_KIND *processFailedKind) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ProcessFailedEventArgsVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ProcessFailedEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ProcessFailedEventArgs * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ProcessFailedEventArgs * This); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProcessFailedKind )( + ICoreWebView2ProcessFailedEventArgs * This, + /* [retval][out] */ COREWEBVIEW2_PROCESS_FAILED_KIND *processFailedKind); + + END_INTERFACE + } ICoreWebView2ProcessFailedEventArgsVtbl; + + interface ICoreWebView2ProcessFailedEventArgs + { + CONST_VTBL struct ICoreWebView2ProcessFailedEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ProcessFailedEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ProcessFailedEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ProcessFailedEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ProcessFailedEventArgs_get_ProcessFailedKind(This,processFailedKind) \ + ( (This)->lpVtbl -> get_ProcessFailedKind(This,processFailedKind) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ProcessFailedEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ProcessFailedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2ProcessFailedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ProcessFailedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2ProcessFailedEventHandler; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("7D2183F9-CCA8-40F2-91A9-EAFAD32C8A9B") + ICoreWebView2ProcessFailedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2ProcessFailedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ProcessFailedEventHandlerVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ProcessFailedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ProcessFailedEventHandler * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ProcessFailedEventHandler * This); + + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2ProcessFailedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2ProcessFailedEventArgs *args); + + END_INTERFACE + } ICoreWebView2ProcessFailedEventHandlerVtbl; + + interface ICoreWebView2ProcessFailedEventHandler + { + CONST_VTBL struct ICoreWebView2ProcessFailedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ProcessFailedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ProcessFailedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ProcessFailedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ProcessFailedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ProcessFailedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ScriptDialogOpeningEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2ScriptDialogOpeningEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ScriptDialogOpeningEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2ScriptDialogOpeningEventArgs; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("B8F6356E-24DC-4D74-90FE-AD071E11CB91") + ICoreWebView2ScriptDialogOpeningEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Uri( + /* [retval][out] */ LPWSTR *uri) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Kind( + /* [retval][out] */ COREWEBVIEW2_SCRIPT_DIALOG_KIND *kind) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Message( + /* [retval][out] */ LPWSTR *message) = 0; + + virtual HRESULT STDMETHODCALLTYPE Accept( void) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_DefaultText( + /* [retval][out] */ LPWSTR *defaultText) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ResultText( + /* [retval][out] */ LPWSTR *resultText) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_ResultText( + /* [in] */ LPCWSTR resultText) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetDeferral( + /* [retval][out] */ ICoreWebView2Deferral **deferral) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ScriptDialogOpeningEventArgsVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ScriptDialogOpeningEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ScriptDialogOpeningEventArgs * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ScriptDialogOpeningEventArgs * This); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Uri )( + ICoreWebView2ScriptDialogOpeningEventArgs * This, + /* [retval][out] */ LPWSTR *uri); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Kind )( + ICoreWebView2ScriptDialogOpeningEventArgs * This, + /* [retval][out] */ COREWEBVIEW2_SCRIPT_DIALOG_KIND *kind); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Message )( + ICoreWebView2ScriptDialogOpeningEventArgs * This, + /* [retval][out] */ LPWSTR *message); + + HRESULT ( STDMETHODCALLTYPE *Accept )( + ICoreWebView2ScriptDialogOpeningEventArgs * This); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultText )( + ICoreWebView2ScriptDialogOpeningEventArgs * This, + /* [retval][out] */ LPWSTR *defaultText); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ResultText )( + ICoreWebView2ScriptDialogOpeningEventArgs * This, + /* [retval][out] */ LPWSTR *resultText); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ResultText )( + ICoreWebView2ScriptDialogOpeningEventArgs * This, + /* [in] */ LPCWSTR resultText); + + HRESULT ( STDMETHODCALLTYPE *GetDeferral )( + ICoreWebView2ScriptDialogOpeningEventArgs * This, + /* [retval][out] */ ICoreWebView2Deferral **deferral); + + END_INTERFACE + } ICoreWebView2ScriptDialogOpeningEventArgsVtbl; + + interface ICoreWebView2ScriptDialogOpeningEventArgs + { + CONST_VTBL struct ICoreWebView2ScriptDialogOpeningEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ScriptDialogOpeningEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ScriptDialogOpeningEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ScriptDialogOpeningEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ScriptDialogOpeningEventArgs_get_Uri(This,uri) \ + ( (This)->lpVtbl -> get_Uri(This,uri) ) + +#define ICoreWebView2ScriptDialogOpeningEventArgs_get_Kind(This,kind) \ + ( (This)->lpVtbl -> get_Kind(This,kind) ) + +#define ICoreWebView2ScriptDialogOpeningEventArgs_get_Message(This,message) \ + ( (This)->lpVtbl -> get_Message(This,message) ) + +#define ICoreWebView2ScriptDialogOpeningEventArgs_Accept(This) \ + ( (This)->lpVtbl -> Accept(This) ) + +#define ICoreWebView2ScriptDialogOpeningEventArgs_get_DefaultText(This,defaultText) \ + ( (This)->lpVtbl -> get_DefaultText(This,defaultText) ) + +#define ICoreWebView2ScriptDialogOpeningEventArgs_get_ResultText(This,resultText) \ + ( (This)->lpVtbl -> get_ResultText(This,resultText) ) + +#define ICoreWebView2ScriptDialogOpeningEventArgs_put_ResultText(This,resultText) \ + ( (This)->lpVtbl -> put_ResultText(This,resultText) ) + +#define ICoreWebView2ScriptDialogOpeningEventArgs_GetDeferral(This,deferral) \ + ( (This)->lpVtbl -> GetDeferral(This,deferral) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ScriptDialogOpeningEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ScriptDialogOpeningEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2ScriptDialogOpeningEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ScriptDialogOpeningEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2ScriptDialogOpeningEventHandler; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("72D93789-2727-4A9B-A4FC-1B2609CBCBE3") + ICoreWebView2ScriptDialogOpeningEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ScriptDialogOpeningEventHandlerVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ScriptDialogOpeningEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ScriptDialogOpeningEventHandler * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ScriptDialogOpeningEventHandler * This); + + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2ScriptDialogOpeningEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventArgs *args); + + END_INTERFACE + } ICoreWebView2ScriptDialogOpeningEventHandlerVtbl; + + interface ICoreWebView2ScriptDialogOpeningEventHandler + { + CONST_VTBL struct ICoreWebView2ScriptDialogOpeningEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ScriptDialogOpeningEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ScriptDialogOpeningEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ScriptDialogOpeningEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ScriptDialogOpeningEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ScriptDialogOpeningEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Settings_INTERFACE_DEFINED__ +#define __ICoreWebView2Settings_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Settings */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2Settings; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("203FBA37-6850-4DCC-A25A-58A351AC625D") + ICoreWebView2Settings : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsScriptEnabled( + /* [retval][out] */ BOOL *isScriptEnabled) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_IsScriptEnabled( + /* [in] */ BOOL isScriptEnabled) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsWebMessageEnabled( + /* [retval][out] */ BOOL *isWebMessageEnabled) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_IsWebMessageEnabled( + /* [in] */ BOOL isWebMessageEnabled) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_AreDefaultScriptDialogsEnabled( + /* [retval][out] */ BOOL *areDefaultScriptDialogsEnabled) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_AreDefaultScriptDialogsEnabled( + /* [in] */ BOOL areDefaultScriptDialogsEnabled) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsStatusBarEnabled( + /* [retval][out] */ BOOL *isStatusBarEnabled) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_IsStatusBarEnabled( + /* [in] */ BOOL isStatusBarEnabled) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_AreDevToolsEnabled( + /* [retval][out] */ BOOL *areDevToolsEnabled) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_AreDevToolsEnabled( + /* [in] */ BOOL areDevToolsEnabled) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_AreDefaultContextMenusEnabled( + /* [retval][out] */ BOOL *enabled) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_AreDefaultContextMenusEnabled( + /* [in] */ BOOL enabled) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_AreRemoteObjectsAllowed( + /* [retval][out] */ BOOL *allowed) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_AreRemoteObjectsAllowed( + /* [in] */ BOOL allowed) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsZoomControlEnabled( + /* [retval][out] */ BOOL *enabled) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_IsZoomControlEnabled( + /* [in] */ BOOL enabled) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsBuiltInErrorPageEnabled( + /* [retval][out] */ BOOL *enabled) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_IsBuiltInErrorPageEnabled( + /* [in] */ BOOL enabled) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2SettingsVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Settings * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Settings * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Settings * This); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsScriptEnabled )( + ICoreWebView2Settings * This, + /* [retval][out] */ BOOL *isScriptEnabled); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsScriptEnabled )( + ICoreWebView2Settings * This, + /* [in] */ BOOL isScriptEnabled); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsWebMessageEnabled )( + ICoreWebView2Settings * This, + /* [retval][out] */ BOOL *isWebMessageEnabled); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsWebMessageEnabled )( + ICoreWebView2Settings * This, + /* [in] */ BOOL isWebMessageEnabled); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDefaultScriptDialogsEnabled )( + ICoreWebView2Settings * This, + /* [retval][out] */ BOOL *areDefaultScriptDialogsEnabled); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDefaultScriptDialogsEnabled )( + ICoreWebView2Settings * This, + /* [in] */ BOOL areDefaultScriptDialogsEnabled); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsStatusBarEnabled )( + ICoreWebView2Settings * This, + /* [retval][out] */ BOOL *isStatusBarEnabled); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsStatusBarEnabled )( + ICoreWebView2Settings * This, + /* [in] */ BOOL isStatusBarEnabled); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDevToolsEnabled )( + ICoreWebView2Settings * This, + /* [retval][out] */ BOOL *areDevToolsEnabled); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDevToolsEnabled )( + ICoreWebView2Settings * This, + /* [in] */ BOOL areDevToolsEnabled); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDefaultContextMenusEnabled )( + ICoreWebView2Settings * This, + /* [retval][out] */ BOOL *enabled); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDefaultContextMenusEnabled )( + ICoreWebView2Settings * This, + /* [in] */ BOOL enabled); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreRemoteObjectsAllowed )( + ICoreWebView2Settings * This, + /* [retval][out] */ BOOL *allowed); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreRemoteObjectsAllowed )( + ICoreWebView2Settings * This, + /* [in] */ BOOL allowed); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsZoomControlEnabled )( + ICoreWebView2Settings * This, + /* [retval][out] */ BOOL *enabled); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsZoomControlEnabled )( + ICoreWebView2Settings * This, + /* [in] */ BOOL enabled); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsBuiltInErrorPageEnabled )( + ICoreWebView2Settings * This, + /* [retval][out] */ BOOL *enabled); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsBuiltInErrorPageEnabled )( + ICoreWebView2Settings * This, + /* [in] */ BOOL enabled); + + END_INTERFACE + } ICoreWebView2SettingsVtbl; + + interface ICoreWebView2Settings + { + CONST_VTBL struct ICoreWebView2SettingsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Settings_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Settings_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Settings_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Settings_get_IsScriptEnabled(This,isScriptEnabled) \ + ( (This)->lpVtbl -> get_IsScriptEnabled(This,isScriptEnabled) ) + +#define ICoreWebView2Settings_put_IsScriptEnabled(This,isScriptEnabled) \ + ( (This)->lpVtbl -> put_IsScriptEnabled(This,isScriptEnabled) ) + +#define ICoreWebView2Settings_get_IsWebMessageEnabled(This,isWebMessageEnabled) \ + ( (This)->lpVtbl -> get_IsWebMessageEnabled(This,isWebMessageEnabled) ) + +#define ICoreWebView2Settings_put_IsWebMessageEnabled(This,isWebMessageEnabled) \ + ( (This)->lpVtbl -> put_IsWebMessageEnabled(This,isWebMessageEnabled) ) + +#define ICoreWebView2Settings_get_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) \ + ( (This)->lpVtbl -> get_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) ) + +#define ICoreWebView2Settings_put_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) \ + ( (This)->lpVtbl -> put_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) ) + +#define ICoreWebView2Settings_get_IsStatusBarEnabled(This,isStatusBarEnabled) \ + ( (This)->lpVtbl -> get_IsStatusBarEnabled(This,isStatusBarEnabled) ) + +#define ICoreWebView2Settings_put_IsStatusBarEnabled(This,isStatusBarEnabled) \ + ( (This)->lpVtbl -> put_IsStatusBarEnabled(This,isStatusBarEnabled) ) + +#define ICoreWebView2Settings_get_AreDevToolsEnabled(This,areDevToolsEnabled) \ + ( (This)->lpVtbl -> get_AreDevToolsEnabled(This,areDevToolsEnabled) ) + +#define ICoreWebView2Settings_put_AreDevToolsEnabled(This,areDevToolsEnabled) \ + ( (This)->lpVtbl -> put_AreDevToolsEnabled(This,areDevToolsEnabled) ) + +#define ICoreWebView2Settings_get_AreDefaultContextMenusEnabled(This,enabled) \ + ( (This)->lpVtbl -> get_AreDefaultContextMenusEnabled(This,enabled) ) + +#define ICoreWebView2Settings_put_AreDefaultContextMenusEnabled(This,enabled) \ + ( (This)->lpVtbl -> put_AreDefaultContextMenusEnabled(This,enabled) ) + +#define ICoreWebView2Settings_get_AreRemoteObjectsAllowed(This,allowed) \ + ( (This)->lpVtbl -> get_AreRemoteObjectsAllowed(This,allowed) ) + +#define ICoreWebView2Settings_put_AreRemoteObjectsAllowed(This,allowed) \ + ( (This)->lpVtbl -> put_AreRemoteObjectsAllowed(This,allowed) ) + +#define ICoreWebView2Settings_get_IsZoomControlEnabled(This,enabled) \ + ( (This)->lpVtbl -> get_IsZoomControlEnabled(This,enabled) ) + +#define ICoreWebView2Settings_put_IsZoomControlEnabled(This,enabled) \ + ( (This)->lpVtbl -> put_IsZoomControlEnabled(This,enabled) ) + +#define ICoreWebView2Settings_get_IsBuiltInErrorPageEnabled(This,enabled) \ + ( (This)->lpVtbl -> get_IsBuiltInErrorPageEnabled(This,enabled) ) + +#define ICoreWebView2Settings_put_IsBuiltInErrorPageEnabled(This,enabled) \ + ( (This)->lpVtbl -> put_IsBuiltInErrorPageEnabled(This,enabled) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Settings_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2SourceChangedEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2SourceChangedEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2SourceChangedEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2SourceChangedEventArgs; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("BD9A4BFB-BE19-40BD-968B-EBCF0D727EF3") + ICoreWebView2SourceChangedEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsNewDocument( + /* [retval][out] */ BOOL *isNewDocument) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2SourceChangedEventArgsVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2SourceChangedEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2SourceChangedEventArgs * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2SourceChangedEventArgs * This); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsNewDocument )( + ICoreWebView2SourceChangedEventArgs * This, + /* [retval][out] */ BOOL *isNewDocument); + + END_INTERFACE + } ICoreWebView2SourceChangedEventArgsVtbl; + + interface ICoreWebView2SourceChangedEventArgs + { + CONST_VTBL struct ICoreWebView2SourceChangedEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2SourceChangedEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2SourceChangedEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2SourceChangedEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2SourceChangedEventArgs_get_IsNewDocument(This,isNewDocument) \ + ( (This)->lpVtbl -> get_IsNewDocument(This,isNewDocument) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2SourceChangedEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2SourceChangedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2SourceChangedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2SourceChangedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2SourceChangedEventHandler; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("8FEDD1A7-3A33-416F-AF81-881EEB001433") + ICoreWebView2SourceChangedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *webview, + /* [in] */ ICoreWebView2SourceChangedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2SourceChangedEventHandlerVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2SourceChangedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2SourceChangedEventHandler * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2SourceChangedEventHandler * This); + + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2SourceChangedEventHandler * This, + /* [in] */ ICoreWebView2 *webview, + /* [in] */ ICoreWebView2SourceChangedEventArgs *args); + + END_INTERFACE + } ICoreWebView2SourceChangedEventHandlerVtbl; + + interface ICoreWebView2SourceChangedEventHandler + { + CONST_VTBL struct ICoreWebView2SourceChangedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2SourceChangedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2SourceChangedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2SourceChangedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2SourceChangedEventHandler_Invoke(This,webview,args) \ + ( (This)->lpVtbl -> Invoke(This,webview,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2SourceChangedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2WebMessageReceivedEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2WebMessageReceivedEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2WebMessageReceivedEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2WebMessageReceivedEventArgs; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("B263B5AE-9C54-4B75-B632-40AE1A0B6912") + ICoreWebView2WebMessageReceivedEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Source( + /* [retval][out] */ LPWSTR *source) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_WebMessageAsJson( + /* [retval][out] */ LPWSTR *webMessageAsJson) = 0; + + virtual HRESULT STDMETHODCALLTYPE TryGetWebMessageAsString( + /* [retval][out] */ LPWSTR *webMessageAsString) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2WebMessageReceivedEventArgsVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2WebMessageReceivedEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2WebMessageReceivedEventArgs * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2WebMessageReceivedEventArgs * This); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2WebMessageReceivedEventArgs * This, + /* [retval][out] */ LPWSTR *source); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_WebMessageAsJson )( + ICoreWebView2WebMessageReceivedEventArgs * This, + /* [retval][out] */ LPWSTR *webMessageAsJson); + + HRESULT ( STDMETHODCALLTYPE *TryGetWebMessageAsString )( + ICoreWebView2WebMessageReceivedEventArgs * This, + /* [retval][out] */ LPWSTR *webMessageAsString); + + END_INTERFACE + } ICoreWebView2WebMessageReceivedEventArgsVtbl; + + interface ICoreWebView2WebMessageReceivedEventArgs + { + CONST_VTBL struct ICoreWebView2WebMessageReceivedEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2WebMessageReceivedEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2WebMessageReceivedEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2WebMessageReceivedEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2WebMessageReceivedEventArgs_get_Source(This,source) \ + ( (This)->lpVtbl -> get_Source(This,source) ) + +#define ICoreWebView2WebMessageReceivedEventArgs_get_WebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> get_WebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2WebMessageReceivedEventArgs_TryGetWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> TryGetWebMessageAsString(This,webMessageAsString) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2WebMessageReceivedEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2WebMessageReceivedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2WebMessageReceivedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2WebMessageReceivedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2WebMessageReceivedEventHandler; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("199328C8-9964-4F5F-84E6-E875B1B763D6") + ICoreWebView2WebMessageReceivedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2WebMessageReceivedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2WebMessageReceivedEventHandlerVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2WebMessageReceivedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2WebMessageReceivedEventHandler * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2WebMessageReceivedEventHandler * This); + + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2WebMessageReceivedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2WebMessageReceivedEventArgs *args); + + END_INTERFACE + } ICoreWebView2WebMessageReceivedEventHandlerVtbl; + + interface ICoreWebView2WebMessageReceivedEventHandler + { + CONST_VTBL struct ICoreWebView2WebMessageReceivedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2WebMessageReceivedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2WebMessageReceivedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2WebMessageReceivedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2WebMessageReceivedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2WebMessageReceivedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2WebResourceRequest_INTERFACE_DEFINED__ +#define __ICoreWebView2WebResourceRequest_INTERFACE_DEFINED__ + +/* interface ICoreWebView2WebResourceRequest */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2WebResourceRequest; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("11B02254-B827-49F6-8974-30F6E6C55AF6") + ICoreWebView2WebResourceRequest : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Uri( + /* [retval][out] */ LPWSTR *uri) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Uri( + /* [in] */ LPCWSTR uri) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Method( + /* [retval][out] */ LPWSTR *method) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Method( + /* [in] */ LPCWSTR method) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Content( + /* [retval][out] */ IStream **content) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Content( + /* [in] */ IStream *content) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Headers( + /* [retval][out] */ ICoreWebView2HttpRequestHeaders **headers) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2WebResourceRequestVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2WebResourceRequest * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2WebResourceRequest * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2WebResourceRequest * This); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Uri )( + ICoreWebView2WebResourceRequest * This, + /* [retval][out] */ LPWSTR *uri); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Uri )( + ICoreWebView2WebResourceRequest * This, + /* [in] */ LPCWSTR uri); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Method )( + ICoreWebView2WebResourceRequest * This, + /* [retval][out] */ LPWSTR *method); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Method )( + ICoreWebView2WebResourceRequest * This, + /* [in] */ LPCWSTR method); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Content )( + ICoreWebView2WebResourceRequest * This, + /* [retval][out] */ IStream **content); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Content )( + ICoreWebView2WebResourceRequest * This, + /* [in] */ IStream *content); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Headers )( + ICoreWebView2WebResourceRequest * This, + /* [retval][out] */ ICoreWebView2HttpRequestHeaders **headers); + + END_INTERFACE + } ICoreWebView2WebResourceRequestVtbl; + + interface ICoreWebView2WebResourceRequest + { + CONST_VTBL struct ICoreWebView2WebResourceRequestVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2WebResourceRequest_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2WebResourceRequest_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2WebResourceRequest_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2WebResourceRequest_get_Uri(This,uri) \ + ( (This)->lpVtbl -> get_Uri(This,uri) ) + +#define ICoreWebView2WebResourceRequest_put_Uri(This,uri) \ + ( (This)->lpVtbl -> put_Uri(This,uri) ) + +#define ICoreWebView2WebResourceRequest_get_Method(This,method) \ + ( (This)->lpVtbl -> get_Method(This,method) ) + +#define ICoreWebView2WebResourceRequest_put_Method(This,method) \ + ( (This)->lpVtbl -> put_Method(This,method) ) + +#define ICoreWebView2WebResourceRequest_get_Content(This,content) \ + ( (This)->lpVtbl -> get_Content(This,content) ) + +#define ICoreWebView2WebResourceRequest_put_Content(This,content) \ + ( (This)->lpVtbl -> put_Content(This,content) ) + +#define ICoreWebView2WebResourceRequest_get_Headers(This,headers) \ + ( (This)->lpVtbl -> get_Headers(This,headers) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2WebResourceRequest_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2WebResourceRequestedEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2WebResourceRequestedEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2WebResourceRequestedEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2WebResourceRequestedEventArgs; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("2D7B3282-83B1-41CA-8BBF-FF18F6BFE320") + ICoreWebView2WebResourceRequestedEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Request( + /* [retval][out] */ ICoreWebView2WebResourceRequest **request) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Response( + /* [retval][out] */ ICoreWebView2WebResourceResponse **response) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Response( + /* [in] */ ICoreWebView2WebResourceResponse *response) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetDeferral( + /* [retval][out] */ ICoreWebView2Deferral **deferral) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ResourceContext( + /* [retval][out] */ COREWEBVIEW2_WEB_RESOURCE_CONTEXT *context) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2WebResourceRequestedEventArgsVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2WebResourceRequestedEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2WebResourceRequestedEventArgs * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2WebResourceRequestedEventArgs * This); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Request )( + ICoreWebView2WebResourceRequestedEventArgs * This, + /* [retval][out] */ ICoreWebView2WebResourceRequest **request); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Response )( + ICoreWebView2WebResourceRequestedEventArgs * This, + /* [retval][out] */ ICoreWebView2WebResourceResponse **response); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Response )( + ICoreWebView2WebResourceRequestedEventArgs * This, + /* [in] */ ICoreWebView2WebResourceResponse *response); + + HRESULT ( STDMETHODCALLTYPE *GetDeferral )( + ICoreWebView2WebResourceRequestedEventArgs * This, + /* [retval][out] */ ICoreWebView2Deferral **deferral); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ResourceContext )( + ICoreWebView2WebResourceRequestedEventArgs * This, + /* [retval][out] */ COREWEBVIEW2_WEB_RESOURCE_CONTEXT *context); + + END_INTERFACE + } ICoreWebView2WebResourceRequestedEventArgsVtbl; + + interface ICoreWebView2WebResourceRequestedEventArgs + { + CONST_VTBL struct ICoreWebView2WebResourceRequestedEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2WebResourceRequestedEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2WebResourceRequestedEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2WebResourceRequestedEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2WebResourceRequestedEventArgs_get_Request(This,request) \ + ( (This)->lpVtbl -> get_Request(This,request) ) + +#define ICoreWebView2WebResourceRequestedEventArgs_get_Response(This,response) \ + ( (This)->lpVtbl -> get_Response(This,response) ) + +#define ICoreWebView2WebResourceRequestedEventArgs_put_Response(This,response) \ + ( (This)->lpVtbl -> put_Response(This,response) ) + +#define ICoreWebView2WebResourceRequestedEventArgs_GetDeferral(This,deferral) \ + ( (This)->lpVtbl -> GetDeferral(This,deferral) ) + +#define ICoreWebView2WebResourceRequestedEventArgs_get_ResourceContext(This,context) \ + ( (This)->lpVtbl -> get_ResourceContext(This,context) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2WebResourceRequestedEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2WebResourceRequestedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2WebResourceRequestedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2WebResourceRequestedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2WebResourceRequestedEventHandler; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("F6DC79F2-E1FA-4534-8968-4AFF10BBAA32") + ICoreWebView2WebResourceRequestedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2WebResourceRequestedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2WebResourceRequestedEventHandlerVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2WebResourceRequestedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2WebResourceRequestedEventHandler * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2WebResourceRequestedEventHandler * This); + + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2WebResourceRequestedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2WebResourceRequestedEventArgs *args); + + END_INTERFACE + } ICoreWebView2WebResourceRequestedEventHandlerVtbl; + + interface ICoreWebView2WebResourceRequestedEventHandler + { + CONST_VTBL struct ICoreWebView2WebResourceRequestedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2WebResourceRequestedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2WebResourceRequestedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2WebResourceRequestedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2WebResourceRequestedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2WebResourceRequestedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2WebResourceResponse_INTERFACE_DEFINED__ +#define __ICoreWebView2WebResourceResponse_INTERFACE_DEFINED__ + +/* interface ICoreWebView2WebResourceResponse */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2WebResourceResponse; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("5953D1FC-B08F-46DD-AFD3-66B172419CD0") + ICoreWebView2WebResourceResponse : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Content( + /* [retval][out] */ IStream **content) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Content( + /* [in] */ IStream *content) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Headers( + /* [retval][out] */ ICoreWebView2HttpResponseHeaders **headers) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_StatusCode( + /* [retval][out] */ int *statusCode) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_StatusCode( + /* [in] */ int statusCode) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ReasonPhrase( + /* [retval][out] */ LPWSTR *reasonPhrase) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_ReasonPhrase( + /* [in] */ LPCWSTR reasonPhrase) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2WebResourceResponseVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2WebResourceResponse * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2WebResourceResponse * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2WebResourceResponse * This); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Content )( + ICoreWebView2WebResourceResponse * This, + /* [retval][out] */ IStream **content); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Content )( + ICoreWebView2WebResourceResponse * This, + /* [in] */ IStream *content); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Headers )( + ICoreWebView2WebResourceResponse * This, + /* [retval][out] */ ICoreWebView2HttpResponseHeaders **headers); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_StatusCode )( + ICoreWebView2WebResourceResponse * This, + /* [retval][out] */ int *statusCode); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_StatusCode )( + ICoreWebView2WebResourceResponse * This, + /* [in] */ int statusCode); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ReasonPhrase )( + ICoreWebView2WebResourceResponse * This, + /* [retval][out] */ LPWSTR *reasonPhrase); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ReasonPhrase )( + ICoreWebView2WebResourceResponse * This, + /* [in] */ LPCWSTR reasonPhrase); + + END_INTERFACE + } ICoreWebView2WebResourceResponseVtbl; + + interface ICoreWebView2WebResourceResponse + { + CONST_VTBL struct ICoreWebView2WebResourceResponseVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2WebResourceResponse_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2WebResourceResponse_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2WebResourceResponse_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2WebResourceResponse_get_Content(This,content) \ + ( (This)->lpVtbl -> get_Content(This,content) ) + +#define ICoreWebView2WebResourceResponse_put_Content(This,content) \ + ( (This)->lpVtbl -> put_Content(This,content) ) + +#define ICoreWebView2WebResourceResponse_get_Headers(This,headers) \ + ( (This)->lpVtbl -> get_Headers(This,headers) ) + +#define ICoreWebView2WebResourceResponse_get_StatusCode(This,statusCode) \ + ( (This)->lpVtbl -> get_StatusCode(This,statusCode) ) + +#define ICoreWebView2WebResourceResponse_put_StatusCode(This,statusCode) \ + ( (This)->lpVtbl -> put_StatusCode(This,statusCode) ) + +#define ICoreWebView2WebResourceResponse_get_ReasonPhrase(This,reasonPhrase) \ + ( (This)->lpVtbl -> get_ReasonPhrase(This,reasonPhrase) ) + +#define ICoreWebView2WebResourceResponse_put_ReasonPhrase(This,reasonPhrase) \ + ( (This)->lpVtbl -> put_ReasonPhrase(This,reasonPhrase) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2WebResourceResponse_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2WindowCloseRequestedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2WindowCloseRequestedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2WindowCloseRequestedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2WindowCloseRequestedEventHandler; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("63C89928-AD32-4421-A0E4-EC99B34AA97E") + ICoreWebView2WindowCloseRequestedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2WindowCloseRequestedEventHandlerVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2WindowCloseRequestedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2WindowCloseRequestedEventHandler * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2WindowCloseRequestedEventHandler * This); + + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2WindowCloseRequestedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2WindowCloseRequestedEventHandlerVtbl; + + interface ICoreWebView2WindowCloseRequestedEventHandler + { + CONST_VTBL struct ICoreWebView2WindowCloseRequestedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2WindowCloseRequestedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2WindowCloseRequestedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2WindowCloseRequestedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2WindowCloseRequestedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2WindowCloseRequestedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ZoomFactorChangedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2ZoomFactorChangedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ZoomFactorChangedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ICoreWebView2ZoomFactorChangedEventHandler; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("F1828246-8B98-4274-B708-ECDB6BF3843A") + ICoreWebView2ZoomFactorChangedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2Controller *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ZoomFactorChangedEventHandlerVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ZoomFactorChangedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ZoomFactorChangedEventHandler * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ZoomFactorChangedEventHandler * This); + + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2ZoomFactorChangedEventHandler * This, + /* [in] */ ICoreWebView2Controller *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2ZoomFactorChangedEventHandlerVtbl; + + interface ICoreWebView2ZoomFactorChangedEventHandler + { + CONST_VTBL struct ICoreWebView2ZoomFactorChangedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ZoomFactorChangedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ZoomFactorChangedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ZoomFactorChangedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ZoomFactorChangedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ZoomFactorChangedEventHandler_INTERFACE_DEFINED__ */ + +#endif /* __WebView2_LIBRARY_DEFINED__ */ + +/* Additional Prototypes for ALL interfaces */ + +/* end of Additional Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif + + diff --git a/library/webview/script/build.bat b/library/webview/script/build.bat new file mode 100644 index 0000000..8fddac0 --- /dev/null +++ b/library/webview/script/build.bat @@ -0,0 +1,54 @@ +@echo off + +echo Prepare directories... +set script_dir=%~dp0 +set src_dir=%script_dir%.. +set build_dir=%script_dir%..\build +mkdir "%build_dir%" + +echo Webview directory: %src_dir% +echo Build directory: %build_dir% + +echo Looking for vswhere.exe... +set "vswhere=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" +if not exist "%vswhere%" set "vswhere=%ProgramFiles%\Microsoft Visual Studio\Installer\vswhere.exe" +if not exist "%vswhere%" ( + echo ERROR: Failed to find vswhere.exe + exit 1 +) +echo Found %vswhere% + +echo Looking for VC... +for /f "usebackq tokens=*" %%i in (`"%vswhere%" -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath`) do ( + set vc_dir=%%i +) +if not exist "%vc_dir%\Common7\Tools\vsdevcmd.bat" ( + echo ERROR: Failed to find VC tools x86/x64 + exit 1 +) +echo Found %vc_dir% + + +@REM call "%vc_dir%\Common7\Tools\vsdevcmd.bat" -arch=x86 -host_arch=x64 +@REM echo Building webview.dll (x86) +@REM mkdir "%src_dir%\..\dll\x86" +@REM cl /D "WEBVIEW_API=__declspec(dllexport)" ^ +@REM /I "%src_dir%\script\microsoft.web.webview2.1.0.664.37\build\native\include" ^ +@REM "%src_dir%\script\microsoft.web.webview2.1.0.664.37\build\native\x86\WebView2Loader.dll.lib" ^ +@REM /std:c++17 /EHsc "/Fo%build_dir%"\ ^ +@REM "%src_dir%\webview.cc" /link /DLL "/OUT:%build_dir%\webview.dll" || exit \b +@REM copy "%build_dir%\webview.dll" "%src_dir%\..\dll\x86" +@REM copy "%src_dir%\script\microsoft.web.webview2.1.0.664.37\build\native\x86\WebView2Loader.dll" "%src_dir%\..\dll\x86" + +call "%vc_dir%\Common7\Tools\vsdevcmd.bat" -arch=x64 -host_arch=x64 +echo Building webview.dll (x64) +mkdir "%src_dir%\..\..\out\windows\x64" +cl /D "WEBVIEW_API=__declspec(dllexport)" ^ + /I "%src_dir%\script\microsoft.web.webview2.1.0.664.37\build\native\include" ^ + "%src_dir%\script\microsoft.web.webview2.1.0.664.37\build\native\x64\WebView2Loader.dll.lib" ^ + /std:c++17 /EHsc "/Fo%build_dir%"\ ^ + "%src_dir%\webview.cc" /link /DLL "/OUT:%src_dir%\..\..\out\windows\x64\webview.dll" || exit \b + +@REM Copy build files to out +@REM copy "%src_dir%\script\microsoft.web.webview2.1.0.664.37\build\native\x64\WebView2Loader.dll" "%build_dir%" +copy "%src_dir%\script\microsoft.web.webview2.1.0.664.37\build\native\x64\WebView2Loader.dll" "%src_dir%\..\..\out\windows\x64" diff --git a/library/webview/script/build.macos.sh b/library/webview/script/build.macos.sh new file mode 100644 index 0000000..d0b444a --- /dev/null +++ b/library/webview/script/build.macos.sh @@ -0,0 +1,3 @@ +FLAGS="-DWEBVIEW_COCOA -std=c++11 -Wall -Wextra -pedantic -framework WebKit" + +g++ webview.cc $FLAGS -shared -o ../../out/linux/webview.dylib \ No newline at end of file diff --git a/library/webview/script/build.sh b/library/webview/script/build.sh new file mode 100644 index 0000000..828fb88 --- /dev/null +++ b/library/webview/script/build.sh @@ -0,0 +1,4 @@ +echo Build Started... +echo g++ webview.cc -shared -fPIC pkg-config --cflags --libs gtk+-3.0 webkit2gtk-4.0 -o ../../out/linux/webview.so +g++ webview.cc -shared -fPIC `pkg-config --cflags --libs gtk+-3.0 webkit2gtk-4.0` -o ../../out/linux/webview.so +echo "Build Successful -> written to out folder in the project root" \ No newline at end of file diff --git a/library/webview/script/microsoft.web.webview2.0.9.488/.signature.p7s b/library/webview/script/microsoft.web.webview2.0.9.488/.signature.p7s new file mode 100644 index 0000000000000000000000000000000000000000..d77f1a292aeaaa2899d44eda0d591521a6b55924 GIT binary patch literal 18694 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 + + + Microsoft.Web.WebView2 + 0.9.488 + Microsoft + Microsoft + false + LICENSE.txt + https://aka.ms/deprecateLicenseUrl + https://aka.ms/webview + https://aka.ms/webviewlogo + The Microsoft Edge WebView2 control enables you to host web content in your Windows app. + © Microsoft Corporation. All rights reserved. + Microsoft Web WebView Native native package Edge C++ Win32 Webview2 + + + + + \ No newline at end of file diff --git a/library/webview/script/microsoft.web.webview2.0.9.488/WebView2.idl b/library/webview/script/microsoft.web.webview2.0.9.488/WebView2.idl new file mode 100644 index 0000000..fe26570 --- /dev/null +++ b/library/webview/script/microsoft.web.webview2.0.9.488/WebView2.idl @@ -0,0 +1,2598 @@ +// Copyright (C) Microsoft Corporation. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// # API Review +// All APIs need API review. List API review documents here with the URI to the +// doc and the change ID of the IDL when the document was created. +// API documents: +// * 916246ec [WebView2 API Specification](https://aka.ms/WebView2APISpecification) +// +// # Style +// Follow the [Win32 API Design Guidelines](https://aka.ms/Win32APIDesignGuidelines) +// while editing this file. For any style rules unspecified follow the Anaheim +// style. Specifically, follow Anaheim indenting and line limit style rules in +// this file. +// +// # Documentation +// Please ensure that any new API includes complete documentation in its +// JavaDoc comments in this file and sample usage in the Sample App. +// Comments intended for public API documentation should start with 3 slashes. +// The first sentence is the brief the brief description of the API and +// shouldn't include the name of the API. Use markdown to style your public API +// documentation. +// +// # WebView and JavaScript capitalization +// camel case | webViewExample | javaScriptExample +// Pascal case | WebViewExample | JavaScriptExample +// Upper case | WEBVIEW_EXAMPLE | JAVASCRIPT_EXAMPLE +// +// That said, in API names use the term 'script' rather than 'JavaScript'. +// Script is shorter and there is only one supported scripting language on the +// web so the specificity of JavaScript is unnecessary. +// +// # URI (not URL) +// We use Uri in parameter names and type names +// throughout. URIs identify resources while URLs (a subset of URIs) also +// locates resources. This difference is not generally well understood. Because +// all URLs are URIs we can ignore the conversation of trying to explain the +// difference between the two and still be technically accurate by always using +// the term URI. Additionally, whether a URI is locatable depends on the context +// since end developers can at runtime specify custom URI scheme resolvers. +// +// # Event pattern +// Events have a method to add and to remove event handlers: +// ``` +// HRESULT add_{EventName}( +// ICoreWebView2{EventName}EventHandler* eventHandler, +// EventRegistrationToken* token); +// +// HRESULT remove_{EventName}(EventRegistrationToken token); +// ``` +// Add takes an event handler delegate interface with a single Invoke method. +// ``` +// ICoreWebView2{EventName}EventHandler::Invoke( +// {SenderType}* sender, +// ICoreWebView2{EventHandler}EventArgs* args); +// ``` +// The Invoke method has two parameters. The first is the sender, the object +// which is firing the event. The second is the EventArgs type. It doesn't take +// the event arg parameters directly so we can version interfaces correctly. +// If the event has no properties on its event args type, then the Invoke method +// should take IUnknown* as its event args parameter so it is possible to add +// event args interfaces in the future without requiring a new event. For events +// with no sender (a static event), the Invoke method has only the event args +// parameter. +// +// # Deferrable event pattern +// Generally, events should be deferrable when their event args have settable +// properties. In order for the caller to use asynchronous methods to produce +// the value for those settable properties we must allow the caller to defer +// the WebView reading those properties until asynchronously later. A deferrable +// event should have the following method on its event args interface: +// `HRESULT GetDeferral([out, retval] ICoreWebView2Deferral** deferral);` +// If called, the event is deferred and calling Complete on the +// ICoreWebView2Deferral ends the deferral. +// +// # Asynchronous method pattern +// Async methods take a final parameter that is the completed handler: +// `{MethodName}(..., ICoreWebView2{MethodName}CompletedHandler* handler)` +// The handler has a single Invoke method: +// `ICoreWebView2{MethodName}CompletedHandler::Invoke( +// HRESULT errorCode, {AsyncReturnType});` +// +// # Property pattern +// For properties with getters in IDL you have +// `[propget] HRESULT {PropertyName}([out, retval] {PropertyType}*)` +// And for properties which also have setters in IDL you have +// `[propput] HRESULT {PropertyName}([in] {PropertyType});` +// +// # Versioning +// The loader DLL may be older or newer than the client DLL. We have to deal +// with compatibility across several dimensions: +// * There's the DLL export contract between the loader DLL and the client +// DLL as well as the interfaces defined in this IDL that are built into both +// the app code and the client DLL. +// * There are two kinds of versioned changes we need to be able to make: +// compatible changes and breaking changes. In both cases we need to make the +// change in a safe manner. For compatible that means everything continues to +// work unchanged despite the loader and client being different versions. For +// breaking chnages this means the host app is unable to create a +// WebView using the different version browser and receives an associated +// error message (doesn't crash). +// * We also need to consider when the loader and host app is using a newer +// version than the browser and when the loader and host app is using an +// older version than the browser. +// +// ## Scenario 1: Older SDK in host app, Newer browser, Compatible change +// In order to be compatible the newer client DLL must still support the older +// client DLL exports. Similarly for the interfaces - they must all be exactly +// the same with no modified IIDs, no reordered methods, no modified method +// parameters and so on. The client DLL may have more DLL exports and more interfaces +// but no changes to the older shipped DLL export or interfaces. +// App code doesn't need to do anything special in this case. +// +// ## Scenario 2: Older SDK in host app, Newer browser, Breaking change +// For breaking changes in the DLL export, the client DLL must change the DLL +// export name. The old loader will attempt to use the old client DLL export. +// When the loader finds the export missing it will fail. +// For breaking changes in the interface, we must change the IID of the modified +// interface. Additionally the loader DLL must validate that the returned object +// supports the IID it expects and fail otherwise. +// The app code must ensure that WebView objects succeed in their QueryInterface +// calls. Basically the app code must have error handling for objects failing +// QueryInterface and for the initial creation failing in order to handle +// breaking changes gracefully. +// +// ## Scenario 3: Newer SDK in host app, Older browser, Compatible change +// In order to be compatible, the newer loader DLL must fallback to calling the +// older client DLL exports if the client DLL doesn't have the most recent DLL +// exports. +// For interface versioning the loader DLL shouldn't be impacted. +// The app code must not assume an object supports all newer versioned +// interfaces. Ideally it checks the success of QueryInterface for newer +// interfaces and if not supported turns off associated app features or +// otherwise fails gracefully. +// +// ## Scenario 4: Newer SDK in host app, Older browser, Breaking change +// For breaking changes in the DLL export, a new export name will be used after +// a breaking change and the loader DLL will just not check for pre-breaking +// change exports from the client DLL. If the client DLL doesn't have the +// correct exports, then the loader returns failure to the caller. +// For breaking changes in the interface, the IIDs of broken interfaces will +// have been modified. The loader will validate that the +// object returned supports the correct base interface IID and return failure to +// the caller otherwise. +// The app code must allow for QueryInterface calls to fail if the object +// doesn't support the newer IIDs. +// +// ## Actions +// * DLL export compatible changes: Create a new DLL export with a new name. +// Ideally implement the existing DLL export as a call into the new DLL +// export to reduce upkeep burden. +// * DLL export breaking changes: Give the modified DLL export a new name and +// remove all older DLL exports. +// * Interface compatible changes: Don't modify shipped interfaces. Add a new +// interface with an incremented version number suffix +// (ICoreWebView2_3) or feature group name suffix +// (ICoreWebView2WithNavigationHistory). +// * Interface breaking changes: After modifying a shipped interface, give it +// a new IID. +// * Loader: When finding the client DLL export it must check its known range +// of compatible exports in order from newest to oldest and use the newest +// one found. It must not attempt to use an older export from before a +// breaking change. Before returning objects to the caller, the loader must +// validate that the object actually implements the expected interface. +// * App code: Check for error from the DLL export methods as they can fail if +// the loader is used with an old browser from before a breaking change or +// with a newer browser that is after a breaking change. +// Check for errors when calling QueryInterface on a WebView object. The +// QueryInterface call may fail with E_NOINTERFACE if the object is from an +// older browser version that doesn't support the newer interface or if +// using a newer browser version that had a breaking change on that +// interface. +import "objidl.idl"; +import "oaidl.idl"; +import "EventToken.idl"; + +[uuid(605A1CAD-D490-4B0F-8428-BC2E5BF9C358), version(1.0)] +library WebView2 { + +// Interface forward declarations +interface ICoreWebView2AcceleratorKeyPressedEventArgs; +interface ICoreWebView2AcceleratorKeyPressedEventHandler; +interface ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler; +interface ICoreWebView2CallDevToolsProtocolMethodCompletedHandler; +interface ICoreWebView2CapturePreviewCompletedHandler; +interface ICoreWebView2; +interface ICoreWebView2Controller; +interface ICoreWebView2ContentLoadingEventArgs; +interface ICoreWebView2ContentLoadingEventHandler; +interface ICoreWebView2DocumentTitleChangedEventHandler; +interface ICoreWebView2ContainsFullScreenElementChangedEventHandler; +interface ICoreWebView2CreateCoreWebView2ControllerCompletedHandler; +interface ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler; +interface ICoreWebView2Deferral; +interface ICoreWebView2DevToolsProtocolEventReceivedEventArgs; +interface ICoreWebView2DevToolsProtocolEventReceivedEventHandler; +interface ICoreWebView2DevToolsProtocolEventReceiver; +interface ICoreWebView2Environment; +interface ICoreWebView2EnvironmentOptions; +interface ICoreWebView2ExecuteScriptCompletedHandler; +interface ICoreWebView2FocusChangedEventHandler; +interface ICoreWebView2HistoryChangedEventHandler; +interface ICoreWebView2HttpHeadersCollectionIterator; +interface ICoreWebView2HttpRequestHeaders; +interface ICoreWebView2HttpResponseHeaders; +interface ICoreWebView2MoveFocusRequestedEventArgs; +interface ICoreWebView2MoveFocusRequestedEventHandler; +interface ICoreWebView2NavigationCompletedEventArgs; +interface ICoreWebView2NavigationCompletedEventHandler; +interface ICoreWebView2NavigationStartingEventArgs; +interface ICoreWebView2NavigationStartingEventHandler; +interface ICoreWebView2NewBrowserVersionAvailableEventHandler; +interface ICoreWebView2NewWindowRequestedEventArgs; +interface ICoreWebView2NewWindowRequestedEventHandler; +interface ICoreWebView2PermissionRequestedEventArgs; +interface ICoreWebView2PermissionRequestedEventHandler; +interface ICoreWebView2ProcessFailedEventArgs; +interface ICoreWebView2ProcessFailedEventHandler; +interface ICoreWebView2ScriptDialogOpeningEventArgs; +interface ICoreWebView2ScriptDialogOpeningEventHandler; +interface ICoreWebView2Settings; +interface ICoreWebView2SourceChangedEventArgs; +interface ICoreWebView2SourceChangedEventHandler; +interface ICoreWebView2WebMessageReceivedEventArgs; +interface ICoreWebView2WebMessageReceivedEventHandler; +interface ICoreWebView2WebResourceRequest; +interface ICoreWebView2WebResourceRequestedEventArgs; +interface ICoreWebView2WebResourceRequestedEventHandler; +interface ICoreWebView2WebResourceResponse; +interface ICoreWebView2WindowCloseRequestedEventHandler; +interface ICoreWebView2ZoomFactorChangedEventHandler; + +// Enums and structs +/// Image format used by the ICoreWebView2::CapturePreview method. +[v1_enum] +typedef enum COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT { + /// PNG image format. + COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT_PNG, + /// JPEG image format. + COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT_JPEG, +} COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT; + +/// Kind of JavaScript dialog used in the ICoreWebView2ScriptDialogOpeningEventHandler +/// interface. +[v1_enum] +typedef enum COREWEBVIEW2_SCRIPT_DIALOG_KIND { + /// A dialog invoked via the window.alert JavaScript function. + COREWEBVIEW2_SCRIPT_DIALOG_KIND_ALERT, + /// A dialog invoked via the window.confirm JavaScript function. + COREWEBVIEW2_SCRIPT_DIALOG_KIND_CONFIRM, + /// A dialog invoked via the window.prompt JavaScript function. + COREWEBVIEW2_SCRIPT_DIALOG_KIND_PROMPT, + /// A dialog invoked via the beforeunload JavaScript event. + COREWEBVIEW2_SCRIPT_DIALOG_KIND_BEFOREUNLOAD, +} COREWEBVIEW2_SCRIPT_DIALOG_KIND; + +/// Kind of process failure used in the ICoreWebView2ProcessFailedEventHandler interface. +[v1_enum] +typedef enum COREWEBVIEW2_PROCESS_FAILED_KIND { + /// Indicates the browser process terminated unexpectedly. + /// The WebView automatically goes into the Closed state. + /// The app has to recreate a new WebView to recover from this failure. + COREWEBVIEW2_PROCESS_FAILED_KIND_BROWSER_PROCESS_EXITED, + + /// Indicates the render process terminated unexpectedly. + /// A new render process will be created automatically and navigated to an + /// error page. + /// The app can use Reload to try to recover from this failure. + COREWEBVIEW2_PROCESS_FAILED_KIND_RENDER_PROCESS_EXITED, + + /// Indicates the render process becomes unresponsive. + /// The app can try to navigate away from the page to recover from the + /// failure. + // Note that this does not seem to work right now. + // Does not fire for simple long running script case, the only related test + // SitePerProcessBrowserTest::NoCommitTimeoutForInvisibleWebContents is + // disabled. + COREWEBVIEW2_PROCESS_FAILED_KIND_RENDER_PROCESS_UNRESPONSIVE, +} COREWEBVIEW2_PROCESS_FAILED_KIND; + +/// The type of a permission request. +[v1_enum] +typedef enum COREWEBVIEW2_PERMISSION_KIND { + /// Unknown permission. + COREWEBVIEW2_PERMISSION_KIND_UNKNOWN_PERMISSION, + + /// Permission to capture audio. + COREWEBVIEW2_PERMISSION_KIND_MICROPHONE, + + /// Permission to capture video. + COREWEBVIEW2_PERMISSION_KIND_CAMERA, + + /// Permission to access geolocation. + COREWEBVIEW2_PERMISSION_KIND_GEOLOCATION, + + /// Permission to send web notifications. + /// This permission request is currently auto rejected and + /// no event is fired for it. + COREWEBVIEW2_PERMISSION_KIND_NOTIFICATIONS, + + /// Permission to access generic sensor. + /// Generic Sensor covering ambient-light-sensor, accelerometer, gyroscope + /// and magnetometer. + COREWEBVIEW2_PERMISSION_KIND_OTHER_SENSORS, + + /// Permission to read system clipboard without a user gesture. + COREWEBVIEW2_PERMISSION_KIND_CLIPBOARD_READ, +} COREWEBVIEW2_PERMISSION_KIND; + +/// Response to a permission request. +[v1_enum] +typedef enum COREWEBVIEW2_PERMISSION_STATE { + /// Use default browser behavior, which normally prompt users for decision. + COREWEBVIEW2_PERMISSION_STATE_DEFAULT, + + /// Grant the permission request. + COREWEBVIEW2_PERMISSION_STATE_ALLOW, + + /// Deny the permission request. + COREWEBVIEW2_PERMISSION_STATE_DENY, +} COREWEBVIEW2_PERMISSION_STATE; + +/// Error status values for web navigations. +[v1_enum] +typedef enum COREWEBVIEW2_WEB_ERROR_STATUS { + /// An unknown error occurred. + COREWEBVIEW2_WEB_ERROR_STATUS_UNKNOWN, + + /// The SSL certificate common name does not match the web address. + COREWEBVIEW2_WEB_ERROR_STATUS_CERTIFICATE_COMMON_NAME_IS_INCORRECT, + + /// The SSL certificate has expired. + COREWEBVIEW2_WEB_ERROR_STATUS_CERTIFICATE_EXPIRED, + + /// The SSL client certificate contains errors. + COREWEBVIEW2_WEB_ERROR_STATUS_CLIENT_CERTIFICATE_CONTAINS_ERRORS, + + /// The SSL certificate has been revoked. + COREWEBVIEW2_WEB_ERROR_STATUS_CERTIFICATE_REVOKED, + + /// The SSL certificate is invalid -- this could mean the certificate did not + /// match the public key pins for the host name, the certificate is signed + /// by an untrusted authority or using a weak sign algorithm, the + /// certificate claimed DNS names violate name constraints, the certificate + /// contains a weak key, the certificate's validity period is too long, lack + /// of revocation information or revocation mechanism, non-unique host name, + /// lack of certificate transparency information, or the certificate is + /// chained to a [legacy Symantec + /// root](https://security.googleblog.com/2018/03/distrust-of-symantec-pki-immediate.html). + COREWEBVIEW2_WEB_ERROR_STATUS_CERTIFICATE_IS_INVALID, + + /// The host is unreachable. + COREWEBVIEW2_WEB_ERROR_STATUS_SERVER_UNREACHABLE, + + /// The connection has timed out. + COREWEBVIEW2_WEB_ERROR_STATUS_TIMEOUT, + + /// The server returned an invalid or unrecognized response. + COREWEBVIEW2_WEB_ERROR_STATUS_ERROR_HTTP_INVALID_SERVER_RESPONSE, + + /// The connection was aborted. + COREWEBVIEW2_WEB_ERROR_STATUS_CONNECTION_ABORTED, + + /// The connection was reset. + COREWEBVIEW2_WEB_ERROR_STATUS_CONNECTION_RESET, + + /// The Internet connection has been lost. + COREWEBVIEW2_WEB_ERROR_STATUS_DISCONNECTED, + + /// Cannot connect to destination. + COREWEBVIEW2_WEB_ERROR_STATUS_CANNOT_CONNECT, + + /// Could not resolve provided host name. + COREWEBVIEW2_WEB_ERROR_STATUS_HOST_NAME_NOT_RESOLVED, + + /// The operation was canceled. + COREWEBVIEW2_WEB_ERROR_STATUS_OPERATION_CANCELED, + + /// The request redirect failed. + COREWEBVIEW2_WEB_ERROR_STATUS_REDIRECT_FAILED, + + /// An unexpected error occurred. + COREWEBVIEW2_WEB_ERROR_STATUS_UNEXPECTED_ERROR, +} COREWEBVIEW2_WEB_ERROR_STATUS; + +/// Enum for web resource request contexts. +[v1_enum] +typedef enum COREWEBVIEW2_WEB_RESOURCE_CONTEXT { + /// All resources + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_ALL, + /// Document resources + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_DOCUMENT, + /// CSS resources + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_STYLESHEET, + /// Image resources + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_IMAGE, + /// Other media resources such as videos + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_MEDIA, + /// Font resources + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_FONT, + /// Script resources + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_SCRIPT, + /// XML HTTP requests + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_XML_HTTP_REQUEST, + /// Fetch API communication + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_FETCH, + /// TextTrack resources + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_TEXT_TRACK, + /// EventSource API communication + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_EVENT_SOURCE, + /// WebSocket API communication + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_WEBSOCKET, + /// Web App Manifests + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_MANIFEST, + /// Signed HTTP Exchanges + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_SIGNED_EXCHANGE, + /// Ping requests + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_PING, + /// CSP Violation Reports + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_CSP_VIOLATION_REPORT, + /// Other resources + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_OTHER +} COREWEBVIEW2_WEB_RESOURCE_CONTEXT; + +/// Reason for moving focus. +[v1_enum] +typedef enum COREWEBVIEW2_MOVE_FOCUS_REASON { + /// Code setting focus into WebView. + COREWEBVIEW2_MOVE_FOCUS_REASON_PROGRAMMATIC, + + /// Moving focus due to Tab traversal forward. + COREWEBVIEW2_MOVE_FOCUS_REASON_NEXT, + + /// Moving focus due to Tab traversal backward. + COREWEBVIEW2_MOVE_FOCUS_REASON_PREVIOUS, +} COREWEBVIEW2_MOVE_FOCUS_REASON; + +/// The type of key event that triggered an AcceleratorKeyPressed event. +[v1_enum] +typedef enum COREWEBVIEW2_KEY_EVENT_KIND { + /// Correspond to window message WM_KEYDOWN. + COREWEBVIEW2_KEY_EVENT_KIND_KEY_DOWN, + + /// Correspond to window message WM_KEYUP. + COREWEBVIEW2_KEY_EVENT_KIND_KEY_UP, + + /// Correspond to window message WM_SYSKEYDOWN. + COREWEBVIEW2_KEY_EVENT_KIND_SYSTEM_KEY_DOWN, + + /// Correspond to window message WM_SYSKEYUP. + COREWEBVIEW2_KEY_EVENT_KIND_SYSTEM_KEY_UP, +} COREWEBVIEW2_KEY_EVENT_KIND; + +/// A structure representing the information packed into the LPARAM given +/// to a Win32 key event. See the documentation for WM_KEYDOWN for details +/// at https://docs.microsoft.com/windows/win32/inputdev/wm-keydown +typedef struct COREWEBVIEW2_PHYSICAL_KEY_STATUS { + /// The repeat count for the current message. + UINT32 RepeatCount; + /// The scan code. + UINT32 ScanCode; + /// Indicates whether the key is an extended key. + BOOL IsExtendedKey; + /// The context code. + BOOL IsMenuKeyDown; + /// The previous key state. + BOOL WasKeyDown; + /// The transition state. + BOOL IsKeyReleased; +} COREWEBVIEW2_PHYSICAL_KEY_STATUS; +// End of enums and structs + +/// WebView2 enables you to host web content using the +/// latest Edge web browser technology. +/// +/// ## Navigation events +/// The normal sequence of navigation events is NavigationStarting, +/// SourceChanged, ContentLoading and then NavigationCompleted. +/// +/// \dot +/// digraph NavigationEvents { +/// node [fontname=Roboto, shape=rectangle] +/// edge [fontname=Roboto] +/// +/// NewDocument -> NavigationStarting; +/// NavigationStarting -> SourceChanged -> ContentLoading [label="New Document"]; +/// ContentLoading -> HistoryChanged; +/// SameDocument -> SourceChanged; +/// SourceChanged -> HistoryChanged [label="Same Document"]; +/// HistoryChanged -> NavigationCompleted; +/// NavigationStarting -> NavigationStarting [label="Redirect"]; +/// NavigationStarting -> NavigationCompleted [label="Failure"]; +/// } +/// \enddot +/// +/// Note that this is for navigation events with the same NavigationId event +/// arg. Navigations events with different NavigationId event args may overlap. +/// For instance, if you start a navigation wait for its NavigationStarting +/// event and then start another navigation you'll see the NavigationStarting +/// for the first navigate followed by the NavigationStarting of the second +/// navigate, followed by the NavigationCompleted for the first navigation and +/// then all the rest of the appropriate navigation events for the second +/// navigation. +/// In error cases there may or may not be a ContentLoading event depending +/// on whether the navigation is continued to an error page. +/// In case of an HTTP redirect, there will be multiple NavigationStarting +/// events in a row, with ones following the first will have their IsRedirect +/// flag set. +/// +/// To monitor or cancel navigations inside subframes in the WebView, use +/// FrameNavigationStarting. +/// +/// ## Process model +/// WebView2 uses the same process model as the Edge web +/// browser. There is one Edge browser process per specified user data directory +/// in a user session that will serve any WebView2 calling +/// process that specifies that user data directory. This means one Edge browser +/// process may be serving multiple calling processes and one calling +/// process may be using multiple Edge browser processes. +/// +/// \dot +/// digraph ProcessModelNClientsNServers { +/// node [fontname=Roboto, shape=rectangle]; +/// edge [fontname=Roboto]; +/// +/// Host1 [label="Calling\nprocess 1"]; +/// Host2 [label="Calling\nprocess 2"]; +/// Browser1 [label="Edge processes\ngroup 1"]; +/// Browser2 [label="Edge processes\ngroup 2"]; +/// +/// Host1 -> Browser1; +/// Host1 -> Browser2; +/// Host2 -> Browser2; +/// } +/// \enddot +/// +/// Off of a browser process there will be some number of renderer processes. +/// These are created as +/// necessary to service potentially multiple frames in different WebViews. The +/// number of renderer processes varies based on the site isolation browser +/// feature and the number of distinct disconnected origins rendered in +/// associated WebViews. +/// +/// \dot +/// digraph ProcessModelClientServer { +/// node [fontname=Roboto, shape=rectangle]; +/// edge [fontname=Roboto]; +/// graph [fontname=Roboto]; +/// +/// Host [label="Calling process"]; +/// subgraph cluster_0 { +/// labeljust = "l"; +/// label = "Edge processes group"; +/// Browser [label="Edge browser\nprocess"]; +/// Render1 [label="Edge render\nprocess 1"]; +/// Render2 [label="Edge render\nprocess 2"]; +/// RenderN [label="Edge render\nprocess N"]; +/// GPU [label="Edge GPU\nprocess"]; +/// } +/// +/// Host -> Browser; +/// Browser -> Render1; +/// Browser -> Render2; +/// Browser -> RenderN; +/// Browser -> GPU; +/// } +/// \enddot +/// +/// You can react to crashes and hangs in these browser and renderer processes +/// using the ProcessFailure event. +/// +/// You can safely shutdown associated browser and renderer processes using the +/// Close method. +/// +/// ## Threading model +/// The WebView2 must be created on a UI thread. Specifically a +/// thread with a message pump. All callbacks will occur on that thread and +/// calls into the WebView must be done on that thread. It is not safe to use +/// the WebView from another thread. +/// +/// Callbacks including event handlers and completion handlers execute serially. +/// That is, if you have an event handler running and begin a message loop no +/// other event handlers or completion callbacks will begin executing +/// reentrantly. +/// +/// ## Security +/// Always check the Source property of the WebView before using ExecuteScript, +/// PostWebMessageAsJson, PostWebMessageAsString, or any other method to send +/// information into the WebView. The WebView may have navigated to another page +/// via the end user interacting with the page or script in the page causing +/// navigation. Similarly, be very careful with +/// AddScriptToExecuteOnDocumentCreated. All future navigations will run this +/// script and if it provides access to information intended only for a certain +/// origin, any HTML document may have access. +/// +/// When examining the result of an ExecuteScript method call, a +/// WebMessageReceived event, always check the Source of the sender, or any +/// other mechanism of receiving information from an HTML document in a WebView +/// validate the URI of the HTML document is what you expect. +/// +/// When constructing a message to send into a WebView, prefer using +/// PostWebMessageAsJson and construct the JSON string parameter using a JSON +/// library. This will avoid any potential accidents of encoding information +/// into a JSON string or script and ensure no attacker controlled input can +/// modify the rest of the JSON message or run arbitrary script. +/// +/// ## String types +/// String out parameters are LPWSTR null terminated strings. The callee +/// allocates the string using CoTaskMemAlloc. Ownership is transferred to the +/// caller and it is up to the caller to free the memory using CoTaskMemFree. +/// +/// String in parameters are LPCWSTR null terminated strings. The caller ensures +/// the string is valid for the duration of the synchronous function call. +/// If the callee needs to retain that value to some point after the function +/// call completes, the callee must allocate its own copy of the string value. +/// +/// ## URI and JSON parsing +/// Various methods provide or accept URIs and JSON as strings. Please use your +/// own preferred library for parsing and generating these strings. +/// +/// If WinRT is available for your app you can use `RuntimeClass_Windows_Data_Json_JsonObject` +/// and `IJsonObjectStatics` to parse or produce JSON strings or `RuntimeClass_Windows_Foundation_Uri` +/// and `IUriRuntimeClassFactory` to parse and produce URIs. Both of these work +/// in Win32 apps. +/// +/// If you use IUri and CreateUri to parse URIs you may want to use the +/// following URI creation flags to have CreateUri behavior more closely match +/// the URI parsing in the WebView: +/// `Uri_CREATE_ALLOW_IMPLICIT_FILE_SCHEME | Uri_CREATE_NO_DECODE_EXTRA_INFO` +/// +/// ## Debugging +/// Open DevTools with the normal shortcuts: `F12` or `Ctrl+Shift+I`. +/// You can use the `--auto-open-devtools-for-tabs` command argument switch to +/// have the DevTools window open immediately when first creating a WebView. See +/// CreateCoreWebView2Controller documentation for how to provide additional command +/// line arguments to the browser process. +/// Check out the LoaderOverride registry key for trying out different builds of +/// WebView2 without modifying your application in the CreateCoreWebView2Controller +/// documentation. +/// +/// ## Versioning +/// After you've used a particular version of the SDK to build your app, your +/// app may end up running with an older or newer version of installed browser +/// binaries. Until version 1.0.0.0 of WebView2 there may be breaking changes +/// during updates that will prevent your SDK from working with different +/// versions of installed browser binaries. After version 1.0.0.0 different +/// versions of the SDK can work with different versions of the installed +/// browser by following these best practices: +/// +/// To account for breaking changes to the API be sure to check for failure when +/// calling the DLL export CreateCoreWebView2Environment and when +/// calling QueryInterface on any CoreWebView2 object. A return value of +/// E_NOINTERFACE can indicate the SDK is not compatible with the Edge +/// browser binaries. +/// +/// Checking for failure from QueryInterface will also account for cases where +/// the SDK is newer than the version of the Edge browser and your app attempts +/// to use an interface of which the Edge browser is unaware. +/// +/// When an interface is unavailable, you can consider disabling the associated +/// feature if possible, or otherwise informing the end user they need to update +/// their browser. +[uuid(189B8AAF-0426-4748-B9AD-243F537EB46B), object, pointer_default(unique)] +interface ICoreWebView2 : IUnknown { + /// The ICoreWebView2Settings object contains various modifiable settings for + /// the running WebView. + [propget] HRESULT Settings([out, retval] ICoreWebView2Settings** settings); + + /// The URI of the current top level document. This value potentially + /// changes as a part of the SourceChanged event firing for some cases + /// such as navigating to a different site or fragment navigations. It will + /// remain the same for other types of navigations such as page reloads or + /// history.pushState with the same URL as the current page. + /// + /// \snippet ControlComponent.cpp SourceChanged + [propget] HRESULT Source([out, retval] LPWSTR* uri); + + /// Cause a navigation of the top level document to the specified URI. See + /// the navigation events for more information. Note that this starts a + /// navigation and the corresponding NavigationStarting event will fire + /// sometime after this Navigate call completes. + /// + /// \snippet ControlComponent.cpp Navigate + HRESULT Navigate([in] LPCWSTR uri); + + /// Initiates a navigation to htmlContent as source HTML of a new + /// document. The htmlContent parameter may not be larger than 2 MB of + /// characters. The origin of the new page will be about:blank. + /// + /// \snippet SettingsComponent.cpp NavigateToString + HRESULT NavigateToString([in] LPCWSTR htmlContent); + + /// Add an event handler for the NavigationStarting event. + /// NavigationStarting fires when the WebView main frame is + /// requesting permission to navigate to a different URI. This will fire for + /// redirects as well. + /// + /// \snippet SettingsComponent.cpp NavigationStarting + HRESULT add_NavigationStarting( + [in] ICoreWebView2NavigationStartingEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_NavigationStarting. + HRESULT remove_NavigationStarting( + [in] EventRegistrationToken token); + + /// Add an event handler for the ContentLoading event. + /// ContentLoading fires before any content is loaded, including scripts added with + /// AddScriptToExecuteOnDocumentCreated + /// ContentLoading will not fire if a same page navigation occurs + /// (such as through fragment navigations or history.pushState navigations). + /// This follows the NavigationStarting and SourceChanged events and + /// precedes the HistoryChanged and NavigationCompleted events. + HRESULT add_ContentLoading( + [in] ICoreWebView2ContentLoadingEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_ContentLoading. + HRESULT remove_ContentLoading( + [in] EventRegistrationToken token); + + /// SourceChanged fires when the Source property changes. + /// SourceChanged fires for navigating to a different site or fragment navigations. + /// It will not fires for other types of navigations such as page reloads or + /// history.pushState with the same URL as the current page. + /// SourceChanged fires before ContentLoading for navigation to a new document. + /// Add an event handler for the SourceChanged event. + /// \snippet ControlComponent.cpp SourceChanged + HRESULT add_SourceChanged( + [in] ICoreWebView2SourceChangedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_SourceChanged. + HRESULT remove_SourceChanged( + [in] EventRegistrationToken token); + + /// HistoryChange listen to the change of navigation history for the top level + /// document. Use HistoryChange to check if CanGoBack/CanGoForward value + /// has changed. HistoryChanged also fires for using GoBack/GoForward. + /// HistoryChanged fires after SourceChanged and ContentLoading. + /// Add an event handler for the HistoryChanged event. + /// \snippet ControlComponent.cpp HistoryChanged + HRESULT add_HistoryChanged( + [in] ICoreWebView2HistoryChangedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_HistoryChanged. + HRESULT remove_HistoryChanged( + [in] EventRegistrationToken token); + + /// Add an event handler for the NavigationCompleted event. + /// NavigationCompleted event fires when the WebView has completely loaded + /// (body.onload has fired) or loading stopped with error. + /// + /// \snippet ControlComponent.cpp NavigationCompleted + HRESULT add_NavigationCompleted( + [in] ICoreWebView2NavigationCompletedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_NavigationCompleted. + HRESULT remove_NavigationCompleted( + [in] EventRegistrationToken token); + + /// Add an event handler for the FrameNavigationStarting event. + /// FrameNavigationStarting fires when a child frame in the WebView + /// requesting permission to navigate to a different URI. This will fire for + /// redirects as well. + /// + /// \snippet SettingsComponent.cpp FrameNavigationStarting + HRESULT add_FrameNavigationStarting( + [in] ICoreWebView2NavigationStartingEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_FrameNavigationStarting. + HRESULT remove_FrameNavigationStarting( + [in] EventRegistrationToken token); + + /// Add an event handler for the FrameNavigationCompleted event. + /// FrameNavigationCompleted event fires when a child frame has completely + /// loaded (body.onload has fired) or loading stopped with error. + /// + /// \snippet ControlCompnent.cpp FrameNavigationCompleted + HRESULT add_FrameNavigationCompleted( + [in] ICoreWebView2NavigationCompletedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_FrameNavigationCompleted. + HRESULT remove_FrameNavigationCompleted( + [in] EventRegistrationToken token); + + /// Add an event handler for the ScriptDialogOpening event. + /// The event fires when a JavaScript dialog (alert, confirm, or prompt) will + /// show for the webview. This event only fires if the + /// ICoreWebView2Settings::AreDefaultScriptDialogsEnabled property is set to + /// false. The ScriptDialogOpening event can be used to suppress dialogs or + /// replace default dialogs with custom dialogs. + /// + /// \snippet SettingsComponent.cpp ScriptDialogOpening + HRESULT add_ScriptDialogOpening( + [in] ICoreWebView2ScriptDialogOpeningEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_ScriptDialogOpening. + HRESULT remove_ScriptDialogOpening( + [in] EventRegistrationToken token); + + /// Add an event handler for the PermissionRequested event. + /// Fires when content in a WebView requests permission to access some + /// privileged resources. + /// + /// \snippet SettingsComponent.cpp PermissionRequested + HRESULT add_PermissionRequested( + [in] ICoreWebView2PermissionRequestedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_PermissionRequested. + HRESULT remove_PermissionRequested( + [in] EventRegistrationToken token); + + /// Add an event handler for the ProcessFailed event. + /// Fires when a WebView process terminated unexpectedly or + /// become unresponsive. + /// + /// \snippet ProcessComponent.cpp ProcessFailed + HRESULT add_ProcessFailed( + [in] ICoreWebView2ProcessFailedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_ProcessFailed. + HRESULT remove_ProcessFailed( + [in] EventRegistrationToken token); + + /// Add the provided JavaScript to a list of scripts + /// that should be executed after the global object has been created, but + /// before the HTML document has been parsed and before any other script + /// included by the HTML document is executed. The + /// injected script will apply to all future top level document and child + /// frame navigations until removed with RemoveScriptToExecuteOnDocumentCreated. + /// This is applied asynchronously and you must wait for the completion + /// handler to run before you can be sure that the script is ready to + /// execute on future navigations. + /// + /// Note that if an HTML document has sandboxing of some kind via [sandbox](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attr-sandbox) + /// properties or the [Content-Security-Policy HTTP header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy) + /// this will affect the script run here. So, for example, if the + /// 'allow-modals' keyword is not set then calls to the `alert` function will + /// be ignored. + /// + /// \snippet ScriptComponent.cpp AddScriptToExecuteOnDocumentCreated + HRESULT AddScriptToExecuteOnDocumentCreated( + [in] LPCWSTR javaScript, + [in] ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler* handler); + + /// Remove the corresponding JavaScript added via AddScriptToExecuteOnDocumentCreated. + HRESULT RemoveScriptToExecuteOnDocumentCreated([in] LPCWSTR id); + + /// Execute JavaScript code from the javascript parameter in the + /// current top level document rendered in the WebView. This will execute + /// asynchronously and when complete, if a handler is provided in the + /// ExecuteScriptCompletedHandler parameter, its Invoke method will be + /// called with the result of evaluating the provided JavaScript. The result + /// value is a JSON encoded string. + /// If the result is undefined, contains a reference cycle, or otherwise + /// cannot be encoded into JSON, the JSON null value will be returned as the + /// string 'null'. Note that a function that has no explicit return value + /// returns undefined. + /// If the executed script throws an unhandled exception, then the result is + /// also 'null'. + /// This method is applied asynchronously. If the call is made while the + /// webview is on one document, and a navigation occurs after the call is + /// made but before the JavaScript is executed, then the script will not be + /// executed and the handler will be called with E_FAIL for its errorCode + /// parameter. + /// ExecuteScript will work even if IsScriptEnabled is set to FALSE. + /// + /// \snippet ScriptComponent.cpp ExecuteScript + HRESULT ExecuteScript( + [in] LPCWSTR javaScript, + [in] ICoreWebView2ExecuteScriptCompletedHandler* handler); + + /// Capture an image of what WebView is displaying. Specify the + /// format of the image with the imageFormat parameter. + /// The resulting image binary data is written to the provided imageStream + /// parameter. When CapturePreview finishes writing to the stream, the Invoke + /// method on the provided handler parameter is called. + /// + /// \snippet FileComponent.cpp CapturePreview + HRESULT CapturePreview( + [in] COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + [in] IStream* imageStream, + [in] ICoreWebView2CapturePreviewCompletedHandler* handler); + + /// Reload the current page. This is similar to navigating to the URI of + /// current top level document including all navigation events firing and + /// respecting any entries in the HTTP cache. But, the back/forward history + /// will not be modified. + HRESULT Reload(); + + /// Post the specified webMessage to the top level document in this WebView. + /// The top level document's window.chrome.webview's message event fires. + /// JavaScript in that document may subscribe and unsubscribe to the event + /// via the following: + /// ``` + /// window.chrome.webview.addEventListener('message', handler) + /// window.chrome.webview.removeEventListener('message', handler) + /// ``` + /// The event args is an instance of `MessageEvent`. + /// The ICoreWebView2Settings::IsWebMessageEnabled setting must be true or this method + /// will fail with E_INVALIDARG. + /// The event arg's data property is the webMessage string parameter parsed + /// as a JSON string into a JavaScript object. + /// The event arg's source property is a reference to the + /// `window.chrome.webview` object. + /// See SetWebMessageReceivedEventHandler for information on sending messages + /// from the HTML document in the webview to the host. + /// This message is sent asynchronously. If a navigation occurs before the + /// message is posted to the page, then the message will not be sent. + /// + /// \snippet ScenarioWebMessage.cpp WebMessageReceived + HRESULT PostWebMessageAsJson([in] LPCWSTR webMessageAsJson); + + /// This is a helper for posting a message that is a simple string + /// rather than a JSON string representation of a JavaScript object. This + /// behaves in exactly the same manner as PostWebMessageAsJson but the + /// `window.chrome.webview` message event arg's data property will be a string + /// with the same value as webMessageAsString. Use this instead of + /// PostWebMessageAsJson if you want to communicate via simple strings rather + /// than JSON objects. + HRESULT PostWebMessageAsString([in] LPCWSTR webMessageAsString); + + /// This event fires when the IsWebMessageEnabled setting is set and the top + /// level document of the webview calls `window.chrome.webview.postMessage`. + /// The postMessage function is `void postMessage(object)` where + /// object is any object supported by JSON conversion. + /// + /// \snippet ScenarioWebMessage.html chromeWebView + /// + /// When postMessage is called, the ICoreWebView2WebMessageReceivedEventHandler set via + /// this SetWebMessageReceivedEventHandler method will be invoked with the + /// postMessage's object parameter converted to a JSON string. + /// + /// \snippet ScenarioWebMessage.cpp WebMessageReceived + HRESULT add_WebMessageReceived( + [in] ICoreWebView2WebMessageReceivedEventHandler* handler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_WebMessageReceived. + HRESULT remove_WebMessageReceived( + [in] EventRegistrationToken token); + + /// Call an asynchronous DevToolsProtocol method. See the + /// [DevTools Protocol Viewer](https://aka.ms/DevToolsProtocolDocs) + /// for a list and description of available methods. + /// The methodName parameter is the full name of the method in the format + /// `{domain}.{method}`. + /// The parametersAsJson parameter is a JSON formatted string containing + /// the parameters for the corresponding method. + /// The handler's Invoke method will be called when the method asynchronously + /// completes. Invoke will be called with the method's return object as a + /// JSON string. + /// + /// \snippet ScriptComponent.cpp CallDevToolsProtocolMethod + HRESULT CallDevToolsProtocolMethod( + [in] LPCWSTR methodName, + [in] LPCWSTR parametersAsJson, + [in] ICoreWebView2CallDevToolsProtocolMethodCompletedHandler* handler); + + /// The process id of the browser process that hosts the WebView. + [propget] HRESULT BrowserProcessId([out, retval] UINT32* value); + + /// Returns true if the webview can navigate to a previous page in the navigation history. + /// The HistoryChanged event will fire if CanGoBack changes value. + [propget] HRESULT CanGoBack([out, retval] BOOL* canGoBack); + /// Returns true if the webview can navigate to a next page in the navigation history. + /// The HistoryChanged event will fire if CanGoForward changes value. + [propget] HRESULT CanGoForward([out, retval] BOOL* canGoForward); + /// Navigates the WebView to the previous page in the navigation history. + HRESULT GoBack(); + /// Navigates the WebView to the next page in the navigation history. + HRESULT GoForward(); + + /// Get a DevTools Protocol event receiver that allows you to subscribe to + /// a DevTools Protocol event. + /// The eventName parameter is the full name of the event in the format + /// `{domain}.{event}`. + /// See the [DevTools Protocol Viewer](https://aka.ms/DevToolsProtocolDocs) + /// for a list of DevTools Protocol events description, and event args. + /// + /// \snippet ScriptComponent.cpp DevToolsProtocolEventReceived + HRESULT GetDevToolsProtocolEventReceiver( + [in] LPCWSTR eventName, + [out, retval] ICoreWebView2DevToolsProtocolEventReceiver** receiver); + + /// Stop all navigations and pending resource fetches. Does not stop + /// scripts. + HRESULT Stop(); + + /// Add an event handler for the NewWindowRequested event. + /// Fires when content inside the WebView requested to open a new window, + /// such as through window.open. The app can pass a target + /// webview that will be considered the opened window. + /// + /// \snippet AppWindow.cpp NewWindowRequested + HRESULT add_NewWindowRequested( + [in] ICoreWebView2NewWindowRequestedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_NewWindowRequested. + HRESULT remove_NewWindowRequested( + [in] EventRegistrationToken token); + + /// Add an event handler for the DocumentTitleChanged event. + /// The event fires when the DocumentTitle property of the WebView changes + /// and may fire before or after the NavigationCompleted event. + /// + /// \snippet FileComponent.cpp DocumentTitleChanged + HRESULT add_DocumentTitleChanged( + [in] ICoreWebView2DocumentTitleChangedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_DocumentTitleChanged. + HRESULT remove_DocumentTitleChanged( + [in] EventRegistrationToken token); + + /// The title for the current top level document. + /// If the document has no explicit title or is otherwise empty, + /// a default that may or may not match the URI of the document will be used. + [propget] HRESULT DocumentTitle([out, retval] LPWSTR* title); + + /// Add the provided host object to script running in the WebView with the + /// specified name. + /// Host objects are exposed as host object proxies via + /// `window.chrome.webview.hostObjects.`. + /// Host object proxies are promises and will resolve to an object + /// representing the host object. + /// The promise is rejected if the app has not added an object with the name. + /// When JavaScript code access a property or method of the object, a promise + /// is return, which will resolve to the value returned from the host for the + /// property or method, or rejected in case of error such as there is no such + /// property or method on the object or parameters are invalid. + /// For example, when the application code does the following: + /// ``` + /// VARIANT object; + /// object.vt = VT_DISPATCH; + /// object.pdispVal = appObject; + /// webview->AddHostObjectToScript(L"host_object", &host); + /// ``` + /// JavaScript code in the WebView will be able to access appObject as + /// following and then access attributes and methods of appObject: + /// ``` + /// let app_object = await window.chrome.webview.hostObjects.host_object; + /// let attr1 = await app_object.attr1; + /// let result = await app_object.method1(parameters); + /// ``` + /// Note that while simple types, IDispatch and array are supported, generic + /// IUnknown, VT_DECIMAL, or VT_RECORD variant is not supported. + /// Remote JavaScript objects like callback functions are represented as + /// an VT_DISPATCH VARIANT with the object implementing IDispatch. The + /// JavaScript callback method may be invoked using DISPID_VALUE for the + /// DISPID. + /// Nested arrays are supported up to a depth of 3. + /// Arrays of by reference types are not supported. + /// VT_EMPTY and VT_NULL are mapped into JavaScript as null. In JavaScript + /// null and undefined are mapped to VT_EMPTY. + /// + /// Additionally, all host objects are exposed as + /// `window.chrome.webview.hostObjects.sync.`. Here the host + /// objects are exposed as synchronous host object proxies. These are not + /// promises and calls to functions or property access synchronously block + /// running script waiting to communicate cross process for the host code to + /// run. Accordingly this can result in reliability issues and it is + /// recommended that you use the promise based asynchronous + /// `window.chrome.webview.hostObjects.` API described above. + /// + /// Synchronous host object proxies and asynchronous host object proxies + /// can both proxy the same host object. Remote changes made by one proxy + /// will be reflected in any other proxy of that same host object whether + /// the other proxies and synchronous or asynchronous. + /// + /// While JavaScript is blocked on a synchronous call to native code, that + /// native code is unable to call back to JavaScript. Attempts to do so will + /// fail with HRESULT_FROM_WIN32(ERROR_POSSIBLE_DEADLOCK). + /// + /// Host object proxies are JavaScript Proxy objects that intercept all + /// property get, property set, and method invocations. Properties or methods + /// that are a part of the Function or Object prototype are run locally. + /// Additionally any property or method in the array + /// `chrome.webview.hostObjects.options.forceLocalProperties` will also be + /// run locally. This defaults to including optional methods that have + /// meaning in JavaScript like `toJSON` and `Symbol.toPrimitive`. You can add + /// more to this array as required. + /// + /// There's a method `chrome.webview.hostObjects.cleanupSome` that will best + /// effort garbage collect host object proxies. + /// + /// Host object proxies additionally have the following methods which run + /// locally: + /// * applyHostFunction, getHostProperty, setHostProperty: Perform a + /// method invocation, property get, or property set on the host object. + /// You can use these to explicitly force a method or property to run + /// remotely if there is a conflicting local method or property. For + /// instance, `proxy.toString()` will run the local toString method on the + /// proxy object. But ``proxy.applyHostFunction('toString')`` runs + /// `toString` on the host proxied object instead. + /// * getLocalProperty, setLocalProperty: Perform property get, or property + /// set locally. You can use these methods to force getting or setting a + /// property on the host object proxy itself rather than on the host + /// object it represents. For instance, `proxy.unknownProperty` will get the + /// property named `unknownProperty` from the host proxied object. But + /// ``proxy.getLocalProperty('unknownProperty')`` will get the value of the property + /// `unknownProperty` on the proxy object itself. + /// * sync: Asynchronous host object proxies expose a sync method which + /// returns a promise for a synchronous host object proxy for the same + /// host object. For example, + /// `chrome.webview.hostObjects.sample.methodCall()` returns an + /// asynchronous host object proxy. You can use the `sync` method to + /// obtain a synchronous host object proxy instead: + /// `const syncProxy = await chrome.webview.hostObjects.sample.methodCall().sync()` + /// * async: Synchronous host object proxies expose an async method which + /// blocks and returns an asynchronous host object proxy for the same + /// host object. For example, `chrome.webview.hostObjects.sync.sample.methodCall()` returns a + /// synchronous host object proxy. Calling the `async` method on this blocks + /// and then returns an asynchronous host object proxy for the same host object: + /// `const asyncProxy = chrome.webview.hostObjects.sync.sample.methodCall().async()` + /// * then: Asynchronous host object proxies have a then method. This + /// allows them to be awaitable. `then` will return a promise that resolves + /// with a representation of the host object. If the proxy represents a + /// JavaScript literal then a copy of that is returned locally. If + /// the proxy represents a function then a non-awaitable proxy is returned. + /// If the proxy represents a JavaScript object with a mix of literal + /// properties and function properties, then the a copy of the object is + /// returned with some properties as host object proxies. + /// + /// All other property and method invocations (other than the above Remote + /// object proxy methods, forceLocalProperties list, and properties on + /// Function and Object prototypes) are run remotely. Asynchronous host + /// object proxies return a promise representing asynchronous completion of + /// remotely invoking the method, or getting the property. + /// The promise resolves after the remote operations complete and + /// the promises resolve to the resulting value of the operation. + /// Synchronous host object proxies work similarly but block JavaScript + /// execution and wait for the remote operation to complete. + /// + /// Setting a property on an asynchronous host object proxy works slightly + /// differently. The set returns immediately and the return value is the value + /// that will be set. This is a requirement of the JavaScript Proxy object. + /// If you need to asynchronously wait for the property set to complete, use + /// the setHostProperty method which returns a promise as described above. + /// Synchronous object property set property synchronously blocks until the + /// property is set. + /// + /// For example, suppose you have a COM object with the following interface + /// + /// \snippet HostObjectSample.idl AddHostObjectInterface + /// + /// We can add an instance of this interface into our JavaScript with + /// `AddHostObjectToScript`. In this case we name it `sample`: + /// + /// \snippet ScenarioAddRemoteObject.cpp AddHostObjectToScript + /// + /// Then in the HTML document we can use this COM object via `chrome.webview.hostObjects.sample`: + /// + /// \snippet ScenarioAddRemoteObject.html HostObjectUsage + HRESULT AddHostObjectToScript([in] LPCWSTR name, [in] VARIANT* object); + + /// Remove the host object specified by the name so that it is no longer + /// accessible from JavaScript code in the WebView. + /// While new access attempts will be denied, if the object is already + /// obtained by JavaScript code in the WebView, the JavaScript code will + /// continue to have access to that object. + /// Calling this method for a name that is already removed or never added will + /// fail. + HRESULT RemoveHostObjectFromScript([in] LPCWSTR name); + + /// Opens the DevTools window for the current document in the WebView. + /// Does nothing if called when the DevTools window is already open + HRESULT OpenDevToolsWindow(); + + /// Notifies when the ContainsFullScreenElement property changes. This means + /// that an HTML element inside the WebView is entering fullscreen to the size + /// of the WebView or leaving fullscreen. + /// This event is useful when, for example, a video element requests to go + /// fullscreen. The listener of ContainsFullScreenElementChanged can then + /// resize the WebView in response. + /// + /// \snippet AppWindow.cpp ContainsFullScreenElementChanged + HRESULT add_ContainsFullScreenElementChanged( + [in] ICoreWebView2ContainsFullScreenElementChangedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with the corresponding add_ + /// event method. + HRESULT remove_ContainsFullScreenElementChanged( + [in] EventRegistrationToken token); + + /// Indicates if the WebView contains a fullscreen HTML element. + [propget] HRESULT ContainsFullScreenElement( + [out, retval] BOOL* containsFullScreenElement); + + /// Add an event handler for the WebResourceRequested event. Fires when the + /// WebView is performing an HTTP request to a matching URL and resource context + /// filter that was added with AddWebResourceRequestedFilter. At least one + /// filter must be added for the event to fire. + /// + /// \snippet SettingsComponent.cpp WebResourceRequested + HRESULT add_WebResourceRequested( + [in] ICoreWebView2WebResourceRequestedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_WebResourceRequested. + HRESULT remove_WebResourceRequested( + [in] EventRegistrationToken token); + + /// Adds a URI and resource context filter to the WebResourceRequested event. + /// URI parameter can be a wildcard string ('': zero or more, '?': exactly one). + /// nullptr is equivalent to L"". + /// See COREWEBVIEW2_WEB_RESOURCE_CONTEXT enum for description of resource context filters. + HRESULT AddWebResourceRequestedFilter( + [in] LPCWSTR const uri, + [in] COREWEBVIEW2_WEB_RESOURCE_CONTEXT const resourceContext); + /// Removes a matching WebResource filter that was previously added for the + /// WebResourceRequested event. If the same filter was added multiple times, then it + /// will need to be removed as many times as it was added for the removal to be + /// effective. Returns E_INVALIDARG for a filter that was never added. + HRESULT RemoveWebResourceRequestedFilter( + [in] LPCWSTR const uri, + [in] COREWEBVIEW2_WEB_RESOURCE_CONTEXT const resourceContext); + + /// Add an event handler for the WindowCloseRequested event. + /// Fires when content inside the WebView requested to close the window, + /// such as after window.close is called. The app should close the WebView + /// and related app window if that makes sense to the app. + /// + /// \snippet AppWindow.cpp WindowCloseRequested + HRESULT add_WindowCloseRequested( + [in] ICoreWebView2WindowCloseRequestedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_WindowCloseRequested. + HRESULT remove_WindowCloseRequested( + [in] EventRegistrationToken token); +} + +/// This interface is the owner of the CoreWebView2 object, and provides support +/// for resizing, showing and hiding, focusing, and other functionality related +/// to windowing and composition. The CoreWebView2Controller owns the CoreWebView2, +/// and if all references to the CoreWebView2Controller go away, the WebView will +/// be closed. +[uuid(7CCC5C7F-8351-4572-9077-9C1C80913835), object, pointer_default(unique)] +interface ICoreWebView2Controller : IUnknown { + /// The IsVisible property determines whether to show or hide the webview. + /// If IsVisible is set to false, the webview will be transparent and will + /// not be rendered. However, this will not affect the window containing + /// the webview (the HWND parameter that was passed to CreateCoreWebView2Controller). + /// If you want that window to disappear too, call ShowWindow on it directly + /// in addition to modifying the IsVisible property. + /// WebView as a child window won't get window messages when the top window + /// is minimized or restored. For performance reason, developer should set + /// IsVisible property of the WebView to false when the app window is + /// minimized and back to true when app window is restored. App window can do + /// this by handling SC_MINIMIZE and SC_RESTORE command upon receiving + /// WM_SYSCOMMAND message. + /// + /// \snippet ViewComponent.cpp ToggleIsVisible + [propget] HRESULT IsVisible([out, retval] BOOL* isVisible); + /// Set the IsVisible property. + /// + /// \snippet ViewComponent.cpp ToggleIsVisibleOnMinimize + [propput] HRESULT IsVisible([in] BOOL isVisible); + + /// The webview bounds. + /// Bounds are relative to the parent HWND. The app has two ways it can + /// position a WebView: + /// 1. Create a child HWND that is the WebView parent HWND. Position this + /// window where the WebView should be. In this case, use (0, 0) for the + /// WebView's Bound's top left corner (the offset). + /// 2. Use the app's top most window as the WebView parent HWND. Set the + /// WebView's Bound's top left corner so that the WebView is positioned + /// correctly in the app. + /// The Bound's values are in the host's coordinate space. + [propget] HRESULT Bounds([out, retval] RECT* bounds); + /// Set the Bounds property. + /// + /// \snippet ViewComponent.cpp ResizeWebView + [propput] HRESULT Bounds([in] RECT bounds); + + /// The zoom factor for the WebView. + /// Note that changing zoom factor could cause `window.innerWidth/innerHeight` + /// and page layout to change. + /// A zoom factor that is applied by the host by calling ZoomFactor + /// becomes the new default zoom for the WebView. This zoom factor applies + /// across navigations and is the zoom factor WebView is returned to when the + /// user presses ctrl+0. When the zoom factor is changed by the user + /// (resulting in the app receiving ZoomFactorChanged), that zoom applies + /// only for the current page. Any user applied zoom is only for the current + /// page and is reset on a navigation. + /// Specifying a zoomFactor less than or equal to 0 is not allowed. + /// WebView also has an internal supported zoom factor range. When a specified + /// zoom factor is out of that range, it will be normalized to be within the + /// range, and a ZoomFactorChanged event will be fired for the real + /// applied zoom factor. When this range normalization happens, the + /// ZoomFactor property will report the zoom factor specified during the + /// previous modification of the ZoomFactor property until the + /// ZoomFactorChanged event is received after webview applies the normalized + /// zoom factor. + [propget] HRESULT ZoomFactor([out, retval] double* zoomFactor); + /// Set the ZoomFactor property. + [propput] HRESULT ZoomFactor([in] double zoomFactor); + + /// Add an event handler for the ZoomFactorChanged event. + /// The event fires when the ZoomFactor property of the WebView changes. + /// The event could fire because the caller modified the ZoomFactor property, + /// or due to the user manually modifying the zoom. When it is modified by the + /// caller via the ZoomFactor property, the internal zoom factor is updated + /// immediately and there will be no ZoomFactorChanged event. + /// WebView associates the last used zoom factor for each site. Therefore, it + /// is possible for the zoom factor to change when navigating to a different + /// page. When the zoom factor changes due to this, the ZoomFactorChanged + /// event fires right after the ContentLoading event. + /// + /// \snippet ViewComponent.cpp ZoomFactorChanged + HRESULT add_ZoomFactorChanged( + [in] ICoreWebView2ZoomFactorChangedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_ZoomFactorChanged. + HRESULT remove_ZoomFactorChanged( + [in] EventRegistrationToken token); + + /// Update Bounds and ZoomFactor properties at the same time. This operation + /// is atomic from the host's perspecive. After returning from this function, + /// the Bounds and ZoomFactor properties will have both been updated if the + /// function is successful, or neither will be updated if the function fails. + /// If Bounds and ZoomFactor are both updated by the same scale (i.e. Bounds + /// and ZoomFactor are both doubled), then the page will not see a change in + /// window.innerWidth/innerHeight and the WebView will render the content at + /// the new size and zoom without intermediate renderings. + /// This function can also be used to update just one of ZoomFactor or Bounds + /// by passing in the new value for one and the current value for the other. + /// + /// \snippet ViewComponent.cpp SetBoundsAndZoomFactor + HRESULT SetBoundsAndZoomFactor([in] RECT bounds, [in] double zoomFactor); + + /// Move focus into WebView. WebView will get focus and focus will be set to + /// correspondent element in the page hosted in the WebView. + /// For Programmatic reason, focus is set to previously focused element or + /// the default element if there is no previously focused element. + /// For Next reason, focus is set to the first element. + /// For Previous reason, focus is set to the last element. + /// WebView can also got focus through user interaction like clicking into + /// WebView or Tab into it. + /// For tabbing, the app can call MoveFocus with Next or Previous to align + /// with tab and shift+tab respectively when it decides the WebView is the + /// next tabbable element. Or, the app can call IsDialogMessage as part of + /// its message loop to allow the platform to auto handle tabbing. The + /// platform will rotate through all windows with WS_TABSTOP. When the + /// WebView gets focus from IsDialogMessage, it will internally put the focus + /// on the first or last element for tab and shift+tab respectively. + /// + /// \snippet App.cpp MoveFocus0 + /// + /// \snippet ControlComponent.cpp MoveFocus1 + /// + /// \snippet ControlComponent.cpp MoveFocus2 + HRESULT MoveFocus([in] COREWEBVIEW2_MOVE_FOCUS_REASON reason); + + /// Add an event handler for the MoveFocusRequested event. + /// MoveFocusRequested fires when user tries to tab out of the WebView. + /// The WebView's focus has not changed when this event is fired. + /// + /// \snippet ControlComponent.cpp MoveFocusRequested + HRESULT add_MoveFocusRequested( + [in] ICoreWebView2MoveFocusRequestedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_MoveFocusRequested. + HRESULT remove_MoveFocusRequested( + [in] EventRegistrationToken token); + + /// Add an event handler for the GotFocus event. + /// GotFocus fires when WebView got focus. + HRESULT add_GotFocus( + [in] ICoreWebView2FocusChangedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_GotFocus. + HRESULT remove_GotFocus( + [in] EventRegistrationToken token); + + /// Add an event handler for the LostFocus event. + /// LostFocus fires when WebView lost focus. + /// In the case where MoveFocusRequested event is fired, the focus is still + /// on WebView when MoveFocusRequested event fires. Lost focus only fires + /// afterwards when app's code or default action of MoveFocusRequested event + /// set focus away from WebView. + HRESULT add_LostFocus( + [in] ICoreWebView2FocusChangedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_LostFocus. + HRESULT remove_LostFocus( + [in] EventRegistrationToken token); + + /// Add an event handler for the AcceleratorKeyPressed event. + /// AcceleratorKeyPressed fires when an accelerator key or key combo is + /// pressed or released while the WebView is focused. A key is considered an + /// accelerator if either: + /// 1. Ctrl or Alt is currently being held, or + /// 2. the pressed key does not map to a character. + /// A few specific keys are never considered accelerators, such as Shift. + /// The Escape key is always considered an accelerator. + /// + /// Autorepeated key events caused by holding the key down will also fire this + /// event. You can filter these out by checking the event args' + /// KeyEventLParam or PhysicalKeyStatus. + /// + /// In windowed mode, this event handler is called synchronously. Until you + /// call Handle() on the event args or the event handler returns, the browser + /// process will be blocked and outgoing cross-process COM calls will fail + /// with RPC_E_CANTCALLOUT_ININPUTSYNCCALL. All CoreWebView2 API methods will + /// work, however. + /// + /// In windowless mode, the event handler is called asynchronously. Further + /// input will not reach the browser until the event handler returns or + /// Handle() is called, but the browser process itself will not be blocked, + /// and outgoing COM calls will work normally. + /// + /// It is recommended to call Handle(TRUE) as early as you can know that you want + /// to handle the accelerator key. + /// + /// \snippet ControlComponent.cpp AcceleratorKeyPressed + HRESULT add_AcceleratorKeyPressed( + [in] ICoreWebView2AcceleratorKeyPressedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_AcceleratorKeyPressed. + HRESULT remove_AcceleratorKeyPressed( + [in] EventRegistrationToken token); + + /// The parent window provided by the app that this WebView is using to + /// render content. This API initially returns the window passed into + /// CreateCoreWebView2Controller. + [propget] HRESULT ParentWindow([out, retval] HWND* topLevelWindow); + + /// Set the parent window for the WebView. This will cause the WebView to + /// reparent its window to the newly provided window. + [propput] HRESULT ParentWindow([in] HWND topLevelWindow); + + /// This is a notification separate from Bounds that tells WebView its + /// parent (or any ancestor) HWND moved. This is needed for accessibility and + /// certain dialogs in WebView to work correctly. + /// \snippet ViewComponent.cpp NotifyParentWindowPositionChanged + HRESULT NotifyParentWindowPositionChanged(); + + /// Closes the WebView and cleans up the underlying browser instance. + /// Cleaning up the browser instace will release the resources powering the WebView. + /// The browser instance will be shut down if there are no other WebViews using it. + /// + /// After calling Close, all method calls will fail and event handlers + /// will stop firing. Specifically, the WebView will release its references + /// to its event handlers when Close is called. + /// + /// Close is implicitly called when the CoreWebView2Controller loses its final + /// reference and is destructed. But it is best practice to explicitly call + /// Close to avoid any accidental cycle of references between the WebView + /// and the app code. Specifically, if you capture a reference to the WebView + /// in an event handler you will create a reference cycle between the WebView + /// and the event handler. Calling Close will break this cycle by releasing + /// all event handlers. But to avoid this situation it is best practice both + /// to explicitly call Close on the WebView and to not capture a reference to + /// the WebView to ensure the WebView can be cleaned up correctly. + /// + /// \snippet AppWindow.cpp Close + HRESULT Close(); + + /// Gets the CoreWebView2 associated with this CoreWebView2Controller. + [propget] HRESULT CoreWebView2([out, retval] ICoreWebView2** coreWebView2); +} + +/// This interface is used to complete deferrals on event args that +/// support getting deferrals via their GetDeferral method. +[uuid(A7ED8BF0-3EC9-4E39-8427-3D6F157BD285), object, pointer_default(unique)] +interface ICoreWebView2Deferral : IUnknown { + /// Completes the associated deferred event. Complete should only be + /// called once for each deferral taken. + HRESULT Complete(); +} + +/// Defines properties that enable, disable, or modify WebView +/// features. Setting changes made after NavigationStarting event will not +/// apply until the next top level navigation. +[uuid(203FBA37-6850-4DCC-A25A-58A351AC625D), object, pointer_default(unique)] +interface ICoreWebView2Settings : IUnknown { + /// Controls if JavaScript execution is enabled in all future + /// navigations in the WebView. This only affects scripts in the document; + /// scripts injected with ExecuteScript will run even if script is disabled. + /// It is true by default. + /// + /// \snippet SettingsComponent.cpp IsScriptEnabled + [propget] HRESULT IsScriptEnabled( + [out, retval] BOOL* isScriptEnabled); + /// Set the IsScriptEnabled property. + [propput] HRESULT IsScriptEnabled([in] BOOL isScriptEnabled); + + /// The IsWebMessageEnabled property is used when loading a new + /// HTML document. If set to true, communication from the host to the + /// webview's top level HTML document is allowed via PostWebMessageAsJson, + /// PostWebMessageAsString, and window.chrome.webview's message event + /// (see PostWebMessageAsJson documentation for details). + /// Communication from the webview's top level HTML document + /// to the host is allowed via window.chrome.webview's postMessage function + /// and the SetWebMessageReceivedEventHandler method (see the + /// SetWebMessageReceivedEventHandler documentation for details). + /// If set to false, then communication is disallowed. + /// PostWebMessageAsJson and PostWebMessageAsString will + /// fail with E_ACCESSDENIED and window.chrome.webview.postMessage will fail + /// by throwing an instance of an Error object. + /// It is true by default. + /// + /// \snippet ScenarioWebMessage.cpp IsWebMessageEnabled + [propget] HRESULT IsWebMessageEnabled( + [out, retval] BOOL* isWebMessageEnabled); + /// Set the IsWebMessageEnabled property. + [propput] HRESULT IsWebMessageEnabled([in] BOOL isWebMessageEnabled); + + /// AreDefaultScriptDialogsEnabled is used when loading a new + /// HTML document. If set to false, then WebView won't render the default + /// javascript dialog box (Specifically those shown by the javascript alert, + /// confirm, prompt functions and beforeunload event). Instead, if an event + /// handler is set by SetScriptDialogOpeningEventHandler, WebView will send an + /// event that will contain all of the information for the dialog and allow + /// the host app to show its own custom UI. + [propget] HRESULT AreDefaultScriptDialogsEnabled( + [out, retval] BOOL* areDefaultScriptDialogsEnabled); + /// Set the AreDefaultScriptDialogsEnabled property. + [propput] HRESULT AreDefaultScriptDialogsEnabled( + [in] BOOL areDefaultScriptDialogsEnabled); + + /// IsStatusBarEnabled controls whether the status bar will be displayed. The + /// status bar is usually displayed in the lower left of the WebView and shows + /// things such as the URI of a link when the user hovers over it and other + /// information. It is true by default. + [propget] HRESULT IsStatusBarEnabled([out, retval] BOOL* isStatusBarEnabled); + /// Set the IsStatusBarEnabled property. + [propput] HRESULT IsStatusBarEnabled([in] BOOL isStatusBarEnabled); + + /// AreDevToolsEnabled controls whether the user is able to use the context + /// menu or keyboard shortcuts to open the DevTools window. + /// It is true by default. + [propget] HRESULT AreDevToolsEnabled([out, retval] BOOL* areDevToolsEnabled); + /// Set the AreDevToolsEnabled property. + [propput] HRESULT AreDevToolsEnabled([in] BOOL areDevToolsEnabled); + + /// The AreDefaultContextMenusEnabled property is used to prevent + /// default context menus from being shown to user in webview. Defaults to TRUE. + /// + /// \snippet SettingsComponent.cpp DisableContextMenu + [propget] HRESULT AreDefaultContextMenusEnabled([out, retval] BOOL* enabled); + /// Set the AreDefaultContextMenusEnabled property + [propput] HRESULT AreDefaultContextMenusEnabled([in] BOOL enabled); + + /// The AreRemoteObjectsAllowed property is used to control whether + /// host objects are accessible from the page in webview. Defaults to TRUE. + /// + /// \snippet SettingsComponent.cpp RemoteObjectsAccess + [propget] HRESULT AreRemoteObjectsAllowed([out, retval] BOOL* allowed); + /// Set the AreRemoteObjectsAllowed property + [propput] HRESULT AreRemoteObjectsAllowed([in] BOOL allowed); + + /// The IsZoomControlEnabled property is used to prevent the user from + /// impacting the zoom of the WebView. Defaults to TRUE. + /// When disabled, user will not be able to zoom using ctrl+/- or + /// ctrl+mouse wheel, but the zoom can be set via ZoomFactor API. + /// + /// \snippet SettingsComponent.cpp DisableZoomControl + [propget] HRESULT IsZoomControlEnabled([out, retval] BOOL* enabled); + /// Set the IsZoomControlEnabled property + [propput] HRESULT IsZoomControlEnabled([in] BOOL enabled); + + /// The IsBuiltInErrorPageEnabled property is used to disable built in error + /// page for navigation failure and render process failure. Defaults to TRUE. + /// When disabled, blank page will be shown when related error happens. + /// + /// \snippet SettingsComponent.cpp BuiltInErrorPageEnabled + [propget] HRESULT IsBuiltInErrorPageEnabled([out, retval] BOOL* enabled); + /// Set the IsBuiltInErrorPageEnabled property + [propput] HRESULT IsBuiltInErrorPageEnabled([in] BOOL enabled); +} + +/// Event args for the ProcessFailed event. +[uuid(EA45D1F4-75C0-471F-A6E9-803FBFF8FEF2), object, pointer_default(unique)] +interface ICoreWebView2ProcessFailedEventArgs : IUnknown { + /// The kind of process failure that has occurred. + [propget] HRESULT ProcessFailedKind( + [out, retval] COREWEBVIEW2_PROCESS_FAILED_KIND* processFailedKind); +} + +/// The caller implements this interface to receive ProcessFailed events. +[uuid(7D2183F9-CCA8-40F2-91A9-EAFAD32C8A9B), object, pointer_default(unique)] +interface ICoreWebView2ProcessFailedEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. + HRESULT Invoke( + [in] ICoreWebView2* sender, + [in] ICoreWebView2ProcessFailedEventArgs* args); +} + +/// The caller implements this interface to receive ZoomFactorChanged +/// events. Use the ICoreWebView2Controller.ZoomFactor property to get the +/// modified zoom factor. +[uuid(F1828246-8B98-4274-B708-ECDB6BF3843A), object, pointer_default(unique)] +interface ICoreWebView2ZoomFactorChangedEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. There are no event args and the args + /// parameter will be null. + HRESULT Invoke([in] ICoreWebView2Controller* sender, [in] IUnknown* args); +} + +/// Iterator for a collection of HTTP headers. See ICoreWebView2HttpRequestHeaders +/// and ICoreWebView2HttpResponseHeaders. +/// \snippet ScenarioWebViewEventMonitor.cpp HttpRequestHeaderIterator +[uuid(4212F3A7-0FBC-4C9C-8118-17ED6370C1B3), object, pointer_default(unique)] +interface ICoreWebView2HttpHeadersCollectionIterator : IUnknown { + /// Get the name and value of the current HTTP header of the iterator. This + /// method will fail if the last call to MoveNext set has_next to FALSE. + HRESULT GetCurrentHeader([out] LPWSTR* name, [out] LPWSTR* value); + + /// True when the iterator hasn't run out of headers. If the collection over + /// which the iterator is iterating is empty or if the iterator has gone past + /// the end of the collection then this is false. + [propget] HRESULT HasCurrentHeader([out, retval] BOOL* hasCurrent); + + /// Move the iterator to the next HTTP header in the collection. The hasNext + /// parameter will be set to FALSE if there are no more HTTP headers. After + /// this occurs the GetCurrentHeader method will fail if called. + HRESULT MoveNext([out] BOOL* hasNext); +} + +/// HTTP request headers. Used to inspect the HTTP request on +/// WebResourceRequested event and NavigationStarting event. +/// Note, you can modify the HTTP request headers from a WebResourceRequested event, +/// but not from a NavigationStarting event. +[uuid(2C1F04DF-C90E-49E4-BD25-4A659300337B), object, pointer_default(unique)] +interface ICoreWebView2HttpRequestHeaders : IUnknown { + /// Gets the header value matching the name. + HRESULT GetHeader([in] LPCWSTR name, [out, retval] LPWSTR* value); + /// Gets the header value matching the name via an iterator. + HRESULT GetHeaders([in] LPCWSTR name, [out, retval] ICoreWebView2HttpHeadersCollectionIterator** iterator); + /// Checks whether the headers contain an entry matching the header name. + HRESULT Contains([in] LPCWSTR name, [out, retval] BOOL* contains); + /// Adds or updates header that matches the name. + HRESULT SetHeader([in] LPCWSTR name, [in] LPCWSTR value); + /// Removes header that matches the name. + HRESULT RemoveHeader([in] LPCWSTR name); + /// Gets an iterator over the collection of request headers. + HRESULT GetIterator( + [out, retval] ICoreWebView2HttpHeadersCollectionIterator** iterator); +} + +/// HTTP response headers. Used to construct a WebResourceResponse for the +/// WebResourceRequested event. +[uuid(B5F6D4D5-1BFF-4869-85B8-158153017B04), object, pointer_default(unique)] +interface ICoreWebView2HttpResponseHeaders : IUnknown { + /// Appends header line with name and value. + HRESULT AppendHeader([in] LPCWSTR name, [in] LPCWSTR value); + /// Checks whether the headers contain entries matching the header name. + HRESULT Contains([in] LPCWSTR name, [out, retval] BOOL* contains); + /// Gets the first header value in the collection matching the name. + HRESULT GetHeader([in] LPCWSTR name, [out, retval] LPWSTR* value); + /// Gets the header values matching the name. + HRESULT GetHeaders([in] LPCWSTR name, [out, retval] ICoreWebView2HttpHeadersCollectionIterator** iterator); + /// Gets an iterator over the collection of entire response headers. + HRESULT GetIterator( + [out, retval] ICoreWebView2HttpHeadersCollectionIterator** iterator); +} + +/// An HTTP request used with the WebResourceRequested event. +[uuid(11B02254-B827-49F6-8974-30F6E6C55AF6), object, pointer_default(unique)] +interface ICoreWebView2WebResourceRequest : IUnknown { + /// The request URI. + [propget] HRESULT Uri([out, retval] LPWSTR* uri); + /// Set the Uri property. + [propput] HRESULT Uri([in] LPCWSTR uri); + + /// The HTTP request method. + [propget] HRESULT Method([out, retval] LPWSTR* method); + /// Set the Method property. + [propput] HRESULT Method([in] LPCWSTR method); + + /// The HTTP request message body as stream. POST data would be here. + /// If a stream is set, which will override the message body, the stream must + /// have all the content data available by the time this + /// response's WebResourceRequested event deferral is completed. Stream + /// should be agile or be created from a background STA to prevent performance + /// impact to the UI thread. Null means no content data. IStream semantics + /// apply (return S_OK to Read calls until all data is exhausted) + [propget] HRESULT Content([out, retval] IStream** content); + /// Set the Content property. + [propput] HRESULT Content([in] IStream* content); + + /// The mutable HTTP request headers + [propget] HRESULT Headers([out, retval] ICoreWebView2HttpRequestHeaders** headers); +} + +/// An HTTP response used with the WebResourceRequested event. +[uuid(5953D1FC-B08F-46DD-AFD3-66B172419CD0), object, pointer_default(unique)] +interface ICoreWebView2WebResourceResponse : IUnknown { + /// HTTP response content as stream. Stream must have all the + /// content data available by the time this response's WebResourceRequested + /// event deferral is completed. Stream should be agile or be created from + /// a background thread to prevent performance impact to the UI thread. + /// Null means no content data. IStream semantics + /// apply (return S_OK to Read calls until all data is exhausted) + [propget] HRESULT Content([out, retval] IStream** content); + /// Set the Content property. + [propput] HRESULT Content([in] IStream* content); + + /// Overridden HTTP response headers. + [propget] HRESULT Headers([out, retval] ICoreWebView2HttpResponseHeaders** headers); + + /// The HTTP response status code. + [propget] HRESULT StatusCode([out, retval] int* statusCode); + /// Set the StatusCode property. + [propput] HRESULT StatusCode([in] int statusCode); + + /// The HTTP response reason phrase + [propget] HRESULT ReasonPhrase([out, retval] LPWSTR* reasonPhrase); + /// Set the ReasonPhrase property. + [propput] HRESULT ReasonPhrase([in] LPCWSTR reasonPhrase); +} + +/// Event args for the NavigationStarting event. +[uuid(EE1938CE-D385-4CB0-854B-F498F78C3D88), object, pointer_default(unique)] +interface ICoreWebView2NavigationStartingEventArgs : IUnknown { + /// The uri of the requested navigation. + [propget] HRESULT Uri([out, retval] LPWSTR* uri); + + /// True when the navigation was initiated through a user gesture as opposed + /// to programmatic navigation. + [propget] HRESULT IsUserInitiated([out, retval] BOOL* isUserInitiated); + + /// True when the navigation is redirected. + [propget] HRESULT IsRedirected([out, retval] BOOL* isRedirected); + + /// The HTTP request headers for the navigation. + /// Note, you cannot modify the HTTP request headers in a NavigationStarting event. + [propget] HRESULT RequestHeaders([out, retval] ICoreWebView2HttpRequestHeaders** requestHeaders); + + /// The host may set this flag to cancel the navigation. + /// If set, it will be as if the navigation never happened and the current + /// page's content will be intact. For performance reasons, GET HTTP requests + /// may happen, while the host is responding. This means cookies can be set + /// and used part of a request for the navigation. + [propget] HRESULT Cancel([out, retval] BOOL* cancel); + /// Set the Cancel property. + [propput] HRESULT Cancel([in] BOOL cancel); + + /// The ID of the navigation. + [propget] HRESULT NavigationId([out, retval] UINT64* navigation_id); +} + +/// The caller implements this interface to receive the NavigationStarting +/// event. +[uuid(073337A4-64D2-4C7E-AC9F-987F0F613497), object, pointer_default(unique)] +interface ICoreWebView2NavigationStartingEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. + HRESULT Invoke( + [in] ICoreWebView2* sender, + [in] ICoreWebView2NavigationStartingEventArgs* args); +} + +/// Event args for the ContentLoading event. +[uuid(2A800835-2179-45D6-A745-6657E9A546B9), object, pointer_default(unique)] +interface ICoreWebView2ContentLoadingEventArgs : IUnknown { + /// True if the loaded content is an error page. + [propget] HRESULT IsErrorPage([out, retval] BOOL* isErrorPage); + + /// The ID of the navigation. + [propget] HRESULT NavigationId([out, retval] UINT64* navigation_id); +} + +/// The caller implements this interface to receive the ContentLoading event. +[uuid(7AF5CC82-AE19-4964-BD71-B9BC5F03E85D), object, pointer_default(unique)] +interface ICoreWebView2ContentLoadingEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. + HRESULT Invoke([in] ICoreWebView2* webview, [in] ICoreWebView2ContentLoadingEventArgs* args); +} + +/// Event args for the SourceChanged event. +[uuid(BD9A4BFB-BE19-40BD-968B-EBCF0D727EF3), object, pointer_default(unique)] +interface ICoreWebView2SourceChangedEventArgs : IUnknown { + /// True if the page being navigated to is a new document. + [propget] HRESULT IsNewDocument([out, retval] BOOL* isNewDocument); +} + +/// The caller implements this interface to receive the SourceChanged event. +[uuid(8FEDD1A7-3A33-416F-AF81-881EEB001433), object, pointer_default(unique)] +interface ICoreWebView2SourceChangedEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. + HRESULT Invoke([in] ICoreWebView2* webview, [in] ICoreWebView2SourceChangedEventArgs* args); +} + +/// The caller implements this interface to receive the HistoryChanged event. +[uuid(54C9B7D7-D9E9-4158-861F-F97E1C3C6631), object, pointer_default(unique)] +interface ICoreWebView2HistoryChangedEventHandler : IUnknown { + /// There are no event args and the args parameter will be null. + HRESULT Invoke([in] ICoreWebView2* webview, [in] IUnknown* args); +} + +/// Event args for the ScriptDialogOpening event. +[uuid(B8F6356E-24DC-4D74-90FE-AD071E11CB91), object, pointer_default(unique)] +interface ICoreWebView2ScriptDialogOpeningEventArgs : IUnknown { + /// The URI of the page that requested the dialog box. + [propget] HRESULT Uri([out, retval] LPWSTR* uri); + + /// The kind of JavaScript dialog box. Accept, confirm, prompt, or + /// beforeunload. + [propget] HRESULT Kind([out, retval] COREWEBVIEW2_SCRIPT_DIALOG_KIND* kind); + + /// The message of the dialog box. From JavaScript this is the first parameter + /// passed to alert, confirm, and prompt and is empty for beforeunload. + [propget] HRESULT Message([out, retval] LPWSTR* message); + + /// The host may call this to respond with OK to confirm, prompt, and + /// beforeunload dialogs or not call this method to indicate cancel. From + /// JavaScript, this means that the confirm and beforeunload function returns + /// true if Accept is called. And for the prompt function it returns the value + /// of ResultText if Accept is called and returns false otherwise. + HRESULT Accept(); + + /// The second parameter passed to the JavaScript prompt dialog. This is the + /// default value to use for the result of the prompt JavaScript function. + [propget] HRESULT DefaultText([out, retval] LPWSTR* defaultText); + + /// The return value from the JavaScript prompt function if Accept is called. + /// This is ignored for dialog kinds other than prompt. If Accept is not + /// called this value is ignored and false is returned from prompt. + [propget] HRESULT ResultText([out, retval] LPWSTR* resultText); + /// Set the ResultText property. + [propput] HRESULT ResultText([in] LPCWSTR resultText); + + /// GetDeferral can be called to return an ICoreWebView2Deferral object. + /// You can use this to complete the event at a later time. + HRESULT GetDeferral([out, retval] ICoreWebView2Deferral** deferral); +} + +/// The caller implements this interface to receive the ScriptDialogOpening +/// event. +[uuid(72D93789-2727-4A9B-A4FC-1B2609CBCBE3), object, pointer_default(unique)] +interface ICoreWebView2ScriptDialogOpeningEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. + HRESULT Invoke( + [in] ICoreWebView2* sender, + [in] ICoreWebView2ScriptDialogOpeningEventArgs* args); +} + +/// Event args for the NavigationCompleted event. +[uuid(361F5621-EA7F-4C55-95EC-3C5E6992EA4A), object, pointer_default(unique)] +interface ICoreWebView2NavigationCompletedEventArgs : IUnknown { + /// True when the navigation is successful. This + /// is false for a navigation that ended up in an error page (failures due to + /// no network, DNS lookup failure, HTTP server responds with 4xx), but could + /// also be false for additional things such as window.stop() called on + /// navigated page. + [propget] HRESULT IsSuccess([out, retval] BOOL* isSuccess); + + /// The error code if the navigation failed. + [propget] HRESULT WebErrorStatus([out, retval] COREWEBVIEW2_WEB_ERROR_STATUS* + COREWEBVIEW2_WEB_ERROR_STATUS); + + /// The ID of the navigation. + [propget] HRESULT NavigationId([out, retval] UINT64* navigation_id); +} + +/// The caller implements this interface to receive the NavigationCompleted +/// event. +[uuid(9F921239-20C4-455F-9E3F-6047A50E248B), object, pointer_default(unique)] +interface ICoreWebView2NavigationCompletedEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. + HRESULT Invoke( + [in] ICoreWebView2* sender, + [in] ICoreWebView2NavigationCompletedEventArgs* args); +} + +/// Event args for the PermissionRequested event. +[uuid(774B5EA1-3FAD-435C-B1FC-A77D1ACD5EAF), object, pointer_default(unique)] +interface ICoreWebView2PermissionRequestedEventArgs : IUnknown { + /// The origin of the web content that requests the permission. + [propget] HRESULT Uri([out, retval] LPWSTR* uri); + + /// The type of the permission that is requested. + [propget] HRESULT PermissionKind([out, retval] COREWEBVIEW2_PERMISSION_KIND* value); + + /// True when the permission request was initiated through a user gesture. + /// Note that being initiated through a user gesture doesn't mean that user + /// intended to access the associated resource. + [propget] HRESULT IsUserInitiated([out, retval] BOOL* isUserInitiated); + + /// The status of a permission request, i.e. whether the request is granted. + /// Default value is COREWEBVIEW2_PERMISSION_STATE_DEFAULT. + [propget] HRESULT State([out, retval] COREWEBVIEW2_PERMISSION_STATE* value); + /// Set the State property. + [propput] HRESULT State([in] COREWEBVIEW2_PERMISSION_STATE value); + + /// GetDeferral can be called to return an ICoreWebView2Deferral object. + /// Developer can use the deferral object to make the permission decision + /// at a later time. + HRESULT GetDeferral([out, retval] ICoreWebView2Deferral** deferral); +} + +/// The caller implements this interface to receive the PermissionRequested +/// event. +[uuid(543B4ADE-9B0B-4748-9AB7-D76481B223AA), object, pointer_default(unique)] +interface ICoreWebView2PermissionRequestedEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. + HRESULT Invoke( + [in] ICoreWebView2* sender, + [in] ICoreWebView2PermissionRequestedEventArgs* args); +} + +/// The caller implements this interface to receive the result of the +/// AddScriptToExecuteOnDocumentCreated method. +[uuid(7082ABED-0591-428F-A722-60C2F814546B), object, pointer_default(unique)] +interface ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler : IUnknown { + /// Called to provide the implementer with the completion status and result + /// of the corresponding asynchronous method call. + HRESULT Invoke([in] HRESULT errorCode, [in] LPCWSTR id); +} + +/// The caller implements this interface to receive the result of the +/// ExecuteScript method. +[uuid(3B717C93-3ED5-4450-9B13-7F56AA367AC7), object, pointer_default(unique)] +interface ICoreWebView2ExecuteScriptCompletedHandler : IUnknown { + /// Called to provide the implementer with the completion status and result + /// of the corresponding asynchronous method call. + HRESULT Invoke([in] HRESULT errorCode, [in] LPCWSTR resultObjectAsJson); +} + +/// Event args for the WebResourceRequested event. +[uuid(2D7B3282-83B1-41CA-8BBF-FF18F6BFE320), object, pointer_default(unique)] +interface ICoreWebView2WebResourceRequestedEventArgs : IUnknown +{ + /// The HTTP request. + [propget] HRESULT Request([out, retval] ICoreWebView2WebResourceRequest** request); + + /// The HTTP response. + [propget] HRESULT Response([out, retval] ICoreWebView2WebResourceResponse** response); + /// Set the Response property. + [propput] HRESULT Response([in] ICoreWebView2WebResourceResponse* response); + + /// Obtain an ICoreWebView2Deferral object and put the event into a deferred state. + /// You can use the ICoreWebView2Deferral object to complete the network request at a + /// later time. + HRESULT GetDeferral([out, retval] ICoreWebView2Deferral** deferral); + + /// The web resource request contexts. + [propget] HRESULT ResourceContext([out, retval] COREWEBVIEW2_WEB_RESOURCE_CONTEXT* context); +} + +/// Fires when an HTTP request is made in the webview. The host can override +/// request, response headers and response content. +[uuid(F6DC79F2-E1FA-4534-8968-4AFF10BBAA32), object, pointer_default(unique)] +interface ICoreWebView2WebResourceRequestedEventHandler : IUnknown +{ + /// Called to provide the implementer with the event args for the + /// corresponding event. + HRESULT Invoke( + [in] ICoreWebView2* sender, + [in] ICoreWebView2WebResourceRequestedEventArgs* args); +} + +/// The caller implements this method to receive the result of the +/// CapturePreview method. The result is written to the stream provided in +/// the CapturePreview method call. +[uuid(DCED64F8-D9C7-4A3C-B9FD-FBBCA0B43496), object, pointer_default(unique)] +interface ICoreWebView2CapturePreviewCompletedHandler : IUnknown { + /// Called to provide the implementer with the completion status + /// of the corresponding asynchronous method call. + HRESULT Invoke([in] HRESULT result); +} + +/// The caller implements this method to receive the GotFocus and LostFocus +/// events. There are no event args for this event. +[uuid(76E67C71-663F-4C17-B71A-9381CCF3B94B), object, pointer_default(unique)] +interface ICoreWebView2FocusChangedEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. There are no event args and the args + /// parameter will be null. + HRESULT Invoke( + [in] ICoreWebView2Controller* sender, + [in] IUnknown* args); +} + +/// Event args for the MoveFocusRequested event. +[uuid(71922903-B180-49D0-AED2-C9F9D10064B1), object, pointer_default(unique)] +interface ICoreWebView2MoveFocusRequestedEventArgs : IUnknown { + /// The reason for WebView to fire the MoveFocus Requested event. + [propget] HRESULT Reason([out, retval] COREWEBVIEW2_MOVE_FOCUS_REASON* value); + + /// Indicate whether the event has been handled by the app. + /// If the app has moved the focus to its desired location, it should set + /// Handled property to TRUE. + /// When Handled property is false after the event handler returns, default + /// action will be taken. The default action is to try to find the next tab + /// stop child window in the app and try to move focus to that window. If + /// there is no other such window to move focus to, focus will be cycled + /// within the WebView's web content. + [propget] HRESULT Handled([out, retval] BOOL* value); + /// Set the Handled property. + [propput] HRESULT Handled([in] BOOL value); +} + +/// The caller implements this method to receive the MoveFocusRequested event. +[uuid(4B21D6DD-3DE7-47B0-8019-7D3ACE6E3631), object, pointer_default(unique)] +interface ICoreWebView2MoveFocusRequestedEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. + HRESULT Invoke( + [in] ICoreWebView2Controller* sender, + [in] ICoreWebView2MoveFocusRequestedEventArgs* args); +} + +/// Event args for the WebMessageReceived event. +[uuid(B263B5AE-9C54-4B75-B632-40AE1A0B6912), object, pointer_default(unique)] +interface ICoreWebView2WebMessageReceivedEventArgs : IUnknown { + /// The URI of the document that sent this web message. + [propget] HRESULT Source([out, retval] LPWSTR* source); + + /// The message posted from the webview content to the host converted to a + /// JSON string. Use this to communicate via JavaScript objects. + /// + /// For example the following postMessage calls result in the + /// following WebMessageAsJson values: + /// + /// ``` + /// postMessage({'a': 'b'}) L"{\"a\": \"b\"}" + /// postMessage(1.2) L"1.2" + /// postMessage('example') L"\"example\"" + /// ``` + [propget] HRESULT WebMessageAsJson([out, retval] LPWSTR* webMessageAsJson); + + /// If the message posted from the webview content to the host is a + /// string type, this method will return the value of that string. If the + /// message posted is some other kind of JavaScript type this method will fail + /// with E_INVALIDARG. Use this to communicate via simple strings. + /// + /// For example the following postMessage calls result in the + /// following WebMessageAsString values: + /// + /// ``` + /// postMessage({'a': 'b'}) E_INVALIDARG + /// postMessage(1.2) E_INVALIDARG + /// postMessage('example') L"example" + /// ``` + HRESULT TryGetWebMessageAsString([out, retval] LPWSTR* webMessageAsString); +} + +/// The caller implements this interface to receive the WebMessageReceived +/// event. +[uuid(199328C8-9964-4F5F-84E6-E875B1B763D6), object, pointer_default(unique)] +interface ICoreWebView2WebMessageReceivedEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. + HRESULT Invoke( + [in] ICoreWebView2* sender, + [in] ICoreWebView2WebMessageReceivedEventArgs* args); +} + +/// Event args for the DevToolsProtocolEventReceived event. +[uuid(F661B1C2-5FF5-4700-B723-C439034539B4), object, pointer_default(unique)] +interface ICoreWebView2DevToolsProtocolEventReceivedEventArgs : IUnknown { + /// The parameter object of the corresponding DevToolsProtocol event + /// represented as a JSON string. + [propget] HRESULT ParameterObjectAsJson([out, retval] LPWSTR* + parameterObjectAsJson); +} + +/// The caller implements this interface to receive +/// DevToolsProtocolEventReceived events from the WebView. +[uuid(8E1DED79-A40B-4271-8BE6-57640C167F4A), object, pointer_default(unique)] +interface ICoreWebView2DevToolsProtocolEventReceivedEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. + HRESULT Invoke( + [in] ICoreWebView2* sender, + [in] ICoreWebView2DevToolsProtocolEventReceivedEventArgs* args); +} + +/// The caller implements this interface to receive CallDevToolsProtocolMethod +/// completion results. +[uuid(C20CF895-BA7C-493B-AB2E-8A6E3A3602A2), object, pointer_default(unique)] +interface ICoreWebView2CallDevToolsProtocolMethodCompletedHandler : IUnknown { + /// Called to provide the implementer with the completion status and result + /// of the corresponding asynchronous method call. + HRESULT Invoke([in] HRESULT errorCode, [in] LPCWSTR returnObjectAsJson); +} + +/// The caller implements this interface to receive the CoreWebView2Controller created +/// via CreateCoreWebView2Controller. +[uuid(86EF6808-3C3F-4C6F-975E-8CE0B98F70BA), object, pointer_default(unique)] +interface ICoreWebView2CreateCoreWebView2ControllerCompletedHandler : IUnknown { + /// Called to provide the implementer with the completion status and result + /// of the corresponding asynchronous method call. + HRESULT Invoke(HRESULT result, ICoreWebView2Controller* createdController); +} + +/// Event args for the NewWindowRequested event. The event is fired when content +/// inside webview requested to a open a new window (through window.open() and so on.) +[uuid(9EDC7F5F-C6EA-4F3C-827B-A8880794C0A9), object, pointer_default(unique)] +interface ICoreWebView2NewWindowRequestedEventArgs : IUnknown +{ + /// The target uri of the NewWindowRequest. + [propget] HRESULT Uri([out, retval] LPWSTR* uri); + + /// Sets a WebView as a result of the NewWindowRequest. The target + /// webview should not be navigated. If the NewWindow is set, its top level + /// window will return as the opened WindowProxy. + [propput] HRESULT NewWindow([in] ICoreWebView2* newWindow); + /// Gets the new window. + [propget] HRESULT NewWindow([out, retval] ICoreWebView2** newWindow); + + /// Sets whether the NewWindowRequestedEvent is handled by host. If this is false + /// and no NewWindow is set, the WebView will open a popup + /// window and it will be returned as opened WindowProxy. + /// If set to true and no NewWindow is set for a window.open call, the opened + /// WindowProxy will be for an dummy window object and no window will load. + /// Default is false. + [propput] HRESULT Handled([in] BOOL handled); + /// Gets whether the NewWindowRequestedEvent is handled by host. + [propget] HRESULT Handled([out, retval] BOOL* handled); + + /// IsUserInitiated is true when the new window request was initiated through a user gesture + /// such as clicking an anchor tag with target. + [propget] HRESULT IsUserInitiated([out, retval] BOOL* isUserInitiated); + + /// Obtain an ICoreWebView2Deferral object and put the event into a deferred state. + /// You can use the ICoreWebView2Deferral object to complete the window open + /// request at a later time. + /// While this event is deferred the opener window will be returned a WindowProxy + /// to an unnavigated window, which will navigate when the deferral is complete. + HRESULT GetDeferral([out, retval] ICoreWebView2Deferral** deferral); +} + +/// The caller implements this interface to receive NewWindowRequested +/// events. +[uuid(ACAA30EF-A40C-47BD-9CB9-D9C2AADC9FCB), object, pointer_default(unique)] +interface ICoreWebView2NewWindowRequestedEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. + HRESULT Invoke( + [in] ICoreWebView2* sender, + [in] ICoreWebView2NewWindowRequestedEventArgs* args); +} + +/// The caller implements this interface to receive DocumentTitleChanged +/// events. Use the DocumentTitle property to get the modified +/// title. +[uuid(6423D6B1-5A57-46C5-BA46-DBB3735EE7C9), object, pointer_default(unique)] +interface ICoreWebView2DocumentTitleChangedEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. There are no event args and the args + /// parameter will be null. + HRESULT Invoke([in] ICoreWebView2* sender, [in] IUnknown* args); +} + +/// Event args for the AcceleratorKeyPressed event. +[uuid(9224476E-D8C3-4EB7-BB65-2FD7792B27CE), object, pointer_default(unique)] +interface ICoreWebView2AcceleratorKeyPressedEventArgs : IUnknown { + /// The key event type that caused the event to be fired. + [propget] HRESULT KeyEventKind([out, retval] COREWEBVIEW2_KEY_EVENT_KIND* keyEventKind); + /// The Win32 virtual key code of the key that was pressed or released. + /// This will be one of the Win32 virtual key constants such as VK_RETURN or + /// an (uppercase) ASCII value such as 'A'. You can check whether Ctrl or Alt + /// are pressed by calling GetKeyState(VK_CONTROL) or GetKeyState(VK_MENU). + [propget] HRESULT VirtualKey([out, retval] UINT* virtualKey); + /// The LPARAM value that accompanied the window message. See the + /// documentation for the WM_KEYDOWN and WM_KEYUP messages. + [propget] HRESULT KeyEventLParam([out, retval] INT* lParam); + /// A structure representing the information passed in the LPARAM of the + /// window message. + [propget] HRESULT PhysicalKeyStatus( + [out, retval] COREWEBVIEW2_PHYSICAL_KEY_STATUS* physicalKeyStatus); + /// During AcceleratorKeyPressedEvent handler invocation the WebView is blocked + /// waiting for the decision of if the accelerator will be handled by the host + /// or not. If the Handled property is set to TRUE then this will + /// prevent the WebView from performing the default action for this + /// accelerator key. Otherwise the WebView will perform the default action for + /// the accelerator key. + [propget] HRESULT Handled([out, retval] BOOL* handled); + /// Sets the Handled property. + [propput] HRESULT Handled([in] BOOL handled); +} + +/// The caller implements this interface to receive the AcceleratorKeyPressed +/// event. +[uuid(A7D303F9-503C-4B7E-BC40-5C7CE6CABAAA), object, pointer_default(unique)] +interface ICoreWebView2AcceleratorKeyPressedEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. + HRESULT Invoke( + [in] ICoreWebView2Controller* sender, + [in] ICoreWebView2AcceleratorKeyPressedEventArgs* args); +} + +/// The caller implements this interface to receive NewBrowserVersionAvailable events. +[uuid(E82E8242-EE39-4A57-A065-E13256D60342), object, pointer_default(unique)] +interface ICoreWebView2NewBrowserVersionAvailableEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. + HRESULT Invoke([in] ICoreWebView2Environment* webviewEnvironment, + [in] IUnknown* args); +} + +/// The caller implements this method to receive the +/// ContainsFullScreenElementChanged events. There are no event args for this +/// event. +[uuid(120888E3-4CAD-4EC2-B627-B2016D05612D), object, pointer_default(unique)] +interface ICoreWebView2ContainsFullScreenElementChangedEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. There are no event args and the args + /// parameter will be null. + HRESULT Invoke([in] ICoreWebView2* sender, [in] IUnknown* args); +} + +/// The caller implements this interface to receive NewWindowRequested +/// events. +[uuid(63C89928-AD32-4421-A0E4-EC99B34AA97E), object, pointer_default(unique)] +interface ICoreWebView2WindowCloseRequestedEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. There are no event args and the args + /// parameter will be null. + HRESULT Invoke([in] ICoreWebView2* sender, [in] IUnknown* args); +} + +/// This represents the WebView2 Environment. WebViews created from an +/// environment run on the Browser process specified with environment parameters +/// and objects created from an environment should be used in the same environment. +/// Using it in different environments are not guaranteed to be compatible and may fail. +[uuid(DA66D884-6DA8-410E-9630-8C48F8B3A40E), object, pointer_default(unique)] +interface ICoreWebView2Environment : IUnknown { + /// Asynchronously create a new WebView. + /// + /// parentWindow is the HWND in which the WebView should be displayed and + /// from which receive input. The WebView will add a child window to the + /// provided window during WebView creation. Z-order and other things impacted + /// by sibling window order will be affected accordingly. + /// + /// It is recommended that the application set Application User Model ID for + /// the process or the application window. If none is set, during WebView + /// creation a generated Application User Model ID is set to root window of + /// parentWindow. + /// \snippet AppWindow.cpp CreateCoreWebView2Controller + /// + /// It is recommended that the application handles restart manager messages + /// so that it can be restarted gracefully in the case when the app is using + /// Edge for webview from a certain installation and that installation is being + /// uninstalled. For example, if a user installs Edge from Dev channel and + /// opts to use Edge from that channel for testing the app, and then uninstalls + /// Edge from that channel without closing the app, the app will be restarted + /// to allow uninstallation of the dev channel to succeed. + /// \snippet AppWindow.cpp RestartManager + /// + /// When the application retries CreateCoreWebView2Controller upon failure, it is + /// recommended that the application restarts from creating a new WebView2 + /// Environment. If an Edge update happens, the version associated with a WebView2 + /// Environment could have been removed and causing the object to no longer work. + /// Creating a new WebView2 Environment will work as it uses the latest version. + /// + /// WebView creation will fail if there is already a running instance using the same + /// user data folder, and the Environment objects have different EnvironmentOptions. + /// For example, if there is already a WebView created with one language, trying to + /// create a WebView with a different language using the same user data folder will + /// fail. + HRESULT CreateCoreWebView2Controller( + HWND parentWindow, + ICoreWebView2CreateCoreWebView2ControllerCompletedHandler* handler); + + /// Create a new web resource response object. The headers is the + /// raw response header string delimited by newline. It's also possible to + /// create this object with empty headers string and then use the + /// ICoreWebView2HttpResponseHeaders to construct the headers line by line. + /// For information on other parameters see ICoreWebView2WebResourceResponse. + /// + /// \snippet SettingsComponent.cpp WebResourceRequested + HRESULT CreateWebResourceResponse( + [in] IStream* content, + [in] int statusCode, + [in] LPCWSTR reasonPhrase, + [in] LPCWSTR headers, + [out, retval] ICoreWebView2WebResourceResponse** response); + + /// The browser version info of the current ICoreWebView2Environment, + /// including channel name if it is not the stable channel. + /// This matches the format of the + /// GetAvailableCoreWebView2BrowserVersionString API. + /// Channel names are 'beta', 'dev', and 'canary'. + /// + /// \snippet AppWindow.cpp GetBrowserVersionString + [propget] HRESULT BrowserVersionString([out, retval] LPWSTR* versionInfo); + + /// The NewBrowserVersionAvailable event fires when a newer version of the + /// Edge browser is installed and available to use via WebView2. + /// To use the newer version of the browser you must create a new + /// environment and WebView. + /// This event will only be fired for new version from the same Edge channel + /// that the code is running from. When not running with installed Edge, + /// no event will be fired. + /// + /// Because a user data folder can only be used by one browser process at + /// a time, if you want to use the same user data folder in the WebViews + /// using the new version of the browser, + /// you must close the environment and WebViews that are using the older + /// version of the browser first. Or simply prompt the user to restart the + /// app. + /// + /// \snippet AppWindow.cpp NewBrowserVersionAvailable + /// + HRESULT add_NewBrowserVersionAvailable( + [in] ICoreWebView2NewBrowserVersionAvailableEventHandler* eventHandler, + [out] EventRegistrationToken* token); + + /// Remove an event handler previously added with add_NewBrowserVersionAvailable. + HRESULT remove_NewBrowserVersionAvailable( + [in] EventRegistrationToken token); +} + +/// Options used to create WebView2 Environment. +/// A default implementation is provided in WebView2EnvironmentOptions.h. +/// +/// \snippet AppWindow.cpp CreateCoreWebView2EnvironmentWithOptions +/// +[uuid(97E9FBD9-646A-4B75-8682-149B71DACE59), object, pointer_default(unique)] +interface ICoreWebView2EnvironmentOptions : IUnknown { + /// AdditionalBrowserArguments can be specified to change the behavior of the + /// WebView. These will be passed to the browser process as part of + /// the command line. See + /// [Run Chromium with Flags](https://aka.ms/RunChromiumWithFlags) + /// for more information about command line switches to browser + /// process. If the app is launched with a command line switch + /// `--edge-webview-switches=xxx` the value of that switch (xxx in + /// the above example) will also be appended to the browser + /// process command line. Certain switches like `--user-data-dir` are + /// internal and important to WebView. Those switches will be + /// ignored even if specified. If the same switches are specified + /// multiple times, the last one wins. There is no attempt to + /// merge the different values of the same switch, except for disabled + /// and enabled features. The features specified by `--enable-features` + /// and `--disable-features` will be merged with simple logic: the features + /// will be the union of the specified features and built-in features, and if + /// a feature is disabled, it will be removed from the enabled features list. + /// App process's command line `--edge-webview-switches` value are processed + /// after the additionalBrowserArguments parameter is processed. Certain + /// features are disabled internally and can't be enabled. + /// If parsing failed for the specified switches, they will be + /// ignored. Default is to run browser process with no extra flags. + [propget] HRESULT AdditionalBrowserArguments([out, retval] LPWSTR* value); + /// Set the AdditionalBrowserArguments property. + [propput] HRESULT AdditionalBrowserArguments([in] LPCWSTR value); + + /// The default language that WebView will run with. It applies to browser UIs + /// like context menu and dialogs. It also applies to the accept-languages + /// HTTP header that WebView sends to web sites. + /// It is in the format of `language[-country]` where `language` is the 2 letter + /// code from ISO 639 and `country` is the 2 letter code from ISO 3166. + [propget] HRESULT Language([out, retval] LPWSTR* value); + /// Set the Language property. + [propput] HRESULT Language([in] LPCWSTR value); + + /// The version of the Edge WebView2 Runtime binaries required to be + /// compatible with the calling application. This defaults to the Edge + /// WebView2 Runtime version + /// that corresponds with the version of the SDK the application is using. + /// The format of this value is the same as the format of the + /// BrowserVersionString property and other BrowserVersion values. + /// Only the version part of the BrowserVersion value is respected. The + /// channel suffix, if it exists, is ignored. + /// The version of the Edge WebView2 Runtime binaries actually used may be + /// different from the specified TargetCompatibleBrowserVersion. They are only + /// guarenteed to be compatible. You can check the actual version on the + /// BrowserVersionString property on the ICoreWebView2Environment. + [propget] HRESULT TargetCompatibleBrowserVersion([out, retval] LPWSTR* value); + /// Set the TargetCompatibleBrowserVersion. + [propput] HRESULT TargetCompatibleBrowserVersion([in] LPCWSTR value); +} + +/// The caller implements this interface to receive the WebView2Environment created +/// via CreateCoreWebView2Environment. +[uuid(8B4F98CE-DB0D-4E71-85FD-C4C4EF1F2630), object, pointer_default(unique)] +interface ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler : IUnknown { + /// Called to provide the implementer with the completion status and result + /// of the corresponding asynchronous method call. + HRESULT Invoke(HRESULT result, ICoreWebView2Environment* created_environment); +} + +/// A Receiver is created for a particular DevTools Protocol event and allows +/// you to subscribe and unsubsribe from that event. +/// Obtained from the WebView object via GetDevToolsProtocolEventReceiver. +[uuid(FE59C48C-540C-4A3C-8898-8E1602E0055D), object, pointer_default(unique)] +interface ICoreWebView2DevToolsProtocolEventReceiver : IUnknown { + /// Subscribe to a DevToolsProtocol event. + /// The handler's Invoke method will be called whenever the corresponding + /// DevToolsProtocol event fires. Invoke will be called with the + /// an event args object containing the DevTools Protocol event's parameter + /// object as a JSON string. + /// + /// \snippet ScriptComponent.cpp DevToolsProtocolEventReceived + HRESULT add_DevToolsProtocolEventReceived( + [in] ICoreWebView2DevToolsProtocolEventReceivedEventHandler* handler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with + /// add_DevToolsProtocolEventReceived. + HRESULT remove_DevToolsProtocolEventReceived( + [in] EventRegistrationToken token); + +} + +/// DLL export to create a WebView2 environment with a custom version of Edge, +/// user data directory and/or additional options. +/// +/// browserExecutableFolder is the relative path to the folder that +/// contains the embedded Edge. The embedded Edge can be obtained by +/// copying the version named folder of an installed Edge, like +/// 73.0.52.0 sub folder of an installed 73.0.52.0 Edge. The folder +/// should have msedge.exe, msedge.dll, and so on. +/// Use null or empty string for browserExecutableFolder to create +/// WebView using Edge installed on the machine, in which case the +/// API will try to find a compatible version of Edge installed on the +/// machine according to the channel preference trying to find first +/// per user install and then per machine install. +/// +/// The default channel search order is stable, beta, dev, and canary. +/// When there is an override WEBVIEW2_RELEASE_CHANNEL_PREFERENCE environment +/// variable or applicable releaseChannelPreference registry value +/// with the value of 1, the channel search order is reversed. +/// +/// userDataFolder can be +/// specified to change the default user data folder location for +/// WebView2. The path can be an absolute file path or a relative file path +/// that is interpreted as relative to the current process's executable. +/// Otherwise, for UWP apps, the default user data folder will be +/// the app data folder for the package; for non-UWP apps, +/// the default user data folder `{Executable File Name}.WebView2` +/// will be created in the same directory next to the app executable. +/// WebView2 creation can fail if the executable is running in a directory +/// that the process doesn't have permission to create a new folder in. +/// The app is responsible to clean up its user data folder +/// when it is done. +/// +/// Note that as a browser process might be shared among WebViews, +/// WebView creation will fail with HRESULT_FROM_WIN32(ERROR_INVALID_STATE) if +/// the specified options does not match the options of the WebViews that are +/// currently running in the shared browser process. +/// +/// environment_created_handler is the handler result to the async operation +/// which will contain the WebView2Environment that got created. +/// +/// The browserExecutableFolder, userDataFolder and additionalBrowserArguments +/// of the environmentOptions may be overridden by +/// values either specified in environment variables or in the registry. +/// +/// When creating a WebView2Environment the following environment variables +/// are checked: +/// +/// ``` +/// WEBVIEW2_BROWSER_EXECUTABLE_FOLDER +/// WEBVIEW2_USER_DATA_FOLDER +/// WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS +/// WEBVIEW2_RELEASE_CHANNEL_PREFERENCE +/// ``` +/// +/// If an override environment variable is found then we use the +/// browserExecutableFolder, userDataFolder and additionalBrowserArguments +/// values as replacements for the corresponding values in +/// CreateCoreWebView2EnvironmentWithOptions parameters. +/// +/// While not strictly overrides, there exists additional environment variables +/// that can be set: +/// +/// ``` +/// WEBVIEW2_WAIT_FOR_SCRIPT_DEBUGGER +/// ``` +/// +/// When found with a non-empty value, this indicates that the WebView is being +/// launched under a script debugger. In this case, the WebView will issue a +/// `Page.waitForDebugger` CDP command that will cause script execution inside the +/// WebView to pause on launch, until a debugger issues a corresponding +/// `Runtime.runIfWaitingForDebugger` CDP command to resume execution. +/// Note: There is no registry key equivalent of this environment variable. +/// +/// ``` +/// WEBVIEW2_PIPE_FOR_SCRIPT_DEBUGGER +/// ``` +/// +/// When found with a non-empty value, this indicates that the WebView is being +/// launched under a script debugger that also supports host applications that +/// use multiple WebViews. The value is used as the identifier for a named pipe +/// that will be opened and written to when a new WebView is created by the host +/// application. The payload will match that of the remote-debugging-port JSON +/// target and can be used by the external debugger to attach to a specific +/// WebView instance. +/// The format of the pipe created by the debugger should be: +/// `\\.\pipe\WebView2\Debugger\{app_name}\{pipe_name}` +/// where: +/// +/// - `{app_name}` is the host application exe filename, e.g. WebView2Example.exe +/// - `{pipe_name}` is the value set for WEBVIEW2_PIPE_FOR_SCRIPT_DEBUGGER. +/// +/// To enable debugging of the targets identified by the JSON you will also need +/// to set the WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS environment variable to +/// send `--remote-debugging-port={port_num}` +/// where: +/// +/// - `{port_num}` is the port on which the CDP server will bind. +/// +/// Be aware that setting both the WEBVIEW2_PIPE_FOR_SCRIPT_DEBUGGER and +/// WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS environment variables will cause the +/// WebViews hosted in your application and their contents to be exposed to +/// 3rd party applications such as debuggers. +/// +/// Note: There is no registry key equivalent of this environment variable. +/// +/// If none of those environment variables exist, then the registry is examined next. +/// The following registry keys are checked: +/// +/// ``` +/// [{Root}\Software\Policies\Microsoft\EmbeddedBrowserWebView\LoaderOverride\{AppId}] +/// "releaseChannelPreference"=dword:00000000 +/// "browserExecutableFolder"="" +/// "userDataFolder"="" +/// "additionalBrowserArguments"="" +/// ``` +/// +/// In the unlikely scenario where some instances of WebView are open during +/// a browser update we could end up blocking the deletion of old Edge browsers. +/// To avoid running out of disk space a new WebView creation will fail +/// with the next error if it detects that there are many old versions present. +/// +/// ``` +/// ERROR_DISK_FULL +/// ``` +/// +/// The default maximum number of Edge versions allowed is 20. +/// +/// The maximum number of old Edge versions allowed can be overwritten with the value +/// of the following environment variable. +/// +/// ``` +/// WEBVIEW2_MAX_INSTANCES +/// ``` +/// +/// If the Webview depends on an installed Edge and it is uninstalled +/// any subsequent creation will fail with the next error +/// +/// ``` +/// ERROR_PRODUCT_UNINSTALLED +/// ``` +/// +/// First we check with Root as HKLM and then HKCU. +/// AppId is first set to the Application User Model ID of the caller's process, +/// then if there's no corresponding registry key the AppId is +/// set to the executable name of the caller's process, or if that +/// isn't a registry key then '*'. If an override registry key is found then we +/// use the browserExecutableFolder, userDataFolder and additionalBrowserArguments +/// registry values as replacements for the corresponding values in +/// CreateCoreWebView2EnvironmentWithOptions parameters. +cpp_quote("STDAPI CreateCoreWebView2EnvironmentWithOptions( + PCWSTR browserExecutableFolder, + PCWSTR userDataFolder, + ICoreWebView2EnvironmentOptions* environmentOptions, + ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler* environment_created_handler);") + +/// This API is going to be removed in next SDK release. Please use +/// CreateCoreWebView2EnvironmentWithOptions. +cpp_quote("STDAPI CreateCoreWebView2EnvironmentWithDetails( + PCWSTR browserExecutableFolder, + PCWSTR userDataFolder, + PCWSTR additionalBrowserArguments, + ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler* environment_created_handler);") + +/// Creates an evergreen WebView2 Environment using the installed Edge version. +/// This is equivalent to calling CreateCoreWebView2EnvironmentWithOptions with +/// nullptr for browserExecutableFolder, userDataFolder, additionalBrowserArguments. +/// See CreateCoreWebView2EnvironmentWithOptions for more details. +cpp_quote("STDAPI CreateCoreWebView2Environment( + ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler* environment_created_handler);") + +/// Get the browser version info including channel name if it is not the stable channel +/// or the Embedded Edge. +/// Channel names are beta, dev, and canary. +/// If an override exists for the browserExecutableFolder or the channel preference, +/// the override will be used. +/// If there isn't an override, then the parameter passed to +/// GetAvailableCoreWebView2BrowserVersionString is used. +cpp_quote("STDAPI GetAvailableCoreWebView2BrowserVersionString( + PCWSTR browserExecutableFolder, + LPWSTR* versionInfo);") + +/// This method is for anyone want to compare version correctly to determine +/// which version is newer, older or same. It can be used to determine whether +/// to use webview2 or certain feature base on version. +/// Sets the value of result to -1, 0 or 1 if version1 is less than, equal or +/// greater than version2 respectively. +/// Returns E_INVALIDARG if it fails to parse any of the version strings or any +/// input parameter is null. +/// Input can directly use the versionInfo obtained from +/// GetAvailableCoreWebView2BrowserVersionString, channel info will be ignored. +cpp_quote("STDAPI CompareBrowserVersions( + PCWSTR version1, + PCWSTR version2, + int* result);") + +} diff --git a/library/webview/script/microsoft.web.webview2.0.9.488/WebView2.tlb b/library/webview/script/microsoft.web.webview2.0.9.488/WebView2.tlb new file mode 100644 index 0000000000000000000000000000000000000000..56543dddbb0a9162ad7fcdb1751d68d5f54e5941 GIT binary patch literal 40824 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 literal 0 HcmV?d00001 diff --git a/library/webview/script/microsoft.web.webview2.0.9.488/[Content_Types].xml b/library/webview/script/microsoft.web.webview2.0.9.488/[Content_Types].xml new file mode 100644 index 0000000..86f60f0 --- /dev/null +++ b/library/webview/script/microsoft.web.webview2.0.9.488/[Content_Types].xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/library/webview/script/microsoft.web.webview2.0.9.488/_rels/.rels b/library/webview/script/microsoft.web.webview2.0.9.488/_rels/.rels new file mode 100644 index 0000000..e2097f4 --- /dev/null +++ b/library/webview/script/microsoft.web.webview2.0.9.488/_rels/.rels @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/library/webview/script/microsoft.web.webview2.0.9.488/package/services/metadata/core-properties/c7f0a730736d49398070dd725ddecb6a.psmdcp b/library/webview/script/microsoft.web.webview2.0.9.488/package/services/metadata/core-properties/c7f0a730736d49398070dd725ddecb6a.psmdcp new file mode 100644 index 0000000..2bd62ab --- /dev/null +++ b/library/webview/script/microsoft.web.webview2.0.9.488/package/services/metadata/core-properties/c7f0a730736d49398070dd725ddecb6a.psmdcp @@ -0,0 +1,9 @@ + + + Microsoft + The Microsoft Edge WebView2 control enables you to host web content in your Windows app. + Microsoft.Web.WebView2 + 0.9.488 + Microsoft Web WebView Native native package Edge C++ Win32 Webview2 + NuGet, Version=5.5.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35;Microsoft Windows NT 10.0.14393.0;.NET Framework 4.7.2 + \ No newline at end of file diff --git a/library/webview/script/microsoft.web.webview2.1.0.664.37/.signature.p7s b/library/webview/script/microsoft.web.webview2.1.0.664.37/.signature.p7s new file mode 100644 index 0000000000000000000000000000000000000000..7fd1acde0f40c491f530e6fb119eef39eba92f34 GIT binary patch literal 18695 zcmeI4cU)6RzyC=Hq1VuBsM0w}0BM3q?*dZ9Lhn6f0QCPi2LoglE{dUyA^_jjMY&+CQ%=$tb%nVd88na}tAod^*0Na2*?vAVI# zv=DM=9zk~zAn49QA*3jJfEG?^7pn_#CWS#EWF&yo?-e0=Rxk@oXKaAGua6RniV7`_ zl9yJH1*B2ZC;%mmk(QMPFG=az2e>I&I-7f#V`bb!B-9POoWgwN_Sun;4;1GrE< ziGVOyn@~>!IZKB?2hTlJRCxq$Z-78r0}!COd8AMX6v{yJ=G8dcGwrqHal7BRW&uUw zxHd)%Ap^(djG_i8;iMKYI09;6j$#22!~zw9M$_HZUBelRL+bfBqBsCH;$>HivO-*5Fi5IKLGH>kP;yDBmeaxEbiCz1J&#=WW9^p2r2 zFT4`E^tE)q8+;=8roJqIA+Dx6v0h* zv+B%c%gVbI8ShK3%+@p)tEIC({+fSon!=Vn*aS)nA%R?S1ndDi@TKz5Lm*#aFmNKp z0`$Z(f>3-2xA9Wqkdjt z`#c0+1B9f2?#}SY``J-!K$z3n`em%kGxXTLK!+PAr|0_yURqY>c6Kp~-lom4JIrKg zJ=VJ?T2IS5L(ZMESZB(zCG;B8GgthH;YdoAvlG9FNFwjcgSI`Zog}d*WHCVK2I8Xa@NS*$F3go4x3}rwu|oH1*Hc3{x?})AfU$4vx-d$1F5A9Zmq2rkYTxwz6yI+; z)c@997llCqXfz5<+;_oU7p?GJ5y1XWH-8i$1L{1u`HOCC{^q*sXykY6SHsuI8ENkB z>f`R?N^}B$wT@SME4d@-7|UFP$$P0$dK`})f7Uu*uJl~o&U19X|5Q*8nRHF^ zr!yM&idIiQ+0D^^t7JAiw&o}7?u8iV-G&N5(W>u?SJ&Bu;So7+Lz$wbprhFKyHZHt6pE6hiWct(oZ9c!Xgz02Q1<0uH)5 za#B(tbo1X32+SMs1cWxr03?>(4Ttknl9BOs4Dj1#<^YYYTF}_t8?_wmiC!;YTSb}8 z*S+zg^)!h_PeWbW5sL%xc;bNgU|~QApp>VOCm$=j*%j7H_V4!N^~biDzu(q`I0Ph2 z7tjV2;8a8-9{a_M1PTMh0nyFx2!*h669*OmK8hc0t&GNgbK>*dXi55=-LYx99WG9F zsc6cd^q$?S)RJ=`o%O$DcR&GHw>zruXl;Zl7X-Rl+9Zz&iv<<)9O0Hy;%xc=*!M?J z+kI)=L*G;u|K)@DFw$c8&DTraX9DR>t9*)*Y(|a>;f)yzXVmZ&x&amjls&B34N2aLrV~3*LjrV9tuwOO8fdHeb}p?CpqVl^rRi;=q{);GY{1>{P;SU+E^ zJr3k(oA*ioi~E0RJA02=K{~014v6RlhkuT|B+O?gMtUcGR*Yg~S6xj_*w>!S%MKRx zB@yp9$~sf8Y^ zicC;EwVag{`MEGCD6@r6{rz=+UVypKXaY_C#DC@{r5H$;aDLd48sTjx!t0Y zN3BD}KUmb@Z<6N+_yBTwm^@Uh%3VAOQZvrlAC_b_fvkH?6kuW-9<1yKnQ0 z|C!Y$nuIO8O^m8Gf~pPIO+)-r>yZK!Ao)QD*6n7ngCk$Cy-S6@K2^I-^y~KQg^FAY z71boOfH#GynEkcThJm@jk8aYa)}lIg^y3ky6|W2^(>U3hs?U71*2+{JJ50-c@pTMlVAfQ!&qeXQYJu3$ zgTX;uTb?za)ii&6p1`z7gdhh(J*^X`gqwlBe5lgh!?XJ9)5Tf0YrEYtimcgN5JiT# z1kyl*G%0Jh@gtPLd^=0Z%QM~rX%DW?pMJQ!3$&a2LFrW3kWO;ON*AjUzd--}4|Y3r zD>MD@$o`So_?vXfZeejSUPl44DA`Tv#3%f>w38U~tZOH~aiESfPTCjiiZpZf^9^vv z`C>zn4xz{`O+{_gB}M#o-M`e-;t=nKr!Gxv_3C|`mQS*7ISrntM=a=sro75g#|^gd};COapJAC+I!#w zFZ*;0?ly3FL@vXjg@ikRfOTF>tD+_ozGWRgCUBj#>O-;#?aav+>1r;IDtz4{1{bPw zZ{J4^y7&m)gC#}U*DAO&Jaercm~BViIjY=%Q1v{QY<7uPGc0HA^|DP(t#uK5nD8<9 zv%3-W!aa5iO;NJX8@m|EY}uy&+nPF5pjR#KdD!mlkjk@59q;G~F9#p)XzDuJ_)~oG zZ`aiMhDJB2oL)#chO>byR!3=c@fna!aG7V&Y1RzO5PRKilfCF z4;%XrfAxDlhOiU&97V6_d@#1&byX=x;l3eX4SwHjPnq9QzugaYwURR_^Mrul4u5&W zCUcu{!?WG_58X!1Pqkk2&Sy1U=%IZ;1 z!rh=8%F4>w0K9POjm#w_1C(Js#rpdNI0QtITdiRz0T^;1hu`zm;G{%hOPi#Rjz$B0 z`+W-`%+b<8O3c-i$96XXeBbvy%AoMg0RBFJuLtmV0B~Ge>0205Ed??a-E7y-bl-3u z(b&t>q5Rc!=CsBUS>P_b`teK`fR6)$3UU9$rU7O6vmgM>aKZ=>5_8(CSyn!Q?|Ye* z$UZSyT_A8UwpHo!?Fs4Q5IWA_bdy}#ATNxym9+uT8X@G}^b6)1ZAdO-4#!&-8cGKx z8e3KK#T7`FlrEL@vvB}yCtp=DPTCy+&nZ{CZ9^B3!e)p@pcW?bTMPkCx{&c2neq4-!~nK zfS>{|!ndXkF@?{x3=o(Wh$(#9ZF2zJ>@eT8hQPq7EC4=QUhoDd6as-$ucN{hEeJUq zDS#rniLLnqz5^sprgKH2A@xD-ynCmn#~cP6sYwE)(mMD%qMC%q8J9bu%&dkza9xsf zh`042$@=4^aS~YD2ki7{;JZa2Zv%kISY9X+!Kb)5gL(WIm-NKe?Bl4VIDO_!|8t#j zS9XX~ft&Vn9zM1Z9}VE6w)+Jhfa{wPU^Wl+w)ep~J8p}i_|_>WnB`~Px_tl}7=S|> zJL7_Vv7TVQeiQd^RUo=jIeFv(cW-BNoV~Xnk@6FbsWTQSh19|15$JV6({&q6ZRT$n zuf3d2PW+V!ep0&HF(%Gto*#`D{_gfcvjHsM22BT^nQ$leElE6+AdUKcxSKbS+lQ+J zvR}~mP$N*Hj$%kK1)_l5tof}AaERKzSfqU*&dnF=9tIv+2n=vW`ucc!pA)bJhfr(wQ;Heq~h)_?vCs6CsO@eAGpxe{O5n8G?><@%k$vva&vN0bwM~Mc;8VM#)c%yr=&%WE4uyo~rE#a2ssjJd z@9*9od}u^c)g~2C)ave^&ZnqSp-GZHSg=yMd)vD@ z%ecC`0Q>+SKn^F9pd*EH!kClCdpToE6O%j}A4PdQ(Pftm=a2@3Sp_#@NH1SkUukfj zx(9$Og?K_oCMaP28nLI}!}eRjpWJnIa?P3g?oW}UgUGux$T@ykiR)3L{>sWt(g{h| z@UgSOj-5V+tHa)3HE{T>b3VMvGI?1|P`I!2Rcc$xN$x_mE&er!ZlXktuGI2u6(xpnxGa z#4DVv{E42MspfL~>7HzkoIga3|LKdH7=g-zuIoGT0^uE4-Vm?g?b`f5-B3gUk#8!? z_oo}m-$)zR9?UstVUm-8J;I4En6_BB3AwJ~Uy4p9^Nh{fMS{-oFlu*VHV~`5KOlBn z`kiCt>qlzTmMJR^ToKck$wyvB9`)X<@FW%fM*UbQcSpx{uKH)`sSC3+UMttnDN08+ z?D{1{vH3*N`}buhle!XHy{CFItCje86>}OFvx*l_yl(0~=HCJrt5O?_rWI)nr%*Lo zrK-W`eSM((0jdw@f z(>;;Thz)7Z-@O@Y27`ViV0)|xf&Vm(>;gV{kb>C)M}R}y-HRb0xG76uj+AXPN9rUU z5bEvdu&ybNegS~+RwXFF!THl_SU-C}db1jc#{@t&$h%nvLpi1m(F$1a+KJfp`o0Th zk7WQUKq5~pZ&$4Fwo2bVKX7v|mcoLG=XDtPlQcNRI{4sWgn75Qbl65j|E_ihPTiF1ljS&!)>@-`{lw&Q zNP}|~Qcsb2 z&1+=*;sHa5*FK-wTg@x>hs{13FL@>|>xb1XJp4l1Kd?kvOh0PAOcnU9B~ZG=B?flB zW(98bx`l4(ZQ0bv63c0itAY*nbGH@nt7dY06V$|!Gbmp3!|H?@qt zuj|jBemzyEJVvKmt*Be*u@t}4ZfZB=K)Xpd4WxsZk ztK~xkVFKz#f6&fZw_skTcWW9-cuH``7M=dP9f11F0AREHp){X6iTa~Gz0^6{Aem|4<%FZV0EpWjmn@ZdzTl7&%1fZ$BGUH({F<76jX;p|yLa;Q=hE>al3!{wOCSopWx{(eP@2z*S;bf%or=*_ z=RZ0AvZ`04B7Cp8b!d_q3T||kRI8~=h4ftw$-I(4bCvJ-hnsO1Hs!Asd{T|Tb{78c z61u%aLFI!f0=s`mOyB~fz-)zd@Vd&ahh6I$O3Y5k$xGn^z}xog62?mGL6~^R_WQ#; z6x-z-Os52IN+>9)o`5?bzF7t(m3Koe!4F+O-}A$#0?J!;p<4+Tu&%wk{a+2x8T+^8 zRQ@|TEkZ!9=Eih#`LOcZDx*q5-alXac5{Lo-zC?FZ78j{IhbeL%sf4mI=c1xC7o_Mb}&( z`KwJ}Cb%rRoYO6tNFB#s>%mdv%*>hnsE<@ zbtq$-eoGau;5s)ML-BTK3TNkIS7aGR+ooy#Vq#U7`Qmu}OOm_6<(bS_W})F$MoB&r zwMGNx7FX_0UihUH+rtOqRYx(02=vW0u~1|G+({QLwICD$Y6G6^w*+YefR6|MDY=9) zg#Rey-@~#zd?CQOg;YSoN4pK1{2Ai|@y3q~ulG97c-H(3L-T%3U@5KW$UYOjHv=ZT zO>;BBre{@32EYW~?+g$sg8~gD0RAEYhHS!h1(6(wDjL%kjlDd^+!D1qLV&2OEt!8f zQo}cFze0pNo4R!`}S~@Omi-BcPAvK`aZv0*Ih9jP3lfp*Vx4M z2?Bp@A_;YT*$ays$6GI`&BT(a^NDH89O$G|9@ce;Ur_e+bCRu;k$GXPHXV7#$Ra%B z7|+GQ81jVx?^pHV4G+>2xt|=f9nz6Va>CHam}N!a#HeBgLjB>dq63AQ_RN&)ygmIT zFSwUkjOLYk3VZ*Bx~!}D5FKgirt8BsLGO%M469xV|Q(+{upwC)=1cd_Vxi8atBR`ir`24c1d-;XdLc;S!d0Jb=SJ? z5ne5FG+ZVwOu1^Hb~GL!u*z>e5=uCVzzSx}SOwR~?oaa(+X)wl!|wfyWEW&2@+dhB z`me|?6buq*z=Mr22x0dDaPmV@tN=3&+sx2oBbp4htlL^AexcfLche&$_`15vdZ(*3OxS4MlW}ceo zb^5Yd-h+f%r8rgm*;b3U1sx0(PQ!z>yxJ*~7>cB{HPOAAqYbkYtWKRP#{E{DihlM-Se>+&mN)jN29=y>DzL0RPJg!RcxA%oYs`7gH9C=d zaK#GK+1C&Knx~4%=x8DmIz-jj@(Bne$cVYWR~aHWrUoyPZ!MQ~aJ&M7ScnL8Vcmac|LhpILa0cu@Qo}Mj9d|vg=8_t zY*ky|vv1;#cj}qtV{D%+pr1F%@x~&#F36at zY$S0>c_*H*Lyn1{dxsqVZ;;Iq5-y_Gr}ZGxyf{B;(;se7A%MS;?8=K(mL4> z*cBZ-CUrn;;9 zFEaBH%xd~C+;|lDLO{~f*lg;qV)auu0iI?CcnpUAQpph~{+puH^bLjg+q1?^4i`6} z8y@q2@YBxBYhZk#(;YNXF-#*kbJ;w_@Wc&^rmkyN)cJF0NNUZVOE?P&*@{3W+MEm~ aEAbUK!%<5vxrhM`?&4tn)MH5~_5TOYydeYt literal 0 HcmV?d00001 diff --git a/library/webview/script/microsoft.web.webview2.1.0.664.37/LICENSE.txt b/library/webview/script/microsoft.web.webview2.1.0.664.37/LICENSE.txt new file mode 100644 index 0000000..3673d17 --- /dev/null +++ b/library/webview/script/microsoft.web.webview2.1.0.664.37/LICENSE.txt @@ -0,0 +1,27 @@ +Copyright (C) Microsoft Corporation. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * The name of Microsoft Corporation, or the names of its contributors +may not be used to endorse or promote products derived from this +software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/library/webview/script/microsoft.web.webview2.1.0.664.37/Microsoft.Web.WebView2.nuspec b/library/webview/script/microsoft.web.webview2.1.0.664.37/Microsoft.Web.WebView2.nuspec new file mode 100644 index 0000000..147d531 --- /dev/null +++ b/library/webview/script/microsoft.web.webview2.1.0.664.37/Microsoft.Web.WebView2.nuspec @@ -0,0 +1,21 @@ + + + + Microsoft.Web.WebView2 + 1.0.664.37 + Microsoft + false + LICENSE.txt + https://aka.ms/deprecateLicenseUrl + https://aka.ms/webview + https://aka.ms/webviewlogo + The WebView2 control enables you to embed web technologies (HTML, CSS, and JavaScript) in your native applications powered by Microsoft Edge (Chromium). +This package is necessary for Win 32 C/C++ applications. To learn more about package versions checkout https://aka.ms/wv2-packageversion. To learn best practices checkout: https://aka.ms/wv2-bestpractices. + Release notes are at https://aka.ms/webviewrelease + © Microsoft Corporation. All rights reserved. + Microsoft Web WebView Native native package Edge C++ Win32 Webview2 + + + + + \ No newline at end of file diff --git a/library/webview/script/microsoft.web.webview2.1.0.664.37/WebView2.idl b/library/webview/script/microsoft.web.webview2.1.0.664.37/WebView2.idl new file mode 100644 index 0000000..59bf8f6 --- /dev/null +++ b/library/webview/script/microsoft.web.webview2.1.0.664.37/WebView2.idl @@ -0,0 +1,2755 @@ +// Copyright (C) Microsoft Corporation. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// # API Review +// All APIs need API review. List API review documents here with the URI to the +// doc and the change ID of the IDL when the document was created. +// API documents: +// * 916246ec [WebView2 API Specification](https://aka.ms/WebView2APISpecification) +// +// # Style +// Follow the [Win32 API Design Guidelines](https://aka.ms/Win32APIDesignGuidelines) +// while editing this file. For any style rules unspecified follow the Anaheim +// style. Specifically, follow Anaheim indenting and line limit style rules in +// this file. +// +// # Documentation +// Please ensure that any new API includes complete documentation in its +// JavaDoc comments in this file and sample usage in the Sample App. +// Comments intended for public API documentation should start with 3 slashes. +// The first sentence is the brief the brief description of the API and +// shouldn't include the name of the API. Use markdown to style your public API +// documentation. +// +// # WebView and JavaScript capitalization +// camel case | webViewExample | javaScriptExample +// Pascal case | WebViewExample | JavaScriptExample +// Upper case | WEBVIEW_EXAMPLE | JAVASCRIPT_EXAMPLE +// +// That said, in API names use the term 'script' rather than 'JavaScript'. +// Script is shorter and there is only one supported scripting language on the +// web so the specificity of JavaScript is unnecessary. +// +// # URI (not URL) +// We use Uri in parameter names and type names +// throughout. URIs identify resources while URLs (a subset of URIs) also +// locates resources. This difference is not generally well understood. Because +// all URLs are URIs we can ignore the conversation of trying to explain the +// difference between the two and still be technically accurate by always using +// the term URI. Additionally, whether a URI is locatable depends on the context +// since end developers can at runtime specify custom URI scheme resolvers. +// +// # Event pattern +// Events have a method to add and to remove event handlers: +// ``` +// HRESULT add_{EventName}( +// ICoreWebView2{EventName}EventHandler* eventHandler, +// EventRegistrationToken* token); +// +// HRESULT remove_{EventName}(EventRegistrationToken token); +// ``` +// Add takes an event handler delegate interface with a single Invoke method. +// ``` +// ICoreWebView2{EventName}EventHandler::Invoke( +// {SenderType}* sender, +// ICoreWebView2{EventHandler}EventArgs* args); +// ``` +// The Invoke method has two parameters. The first is the sender, the object +// which is firing the event. The second is the EventArgs type. It doesn't take +// the event arg parameters directly so we can version interfaces correctly. +// If the event has no properties on its event args type, then the Invoke method +// should take IUnknown* as its event args parameter so it is possible to add +// event args interfaces in the future without requiring a new event. For events +// with no sender (a static event), the Invoke method has only the event args +// parameter. +// +// # Deferrable event pattern +// Generally, events should be deferrable when their event args have settable +// properties. In order for the caller to use asynchronous methods to produce +// the value for those settable properties we must allow the caller to defer +// the WebView reading those properties until asynchronously later. A deferrable +// event should have the following method on its event args interface: +// `HRESULT GetDeferral([out, retval] ICoreWebView2Deferral** deferral);` +// If called, the event is deferred and calling Complete on the +// ICoreWebView2Deferral ends the deferral. +// +// # Asynchronous method pattern +// Async methods take a final parameter that is the completed handler: +// `{MethodName}(..., ICoreWebView2{MethodName}CompletedHandler* handler)` +// The handler has a single Invoke method: +// `ICoreWebView2{MethodName}CompletedHandler::Invoke( +// HRESULT errorCode, {AsyncReturnType});` +// +// # Property pattern +// For properties with getters in IDL you have +// `[propget] HRESULT {PropertyName}([out, retval] {PropertyType}*)` +// And for properties which also have setters in IDL you have +// `[propput] HRESULT {PropertyName}([in] {PropertyType});` +// +// # Versioning +// The loader DLL may be older or newer than the client DLL. We have to deal +// with compatibility across several dimensions: +// * There's the DLL export contract between the loader DLL and the client +// DLL as well as the interfaces defined in this IDL that are built into both +// the app code and the client DLL. +// * There are two kinds of versioned changes we need to be able to make: +// compatible changes and breaking changes. In both cases we need to make the +// change in a safe manner. For compatible that means everything continues to +// work unchanged despite the loader and client being different versions. For +// breaking changes this means the host app is unable to create a +// WebView using the different version browser and receives an associated +// error message (doesn't crash). +// * We also need to consider when the loader and host app is using a newer +// version than the browser and when the loader and host app is using an +// older version than the browser. +// +// ## Scenario 1: Older SDK in host app, Newer browser, Compatible change +// In order to be compatible the newer client DLL must still support the older +// client DLL exports. Similarly for the interfaces - they must all be exactly +// the same with no modified IIDs, no reordered methods, no modified method +// parameters and so on. The client DLL may have more DLL exports and more interfaces +// but no changes to the older shipped DLL export or interfaces. +// App code doesn't need to do anything special in this case. +// +// ## Scenario 2: Older SDK in host app, Newer browser, Breaking change +// For breaking changes in the DLL export, the client DLL must change the DLL +// export name. The old loader will attempt to use the old client DLL export. +// When the loader finds the export missing it will fail. +// For breaking changes in the interface, we must change the IID of the modified +// interface. Additionally the loader DLL must validate that the returned object +// supports the IID it expects and fail otherwise. +// The app code must ensure that WebView objects succeed in their QueryInterface +// calls. Basically the app code must have error handling for objects failing +// QueryInterface and for the initial creation failing in order to handle +// breaking changes gracefully. +// +// ## Scenario 3: Newer SDK in host app, Older browser, Compatible change +// In order to be compatible, the newer loader DLL must fallback to calling the +// older client DLL exports if the client DLL doesn't have the most recent DLL +// exports. +// For interface versioning the loader DLL shouldn't be impacted. +// The app code must not assume an object supports all newer versioned +// interfaces. Ideally it checks the success of QueryInterface for newer +// interfaces and if not supported turns off associated app features or +// otherwise fails gracefully. +// +// ## Scenario 4: Newer SDK in host app, Older browser, Breaking change +// For breaking changes in the DLL export, a new export name will be used after +// a breaking change and the loader DLL will just not check for pre-breaking +// change exports from the client DLL. If the client DLL doesn't have the +// correct exports, then the loader returns failure to the caller. +// For breaking changes in the interface, the IIDs of broken interfaces will +// have been modified. The loader will validate that the +// object returned supports the correct base interface IID and return failure to +// the caller otherwise. +// The app code must allow for QueryInterface calls to fail if the object +// doesn't support the newer IIDs. +// +// ## Actions +// * DLL export compatible changes: Create a new DLL export with a new name. +// Ideally implement the existing DLL export as a call into the new DLL +// export to reduce upkeep burden. +// * DLL export breaking changes: Give the modified DLL export a new name and +// remove all older DLL exports. +// * Interface compatible changes: Don't modify shipped interfaces. Add a new +// interface with an incremented version number suffix +// (ICoreWebView2_3) or feature group name suffix +// (ICoreWebView2WithNavigationHistory). +// * Interface breaking changes: After modifying a shipped interface, give it +// a new IID. +// * Loader: When finding the client DLL export it must check its known range +// of compatible exports in order from newest to oldest and use the newest +// one found. It must not attempt to use an older export from before a +// breaking change. Before returning objects to the caller, the loader must +// validate that the object actually implements the expected interface. +// * App code: Check for error from the DLL export methods as they can fail if +// the loader is used with an old browser from before a breaking change or +// with a newer browser that is after a breaking change. +// Check for errors when calling QueryInterface on a WebView object. The +// QueryInterface call may fail with E_NOINTERFACE if the object is from an +// older browser version that doesn't support the newer interface or if +// using a newer browser version that had a breaking change on that +// interface. +import "objidl.idl"; +import "oaidl.idl"; +import "EventToken.idl"; + +[uuid(26d34152-879f-4065-bea2-3daa2cfadfb8), version(1.0)] +library WebView2 { + +// Interface forward declarations +interface ICoreWebView2AcceleratorKeyPressedEventArgs; +interface ICoreWebView2AcceleratorKeyPressedEventHandler; +interface ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler; +interface ICoreWebView2CallDevToolsProtocolMethodCompletedHandler; +interface ICoreWebView2CapturePreviewCompletedHandler; +interface ICoreWebView2; +interface ICoreWebView2Controller; +interface ICoreWebView2ContentLoadingEventArgs; +interface ICoreWebView2ContentLoadingEventHandler; +interface ICoreWebView2DocumentTitleChangedEventHandler; +interface ICoreWebView2ContainsFullScreenElementChangedEventHandler; +interface ICoreWebView2CreateCoreWebView2ControllerCompletedHandler; +interface ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler; +interface ICoreWebView2Deferral; +interface ICoreWebView2DevToolsProtocolEventReceivedEventArgs; +interface ICoreWebView2DevToolsProtocolEventReceivedEventHandler; +interface ICoreWebView2DevToolsProtocolEventReceiver; +interface ICoreWebView2Environment; +interface ICoreWebView2EnvironmentOptions; +interface ICoreWebView2ExecuteScriptCompletedHandler; +interface ICoreWebView2FocusChangedEventHandler; +interface ICoreWebView2HistoryChangedEventHandler; +interface ICoreWebView2HttpHeadersCollectionIterator; +interface ICoreWebView2HttpRequestHeaders; +interface ICoreWebView2HttpResponseHeaders; +interface ICoreWebView2MoveFocusRequestedEventArgs; +interface ICoreWebView2MoveFocusRequestedEventHandler; +interface ICoreWebView2NavigationCompletedEventArgs; +interface ICoreWebView2NavigationCompletedEventHandler; +interface ICoreWebView2NavigationStartingEventArgs; +interface ICoreWebView2NavigationStartingEventHandler; +interface ICoreWebView2NewBrowserVersionAvailableEventHandler; +interface ICoreWebView2NewWindowRequestedEventArgs; +interface ICoreWebView2NewWindowRequestedEventHandler; +interface ICoreWebView2PermissionRequestedEventArgs; +interface ICoreWebView2PermissionRequestedEventHandler; +interface ICoreWebView2ProcessFailedEventArgs; +interface ICoreWebView2ProcessFailedEventHandler; +interface ICoreWebView2ScriptDialogOpeningEventArgs; +interface ICoreWebView2ScriptDialogOpeningEventHandler; +interface ICoreWebView2Settings; +interface ICoreWebView2SourceChangedEventArgs; +interface ICoreWebView2SourceChangedEventHandler; +interface ICoreWebView2WebMessageReceivedEventArgs; +interface ICoreWebView2WebMessageReceivedEventHandler; +interface ICoreWebView2WebResourceRequest; +interface ICoreWebView2WebResourceRequestedEventArgs; +interface ICoreWebView2WebResourceRequestedEventHandler; +interface ICoreWebView2WebResourceResponse; +interface ICoreWebView2WindowCloseRequestedEventHandler; +interface ICoreWebView2WindowFeatures; +interface ICoreWebView2ZoomFactorChangedEventHandler; + +// Enums and structs +/// Image format used by the ICoreWebView2::CapturePreview method. +[v1_enum] +typedef enum COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT { + /// PNG image format. + COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT_PNG, + /// JPEG image format. + COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT_JPEG, +} COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT; + +/// Kind of JavaScript dialog used in the +/// ICoreWebView2ScriptDialogOpeningEventHandler interface. +[v1_enum] +typedef enum COREWEBVIEW2_SCRIPT_DIALOG_KIND { + /// A dialog invoked via the window.alert JavaScript function. + COREWEBVIEW2_SCRIPT_DIALOG_KIND_ALERT, + /// A dialog invoked via the window.confirm JavaScript function. + COREWEBVIEW2_SCRIPT_DIALOG_KIND_CONFIRM, + /// A dialog invoked via the window.prompt JavaScript function. + COREWEBVIEW2_SCRIPT_DIALOG_KIND_PROMPT, + /// A dialog invoked via the beforeunload JavaScript event. + COREWEBVIEW2_SCRIPT_DIALOG_KIND_BEFOREUNLOAD, +} COREWEBVIEW2_SCRIPT_DIALOG_KIND; + +/// Kind of process failure used in the ICoreWebView2ProcessFailedEventHandler +/// interface. +[v1_enum] +typedef enum COREWEBVIEW2_PROCESS_FAILED_KIND { + /// Indicates the browser process terminated unexpectedly. + /// The WebView automatically goes into the Closed state. + /// The app has to recreate a new WebView to recover from this failure. + COREWEBVIEW2_PROCESS_FAILED_KIND_BROWSER_PROCESS_EXITED, + + /// Indicates the render process terminated unexpectedly. + /// A new render process will be created automatically and navigated to an + /// error page. + /// The app can use Reload to try to recover from this failure. + COREWEBVIEW2_PROCESS_FAILED_KIND_RENDER_PROCESS_EXITED, + + /// Indicates the render process becomes unresponsive. + // Note that this does not seem to work right now. + // Does not fire for simple long running script case, the only related test + // SitePerProcessBrowserTest::NoCommitTimeoutForInvisibleWebContents is + // disabled. + COREWEBVIEW2_PROCESS_FAILED_KIND_RENDER_PROCESS_UNRESPONSIVE, +} COREWEBVIEW2_PROCESS_FAILED_KIND; + +/// The type of a permission request. +[v1_enum] +typedef enum COREWEBVIEW2_PERMISSION_KIND { + /// Unknown permission. + COREWEBVIEW2_PERMISSION_KIND_UNKNOWN_PERMISSION, + + /// Permission to capture audio. + COREWEBVIEW2_PERMISSION_KIND_MICROPHONE, + + /// Permission to capture video. + COREWEBVIEW2_PERMISSION_KIND_CAMERA, + + /// Permission to access geolocation. + COREWEBVIEW2_PERMISSION_KIND_GEOLOCATION, + + /// Permission to send web notifications. + /// This permission request is currently auto rejected and + /// no event is fired for it. + COREWEBVIEW2_PERMISSION_KIND_NOTIFICATIONS, + + /// Permission to access generic sensor. + /// Generic Sensor covering ambient-light-sensor, accelerometer, gyroscope + /// and magnetometer. + COREWEBVIEW2_PERMISSION_KIND_OTHER_SENSORS, + + /// Permission to read system clipboard without a user gesture. + COREWEBVIEW2_PERMISSION_KIND_CLIPBOARD_READ, +} COREWEBVIEW2_PERMISSION_KIND; + +/// Response to a permission request. +[v1_enum] +typedef enum COREWEBVIEW2_PERMISSION_STATE { + /// Use default browser behavior, which normally prompt users for decision. + COREWEBVIEW2_PERMISSION_STATE_DEFAULT, + + /// Grant the permission request. + COREWEBVIEW2_PERMISSION_STATE_ALLOW, + + /// Deny the permission request. + COREWEBVIEW2_PERMISSION_STATE_DENY, +} COREWEBVIEW2_PERMISSION_STATE; + +/// Error status values for web navigations. +[v1_enum] +typedef enum COREWEBVIEW2_WEB_ERROR_STATUS { + /// An unknown error occurred. + COREWEBVIEW2_WEB_ERROR_STATUS_UNKNOWN, + + /// The SSL certificate common name does not match the web address. + COREWEBVIEW2_WEB_ERROR_STATUS_CERTIFICATE_COMMON_NAME_IS_INCORRECT, + + /// The SSL certificate has expired. + COREWEBVIEW2_WEB_ERROR_STATUS_CERTIFICATE_EXPIRED, + + /// The SSL client certificate contains errors. + COREWEBVIEW2_WEB_ERROR_STATUS_CLIENT_CERTIFICATE_CONTAINS_ERRORS, + + /// The SSL certificate has been revoked. + COREWEBVIEW2_WEB_ERROR_STATUS_CERTIFICATE_REVOKED, + + /// The SSL certificate is invalid -- this could mean the certificate did not + /// match the public key pins for the host name, the certificate is signed by + /// an untrusted authority or using a weak sign algorithm, the certificate + /// claimed DNS names violate name constraints, the certificate contains a + /// weak key, the certificate's validity period is too long, lack of + /// revocation information or revocation mechanism, non-unique host name, lack + /// of certificate transparency information, or the certificate is chained to + /// a [legacy Symantec + /// root](https://security.googleblog.com/2018/03/distrust-of-symantec-pki-immediate.html). + COREWEBVIEW2_WEB_ERROR_STATUS_CERTIFICATE_IS_INVALID, + + /// The host is unreachable. + COREWEBVIEW2_WEB_ERROR_STATUS_SERVER_UNREACHABLE, + + /// The connection has timed out. + COREWEBVIEW2_WEB_ERROR_STATUS_TIMEOUT, + + /// The server returned an invalid or unrecognized response. + COREWEBVIEW2_WEB_ERROR_STATUS_ERROR_HTTP_INVALID_SERVER_RESPONSE, + + /// The connection was aborted. + COREWEBVIEW2_WEB_ERROR_STATUS_CONNECTION_ABORTED, + + /// The connection was reset. + COREWEBVIEW2_WEB_ERROR_STATUS_CONNECTION_RESET, + + /// The Internet connection has been lost. + COREWEBVIEW2_WEB_ERROR_STATUS_DISCONNECTED, + + /// Cannot connect to destination. + COREWEBVIEW2_WEB_ERROR_STATUS_CANNOT_CONNECT, + + /// Could not resolve provided host name. + COREWEBVIEW2_WEB_ERROR_STATUS_HOST_NAME_NOT_RESOLVED, + + /// The operation was canceled. + COREWEBVIEW2_WEB_ERROR_STATUS_OPERATION_CANCELED, + + /// The request redirect failed. + COREWEBVIEW2_WEB_ERROR_STATUS_REDIRECT_FAILED, + + /// An unexpected error occurred. + COREWEBVIEW2_WEB_ERROR_STATUS_UNEXPECTED_ERROR, +} COREWEBVIEW2_WEB_ERROR_STATUS; + +/// Enum for web resource request contexts. +[v1_enum] +typedef enum COREWEBVIEW2_WEB_RESOURCE_CONTEXT { + /// All resources + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_ALL, + /// Document resources + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_DOCUMENT, + /// CSS resources + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_STYLESHEET, + /// Image resources + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_IMAGE, + /// Other media resources such as videos + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_MEDIA, + /// Font resources + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_FONT, + /// Script resources + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_SCRIPT, + /// XML HTTP requests + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_XML_HTTP_REQUEST, + /// Fetch API communication + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_FETCH, + /// TextTrack resources + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_TEXT_TRACK, + /// EventSource API communication + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_EVENT_SOURCE, + /// WebSocket API communication + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_WEBSOCKET, + /// Web App Manifests + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_MANIFEST, + /// Signed HTTP Exchanges + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_SIGNED_EXCHANGE, + /// Ping requests + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_PING, + /// CSP Violation Reports + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_CSP_VIOLATION_REPORT, + /// Other resources + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_OTHER +} COREWEBVIEW2_WEB_RESOURCE_CONTEXT; + +/// Reason for moving focus. +[v1_enum] +typedef enum COREWEBVIEW2_MOVE_FOCUS_REASON { + /// Code setting focus into WebView. + COREWEBVIEW2_MOVE_FOCUS_REASON_PROGRAMMATIC, + + /// Moving focus due to Tab traversal forward. + COREWEBVIEW2_MOVE_FOCUS_REASON_NEXT, + + /// Moving focus due to Tab traversal backward. + COREWEBVIEW2_MOVE_FOCUS_REASON_PREVIOUS, +} COREWEBVIEW2_MOVE_FOCUS_REASON; + +/// The type of key event that triggered an AcceleratorKeyPressed event. +[v1_enum] +typedef enum COREWEBVIEW2_KEY_EVENT_KIND { + /// Correspond to window message WM_KEYDOWN. + COREWEBVIEW2_KEY_EVENT_KIND_KEY_DOWN, + + /// Correspond to window message WM_KEYUP. + COREWEBVIEW2_KEY_EVENT_KIND_KEY_UP, + + /// Correspond to window message WM_SYSKEYDOWN. + COREWEBVIEW2_KEY_EVENT_KIND_SYSTEM_KEY_DOWN, + + /// Correspond to window message WM_SYSKEYUP. + COREWEBVIEW2_KEY_EVENT_KIND_SYSTEM_KEY_UP, +} COREWEBVIEW2_KEY_EVENT_KIND; + +/// A structure representing the information packed into the LPARAM given +/// to a Win32 key event. See the documentation for WM_KEYDOWN for details +/// at https://docs.microsoft.com/windows/win32/inputdev/wm-keydown +typedef struct COREWEBVIEW2_PHYSICAL_KEY_STATUS { + /// The repeat count for the current message. + UINT32 RepeatCount; + /// The scan code. + UINT32 ScanCode; + /// Indicates whether the key is an extended key. + BOOL IsExtendedKey; + /// The context code. + BOOL IsMenuKeyDown; + /// The previous key state. + BOOL WasKeyDown; + /// The transition state. + BOOL IsKeyReleased; +} COREWEBVIEW2_PHYSICAL_KEY_STATUS; +// End of enums and structs + +/// WebView2 enables you to host web content using the +/// latest Edge web browser technology. +/// +/// ## Navigation events +/// The normal sequence of navigation events is NavigationStarting, +/// SourceChanged, ContentLoading and then NavigationCompleted. +/// The following events describe the state of WebView during each navigation: +/// NavigationStarting: WebView is starting to navigate and the navigation will +/// result in a network request. The host can disallow the request at this time. +/// SourceChanged: The source of WebView is changed to a new URL. This may also +/// be due to a navigation that doesn't cause a network request such as a fragment +/// navigation. +/// HistoryChanged: WebView's history has been updated as a result of +/// the navigation. +/// ContentLoading: WebView has started loading new content. +/// NavigationCompleted: WebView has completed loading content on the new page. +/// Developers can track navigations to each new document by the navigation ID. +/// WebView's navigation ID changes every time there is a successful navigation +/// to a new document. +/// +/// +/// \dot +/// digraph NavigationEvents { +/// node [fontname=Roboto, shape=rectangle] +/// edge [fontname=Roboto] +/// +/// NewDocument -> NavigationStarting; +/// NavigationStarting -> SourceChanged -> ContentLoading [label="New Document"]; +/// ContentLoading -> HistoryChanged; +/// SameDocument -> SourceChanged; +/// SourceChanged -> HistoryChanged [label="Same Document"]; +/// HistoryChanged -> NavigationCompleted; +/// NavigationStarting -> NavigationStarting [label="Redirect"]; +/// NavigationStarting -> NavigationCompleted [label="Failure"]; +/// } +/// \enddot +/// +/// Note that this is for navigation events with the same NavigationId event +/// arg. Navigations events with different NavigationId event args may overlap. +/// For instance, if you start a navigation wait for its NavigationStarting +/// event and then start another navigation you'll see the NavigationStarting +/// for the first navigate followed by the NavigationStarting of the second +/// navigate, followed by the NavigationCompleted for the first navigation and +/// then all the rest of the appropriate navigation events for the second +/// navigation. +/// In error cases there may or may not be a ContentLoading event depending +/// on whether the navigation is continued to an error page. +/// In case of an HTTP redirect, there will be multiple NavigationStarting +/// events in a row, with ones following the first will have their IsRedirect +/// flag set, however navigation ID remains the same. Same document navigations +/// do not result in NavigationStarting event and also do not increment the +/// navigation ID. +/// +/// To monitor or cancel navigations inside subframes in the WebView, use +/// FrameNavigationStarting. +/// +/// ## Process model +/// WebView2 uses the same process model as the Edge web +/// browser. There is one Edge browser process per specified user data directory +/// in a user session that will serve any WebView2 calling +/// process that specifies that user data directory. This means one Edge browser +/// process may be serving multiple calling processes and one calling +/// process may be using multiple Edge browser processes. +/// +/// \dot +/// digraph ProcessModelNClientsNServers { +/// node [fontname=Roboto, shape=rectangle]; +/// edge [fontname=Roboto]; +/// +/// Host1 [label="Calling\nprocess 1"]; +/// Host2 [label="Calling\nprocess 2"]; +/// Browser1 [label="Edge processes\ngroup 1"]; +/// Browser2 [label="Edge processes\ngroup 2"]; +/// +/// Host1 -> Browser1; +/// Host1 -> Browser2; +/// Host2 -> Browser2; +/// } +/// \enddot +/// +/// Associated with each browser process there will be some number of +/// render processes. +/// These are created as +/// necessary to service potentially multiple frames in different WebViews. The +/// number of render processes varies based on the site isolation browser +/// feature and the number of distinct disconnected origins rendered in +/// associated WebViews. +/// +/// \dot +/// digraph ProcessModelClientServer { +/// node [fontname=Roboto, shape=rectangle]; +/// edge [fontname=Roboto]; +/// graph [fontname=Roboto]; +/// +/// Host [label="Calling process"]; +/// subgraph cluster_0 { +/// labeljust = "l"; +/// label = "Edge processes group"; +/// Browser [label="Edge browser\nprocess"]; +/// Render1 [label="Edge render\nprocess 1"]; +/// Render2 [label="Edge render\nprocess 2"]; +/// RenderN [label="Edge render\nprocess N"]; +/// GPU [label="Edge GPU\nprocess"]; +/// } +/// +/// Host -> Browser; +/// Browser -> Render1; +/// Browser -> Render2; +/// Browser -> RenderN; +/// Browser -> GPU; +/// } +/// \enddot +/// +/// You can react to crashes and hangs in these browser and render processes +/// using the ProcessFailure event. +/// +/// You can safely shutdown associated browser and render processes using the +/// Close method. +/// +/// ## Threading model +/// The WebView2 must be created on a UI thread. Specifically a +/// thread with a message pump. All callbacks will occur on that thread and +/// calls into the WebView must be done on that thread. It is not safe to use +/// the WebView from another thread. +/// +/// Callbacks including event handlers and completion handlers execute serially. +/// That is, if you have an event handler running and begin a message loop no +/// other event handlers or completion callbacks will begin executing +/// reentrantly. +/// +/// ## Security +/// Always check the Source property of the WebView before using ExecuteScript, +/// PostWebMessageAsJson, PostWebMessageAsString, or any other method to send +/// information into the WebView. The WebView may have navigated to another page +/// via the end user interacting with the page or script in the page causing +/// navigation. Similarly, be very careful with +/// AddScriptToExecuteOnDocumentCreated. All future navigations will run this +/// script and if it provides access to information intended only for a certain +/// origin, any HTML document may have access. +/// +/// When examining the result of an ExecuteScript method call, a +/// WebMessageReceived event, always check the Source of the sender, or any +/// other mechanism of receiving information from an HTML document in a WebView +/// validate the URI of the HTML document is what you expect. +/// +/// When constructing a message to send into a WebView, prefer using +/// PostWebMessageAsJson and construct the JSON string parameter using a JSON +/// library. This will prevent accidentally encoding information into a JSON string +/// or script, and ensure no attacker controlled input can +/// modify the rest of the JSON message or run arbitrary script. +/// +/// ## String types +/// String out parameters are LPWSTR null terminated strings. The callee +/// allocates the string using CoTaskMemAlloc. Ownership is transferred to the +/// caller and it is up to the caller to free the memory using CoTaskMemFree. +/// +/// String in parameters are LPCWSTR null terminated strings. The caller ensures +/// the string is valid for the duration of the synchronous function call. +/// If the callee needs to retain that value to some point after the function +/// call completes, the callee must allocate its own copy of the string value. +/// +/// ## URI and JSON parsing +/// Various methods provide or accept URIs and JSON as strings. Please use your +/// own preferred library for parsing and generating these strings. +/// +/// If WinRT is available for your app you can use `Windows.Data.Json.JsonObject` +/// and `IJsonObjectStatics` to parse or produce JSON strings or `Windows.Foundation.Uri` +/// and `IUriRuntimeClassFactory` to parse and produce URIs. Both of these work +/// in Win32 apps. +/// +/// If you use IUri and CreateUri to parse URIs you may want to use the +/// following URI creation flags to have CreateUri behavior more closely match +/// the URI parsing in the WebView: +/// `Uri_CREATE_ALLOW_IMPLICIT_FILE_SCHEME | Uri_CREATE_NO_DECODE_EXTRA_INFO` +/// +/// ## Debugging +/// Open DevTools with the normal shortcuts: `F12` or `Ctrl+Shift+I`. +/// You can use the `--auto-open-devtools-for-tabs` command argument switch to +/// have the DevTools window open immediately when first creating a WebView. See +/// CreateCoreWebView2Controller documentation for how to provide additional command +/// line arguments to the browser process. +/// Check out the LoaderOverride registry key in the CreateCoreWebView2Controller +/// documentation. +/// +/// ## Versioning +/// After you've used a particular version of the SDK to build your app, your +/// app may end up running with an older or newer version of installed browser +/// binaries. Until version 1.0.0.0 of WebView2 there may be breaking changes +/// during updates that will prevent your SDK from working with different +/// versions of installed browser binaries. After version 1.0.0.0 different +/// versions of the SDK can work with different versions of the installed +/// browser by following these best practices: +/// +/// To account for breaking changes to the API be sure to check for failure when +/// calling the DLL export CreateCoreWebView2Environment and when +/// calling QueryInterface on any CoreWebView2 object. A return value of +/// E_NOINTERFACE can indicate the SDK is not compatible with the Edge +/// browser binaries. +/// +/// Checking for failure from QueryInterface will also account for cases where +/// the SDK is newer than the version of the Edge browser and your app attempts +/// to use an interface of which the Edge browser is unaware. +/// +/// When an interface is unavailable, you can consider disabling the associated +/// feature if possible, or otherwise informing the end user they need to update +/// their browser. +[uuid(76eceacb-0462-4d94-ac83-423a6793775e), object, pointer_default(unique)] +interface ICoreWebView2 : IUnknown { + /// The ICoreWebView2Settings object contains various modifiable settings for + /// the running WebView. + [propget] HRESULT Settings([out, retval] ICoreWebView2Settings** settings); + + /// The URI of the current top level document. This value potentially + /// changes as a part of the SourceChanged event firing for some cases + /// such as navigating to a different site or fragment navigations. It will + /// remain the same for other types of navigations such as page reloads or + /// history.pushState with the same URL as the current page. + /// + /// \snippet ControlComponent.cpp SourceChanged + [propget] HRESULT Source([out, retval] LPWSTR* uri); + + /// Cause a navigation of the top level document to the specified URI. See + /// the navigation events for more information. Note that this starts a + /// navigation and the corresponding NavigationStarting event will fire + /// sometime after this Navigate call completes. + /// + /// \snippet ControlComponent.cpp Navigate + HRESULT Navigate([in] LPCWSTR uri); + + /// Initiates a navigation to htmlContent as source HTML of a new + /// document. The htmlContent parameter may not be larger than 2 MB + /// in total size. The origin of the new page will be about:blank. + /// + /// \snippet SettingsComponent.cpp NavigateToString + HRESULT NavigateToString([in] LPCWSTR htmlContent); + + /// Add an event handler for the NavigationStarting event. + /// NavigationStarting fires when the WebView main frame is + /// requesting permission to navigate to a different URI. This will fire for + /// redirects as well. + /// + /// Corresponding navigations can be blocked until the event handler returns. + /// + /// \snippet SettingsComponent.cpp NavigationStarting + HRESULT add_NavigationStarting( + [in] ICoreWebView2NavigationStartingEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_NavigationStarting. + HRESULT remove_NavigationStarting( + [in] EventRegistrationToken token); + + /// Add an event handler for the ContentLoading event. + /// ContentLoading fires before any content is loaded, including scripts added + /// with AddScriptToExecuteOnDocumentCreated. + /// ContentLoading will not fire if a same page navigation occurs + /// (such as through fragment navigations or history.pushState navigations). + /// This follows the NavigationStarting and SourceChanged events and + /// precedes the HistoryChanged and NavigationCompleted events. + HRESULT add_ContentLoading( + [in] ICoreWebView2ContentLoadingEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_ContentLoading. + HRESULT remove_ContentLoading( + [in] EventRegistrationToken token); + + /// Add an event handler for the SourceChanged event. + /// SourceChanged fires when the Source property changes. + /// SourceChanged fires for navigating to a different site or fragment + /// navigations. + /// It will not fire for other types of navigations such as page reloads or + /// history.pushState with the same URL as the current page. + /// SourceChanged fires before ContentLoading for navigation to a new document. + /// + /// \snippet ControlComponent.cpp SourceChanged + HRESULT add_SourceChanged( + [in] ICoreWebView2SourceChangedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_SourceChanged. + HRESULT remove_SourceChanged( + [in] EventRegistrationToken token); + + /// Add an event handler for the HistoryChanged event. + /// HistoryChanged listens to the change of navigation history for the top + /// level document. Use HistoryChanged to check if CanGoBack/CanGoForward + /// value has changed. HistoryChanged also fires for using GoBack/GoForward. + /// HistoryChanged fires after SourceChanged and ContentLoading. + /// + /// \snippet ControlComponent.cpp HistoryChanged + HRESULT add_HistoryChanged( + [in] ICoreWebView2HistoryChangedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_HistoryChanged. + HRESULT remove_HistoryChanged( + [in] EventRegistrationToken token); + + /// Add an event handler for the NavigationCompleted event. + /// NavigationCompleted fires when the WebView has completely loaded + /// (body.onload has fired) or loading stopped with error. + /// + /// \snippet ControlComponent.cpp NavigationCompleted + HRESULT add_NavigationCompleted( + [in] ICoreWebView2NavigationCompletedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_NavigationCompleted. + HRESULT remove_NavigationCompleted( + [in] EventRegistrationToken token); + + /// Add an event handler for the FrameNavigationStarting event. + /// FrameNavigationStarting fires when a child frame in the WebView + /// requests permission to navigate to a different URI. This will fire for + /// redirects as well. + /// + /// Corresponding navigations can be blocked until the event handler returns. + /// + /// \snippet SettingsComponent.cpp FrameNavigationStarting + HRESULT add_FrameNavigationStarting( + [in] ICoreWebView2NavigationStartingEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_FrameNavigationStarting. + HRESULT remove_FrameNavigationStarting( + [in] EventRegistrationToken token); + + /// Add an event handler for the FrameNavigationCompleted event. + /// FrameNavigationCompleted fires when a child frame has completely + /// loaded (body.onload has fired) or loading stopped with error. + /// + /// \snippet ControlComponent.cpp FrameNavigationCompleted + HRESULT add_FrameNavigationCompleted( + [in] ICoreWebView2NavigationCompletedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_FrameNavigationCompleted. + HRESULT remove_FrameNavigationCompleted( + [in] EventRegistrationToken token); + + /// Add an event handler for the ScriptDialogOpening event. + /// ScriptDialogOpening fires when a JavaScript dialog (alert, confirm, + /// prompt, or beforeunload) will show for the webview. This event only fires + /// if the ICoreWebView2Settings::AreDefaultScriptDialogsEnabled property is + /// set to false. The ScriptDialogOpening event can be used to suppress + /// dialogs or replace default dialogs with custom dialogs. + /// + /// If a deferral is not taken on the event args, the subsequent scripts can be + /// blocked until the event handler returns. If a deferral is taken, then the + /// scripts are blocked until the deferral is completed. + /// + /// \snippet SettingsComponent.cpp ScriptDialogOpening + HRESULT add_ScriptDialogOpening( + [in] ICoreWebView2ScriptDialogOpeningEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_ScriptDialogOpening. + HRESULT remove_ScriptDialogOpening( + [in] EventRegistrationToken token); + + /// Add an event handler for the PermissionRequested event. + /// PermissionRequested fires when content in a WebView requests permission to + /// access some privileged resources. + /// + /// If a deferral is not taken on the event args, the subsequent scripts can + /// be blocked until the event handler returns. If a deferral is taken, then + /// the scripts are blocked until the deferral is completed. + /// + /// \snippet SettingsComponent.cpp PermissionRequested + HRESULT add_PermissionRequested( + [in] ICoreWebView2PermissionRequestedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_PermissionRequested. + HRESULT remove_PermissionRequested( + [in] EventRegistrationToken token); + + /// Add an event handler for the ProcessFailed event. + /// ProcessFailed fires when a WebView process is terminated unexpectedly or + /// becomes unresponsive. + /// + /// \snippet ProcessComponent.cpp ProcessFailed + HRESULT add_ProcessFailed( + [in] ICoreWebView2ProcessFailedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_ProcessFailed. + HRESULT remove_ProcessFailed( + [in] EventRegistrationToken token); + + /// Add the provided JavaScript to a list of scripts that should be executed + /// after the global object has been created, but before the HTML document has + /// been parsed and before any other script included by the HTML document is + /// executed. This method injects a script that runs on all top-level document + /// and child frame page navigations. + /// This method runs asynchronously, and you must wait for the completion + /// handler to finish before the injected script is ready to run. When this + /// method completes, the handler's `Invoke` method is called with the `id` of + /// the injected script. `id` is a string. To remove the injected script, use + /// `RemoveScriptToExecuteOnDocumentCreated`. + /// + /// Note that if an HTML document has sandboxing of some kind via + /// [sandbox](https://developer.mozilla.org/docs/Web/HTML/Element/iframe#attr-sandbox) + /// properties or the [Content-Security-Policy HTTP + /// header](https://developer.mozilla.org/docs/Web/HTTP/Headers/Content-Security-Policy) + /// this will affect the script run here. So, for example, if the + /// 'allow-modals' keyword is not set then calls to the `alert` function will + /// be ignored. + /// + /// \snippet ScriptComponent.cpp AddScriptToExecuteOnDocumentCreated + HRESULT AddScriptToExecuteOnDocumentCreated( + [in] LPCWSTR javaScript, + [in] ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler* handler); + + /// Remove the corresponding JavaScript added using `AddScriptToExecuteOnDocumentCreated` + /// with the specified script id. + HRESULT RemoveScriptToExecuteOnDocumentCreated([in] LPCWSTR id); + + /// Execute JavaScript code from the javascript parameter in the + /// current top level document rendered in the WebView. This will execute + /// asynchronously and when complete, if a handler is provided in the + /// ExecuteScriptCompletedHandler parameter, its Invoke method will be + /// called with the result of evaluating the provided JavaScript. The result + /// value is a JSON encoded string. + /// If the result is undefined, contains a reference cycle, or otherwise + /// cannot be encoded into JSON, the JSON null value will be returned as the + /// string 'null'. Note that a function that has no explicit return value + /// returns undefined. + /// If the executed script throws an unhandled exception, then the result is + /// also 'null'. + /// This method is applied asynchronously. If the method is called after + /// NavigationStarting event during a navigation, the script will be executed + /// in the new document when loading it, around the time ContentLoading is + /// fired. ExecuteScript will work even if + /// ICoreWebView2Settings::IsScriptEnabled is set to FALSE. + /// + /// \snippet ScriptComponent.cpp ExecuteScript + HRESULT ExecuteScript( + [in] LPCWSTR javaScript, + [in] ICoreWebView2ExecuteScriptCompletedHandler* handler); + + /// Capture an image of what WebView is displaying. Specify the + /// format of the image with the imageFormat parameter. + /// The resulting image binary data is written to the provided imageStream + /// parameter. When CapturePreview finishes writing to the stream, the Invoke + /// method on the provided handler parameter is called. + /// + /// \snippet FileComponent.cpp CapturePreview + HRESULT CapturePreview( + [in] COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + [in] IStream* imageStream, + [in] ICoreWebView2CapturePreviewCompletedHandler* handler); + + /// Reload the current page. This is similar to navigating to the URI of + /// current top level document including all navigation events firing and + /// respecting any entries in the HTTP cache. But, the back/forward history + /// will not be modified. + HRESULT Reload(); + + /// Post the specified webMessage to the top level document in this WebView. + /// The top level document's window.chrome.webview's message event fires. + /// JavaScript in that document may subscribe and unsubscribe to the event + /// via the following: + /// + /// ``` + /// window.chrome.webview.addEventListener('message', handler) + /// window.chrome.webview.removeEventListener('message', handler) + /// ``` + /// + /// The event args is an instance of `MessageEvent`. + /// The ICoreWebView2Settings::IsWebMessageEnabled setting must be true or + /// this method will fail with E_INVALIDARG. + /// The event arg's data property is the webMessage string parameter parsed + /// as a JSON string into a JavaScript object. + /// The event arg's source property is a reference to the + /// `window.chrome.webview` object. + /// See add_WebMessageReceived for information on sending messages from the + /// HTML document in the WebView to the host. + /// This message is sent asynchronously. If a navigation occurs before the + /// message is posted to the page, then the message will not be sent. + /// + /// \snippet ScenarioWebMessage.cpp WebMessageReceived + HRESULT PostWebMessageAsJson([in] LPCWSTR webMessageAsJson); + + /// This is a helper for posting a message that is a simple string + /// rather than a JSON string representation of a JavaScript object. This + /// behaves in exactly the same manner as PostWebMessageAsJson but the + /// `window.chrome.webview` message event arg's data property will be a string + /// with the same value as webMessageAsString. Use this instead of + /// PostWebMessageAsJson if you want to communicate via simple strings rather + /// than JSON objects. + HRESULT PostWebMessageAsString([in] LPCWSTR webMessageAsString); + + /// Add an event handler for the WebMessageReceived event. + /// WebMessageReceived fires when the + /// ICoreWebView2Settings::IsWebMessageEnabled setting is set and the top + /// level document of the WebView calls `window.chrome.webview.postMessage`. + /// The postMessage function is `void postMessage(object)` where + /// object is any object supported by JSON conversion. + /// + /// \snippet ScenarioWebMessage.html chromeWebView + /// + /// When postMessage is called, the handler's Invoke method will be called + /// with the postMessage's object parameter converted to a JSON string. + /// + /// \snippet ScenarioWebMessage.cpp WebMessageReceived + HRESULT add_WebMessageReceived( + [in] ICoreWebView2WebMessageReceivedEventHandler* handler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_WebMessageReceived. + HRESULT remove_WebMessageReceived( + [in] EventRegistrationToken token); + + /// Call an asynchronous DevToolsProtocol method. See the + /// [DevTools Protocol Viewer](https://aka.ms/DevToolsProtocolDocs) + /// for a list and description of available methods. + /// The methodName parameter is the full name of the method in the format + /// `{domain}.{method}`. + /// The parametersAsJson parameter is a JSON formatted string containing + /// the parameters for the corresponding method. + /// The handler's Invoke method will be called when the method asynchronously + /// completes. Invoke will be called with the method's return object as a + /// JSON string. + /// + /// \snippet ScriptComponent.cpp CallDevToolsProtocolMethod + HRESULT CallDevToolsProtocolMethod( + [in] LPCWSTR methodName, + [in] LPCWSTR parametersAsJson, + [in] ICoreWebView2CallDevToolsProtocolMethodCompletedHandler* handler); + + /// The process id of the browser process that hosts the WebView. + [propget] HRESULT BrowserProcessId([out, retval] UINT32* value); + + /// Returns true if the WebView can navigate to a previous page in the + /// navigation history. + /// The HistoryChanged event will fire if CanGoBack changes value. + [propget] HRESULT CanGoBack([out, retval] BOOL* canGoBack); + /// Returns true if the WebView can navigate to a next page in the navigation + /// history. + /// The HistoryChanged event will fire if CanGoForward changes value. + [propget] HRESULT CanGoForward([out, retval] BOOL* canGoForward); + /// Navigates the WebView to the previous page in the navigation history. + HRESULT GoBack(); + /// Navigates the WebView to the next page in the navigation history. + HRESULT GoForward(); + + /// Get a DevTools Protocol event receiver that allows you to subscribe to + /// a DevTools Protocol event. + /// The eventName parameter is the full name of the event in the format + /// `{domain}.{event}`. + /// See the [DevTools Protocol Viewer](https://aka.ms/DevToolsProtocolDocs) + /// for a list of DevTools Protocol events description, and event args. + /// + /// \snippet ScriptComponent.cpp DevToolsProtocolEventReceived + HRESULT GetDevToolsProtocolEventReceiver( + [in] LPCWSTR eventName, + [out, retval] ICoreWebView2DevToolsProtocolEventReceiver** receiver); + + /// Stop all navigations and pending resource fetches. Does not stop + /// scripts. + HRESULT Stop(); + + /// Add an event handler for the NewWindowRequested event. + /// NewWindowRequested fires when content inside the WebView requests to open + /// a new window, such as through window.open. The app can pass a target + /// WebView that will be considered the opened window. + /// + /// Scripts resulted in the new window requested can be blocked until the + /// event handler returns if a deferral is not taken on the event args. If a + /// deferral is taken, then scripts are blocked until the deferral is + /// completed. + /// + /// \snippet AppWindow.cpp NewWindowRequested + HRESULT add_NewWindowRequested( + [in] ICoreWebView2NewWindowRequestedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_NewWindowRequested. + HRESULT remove_NewWindowRequested( + [in] EventRegistrationToken token); + + /// Add an event handler for the DocumentTitleChanged event. + /// DocumentTitleChanged fires when the DocumentTitle property of the WebView + /// changes and may fire before or after the NavigationCompleted event. + /// + /// \snippet FileComponent.cpp DocumentTitleChanged + HRESULT add_DocumentTitleChanged( + [in] ICoreWebView2DocumentTitleChangedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_DocumentTitleChanged. + HRESULT remove_DocumentTitleChanged( + [in] EventRegistrationToken token); + + /// The title for the current top level document. + /// If the document has no explicit title or is otherwise empty, + /// a default that may or may not match the URI of the document will be used. + [propget] HRESULT DocumentTitle([out, retval] LPWSTR* title); + + /// Add the provided host object to script running in the WebView with the + /// specified name. + /// Host objects are exposed as host object proxies via + /// `window.chrome.webview.hostObjects.`. + /// Host object proxies are promises and will resolve to an object + /// representing the host object. + /// The promise is rejected if the app has not added an object with the name. + /// When JavaScript code access a property or method of the object, a promise + /// is return, which will resolve to the value returned from the host for the + /// property or method, or rejected in case of error such as there is no such + /// property or method on the object or parameters are invalid. + /// For example, when the application code does the following: + /// + /// ``` + /// VARIANT object; + /// object.vt = VT_DISPATCH; + /// object.pdispVal = appObject; + /// webview->AddHostObjectToScript(L"host_object", &host); + /// ``` + /// + /// JavaScript code in the WebView will be able to access appObject as + /// following and then access attributes and methods of appObject: + /// + /// ``` + /// let app_object = await window.chrome.webview.hostObjects.host_object; + /// let attr1 = await app_object.attr1; + /// let result = await app_object.method1(parameters); + /// ``` + /// + /// Note that while simple types, IDispatch and array are supported, generic + /// IUnknown, VT_DECIMAL, or VT_RECORD variant is not supported. + /// Remote JavaScript objects like callback functions are represented as + /// an VT_DISPATCH VARIANT with the object implementing IDispatch. The + /// JavaScript callback method may be invoked using DISPID_VALUE for the + /// DISPID. + /// Nested arrays are supported up to a depth of 3. + /// Arrays of by reference types are not supported. + /// VT_EMPTY and VT_NULL are mapped into JavaScript as null. In JavaScript + /// null and undefined are mapped to VT_EMPTY. + /// + /// Additionally, all host objects are exposed as + /// `window.chrome.webview.hostObjects.sync.`. Here the host + /// objects are exposed as synchronous host object proxies. These are not + /// promises and calls to functions or property access synchronously block + /// running script waiting to communicate cross process for the host code to + /// run. Accordingly this can result in reliability issues and it is + /// recommended that you use the promise based asynchronous + /// `window.chrome.webview.hostObjects.` API described above. + /// + /// Synchronous host object proxies and asynchronous host object proxies + /// can both proxy the same host object. Remote changes made by one proxy + /// will be reflected in any other proxy of that same host object whether + /// the other proxies and synchronous or asynchronous. + /// + /// While JavaScript is blocked on a synchronous call to native code, that + /// native code is unable to call back to JavaScript. Attempts to do so will + /// fail with HRESULT_FROM_WIN32(ERROR_POSSIBLE_DEADLOCK). + /// + /// Host object proxies are JavaScript Proxy objects that intercept all + /// property get, property set, and method invocations. Properties or methods + /// that are a part of the Function or Object prototype are run locally. + /// Additionally any property or method in the array + /// `chrome.webview.hostObjects.options.forceLocalProperties` will also be + /// run locally. This defaults to including optional methods that have + /// meaning in JavaScript like `toJSON` and `Symbol.toPrimitive`. You can add + /// more to this array as required. + /// + /// There's a method `chrome.webview.hostObjects.cleanupSome` that will best + /// effort garbage collect host object proxies. + /// + /// Host object proxies additionally have the following methods which run + /// locally: + /// * applyHostFunction, getHostProperty, setHostProperty: Perform a + /// method invocation, property get, or property set on the host object. + /// You can use these to explicitly force a method or property to run + /// remotely if there is a conflicting local method or property. For + /// instance, `proxy.toString()` will run the local toString method on the + /// proxy object. But ``proxy.applyHostFunction('toString')`` runs + /// `toString` on the host proxied object instead. + /// * getLocalProperty, setLocalProperty: Perform property get, or property + /// set locally. You can use these methods to force getting or setting a + /// property on the host object proxy itself rather than on the host + /// object it represents. For instance, `proxy.unknownProperty` will get the + /// property named `unknownProperty` from the host proxied object. But + /// ``proxy.getLocalProperty('unknownProperty')`` will get the value of the property + /// `unknownProperty` on the proxy object itself. + /// * sync: Asynchronous host object proxies expose a sync method which + /// returns a promise for a synchronous host object proxy for the same + /// host object. For example, + /// `chrome.webview.hostObjects.sample.methodCall()` returns an + /// asynchronous host object proxy. You can use the `sync` method to + /// obtain a synchronous host object proxy instead: + /// `const syncProxy = await chrome.webview.hostObjects.sample.methodCall().sync()` + /// * async: Synchronous host object proxies expose an async method which + /// blocks and returns an asynchronous host object proxy for the same + /// host object. For example, `chrome.webview.hostObjects.sync.sample.methodCall()` returns a + /// synchronous host object proxy. Calling the `async` method on this blocks + /// and then returns an asynchronous host object proxy for the same host object: + /// `const asyncProxy = chrome.webview.hostObjects.sync.sample.methodCall().async()` + /// * then: Asynchronous host object proxies have a then method. This + /// allows them to be awaitable. `then` will return a promise that resolves + /// with a representation of the host object. If the proxy represents a + /// JavaScript literal then a copy of that is returned locally. If + /// the proxy represents a function then a non-awaitable proxy is returned. + /// If the proxy represents a JavaScript object with a mix of literal + /// properties and function properties, then the a copy of the object is + /// returned with some properties as host object proxies. + /// + /// All other property and method invocations (other than the above Remote + /// object proxy methods, forceLocalProperties list, and properties on + /// Function and Object prototypes) are run remotely. Asynchronous host + /// object proxies return a promise representing asynchronous completion of + /// remotely invoking the method, or getting the property. + /// The promise resolves after the remote operations complete and + /// the promises resolve to the resulting value of the operation. + /// Synchronous host object proxies work similarly but block JavaScript + /// execution and wait for the remote operation to complete. + /// + /// Setting a property on an asynchronous host object proxy works slightly + /// differently. The set returns immediately and the return value is the value + /// that will be set. This is a requirement of the JavaScript Proxy object. + /// If you need to asynchronously wait for the property set to complete, use + /// the setHostProperty method which returns a promise as described above. + /// Synchronous object property set property synchronously blocks until the + /// property is set. + /// + /// For example, suppose you have a COM object with the following interface + /// + /// \snippet HostObjectSample.idl AddHostObjectInterface + /// + /// We can add an instance of this interface into our JavaScript with + /// `AddHostObjectToScript`. In this case we name it `sample`: + /// + /// \snippet ScenarioAddHostObject.cpp AddHostObjectToScript + /// + /// Then in the HTML document we can use this COM object via `chrome.webview.hostObjects.sample`: + /// + /// \snippet ScenarioAddHostObject.html HostObjectUsage + /// Exposing host objects to script has security risk. Please follow + /// [best practices](https://docs.microsoft.com/microsoft-edge/webview2/concepts/security). + HRESULT AddHostObjectToScript([in] LPCWSTR name, [in] VARIANT* object); + + /// Remove the host object specified by the name so that it is no longer + /// accessible from JavaScript code in the WebView. + /// While new access attempts will be denied, if the object is already + /// obtained by JavaScript code in the WebView, the JavaScript code will + /// continue to have access to that object. + /// Calling this method for a name that is already removed or never added will + /// fail. + HRESULT RemoveHostObjectFromScript([in] LPCWSTR name); + + /// Opens the DevTools window for the current document in the WebView. + /// Does nothing if called when the DevTools window is already open. + HRESULT OpenDevToolsWindow(); + + /// Add an event handler for the ContainsFullScreenElementChanged event. + /// ContainsFullScreenElementChanged fires when the ContainsFullScreenElement + /// property changes. This means that an HTML element inside the WebView is + /// entering fullscreen to the size of the WebView or leaving fullscreen. This + /// event is useful when, for example, a video element requests to go + /// fullscreen. The listener of ContainsFullScreenElementChanged can then + /// resize the WebView in response. + /// + /// \snippet AppWindow.cpp ContainsFullScreenElementChanged + HRESULT add_ContainsFullScreenElementChanged( + [in] ICoreWebView2ContainsFullScreenElementChangedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with + /// add_ContainsFullScreenElementChanged. + HRESULT remove_ContainsFullScreenElementChanged( + [in] EventRegistrationToken token); + + /// Indicates if the WebView contains a fullscreen HTML element. + [propget] HRESULT ContainsFullScreenElement( + [out, retval] BOOL* containsFullScreenElement); + + /// Add an event handler for the WebResourceRequested event. + /// WebResourceRequested fires when the WebView is performing a URL request to + /// a matching URL and resource context filter that was added with + /// AddWebResourceRequestedFilter. At least one filter must be added for the + /// event to fire. + /// + /// The web resource requested can be blocked until the event handler returns + /// if a deferral is not taken on the event args. If a deferral is taken, then + /// the web resource requested is blocked until the deferral is completed. + /// + /// \snippet SettingsComponent.cpp WebResourceRequested + HRESULT add_WebResourceRequested( + [in] ICoreWebView2WebResourceRequestedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_WebResourceRequested. + HRESULT remove_WebResourceRequested( + [in] EventRegistrationToken token); + + /// Adds a URI and resource context filter to the WebResourceRequested event. + /// The URI parameter can be a wildcard string ('*': zero or more, '?': + /// exactly one). nullptr is equivalent to L"". + /// See COREWEBVIEW2_WEB_RESOURCE_CONTEXT enum for description of resource + /// context filters. + HRESULT AddWebResourceRequestedFilter( + [in] LPCWSTR const uri, + [in] COREWEBVIEW2_WEB_RESOURCE_CONTEXT const resourceContext); + /// Removes a matching WebResource filter that was previously added for the + /// WebResourceRequested event. If the same filter was added multiple times, + /// then it will need to be removed as many times as it was added for the + /// removal to be effective. Returns E_INVALIDARG for a filter that was never + /// added. + HRESULT RemoveWebResourceRequestedFilter( + [in] LPCWSTR const uri, + [in] COREWEBVIEW2_WEB_RESOURCE_CONTEXT const resourceContext); + + /// Add an event handler for the WindowCloseRequested event. + /// WindowCloseRequested fires when content inside the WebView requested to + /// close the window, such as after window.close is called. The app should + /// close the WebView and related app window if that makes sense to the app. + /// + /// \snippet AppWindow.cpp WindowCloseRequested + HRESULT add_WindowCloseRequested( + [in] ICoreWebView2WindowCloseRequestedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_WindowCloseRequested. + HRESULT remove_WindowCloseRequested( + [in] EventRegistrationToken token); +} + +/// This interface is the owner of the CoreWebView2 object, and provides support +/// for resizing, showing and hiding, focusing, and other functionality related +/// to windowing and composition. The CoreWebView2Controller owns the CoreWebView2, +/// and if all references to the CoreWebView2Controller go away, the WebView will +/// be closed. +[uuid(4d00c0d1-9434-4eb6-8078-8697a560334f), object, pointer_default(unique)] +interface ICoreWebView2Controller : IUnknown { + /// The IsVisible property determines whether to show or hide the WebView. + /// If IsVisible is set to false, the WebView will be transparent and will + /// not be rendered. However, this will not affect the window containing + /// the WebView (the HWND parameter that was passed to CreateCoreWebView2Controller). + /// If you want that window to disappear too, call ShowWindow on it directly + /// in addition to modifying the IsVisible property. + /// WebView as a child window won't get window messages when the top window + /// is minimized or restored. For performance reason, developer should set + /// IsVisible property of the WebView to false when the app window is + /// minimized and back to true when app window is restored. App window can do + /// this by handling SC_MINIMIZE and SC_RESTORE command upon receiving + /// WM_SYSCOMMAND message. + /// + /// \snippet ViewComponent.cpp ToggleIsVisible + [propget] HRESULT IsVisible([out, retval] BOOL* isVisible); + /// Set the IsVisible property. + /// + /// \snippet ViewComponent.cpp ToggleIsVisibleOnMinimize + [propput] HRESULT IsVisible([in] BOOL isVisible); + + /// The WebView bounds. + /// Bounds are relative to the parent HWND. The app has two ways it can + /// position a WebView: + /// 1. Create a child HWND that is the WebView parent HWND. Position this + /// window where the WebView should be. In this case, use (0, 0) for the + /// WebView's Bound's top left corner (the offset). + /// 2. Use the app's top most window as the WebView parent HWND. Set the + /// WebView's Bound's top left corner so that the WebView is positioned + /// correctly in the app. + /// The Bound's values are in the host's coordinate space. + [propget] HRESULT Bounds([out, retval] RECT* bounds); + /// Set the Bounds property. + /// + /// \snippet ViewComponent.cpp ResizeWebView + [propput] HRESULT Bounds([in] RECT bounds); + + /// The zoom factor for the WebView. + /// Note that changing zoom factor could cause `window.innerWidth/innerHeight` + /// and page layout to change. + /// A zoom factor that is applied by the host by calling ZoomFactor + /// becomes the new default zoom for the WebView. This zoom factor applies + /// across navigations and is the zoom factor WebView is returned to when the + /// user presses ctrl+0. When the zoom factor is changed by the user + /// (resulting in the app receiving ZoomFactorChanged), that zoom applies + /// only for the current page. Any user applied zoom is only for the current + /// page and is reset on a navigation. + /// Specifying a zoomFactor less than or equal to 0 is not allowed. + /// WebView also has an internal supported zoom factor range. When a specified + /// zoom factor is out of that range, it will be normalized to be within the + /// range, and a ZoomFactorChanged event will be fired for the real + /// applied zoom factor. When this range normalization happens, the + /// ZoomFactor property will report the zoom factor specified during the + /// previous modification of the ZoomFactor property until the + /// ZoomFactorChanged event is received after WebView applies the normalized + /// zoom factor. + [propget] HRESULT ZoomFactor([out, retval] double* zoomFactor); + /// Set the ZoomFactor property. + [propput] HRESULT ZoomFactor([in] double zoomFactor); + + /// Add an event handler for the ZoomFactorChanged event. + /// ZoomFactorChanged fires when the ZoomFactor property of the WebView changes. + /// The event could fire because the caller modified the ZoomFactor property, + /// or due to the user manually modifying the zoom. When it is modified by the + /// caller via the ZoomFactor property, the internal zoom factor is updated + /// immediately and there will be no ZoomFactorChanged event. + /// WebView associates the last used zoom factor for each site. Therefore, it + /// is possible for the zoom factor to change when navigating to a different + /// page. When the zoom factor changes due to this, the ZoomFactorChanged + /// event fires right after the ContentLoading event. + /// + /// \snippet ViewComponent.cpp ZoomFactorChanged + HRESULT add_ZoomFactorChanged( + [in] ICoreWebView2ZoomFactorChangedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_ZoomFactorChanged. + HRESULT remove_ZoomFactorChanged( + [in] EventRegistrationToken token); + + /// Update Bounds and ZoomFactor properties at the same time. This operation + /// is atomic from the host's perspective. After returning from this function, + /// the Bounds and ZoomFactor properties will have both been updated if the + /// function is successful, or neither will be updated if the function fails. + /// If Bounds and ZoomFactor are both updated by the same scale (i.e. Bounds + /// and ZoomFactor are both doubled), then the page will not see a change in + /// window.innerWidth/innerHeight and the WebView will render the content at + /// the new size and zoom without intermediate renderings. + /// This function can also be used to update just one of ZoomFactor or Bounds + /// by passing in the new value for one and the current value for the other. + /// + /// \snippet ViewComponent.cpp SetBoundsAndZoomFactor + HRESULT SetBoundsAndZoomFactor([in] RECT bounds, [in] double zoomFactor); + + /// Move focus into WebView. WebView will get focus and focus will be set to + /// correspondent element in the page hosted in the WebView. + /// For Programmatic reason, focus is set to previously focused element or + /// the default element if there is no previously focused element. + /// For Next reason, focus is set to the first element. + /// For Previous reason, focus is set to the last element. + /// WebView can also got focus through user interaction like clicking into + /// WebView or Tab into it. + /// For tabbing, the app can call MoveFocus with Next or Previous to align + /// with tab and shift+tab respectively when it decides the WebView is the + /// next tabbable element. Or, the app can call IsDialogMessage as part of + /// its message loop to allow the platform to auto handle tabbing. The + /// platform will rotate through all windows with WS_TABSTOP. When the + /// WebView gets focus from IsDialogMessage, it will internally put the focus + /// on the first or last element for tab and shift+tab respectively. + /// + /// \snippet App.cpp MoveFocus0 + /// + /// \snippet ControlComponent.cpp MoveFocus1 + /// + /// \snippet ControlComponent.cpp MoveFocus2 + HRESULT MoveFocus([in] COREWEBVIEW2_MOVE_FOCUS_REASON reason); + + /// Add an event handler for the MoveFocusRequested event. + /// MoveFocusRequested fires when user tries to tab out of the WebView. + /// The WebView's focus has not changed when this event is fired. + /// + /// \snippet ControlComponent.cpp MoveFocusRequested + HRESULT add_MoveFocusRequested( + [in] ICoreWebView2MoveFocusRequestedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_MoveFocusRequested. + HRESULT remove_MoveFocusRequested( + [in] EventRegistrationToken token); + + /// Add an event handler for the GotFocus event. + /// GotFocus fires when WebView got focus. + HRESULT add_GotFocus( + [in] ICoreWebView2FocusChangedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_GotFocus. + HRESULT remove_GotFocus( + [in] EventRegistrationToken token); + + /// Add an event handler for the LostFocus event. + /// LostFocus fires when WebView lost focus. + /// In the case where MoveFocusRequested event is fired, the focus is still + /// on WebView when MoveFocusRequested event fires. LostFocus only fires + /// afterwards when app's code or default action of MoveFocusRequested event + /// set focus away from WebView. + HRESULT add_LostFocus( + [in] ICoreWebView2FocusChangedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_LostFocus. + HRESULT remove_LostFocus( + [in] EventRegistrationToken token); + + /// Add an event handler for the AcceleratorKeyPressed event. + /// AcceleratorKeyPressed fires when an accelerator key or key combo is + /// pressed or released while the WebView is focused. A key is considered an + /// accelerator if either: + /// 1. Ctrl or Alt is currently being held, or + /// 2. the pressed key does not map to a character. + /// A few specific keys are never considered accelerators, such as Shift. + /// The Escape key is always considered an accelerator. + /// + /// Autorepeated key events caused by holding the key down will also fire this + /// event. You can filter these out by checking the event args' + /// KeyEventLParam or PhysicalKeyStatus. + /// + /// In windowed mode, this event handler is called synchronously. Until you + /// call Handled() on the event args or the event handler returns, the browser + /// process will be blocked and outgoing cross-process COM calls will fail + /// with RPC_E_CANTCALLOUT_ININPUTSYNCCALL. All CoreWebView2 API methods will + /// work, however. + /// + /// In windowless mode, the event handler is called asynchronously. Further + /// input will not reach the browser until the event handler returns or + /// Handled() is called, but the browser process itself will not be blocked, + /// and outgoing COM calls will work normally. + /// + /// It is recommended to call Handled(TRUE) as early as you can know that you want + /// to handle the accelerator key. + /// + /// \snippet ControlComponent.cpp AcceleratorKeyPressed + HRESULT add_AcceleratorKeyPressed( + [in] ICoreWebView2AcceleratorKeyPressedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_AcceleratorKeyPressed. + HRESULT remove_AcceleratorKeyPressed( + [in] EventRegistrationToken token); + + /// The parent window provided by the app that this WebView is using to + /// render content. This API initially returns the window passed into + /// CreateCoreWebView2Controller. + [propget] HRESULT ParentWindow([out, retval] HWND* parentWindow); + + /// Set the parent window for the WebView. This will cause the WebView to + /// reparent its window to the newly provided window. + [propput] HRESULT ParentWindow([in] HWND parentWindow); + + /// This is a notification separate from Bounds that tells WebView its + /// parent (or any ancestor) HWND moved. This is needed for accessibility and + /// certain dialogs in WebView to work correctly. + /// \snippet ViewComponent.cpp NotifyParentWindowPositionChanged + HRESULT NotifyParentWindowPositionChanged(); + + /// Closes the WebView and cleans up the underlying browser instance. + /// Cleaning up the browser instance will release the resources powering the WebView. + /// The browser instance will be shut down if there are no other WebViews using it. + /// + /// After calling Close, all method calls will fail and event handlers + /// will stop firing. Specifically, the WebView will release its references + /// to its event handlers when Close is called. + /// + /// Close is implicitly called when the CoreWebView2Controller loses its final + /// reference and is destructed. But it is best practice to explicitly call + /// Close to avoid any accidental cycle of references between the WebView + /// and the app code. Specifically, if you capture a reference to the WebView + /// in an event handler you will create a reference cycle between the WebView + /// and the event handler. Calling Close will break this cycle by releasing + /// all event handlers. But to avoid this situation it is best practice both + /// to explicitly call Close on the WebView and to not capture a reference to + /// the WebView to ensure the WebView can be cleaned up correctly. + /// + /// \snippet AppWindow.cpp Close + HRESULT Close(); + + /// Gets the CoreWebView2 associated with this CoreWebView2Controller. + [propget] HRESULT CoreWebView2([out, retval] ICoreWebView2** coreWebView2); +} + +/// This interface is used to complete deferrals on event args that +/// support getting deferrals via their GetDeferral method. +[uuid(c10e7f7b-b585-46f0-a623-8befbf3e4ee0), object, pointer_default(unique)] +interface ICoreWebView2Deferral : IUnknown { + /// Completes the associated deferred event. Complete should only be + /// called once for each deferral taken. + HRESULT Complete(); +} + +/// Defines properties that enable, disable, or modify WebView +/// features. Setting changes made after NavigationStarting event will not +/// apply until the next top level navigation. +[uuid(e562e4f0-d7fa-43ac-8d71-c05150499f00), object, pointer_default(unique)] +interface ICoreWebView2Settings : IUnknown { + /// Controls if JavaScript execution is enabled in all future + /// navigations in the WebView. This only affects scripts in the document; + /// scripts injected with ExecuteScript will run even if script is disabled. + /// It is true by default. + /// + /// \snippet SettingsComponent.cpp IsScriptEnabled + [propget] HRESULT IsScriptEnabled( + [out, retval] BOOL* isScriptEnabled); + /// Set the IsScriptEnabled property. + [propput] HRESULT IsScriptEnabled([in] BOOL isScriptEnabled); + + /// The IsWebMessageEnabled property is used when loading a new + /// HTML document. If set to true, communication from the host to the + /// WebView's top level HTML document is allowed via PostWebMessageAsJson, + /// PostWebMessageAsString, and window.chrome.webview's message event + /// (see PostWebMessageAsJson documentation for details). + /// Communication from the WebView's top level HTML document to the host is + /// allowed via window.chrome.webview's postMessage function and + /// add_WebMessageReceived method (see add_WebMessageReceived documentation + /// for details). + /// If set to false, then communication is disallowed. + /// PostWebMessageAsJson and PostWebMessageAsString will + /// fail with E_ACCESSDENIED and window.chrome.webview.postMessage will fail + /// by throwing an instance of an Error object. + /// It is true by default. + /// + /// \snippet ScenarioWebMessage.cpp IsWebMessageEnabled + [propget] HRESULT IsWebMessageEnabled( + [out, retval] BOOL* isWebMessageEnabled); + /// Set the IsWebMessageEnabled property. + [propput] HRESULT IsWebMessageEnabled([in] BOOL isWebMessageEnabled); + + /// AreDefaultScriptDialogsEnabled is used when loading a new HTML document. + /// If set to false, then WebView won't render the default JavaScript dialog + /// box (Specifically those shown by the JavaScript alert, confirm, prompt + /// functions and beforeunload event). Instead, if an event handler is set via + /// add_ScriptDialogOpening, WebView will send an event that will contain all + /// of the information for the dialog and allow the host app to show its own + /// custom UI. It is true by default. + [propget] HRESULT AreDefaultScriptDialogsEnabled( + [out, retval] BOOL* areDefaultScriptDialogsEnabled); + /// Set the AreDefaultScriptDialogsEnabled property. + [propput] HRESULT AreDefaultScriptDialogsEnabled( + [in] BOOL areDefaultScriptDialogsEnabled); + + /// IsStatusBarEnabled controls whether the status bar will be displayed. The + /// status bar is usually displayed in the lower left of the WebView and shows + /// things such as the URI of a link when the user hovers over it and other + /// information. It is true by default. + [propget] HRESULT IsStatusBarEnabled([out, retval] BOOL* isStatusBarEnabled); + /// Set the IsStatusBarEnabled property. + [propput] HRESULT IsStatusBarEnabled([in] BOOL isStatusBarEnabled); + + /// AreDevToolsEnabled controls whether the user is able to use the context + /// menu or keyboard shortcuts to open the DevTools window. + /// It is true by default. + [propget] HRESULT AreDevToolsEnabled([out, retval] BOOL* areDevToolsEnabled); + /// Set the AreDevToolsEnabled property. + [propput] HRESULT AreDevToolsEnabled([in] BOOL areDevToolsEnabled); + + /// The AreDefaultContextMenusEnabled property is used to prevent + /// default context menus from being shown to user in WebView. + /// It is true by default. + /// + /// \snippet SettingsComponent.cpp DisableContextMenu + [propget] HRESULT AreDefaultContextMenusEnabled([out, retval] BOOL* enabled); + /// Set the AreDefaultContextMenusEnabled property. + [propput] HRESULT AreDefaultContextMenusEnabled([in] BOOL enabled); + + /// The AreHostObjectsAllowed property is used to control whether + /// host objects are accessible from the page in WebView. + /// It is true by default. + /// + /// \snippet SettingsComponent.cpp HostObjectsAccess + [propget] HRESULT AreHostObjectsAllowed([out, retval] BOOL* allowed); + /// Set the AreHostObjectsAllowed property. + [propput] HRESULT AreHostObjectsAllowed([in] BOOL allowed); + + /// The IsZoomControlEnabled property is used to prevent the user from + /// impacting the zoom of the WebView. It is true by default. + /// When disabled, user will not be able to zoom using ctrl+/- or + /// ctrl+mouse wheel, but the zoom can be set via ZoomFactor API. + /// + /// \snippet SettingsComponent.cpp DisableZoomControl + [propget] HRESULT IsZoomControlEnabled([out, retval] BOOL* enabled); + /// Set the IsZoomControlEnabled property. + [propput] HRESULT IsZoomControlEnabled([in] BOOL enabled); + + /// The IsBuiltInErrorPageEnabled property is used to disable built in error + /// page for navigation failure and render process failure. It is true by + /// default. + /// When disabled, blank page will be shown when related error happens. + /// + /// \snippet SettingsComponent.cpp BuiltInErrorPageEnabled + [propget] HRESULT IsBuiltInErrorPageEnabled([out, retval] BOOL* enabled); + /// Set the IsBuiltInErrorPageEnabled property. + [propput] HRESULT IsBuiltInErrorPageEnabled([in] BOOL enabled); +} + +/// Event args for the ProcessFailed event. +[uuid(8155a9a4-1474-4a86-8cae-151b0fa6b8ca), object, pointer_default(unique)] +interface ICoreWebView2ProcessFailedEventArgs : IUnknown { + /// The kind of process failure that has occurred. + [propget] HRESULT ProcessFailedKind( + [out, retval] COREWEBVIEW2_PROCESS_FAILED_KIND* processFailedKind); +} + +/// The caller implements this interface to receive ProcessFailed events. +[uuid(79e0aea4-990b-42d9-aa1d-0fcc2e5bc7f1), object, pointer_default(unique)] +interface ICoreWebView2ProcessFailedEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. + HRESULT Invoke( + [in] ICoreWebView2* sender, + [in] ICoreWebView2ProcessFailedEventArgs* args); +} + +/// The caller implements this interface to receive ZoomFactorChanged +/// events. Use the ICoreWebView2Controller.ZoomFactor property to get the +/// modified zoom factor. +[uuid(b52d71d6-c4df-4543-a90c-64a3e60f38cb), object, pointer_default(unique)] +interface ICoreWebView2ZoomFactorChangedEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. There are no event args and the args + /// parameter will be null. + HRESULT Invoke([in] ICoreWebView2Controller* sender, [in] IUnknown* args); +} + +/// Iterator for a collection of HTTP headers. See ICoreWebView2HttpRequestHeaders +/// and ICoreWebView2HttpResponseHeaders. +/// +/// \snippet ScenarioWebViewEventMonitor.cpp HttpRequestHeaderIterator +[uuid(0702fc30-f43b-47bb-ab52-a42cb552ad9f), object, pointer_default(unique)] +interface ICoreWebView2HttpHeadersCollectionIterator : IUnknown { + /// Get the name and value of the current HTTP header of the iterator. This + /// method will fail if the last call to MoveNext set hasNext to FALSE. + HRESULT GetCurrentHeader([out] LPWSTR* name, [out] LPWSTR* value); + + /// True when the iterator hasn't run out of headers. If the collection over + /// which the iterator is iterating is empty or if the iterator has gone past + /// the end of the collection then this is false. + [propget] HRESULT HasCurrentHeader([out, retval] BOOL* hasCurrent); + + /// Move the iterator to the next HTTP header in the collection. The hasNext + /// parameter will be set to FALSE if there are no more HTTP headers. After + /// this occurs the GetCurrentHeader method will fail if called. + HRESULT MoveNext([out, retval] BOOL* hasNext); +} + +/// HTTP request headers. Used to inspect the HTTP request on +/// WebResourceRequested event and NavigationStarting event. +/// Note, you can modify the HTTP request headers from a WebResourceRequested event, +/// but not from a NavigationStarting event. +[uuid(e86cac0e-5523-465c-b536-8fb9fc8c8c60), object, pointer_default(unique)] +interface ICoreWebView2HttpRequestHeaders : IUnknown { + /// Gets the header value matching the name. + HRESULT GetHeader([in] LPCWSTR name, [out, retval] LPWSTR* value); + /// Gets the header value matching the name via an iterator. + HRESULT GetHeaders([in] LPCWSTR name, [out, retval] ICoreWebView2HttpHeadersCollectionIterator** iterator); + /// Checks whether the headers contain an entry matching the header name. + HRESULT Contains([in] LPCWSTR name, [out, retval] BOOL* contains); + /// Adds or updates header that matches the name. + HRESULT SetHeader([in] LPCWSTR name, [in] LPCWSTR value); + /// Removes header that matches the name. + HRESULT RemoveHeader([in] LPCWSTR name); + /// Gets an iterator over the collection of request headers. + HRESULT GetIterator( + [out, retval] ICoreWebView2HttpHeadersCollectionIterator** iterator); +} + +/// HTTP response headers. Used to construct a WebResourceResponse for the +/// WebResourceRequested event. +[uuid(03c5ff5a-9b45-4a88-881c-89a9f328619c), object, pointer_default(unique)] +interface ICoreWebView2HttpResponseHeaders : IUnknown { + /// Appends header line with name and value. + HRESULT AppendHeader([in] LPCWSTR name, [in] LPCWSTR value); + /// Checks whether the headers contain entries matching the header name. + HRESULT Contains([in] LPCWSTR name, [out, retval] BOOL* contains); + /// Gets the first header value in the collection matching the name. + HRESULT GetHeader([in] LPCWSTR name, [out, retval] LPWSTR* value); + /// Gets the header values matching the name. + HRESULT GetHeaders([in] LPCWSTR name, [out, retval] ICoreWebView2HttpHeadersCollectionIterator** iterator); + /// Gets an iterator over the collection of entire response headers. + HRESULT GetIterator( + [out, retval] ICoreWebView2HttpHeadersCollectionIterator** iterator); +} + +/// An HTTP request used with the WebResourceRequested event. +[uuid(97055cd4-512c-4264-8b5f-e3f446cea6a5), object, pointer_default(unique)] +interface ICoreWebView2WebResourceRequest : IUnknown { + /// The request URI. + [propget] HRESULT Uri([out, retval] LPWSTR* uri); + /// Set the Uri property. + [propput] HRESULT Uri([in] LPCWSTR uri); + + /// The HTTP request method. + [propget] HRESULT Method([out, retval] LPWSTR* method); + /// Set the Method property. + [propput] HRESULT Method([in] LPCWSTR method); + + /// The HTTP request message body as stream. POST data would be here. + /// If a stream is set, which will override the message body, the stream must + /// have all the content data available by the time this + /// response's WebResourceRequested event deferral is completed. Stream + /// should be agile or be created from a background STA to prevent performance + /// impact to the UI thread. Null means no content data. IStream semantics + /// apply (return S_OK to Read calls until all data is exhausted). + [propget] HRESULT Content([out, retval] IStream** content); + /// Set the Content property. + [propput] HRESULT Content([in] IStream* content); + + /// The mutable HTTP request headers + [propget] HRESULT Headers([out, retval] ICoreWebView2HttpRequestHeaders** headers); +} + +/// An HTTP response used with the WebResourceRequested event. +[uuid(aafcc94f-fa27-48fd-97df-830ef75aaec9), object, pointer_default(unique)] +interface ICoreWebView2WebResourceResponse : IUnknown { + /// HTTP response content as stream. Stream must have all the + /// content data available by the time this response's WebResourceRequested + /// event deferral is completed. Stream should be agile or be created from + /// a background thread to prevent performance impact to the UI thread. + /// Null means no content data. IStream semantics + /// apply (return S_OK to Read calls until all data is exhausted). + [propget] HRESULT Content([out, retval] IStream** content); + /// Set the Content property. + [propput] HRESULT Content([in] IStream* content); + + /// Overridden HTTP response headers. + [propget] HRESULT Headers([out, retval] ICoreWebView2HttpResponseHeaders** headers); + + /// The HTTP response status code. + [propget] HRESULT StatusCode([out, retval] int* statusCode); + /// Set the StatusCode property. + [propput] HRESULT StatusCode([in] int statusCode); + + /// The HTTP response reason phrase. + [propget] HRESULT ReasonPhrase([out, retval] LPWSTR* reasonPhrase); + /// Set the ReasonPhrase property. + [propput] HRESULT ReasonPhrase([in] LPCWSTR reasonPhrase); +} + +/// Event args for the NavigationStarting event. +[uuid(5b495469-e119-438a-9b18-7604f25f2e49), object, pointer_default(unique)] +interface ICoreWebView2NavigationStartingEventArgs : IUnknown { + /// The uri of the requested navigation. + [propget] HRESULT Uri([out, retval] LPWSTR* uri); + + /// True when the navigation was initiated through a user gesture as opposed + /// to programmatic navigation. + [propget] HRESULT IsUserInitiated([out, retval] BOOL* isUserInitiated); + + /// True when the navigation is redirected. + [propget] HRESULT IsRedirected([out, retval] BOOL* isRedirected); + + /// The HTTP request headers for the navigation. + /// Note, you cannot modify the HTTP request headers in a NavigationStarting event. + [propget] HRESULT RequestHeaders([out, retval] ICoreWebView2HttpRequestHeaders** requestHeaders); + + /// The host may set this flag to cancel the navigation. + /// If set, it will be as if the navigation never happened and the current + /// page's content will be intact. For performance reasons, GET HTTP requests + /// may happen, while the host is responding. This means cookies can be set + /// and used part of a request for the navigation. + /// Cancellation for navigation to about:blank or frame navigation to srcdoc + /// is not supported. Such attempts will be ignored. + [propget] HRESULT Cancel([out, retval] BOOL* cancel); + /// Set the Cancel property. + [propput] HRESULT Cancel([in] BOOL cancel); + + /// The ID of the navigation. + [propget] HRESULT NavigationId([out, retval] UINT64* navigationId); +} + +/// The caller implements this interface to receive the NavigationStarting +/// event. +[uuid(9adbe429-f36d-432b-9ddc-f8881fbd76e3), object, pointer_default(unique)] +interface ICoreWebView2NavigationStartingEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. + HRESULT Invoke( + [in] ICoreWebView2* sender, + [in] ICoreWebView2NavigationStartingEventArgs* args); +} + +/// Event args for the ContentLoading event. +[uuid(0c8a1275-9b6b-4901-87ad-70df25bafa6e), object, pointer_default(unique)] +interface ICoreWebView2ContentLoadingEventArgs : IUnknown { + /// True if the loaded content is an error page. + [propget] HRESULT IsErrorPage([out, retval] BOOL* isErrorPage); + + /// The ID of the navigation. + [propget] HRESULT NavigationId([out, retval] UINT64* navigationId); +} + +/// The caller implements this interface to receive the ContentLoading event. +[uuid(364471e7-f2be-4910-bdba-d72077d51c4b), object, pointer_default(unique)] +interface ICoreWebView2ContentLoadingEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. + HRESULT Invoke([in] ICoreWebView2* sender, [in] ICoreWebView2ContentLoadingEventArgs* args); +} + +/// Event args for the SourceChanged event. +[uuid(31e0e545-1dba-4266-8914-f63848a1f7d7), object, pointer_default(unique)] +interface ICoreWebView2SourceChangedEventArgs : IUnknown { + /// True if the page being navigated to is a new document. + [propget] HRESULT IsNewDocument([out, retval] BOOL* isNewDocument); +} + +/// The caller implements this interface to receive the SourceChanged event. +[uuid(3c067f9f-5388-4772-8b48-79f7ef1ab37c), object, pointer_default(unique)] +interface ICoreWebView2SourceChangedEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. + HRESULT Invoke([in] ICoreWebView2* sender, [in] ICoreWebView2SourceChangedEventArgs* args); +} + +/// The caller implements this interface to receive the HistoryChanged event. +[uuid(c79a420c-efd9-4058-9295-3e8b4bcab645), object, pointer_default(unique)] +interface ICoreWebView2HistoryChangedEventHandler : IUnknown { + /// There are no event args and the args parameter will be null. + HRESULT Invoke([in] ICoreWebView2* sender, [in] IUnknown* args); +} + +/// Event args for the ScriptDialogOpening event. +[uuid(7390bb70-abe0-4843-9529-f143b31b03d6), object, pointer_default(unique)] +interface ICoreWebView2ScriptDialogOpeningEventArgs : IUnknown { + /// The URI of the page that requested the dialog box. + [propget] HRESULT Uri([out, retval] LPWSTR* uri); + + /// The kind of JavaScript dialog box. Accept, confirm, prompt, or + /// beforeunload. + [propget] HRESULT Kind([out, retval] COREWEBVIEW2_SCRIPT_DIALOG_KIND* kind); + + /// The message of the dialog box. From JavaScript this is the first parameter + /// passed to alert, confirm, and prompt and is empty for beforeunload. + [propget] HRESULT Message([out, retval] LPWSTR* message); + + /// The host may call this to respond with OK to confirm, prompt, and + /// beforeunload dialogs or not call this method to indicate cancel. From + /// JavaScript, this means that the confirm and beforeunload function returns + /// true if Accept is called. And for the prompt function it returns the value + /// of ResultText if Accept is called and returns false otherwise. + HRESULT Accept(); + + /// The second parameter passed to the JavaScript prompt dialog. This is the + /// default value to use for the result of the prompt JavaScript function. + [propget] HRESULT DefaultText([out, retval] LPWSTR* defaultText); + + /// The return value from the JavaScript prompt function if Accept is called. + /// This is ignored for dialog kinds other than prompt. If Accept is not + /// called this value is ignored and false is returned from prompt. + [propget] HRESULT ResultText([out, retval] LPWSTR* resultText); + /// Set the ResultText property. + [propput] HRESULT ResultText([in] LPCWSTR resultText); + + /// GetDeferral can be called to return an ICoreWebView2Deferral object. + /// You can use this to complete the event at a later time. + HRESULT GetDeferral([out, retval] ICoreWebView2Deferral** deferral); +} + +/// The caller implements this interface to receive the ScriptDialogOpening +/// event. +[uuid(ef381bf9-afa8-4e37-91c4-8ac48524bdfb), object, pointer_default(unique)] +interface ICoreWebView2ScriptDialogOpeningEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. + HRESULT Invoke( + [in] ICoreWebView2* sender, + [in] ICoreWebView2ScriptDialogOpeningEventArgs* args); +} + +/// Event args for the NavigationCompleted event. +[uuid(30d68b7d-20d9-4752-a9ca-ec8448fbb5c1), object, pointer_default(unique)] +interface ICoreWebView2NavigationCompletedEventArgs : IUnknown { + /// True when the navigation is successful. This + /// is false for a navigation that ended up in an error page (failures due to + /// no network, DNS lookup failure, HTTP server responds with 4xx), but could + /// also be false for additional scenarios such as window.stop() called on + /// navigated page. + [propget] HRESULT IsSuccess([out, retval] BOOL* isSuccess); + + /// The error code if the navigation failed. + [propget] HRESULT WebErrorStatus([out, retval] COREWEBVIEW2_WEB_ERROR_STATUS* + webErrorStatus); + + /// The ID of the navigation. + [propget] HRESULT NavigationId([out, retval] UINT64* navigationId); +} + +/// The caller implements this interface to receive the NavigationCompleted +/// event. +[uuid(d33a35bf-1c49-4f98-93ab-006e0533fe1c), object, pointer_default(unique)] +interface ICoreWebView2NavigationCompletedEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. + HRESULT Invoke( + [in] ICoreWebView2* sender, + [in] ICoreWebView2NavigationCompletedEventArgs* args); +} + +/// Event args for the PermissionRequested event. +[uuid(973ae2ef-ff18-4894-8fb2-3c758f046810), object, pointer_default(unique)] +interface ICoreWebView2PermissionRequestedEventArgs : IUnknown { + /// The origin of the web content that requests the permission. + [propget] HRESULT Uri([out, retval] LPWSTR* uri); + + /// The type of the permission that is requested. + [propget] HRESULT PermissionKind([out, retval] COREWEBVIEW2_PERMISSION_KIND* permissionKind); + + /// True when the permission request was initiated through a user gesture. + /// Note that being initiated through a user gesture doesn't mean that user + /// intended to access the associated resource. + [propget] HRESULT IsUserInitiated([out, retval] BOOL* isUserInitiated); + + /// The status of a permission request, i.e. whether the request is granted. + /// Default value is COREWEBVIEW2_PERMISSION_STATE_DEFAULT. + [propget] HRESULT State([out, retval] COREWEBVIEW2_PERMISSION_STATE* state); + /// Set the State property. + [propput] HRESULT State([in] COREWEBVIEW2_PERMISSION_STATE state); + + /// GetDeferral can be called to return an ICoreWebView2Deferral object. + /// Developer can use the deferral object to make the permission decision + /// at a later time. + HRESULT GetDeferral([out, retval] ICoreWebView2Deferral** deferral); +} + +/// The caller implements this interface to receive the PermissionRequested +/// event. +[uuid(15e1c6a3-c72a-4df3-91d7-d097fbec6bfd), object, pointer_default(unique)] +interface ICoreWebView2PermissionRequestedEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. + HRESULT Invoke( + [in] ICoreWebView2* sender, + [in] ICoreWebView2PermissionRequestedEventArgs* args); +} + +/// The caller implements this interface to receive the result of the +/// AddScriptToExecuteOnDocumentCreated method. +[uuid(b99369f3-9b11-47b5-bc6f-8e7895fcea17), object, pointer_default(unique)] +interface ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler : IUnknown { + /// Called to provide the implementer with the completion status and result + /// of the corresponding asynchronous method call. + HRESULT Invoke([in] HRESULT errorCode, [in] LPCWSTR id); +} + +/// The caller implements this interface to receive the result of the +/// ExecuteScript method. +[uuid(49511172-cc67-4bca-9923-137112f4c4cc), object, pointer_default(unique)] +interface ICoreWebView2ExecuteScriptCompletedHandler : IUnknown { + /// Called to provide the implementer with the completion status and result + /// of the corresponding asynchronous method call. + HRESULT Invoke([in] HRESULT errorCode, [in] LPCWSTR resultObjectAsJson); +} + +/// Event args for the WebResourceRequested event. +[uuid(453e667f-12c7-49d4-be6d-ddbe7956f57a), object, pointer_default(unique)] +interface ICoreWebView2WebResourceRequestedEventArgs : IUnknown +{ + /// The Web resource request. The request object may be missing some headers + /// that are added by network stack later on. + [propget] HRESULT Request([out, retval] ICoreWebView2WebResourceRequest** request); + + /// A placeholder for the web resource response object. If this object is set, the + /// web resource request will be completed with this response. + [propget] HRESULT Response([out, retval] ICoreWebView2WebResourceResponse** response); + /// Set the Response property. An empty Web resource response object can be + /// created with CreateWebResourceResponse and then modified to construct the response. + [propput] HRESULT Response([in] ICoreWebView2WebResourceResponse* response); + + /// Obtain an ICoreWebView2Deferral object and put the event into a deferred state. + /// You can use the ICoreWebView2Deferral object to complete the request at a + /// later time. + HRESULT GetDeferral([out, retval] ICoreWebView2Deferral** deferral); + + /// The web resource request context. + [propget] HRESULT ResourceContext([out, retval] COREWEBVIEW2_WEB_RESOURCE_CONTEXT* context); +} + +/// Fires when a URL request (through network, file etc.) is made in the webview +/// for a Web resource matching resource context filter and URL specified in +/// AddWebResourceRequestedFilter. +/// The host can view and modify the request or provide a response in a similar +/// pattern to HTTP, in which case the request immediately completed. +/// This may not contain any request headers that are added by the network +/// stack, such as Authorization headers. +[uuid(ab00b74c-15f1-4646-80e8-e76341d25d71), object, pointer_default(unique)] +interface ICoreWebView2WebResourceRequestedEventHandler : IUnknown +{ + /// Called to provide the implementer with the event args for the + /// corresponding event. + HRESULT Invoke( + [in] ICoreWebView2* sender, + [in] ICoreWebView2WebResourceRequestedEventArgs* args); +} + +/// The caller implements this method to receive the result of the +/// CapturePreview method. The result is written to the stream provided in +/// the CapturePreview method call. +[uuid(697e05e9-3d8f-45fa-96f4-8ffe1ededaf5), object, pointer_default(unique)] +interface ICoreWebView2CapturePreviewCompletedHandler : IUnknown { + /// Called to provide the implementer with the completion status + /// of the corresponding asynchronous method call. + HRESULT Invoke([in] HRESULT errorCode); +} + +/// The caller implements this method to receive the GotFocus and LostFocus +/// events. There are no event args for this event. +[uuid(05ea24bd-6452-4926-9014-4b82b498135d), object, pointer_default(unique)] +interface ICoreWebView2FocusChangedEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. There are no event args and the args + /// parameter will be null. + HRESULT Invoke( + [in] ICoreWebView2Controller* sender, + [in] IUnknown* args); +} + +/// Event args for the MoveFocusRequested event. +[uuid(2d6aa13b-3839-4a15-92fc-d88b3c0d9c9d), object, pointer_default(unique)] +interface ICoreWebView2MoveFocusRequestedEventArgs : IUnknown { + /// The reason for WebView to fire the MoveFocus Requested event. + [propget] HRESULT Reason([out, retval] COREWEBVIEW2_MOVE_FOCUS_REASON* reason); + + /// Indicate whether the event has been handled by the app. + /// If the app has moved the focus to its desired location, it should set + /// Handled property to TRUE. + /// When Handled property is false after the event handler returns, default + /// action will be taken. The default action is to try to find the next tab + /// stop child window in the app and try to move focus to that window. If + /// there is no other such window to move focus to, focus will be cycled + /// within the WebView's web content. + [propget] HRESULT Handled([out, retval] BOOL* value); + /// Set the Handled property. + [propput] HRESULT Handled([in] BOOL value); +} + +/// The caller implements this method to receive the MoveFocusRequested event. +[uuid(69035451-6dc7-4cb8-9bce-b2bd70ad289f), object, pointer_default(unique)] +interface ICoreWebView2MoveFocusRequestedEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. + HRESULT Invoke( + [in] ICoreWebView2Controller* sender, + [in] ICoreWebView2MoveFocusRequestedEventArgs* args); +} + +/// Event args for the WebMessageReceived event. +[uuid(0f99a40c-e962-4207-9e92-e3d542eff849), object, pointer_default(unique)] +interface ICoreWebView2WebMessageReceivedEventArgs : IUnknown { + /// The URI of the document that sent this web message. + [propget] HRESULT Source([out, retval] LPWSTR* source); + + /// The message posted from the WebView content to the host converted to a + /// JSON string. Use this to communicate via JavaScript objects. + /// + /// For example the following postMessage calls result in the + /// following WebMessageAsJson values: + /// + /// ``` + /// postMessage({'a': 'b'}) L"{\"a\": \"b\"}" + /// postMessage(1.2) L"1.2" + /// postMessage('example') L"\"example\"" + /// ``` + [propget] HRESULT WebMessageAsJson([out, retval] LPWSTR* webMessageAsJson); + + /// If the message posted from the WebView content to the host is a + /// string type, this method will return the value of that string. If the + /// message posted is some other kind of JavaScript type this method will fail + /// with E_INVALIDARG. Use this to communicate via simple strings. + /// + /// For example the following postMessage calls result in the + /// following WebMessageAsString values: + /// + /// ``` + /// postMessage({'a': 'b'}) E_INVALIDARG + /// postMessage(1.2) E_INVALIDARG + /// postMessage('example') L"example" + /// ``` + HRESULT TryGetWebMessageAsString([out, retval] LPWSTR* webMessageAsString); +} + +/// The caller implements this interface to receive the WebMessageReceived +/// event. +[uuid(57213f19-00e6-49fa-8e07-898ea01ecbd2), object, pointer_default(unique)] +interface ICoreWebView2WebMessageReceivedEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. + HRESULT Invoke( + [in] ICoreWebView2* sender, + [in] ICoreWebView2WebMessageReceivedEventArgs* args); +} + +/// Event args for the DevToolsProtocolEventReceived event. +[uuid(653c2959-bb3a-4377-8632-b58ada4e66c4), object, pointer_default(unique)] +interface ICoreWebView2DevToolsProtocolEventReceivedEventArgs : IUnknown { + /// The parameter object of the corresponding DevToolsProtocol event + /// represented as a JSON string. + [propget] HRESULT ParameterObjectAsJson([out, retval] LPWSTR* + parameterObjectAsJson); +} + +/// The caller implements this interface to receive +/// DevToolsProtocolEventReceived events from the WebView. +[uuid(e2fda4be-5456-406c-a261-3d452138362c), object, pointer_default(unique)] +interface ICoreWebView2DevToolsProtocolEventReceivedEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. + HRESULT Invoke( + [in] ICoreWebView2* sender, + [in] ICoreWebView2DevToolsProtocolEventReceivedEventArgs* args); +} + +/// The caller implements this interface to receive CallDevToolsProtocolMethod +/// completion results. +[uuid(5c4889f0-5ef6-4c5a-952c-d8f1b92d0574), object, pointer_default(unique)] +interface ICoreWebView2CallDevToolsProtocolMethodCompletedHandler : IUnknown { + /// Called to provide the implementer with the completion status and result + /// of the corresponding asynchronous method call. + HRESULT Invoke([in] HRESULT errorCode, [in] LPCWSTR returnObjectAsJson); +} + +/// The caller implements this interface to receive the CoreWebView2Controller created +/// via CreateCoreWebView2Controller. +[uuid(6c4819f3-c9b7-4260-8127-c9f5bde7f68c), object, pointer_default(unique)] +interface ICoreWebView2CreateCoreWebView2ControllerCompletedHandler : IUnknown { + /// Called to provide the implementer with the completion status and result + /// of the corresponding asynchronous method call. + HRESULT Invoke(HRESULT errorCode, ICoreWebView2Controller* createdController); +} + +/// Event args for the NewWindowRequested event. The event is fired when content +/// inside webview requested to a open a new window (through window.open() and so on.) +[uuid(34acb11c-fc37-4418-9132-f9c21d1eafb9), object, pointer_default(unique)] +interface ICoreWebView2NewWindowRequestedEventArgs : IUnknown +{ + /// The target uri of the NewWindowRequest. + [propget] HRESULT Uri([out, retval] LPWSTR* uri); + + /// Sets a WebView as a result of the NewWindowRequest. The target + /// WebView should not be navigated. If the NewWindow is set, its top level + /// window will return as the opened WindowProxy. + [propput] HRESULT NewWindow([in] ICoreWebView2* newWindow); + /// Gets the new window. + [propget] HRESULT NewWindow([out, retval] ICoreWebView2** newWindow); + + /// Sets whether the NewWindowRequestedEvent is handled by host. If this is false + /// and no NewWindow is set, the WebView will open a popup + /// window and it will be returned as opened WindowProxy. + /// If set to true and no NewWindow is set for a window.open call, the opened + /// WindowProxy will be for an dummy window object and no window will load. + /// Default is false. + [propput] HRESULT Handled([in] BOOL handled); + /// Gets whether the NewWindowRequestedEvent is handled by host. + [propget] HRESULT Handled([out, retval] BOOL* handled); + + /// IsUserInitiated is true when the new window request was initiated through + /// a user gesture such as clicking an anchor tag with target. The Edge + /// popup blocker is disabled for WebView so the app can use this flag to + /// block non-user initiated popups. + [propget] HRESULT IsUserInitiated([out, retval] BOOL* isUserInitiated); + + /// Obtain an ICoreWebView2Deferral object and put the event into a deferred state. + /// You can use the ICoreWebView2Deferral object to complete the window open + /// request at a later time. + /// While this event is deferred the opener window will be returned a WindowProxy + /// to an unnavigated window, which will navigate when the deferral is complete. + HRESULT GetDeferral([out, retval] ICoreWebView2Deferral** deferral); + + /// Window features specified by the window.open call. + /// These features can be considered for positioning and sizing of + /// new webview windows. + [propget] HRESULT WindowFeatures([out, retval] ICoreWebView2WindowFeatures** value); +} + +/// Window features for a WebView popup window. These fields match the +/// 'windowFeatures' passed to window.open as specified in +/// https://developer.mozilla.org/en-US/docs/Web/API/Window/open#Window_features +/// There is no requirement for you to respect these values. If your app doesn't +/// have corresponding UI features, for example no toolbar, or if all webviews +/// are opened in tabs and so cannot have distinct size or positions, then your +/// app cannot respect these values. You may want to respect values but perhaps +/// only some can apply to your app's UI. Accordingly, it is fine to respect +/// all, some, or none of these properties as appropriate based on your app. +/// For all numeric properties, if the value when passed to window.open is +/// outside the range of an unsigned 32bit int, the value will be mod of the max +/// of unsigned 32bit integer. If the value cannot be parsed as an integer it +/// will be considered 0. If the value is a floating point value, it will be +/// rounded down to an integer. +[uuid(5eaf559f-b46e-4397-8860-e422f287ff1e), object, pointer_default(unique)] +interface ICoreWebView2WindowFeatures : IUnknown +{ + /// True if the Left and Top properties were specified. False if at least one + /// was not specified. + [propget] HRESULT HasPosition([out, retval] BOOL* value); + /// True if the Width and Height properties were specified. False if at least + /// one was not specified. + [propget] HRESULT HasSize([out, retval] BOOL* value); + /// The left position of the window. This will fail if HasPosition is false. + [propget] HRESULT Left([out, retval] UINT32* value); + /// The top position of the window. This will fail if HasPosition is false. + [propget] HRESULT Top([out, retval] UINT32* value); + /// The height of the window. This will fail if HasSize is false. + [propget] HRESULT Height([out, retval] UINT32* value); + /// The width of the window. This will fail if HasSize is false. + [propget] HRESULT Width([out, retval] UINT32* value); + /// Whether or not to display the menu bar. + [propget] HRESULT ShouldDisplayMenuBar([out, retval] BOOL* value); + /// Whether or not to display a status bar. + [propget] HRESULT ShouldDisplayStatus([out, retval] BOOL* value); + /// Whether or not to display a toolbar. + [propget] HRESULT ShouldDisplayToolbar([out, retval] BOOL* value); + /// Whether or not to display scroll bars. + [propget] HRESULT ShouldDisplayScrollBars([out, retval] BOOL* value); +} + +/// The caller implements this interface to receive NewWindowRequested +/// events. +[uuid(d4c185fe-c81c-4989-97af-2d3fa7ab5651), object, pointer_default(unique)] +interface ICoreWebView2NewWindowRequestedEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. + HRESULT Invoke( + [in] ICoreWebView2* sender, + [in] ICoreWebView2NewWindowRequestedEventArgs* args); +} + +/// The caller implements this interface to receive DocumentTitleChanged +/// events. Use the DocumentTitle property to get the modified +/// title. +[uuid(f5f2b923-953e-4042-9f95-f3a118e1afd4), object, pointer_default(unique)] +interface ICoreWebView2DocumentTitleChangedEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. There are no event args and the args + /// parameter will be null. + HRESULT Invoke([in] ICoreWebView2* sender, [in] IUnknown* args); +} + +/// Event args for the AcceleratorKeyPressed event. +[uuid(9f760f8a-fb79-42be-9990-7b56900fa9c7), object, pointer_default(unique)] +interface ICoreWebView2AcceleratorKeyPressedEventArgs : IUnknown { + /// The key event type that caused the event to be fired. + [propget] HRESULT KeyEventKind([out, retval] COREWEBVIEW2_KEY_EVENT_KIND* keyEventKind); + /// The Win32 virtual key code of the key that was pressed or released. + /// This will be one of the Win32 virtual key constants such as VK_RETURN or + /// an (uppercase) ASCII value such as 'A'. You can check whether Ctrl or Alt + /// are pressed by calling GetKeyState(VK_CONTROL) or GetKeyState(VK_MENU). + [propget] HRESULT VirtualKey([out, retval] UINT* virtualKey); + /// The LPARAM value that accompanied the window message. See the + /// documentation for the WM_KEYDOWN and WM_KEYUP messages. + [propget] HRESULT KeyEventLParam([out, retval] INT* lParam); + /// A structure representing the information passed in the LPARAM of the + /// window message. + [propget] HRESULT PhysicalKeyStatus( + [out, retval] COREWEBVIEW2_PHYSICAL_KEY_STATUS* physicalKeyStatus); + /// During AcceleratorKeyPressedEvent handler invocation the WebView is blocked + /// waiting for the decision of if the accelerator will be handled by the host + /// or not. If the Handled property is set to TRUE then this will + /// prevent the WebView from performing the default action for this + /// accelerator key. Otherwise the WebView will perform the default action for + /// the accelerator key. + [propget] HRESULT Handled([out, retval] BOOL* handled); + /// Sets the Handled property. + [propput] HRESULT Handled([in] BOOL handled); +} + +/// The caller implements this interface to receive the AcceleratorKeyPressed +/// event. +[uuid(b29c7e28-fa79-41a8-8e44-65811c76dcb2), object, pointer_default(unique)] +interface ICoreWebView2AcceleratorKeyPressedEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. + HRESULT Invoke( + [in] ICoreWebView2Controller* sender, + [in] ICoreWebView2AcceleratorKeyPressedEventArgs* args); +} + +/// The caller implements this interface to receive NewBrowserVersionAvailable events. +[uuid(f9a2976e-d34e-44fc-adee-81b6b57ca914), object, pointer_default(unique)] +interface ICoreWebView2NewBrowserVersionAvailableEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. + HRESULT Invoke([in] ICoreWebView2Environment* webviewEnvironment, + [in] IUnknown* args); +} + +/// The caller implements this method to receive the +/// ContainsFullScreenElementChanged events. There are no event args for this +/// event. +[uuid(e45d98b1-afef-45be-8baf-6c7728867f73), object, pointer_default(unique)] +interface ICoreWebView2ContainsFullScreenElementChangedEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. There are no event args and the args + /// parameter will be null. + HRESULT Invoke([in] ICoreWebView2* sender, [in] IUnknown* args); +} + +/// The caller implements this interface to receive NewWindowRequested +/// events. +[uuid(5c19e9e0-092f-486b-affa-ca8231913039), object, pointer_default(unique)] +interface ICoreWebView2WindowCloseRequestedEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. There are no event args and the args + /// parameter will be null. + HRESULT Invoke([in] ICoreWebView2* sender, [in] IUnknown* args); +} + +/// This represents the WebView2 Environment. WebViews created from an +/// environment run on the browser process specified with environment parameters +/// and objects created from an environment should be used in the same environment. +/// Using it in different environments are not guaranteed to be compatible and may fail. +[uuid(b96d755e-0319-4e92-a296-23436f46a1fc), object, pointer_default(unique)] +interface ICoreWebView2Environment : IUnknown { + /// Asynchronously create a new WebView. + /// + /// parentWindow is the HWND in which the WebView should be displayed and + /// from which receive input. The WebView will add a child window to the + /// provided window during WebView creation. Z-order and other things impacted + /// by sibling window order will be affected accordingly. + /// + /// It is recommended that the application set Application User Model ID for + /// the process or the application window. If none is set, during WebView + /// creation a generated Application User Model ID is set to root window of + /// parentWindow. + /// \snippet AppWindow.cpp CreateCoreWebView2Controller + /// + /// It is recommended that the application handles restart manager messages + /// so that it can be restarted gracefully in the case when the app is using + /// Edge for WebView from a certain installation and that installation is being + /// uninstalled. For example, if a user installs Edge from Dev channel and + /// opts to use Edge from that channel for testing the app, and then uninstalls + /// Edge from that channel without closing the app, the app will be restarted + /// to allow uninstallation of the dev channel to succeed. + /// \snippet AppWindow.cpp RestartManager + /// + /// When the application retries CreateCoreWebView2Controller upon failure, it is + /// recommended that the application restarts from creating a new WebView2 + /// Environment. If an Edge update happens, the version associated with a WebView2 + /// Environment could have been removed and causing the object to no longer work. + /// Creating a new WebView2 Environment will work as it uses the latest version. + /// + /// WebView creation will fail if there is already a running instance using the same + /// user data folder, and the Environment objects have different EnvironmentOptions. + /// For example, if there is already a WebView created with one language, trying to + /// create a WebView with a different language using the same user data folder will + /// fail. + HRESULT CreateCoreWebView2Controller( + HWND parentWindow, + ICoreWebView2CreateCoreWebView2ControllerCompletedHandler* handler); + + /// Create a new web resource response object. The headers is the + /// raw response header string delimited by newline. It's also possible to + /// create this object with null headers string and then use the + /// ICoreWebView2HttpResponseHeaders to construct the headers line by line. + /// For information on other parameters see ICoreWebView2WebResourceResponse. + /// + /// \snippet SettingsComponent.cpp WebResourceRequested + HRESULT CreateWebResourceResponse( + [in] IStream* content, + [in] int statusCode, + [in] LPCWSTR reasonPhrase, + [in] LPCWSTR headers, + [out, retval] ICoreWebView2WebResourceResponse** response); + + /// The browser version info of the current ICoreWebView2Environment, + /// including channel name if it is not the stable channel. + /// This matches the format of the + /// GetAvailableCoreWebView2BrowserVersionString API. + /// Channel names are 'beta', 'dev', and 'canary'. + /// + /// \snippet AppWindow.cpp GetBrowserVersionString + [propget] HRESULT BrowserVersionString([out, retval] LPWSTR* versionInfo); + + /// Add an event handler for the NewBrowserVersionAvailable event. + /// NewBrowserVersionAvailable fires when a newer version of the + /// Edge browser is installed and available for use via WebView2. + /// To use the newer version of the browser you must create a new + /// environment and WebView. + /// This event will only be fired for new version from the same Edge channel + /// that the code is running from. When not running with installed Edge, + /// no event will be fired. + /// + /// Because a user data folder can only be used by one browser process at + /// a time, if you want to use the same user data folder in the WebViews + /// using the new version of the browser, + /// you must close the environment and WebViews that are using the older + /// version of the browser first. Or simply prompt the user to restart the + /// app. + /// + /// \snippet AppWindow.cpp NewBrowserVersionAvailable + /// + HRESULT add_NewBrowserVersionAvailable( + [in] ICoreWebView2NewBrowserVersionAvailableEventHandler* eventHandler, + [out] EventRegistrationToken* token); + + /// Remove an event handler previously added with add_NewBrowserVersionAvailable. + HRESULT remove_NewBrowserVersionAvailable( + [in] EventRegistrationToken token); +} + +/// Options used to create WebView2 Environment. +/// +/// \snippet AppWindow.cpp CreateCoreWebView2EnvironmentWithOptions +/// +[uuid(2fde08a8-1e9a-4766-8c05-95a9ceb9d1c5), object, pointer_default(unique)] +interface ICoreWebView2EnvironmentOptions : IUnknown { + /// AdditionalBrowserArguments can be specified to change the behavior of the + /// WebView. These will be passed to the browser process as part of + /// the command line. See + /// [Run Chromium with Flags](https://aka.ms/RunChromiumWithFlags) + /// for more information about command line switches to browser + /// process. If the app is launched with a command line switch + /// `--edge-webview-switches=xxx` the value of that switch (xxx in + /// the above example) will also be appended to the browser + /// process command line. Certain switches like `--user-data-dir` are + /// internal and important to WebView. Those switches will be + /// ignored even if specified. If the same switches are specified + /// multiple times, the last one wins. There is no attempt to + /// merge the different values of the same switch, except for disabled + /// and enabled features. The features specified by `--enable-features` + /// and `--disable-features` will be merged with simple logic: the features + /// will be the union of the specified features and built-in features, and if + /// a feature is disabled, it will be removed from the enabled features list. + /// App process's command line `--edge-webview-switches` value are processed + /// after the additionalBrowserArguments parameter is processed. Certain + /// features are disabled internally and can't be enabled. + /// If parsing failed for the specified switches, they will be + /// ignored. Default is to run browser process with no extra flags. + [propget] HRESULT AdditionalBrowserArguments([out, retval] LPWSTR* value); + /// Set the AdditionalBrowserArguments property. + [propput] HRESULT AdditionalBrowserArguments([in] LPCWSTR value); + + /// The default language that WebView will run with. It applies to browser UIs + /// like context menu and dialogs. It also applies to the accept-languages + /// HTTP header that WebView sends to web sites. + /// It is in the format of `language[-country]` where `language` is the 2 letter + /// code from ISO 639 and `country` is the 2 letter code from ISO 3166. + [propget] HRESULT Language([out, retval] LPWSTR* value); + /// Set the Language property. + [propput] HRESULT Language([in] LPCWSTR value); + + /// The version of the Edge WebView2 Runtime binaries required to be + /// compatible with the calling application. This defaults to the Edge + /// WebView2 Runtime version + /// that corresponds with the version of the SDK the application is using. + /// The format of this value is the same as the format of the + /// BrowserVersionString property and other BrowserVersion values. + /// Only the version part of the BrowserVersion value is respected. The + /// channel suffix, if it exists, is ignored. + /// The version of the Edge WebView2 Runtime binaries actually used may be + /// different from the specified TargetCompatibleBrowserVersion. They are only + /// guaranteed to be compatible. You can check the actual version on the + /// BrowserVersionString property on the ICoreWebView2Environment. + [propget] HRESULT TargetCompatibleBrowserVersion([out, retval] LPWSTR* value); + /// Set the TargetCompatibleBrowserVersion property. + [propput] HRESULT TargetCompatibleBrowserVersion([in] LPCWSTR value); + + /// The AllowSingleSignOnUsingOSPrimaryAccount property is used to enable + /// single sign on with Azure Active Directory (AAD) resources inside WebView + /// using the logged in Windows account and single sign on with web sites using + /// Microsoft account associated with the login in Windows account. + /// Default is disabled. + /// Universal Windows Platform apps must also declare enterpriseCloudSSO + /// [restricted capability](https://docs.microsoft.com/windows/uwp/packaging/app-capability-declarations#restricted-capabilities) + /// for the single sign on to work. + [propget] HRESULT AllowSingleSignOnUsingOSPrimaryAccount([out, retval] BOOL* allow); + /// Set the AllowSingleSignOnUsingOSPrimaryAccount property. + [propput] HRESULT AllowSingleSignOnUsingOSPrimaryAccount([in] BOOL allow); +} + +/// The caller implements this interface to receive the WebView2Environment created +/// via CreateCoreWebView2Environment. +[uuid(4e8a3389-c9d8-4bd2-b6b5-124fee6cc14d), object, pointer_default(unique)] +interface ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler : IUnknown { + /// Called to provide the implementer with the completion status and result + /// of the corresponding asynchronous method call. + HRESULT Invoke(HRESULT errorCode, ICoreWebView2Environment* createdEnvironment); +} + +/// A Receiver is created for a particular DevTools Protocol event and allows +/// you to subscribe and unsubscribe from that event. +/// Obtained from the WebView object via GetDevToolsProtocolEventReceiver. +[uuid(b32ca51a-8371-45e9-9317-af021d080367), object, pointer_default(unique)] +interface ICoreWebView2DevToolsProtocolEventReceiver : IUnknown { + /// Subscribe to a DevToolsProtocol event. + /// The handler's Invoke method will be called whenever the corresponding + /// DevToolsProtocol event fires. Invoke will be called with + /// an event args object containing the DevTools Protocol event's parameter + /// object as a JSON string. + /// + /// \snippet ScriptComponent.cpp DevToolsProtocolEventReceived + HRESULT add_DevToolsProtocolEventReceived( + [in] ICoreWebView2DevToolsProtocolEventReceivedEventHandler* handler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with + /// add_DevToolsProtocolEventReceived. + HRESULT remove_DevToolsProtocolEventReceived( + [in] EventRegistrationToken token); + +} + +/// DLL export to create a WebView2 environment with a custom version of Edge, +/// user data directory and/or additional options. +/// +/// The WebView2 environment and all other WebView2 objects are single threaded +/// and have dependencies on Windows components that require COM to be +/// initialized for a single-threaded apartment. The application is expected to +/// call CoInitializeEx before calling CreateCoreWebView2EnvironmentWithOptions. +/// +/// ``` +/// CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); +/// ``` +/// +/// If CoInitializeEx was not called or has been previously called with +/// COINIT_MULTITHREADED, CreateCoreWebView2EnvironmentWithOptions will fail +/// with one of the following errors. +/// +/// ``` +/// CO_E_NOTINITIALIZED (if CoInitializeEx was not called) +/// RPC_E_CHANGED_MODE (if CoInitializeEx was previously called with +/// COINIT_MULTITHREADED) +/// ``` +/// +/// Use `browserExecutableFolder` to specify whether WebView2 controls use a +/// fixed or installed version of the WebView2 Runtime that exists on a client +/// machine. To use a fixed version of the WebView2 Runtime, pass the relative +/// path of the folder that contains the fixed version of the WebView2 Runtime +/// to `browserExecutableFolder`. To create WebView2 controls that use the +/// installed version of the WebView2 Runtime that exists on client machines, +/// pass a null or empty string to `browserExecutableFolder`. In this scenario, +/// the API tries to find a compatible version of the WebView2 Runtime that is +/// installed on the client machine (first at the machine level, and then per +/// user) using the selected channel preference. The path of fixed version of +/// the WebView2 Runtime should not contain `\Edge\Application\`. When such a +/// path is used, the API will fail with ERROR_NOT_SUPPORTED. +/// +/// The default channel search order is the WebView2 Runtime, Beta, Dev, and +/// Canary. +/// When there is an override WEBVIEW2_RELEASE_CHANNEL_PREFERENCE environment +/// variable or applicable releaseChannelPreference registry value +/// with the value of 1, the channel search order is reversed. +/// +/// userDataFolder can be +/// specified to change the default user data folder location for +/// WebView2. The path can be an absolute file path or a relative file path +/// that is interpreted as relative to the current process's executable. +/// Otherwise, for UWP apps, the default user data folder will be +/// the app data folder for the package; for non-UWP apps, +/// the default user data folder `{Executable File Name}.WebView2` +/// will be created in the same directory next to the app executable. +/// WebView2 creation can fail if the executable is running in a directory +/// that the process doesn't have permission to create a new folder in. +/// The app is responsible to clean up its user data folder +/// when it is done. +/// +/// Note that as a browser process might be shared among WebViews, +/// WebView creation will fail with HRESULT_FROM_WIN32(ERROR_INVALID_STATE) if +/// the specified options does not match the options of the WebViews that are +/// currently running in the shared browser process. +/// +/// environmentCreatedHandler is the handler result to the async operation +/// which will contain the WebView2Environment that got created. +/// +/// The browserExecutableFolder, userDataFolder and additionalBrowserArguments +/// of the environmentOptions may be overridden by +/// values either specified in environment variables or in the registry. +/// +/// When creating a WebView2Environment the following environment variables +/// are checked: +/// +/// ``` +/// WEBVIEW2_BROWSER_EXECUTABLE_FOLDER +/// WEBVIEW2_USER_DATA_FOLDER +/// WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS +/// WEBVIEW2_RELEASE_CHANNEL_PREFERENCE +/// ``` +/// +/// If an override environment variable is found then we use the +/// browserExecutableFolder and userDataFolder values as replacements for the +/// corresponding values in CreateCoreWebView2EnvironmentWithOptions parameters. +/// If additionalBrowserArguments specified in environment variable or in the +/// registry, it will be appended to the correspinding values in +/// CreateCoreWebView2EnvironmentWithOptions parameters. +/// +/// While not strictly overrides, there exists additional environment variables +/// that can be set: +/// +/// ``` +/// WEBVIEW2_WAIT_FOR_SCRIPT_DEBUGGER +/// ``` +/// +/// When found with a non-empty value, this indicates that the WebView is being +/// launched under a script debugger. In this case, the WebView will issue a +/// `Page.waitForDebugger` CDP command that will cause script execution inside the +/// WebView to pause on launch, until a debugger issues a corresponding +/// `Runtime.runIfWaitingForDebugger` CDP command to resume execution. +/// Note: There is no registry key equivalent of this environment variable. +/// +/// ``` +/// WEBVIEW2_PIPE_FOR_SCRIPT_DEBUGGER +/// ``` +/// +/// When found with a non-empty value, this indicates that the WebView is being +/// launched under a script debugger that also supports host applications that +/// use multiple WebViews. The value is used as the identifier for a named pipe +/// that will be opened and written to when a new WebView is created by the host +/// application. The payload will match that of the remote-debugging-port JSON +/// target and can be used by the external debugger to attach to a specific +/// WebView instance. +/// The format of the pipe created by the debugger should be: +/// `\\.\pipe\WebView2\Debugger\{app_name}\{pipe_name}` +/// where: +/// +/// - `{app_name}` is the host application exe filename, e.g. WebView2Example.exe +/// - `{pipe_name}` is the value set for WEBVIEW2_PIPE_FOR_SCRIPT_DEBUGGER. +/// +/// To enable debugging of the targets identified by the JSON you will also need +/// to set the WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS environment variable to +/// send `--remote-debugging-port={port_num}` +/// where: +/// +/// - `{port_num}` is the port on which the CDP server will bind. +/// +/// Be aware that setting both the WEBVIEW2_PIPE_FOR_SCRIPT_DEBUGGER and +/// WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS environment variables will cause the +/// WebViews hosted in your application and their contents to be exposed to +/// 3rd party applications such as debuggers. +/// +/// Note: There is no registry key equivalent of this environment variable. +/// +/// If none of those environment variables exist, then the registry is examined next. +/// The following registry values are checked: +/// +/// ``` +/// [{Root}]\Software\Policies\Microsoft\Edge\WebView2\BrowserExecutableFolder +/// "{AppId}"="" +/// +/// [{Root}]\Software\Policies\Microsoft\Edge\WebView2\ReleaseChannelPreference +/// "{AppId}"="" +/// +/// [{Root}]\Software\Policies\Microsoft\Edge\WebView2\AdditionalBrowserArguments +/// "{AppId}"="" +/// +/// [{Root}]\Software\Policies\Microsoft\Edge\WebView2\UserDataFolder +/// "{AppId}"="" +/// ``` +/// +/// browserExecutableFolder and releaseChannelPreference can be configured using +/// group policy under Administrative Templates > Microsoft Edge WebView2. +/// The old registry location will be deprecated soon: +/// +/// ``` +/// [{Root}\Software\Policies\Microsoft\EmbeddedBrowserWebView\LoaderOverride\{AppId}] +/// "ReleaseChannelPreference"=dword:00000000 +/// "BrowserExecutableFolder"="" +/// "UserDataFolder"="" +/// "AdditionalBrowserArguments"="" +/// ``` +/// +/// In the unlikely scenario where some instances of WebView are open during +/// a browser update we could end up blocking the deletion of old Edge browsers. +/// To avoid running out of disk space a new WebView creation will fail +/// with the next error if it detects that there are many old versions present. +/// +/// ``` +/// ERROR_DISK_FULL +/// ``` +/// +/// The default maximum number of Edge versions allowed is 20. +/// +/// The maximum number of old Edge versions allowed can be overwritten with the value +/// of the following environment variable. +/// +/// ``` +/// WEBVIEW2_MAX_INSTANCES +/// ``` +/// +/// If the Webview depends on an installed Edge and it is uninstalled +/// any subsequent creation will fail with the next error +/// +/// ``` +/// ERROR_PRODUCT_UNINSTALLED +/// ``` +/// +/// First we check with Root as HKLM and then HKCU. +/// AppId is first set to the Application User Model ID of the caller's process, +/// then if there's no corresponding registry key the AppId is set to the +/// executable name of the caller's process, or if that isn't a registry key +/// then '*'. If an override registry key is found, then we use the +/// browserExecutableFolder and userDataFolder registry values as replacements +/// and append additionalBrowserArguments registry values for the corresponding +/// values in CreateCoreWebView2EnvironmentWithOptions parameters. +cpp_quote("STDAPI CreateCoreWebView2EnvironmentWithOptions(PCWSTR browserExecutableFolder, PCWSTR userDataFolder, ICoreWebView2EnvironmentOptions* environmentOptions, ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler* environmentCreatedHandler);") + +/// Creates an evergreen WebView2 Environment using the installed Edge version. +/// This is equivalent to calling CreateCoreWebView2EnvironmentWithOptions with +/// nullptr for browserExecutableFolder, userDataFolder, +/// additionalBrowserArguments. See CreateCoreWebView2EnvironmentWithOptions for +/// more details. +cpp_quote("STDAPI CreateCoreWebView2Environment(ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler* environmentCreatedHandler);") + +/// Get the browser version info including channel name if it is not the stable channel +/// or the Embedded Edge. +/// Channel names are beta, dev, and canary. +/// If an override exists for the browserExecutableFolder or the channel preference, +/// the override will be used. +/// If there isn't an override, then the parameter passed to +/// GetAvailableCoreWebView2BrowserVersionString is used. +cpp_quote("STDAPI GetAvailableCoreWebView2BrowserVersionString(PCWSTR browserExecutableFolder, LPWSTR* versionInfo);") + +/// This method is for anyone want to compare version correctly to determine +/// which version is newer, older or same. It can be used to determine whether +/// to use webview2 or certain feature base on version. +/// Sets the value of result to -1, 0 or 1 if version1 is less than, equal or +/// greater than version2 respectively. +/// Returns E_INVALIDARG if it fails to parse any of the version strings or any +/// input parameter is null. +/// Input can directly use the versionInfo obtained from +/// GetAvailableCoreWebView2BrowserVersionString, channel info will be ignored. +cpp_quote("STDAPI CompareBrowserVersions(PCWSTR version1, PCWSTR version2, int* result);") + +} diff --git a/library/webview/script/microsoft.web.webview2.1.0.664.37/WebView2.tlb b/library/webview/script/microsoft.web.webview2.1.0.664.37/WebView2.tlb new file mode 100644 index 0000000000000000000000000000000000000000..2bdbba49b9a454d8e3c0c72348ec700ae6dfa8ca GIT binary patch literal 41864 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 literal 0 HcmV?d00001 diff --git a/library/webview/script/microsoft.web.webview2.1.0.664.37/[Content_Types].xml b/library/webview/script/microsoft.web.webview2.1.0.664.37/[Content_Types].xml new file mode 100644 index 0000000..9ad90ad --- /dev/null +++ b/library/webview/script/microsoft.web.webview2.1.0.664.37/[Content_Types].xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/library/webview/script/microsoft.web.webview2.1.0.664.37/_rels/.rels b/library/webview/script/microsoft.web.webview2.1.0.664.37/_rels/.rels new file mode 100644 index 0000000..bee2cd8 --- /dev/null +++ b/library/webview/script/microsoft.web.webview2.1.0.664.37/_rels/.rels @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/library/webview/script/microsoft.web.webview2.1.0.664.37/lib/net462/Microsoft.Web.WebView2.Core.dll b/library/webview/script/microsoft.web.webview2.1.0.664.37/lib/net462/Microsoft.Web.WebView2.Core.dll new file mode 100644 index 0000000000000000000000000000000000000000..f9192340f4cf5f8c07d3d061f13f2a70ae7ee43c GIT binary patch literal 121752 zcmeFa2Xs_b_ddMuoyla9%%qSC=_J6U5K2O?A#?~32u)CdfQkYGNo<5@Fc?8WQBf?Y zXz&$O6gze>*c%oUEAYk!*s#6&+Wybp=iECp1o{8g`qsDB_pSAd-hKD;?0xpxXWw(% z+&e@0DeK8WL{2P!|4pPJf=!R?tCV3#;dkspnZ2yyW7TN^)xq(Lq;iB3F7t{jZ@BqdGn~W8C2mfUe z%_*v`sjdPkx$)R}pbujm^fwfntEhUxB0n5CS1AC;+S$f$n3#h^E!P!)oSR8uv;#5r zpJPyjumQ39O@kT&@E^7K?xw^-)HpJIsHn@|$0S$6Uq+;>FpLtS3X04+BR z8Bv#nu>SYZ0Z~CRg;yiRr8SG;6(80v%pZ;<(MLX(RE%LT)<_=x)nUcSqQ6dvZ`NT8 zIBQRZTF(~xG&+i^&qb{88Xr;Qa^1pHKyCyxWbVaKVlG8T19m3UA?@;)n+Y;f)0c;4 z2(KtrA-3WWTZ!1vpM%Dszc5uBl+3P;iemod!jN4x z2jE|GAF6GxfUncvh1+xaxQWAu)FW%L1ybu7=S$rFc3jJ=AjC_tYEvZWO>fpobQBG7 z@=rnWIbNr(j?M*c)8Q}V(xR{9^Tw{(Ht%@OJH`R=g5(_zCx3yJH#gCFV+*C$Gj5x= z@{+u5FS9PtT_A6XUKq%meeAru{zKl8aI)s2U2klES4}eK{fgv`eb?#lYURyMg6qw= zZQjZ&P;bU&9n0hEEzyetd9#n5_dnGeho!c8w?8iLC^-4MS$T7l;Jg{P&0Bc|@@8z- zu{=I+iH<$nnkVe@f6W`aY}>qX9&ptZaJ}D^dVAsI?_uT5O?2KkKBU$&ZkxCAlDus% zvo6qGV4g_yo`JmC$IiP*=E*d@GpJqM>Ca>D{J|FM&llX^I$HJ$g}nvJK4Q{HtWlx3 zn&-eqy3G1ggPbl${V-lR>&tlM>xN$Ihq9VjKZI8+7_=iFcIW~Hd_CZk&-?Yxo8sS`AJ&k;~(pabeY0vULde;EHqkhO!b7 z7g1P5KwU80_{g}(i%LQJhOsRwE~*ekDP!Fe=TW6V3ds#T_I&$XhP{-}WjHk3^O+CE zalo|;FoJrvsB_uF$RKboWBz34GPdUr3p$B$$b6h%a8`5qhhY}U_8W(s^f?2ESvv>i zhI0m{l&i+U`_wMkr`o~EU&b?&)8r<>#{$M}_bKHi`;?qn7^}8{V*zJn)=Bi?5?#(2 z>}l^)g{Y-IXPAU7!J9U&=6St8jN|$4s2|HK-*C9rk6|^jel)LEFu=sbjKGe-z=u5w zJ3@T-FzSq0IO_0un$vI;x*au3pcEJh&ah~wzZ6~6Yy=_a?Ix?H7k!KDVjZS~ooe>N zi6=64aO*k+M+n}wm`!$FxoC;NwP*0QWsBOj-6DgxE%PVawrmgCwj7eTZ87@yk3c4T z?ZCj{9|=UZZB&SDbck(Ch;6LcaJ3^b#{uc99SN(icE*cSZ!&A%hE~s4a{1L(eN0E~ zC>|xVrVo1(Ul{Rm0O=EsmRuXQ#TZWi`UDuBkAK340K4D{N%f zTHsV^2tF0Dv$4k12aSVSJHt1IyLE-vj7AL4r|!;F1154gUjpiDKwPIKlRFd8+HPpf zxg{ev>zvNpEd{vtY#tF?)OOn$9lYI`KiPI;d&qX%LitP$ zDh5|iSf_s)Xmz?(Zqo&;d4!1<+>d`oXgA0;q^8rY1T0?XhF-Mv|HAp9>x-j>SGlINz9r^9gTbt`W}4PTahi1=$W< z3q*s-0OQ9Q2`5Fp1aEDYqohj=KdHn<>#9TKE6J}txmq_;Q5CkV8^aLm_jn#A(@d``+#OLf5#i#U z1r(?EDIC!VdsrNfcYh_WMiJT>G31-XxpON)6^ytSL6aGAFM_5p;$FfdUAjcFuU>(; zn09gG@K?em(&fh?B(l)$@=wDWce}Wu_fkSu7?}+<*h3yU^W7wH z6z9(Gs5gYnrCj94$3$!6IMg2Jq3YS$_z2+?&Iot!xEOW9-znD)*lW1n%sG;r{#o#e z43n+xn=P3aMpBr|cPe!G(1Fia2*j6=apd$yc-$j!Q7TuK*xKww1)ikHg81aff|!)Z zf~e{x-1liPE!W++{HJr|pkDZM5AG-2H%Ik@TLP65?=W(a!~Ncf;Fx@<|6hqdoSz&i z^_X*!4&}?ADn-`MXCkQ{I}4@{kIIiLi^xK+24?~k7)jX8V#u+Ay*iCenNvvxWkKH9 z`vTS^wss0?j*T3!CbKo1_+}t-c|P*9>dM=}8U*UP5OxY0F%kfFT6N7QM?!@5^C$b&~3QTXD(+%E7^q*PBv=0Z;Ncz-m^36&leaw0A=Q$=B6cejH z-s9s_IC#km+Xk0Ja!j{5Y_m3;^5c!cnI!qK(RpL=w!nTsI7ILm+18Gd{YVRULUp_a z{~J|C_Cu5H35t7nTkUa!E86S%)&{$$5% zwuhV#IV4|8;Q;9JKZe6HU$0ttr^dKO7W?DCd{HdmiD2+#FnB5$JRJ<42?oywgIx^l z`#Wq49)CTO3m*SPz_qJ*{A^L<|Fcu@_?bW1_}LyZeh!(Bo0IE!{P!b?!gfKR2HS;i zX!0j0Qr+SBcfgPARu2TXV!+2xX@ycr+y_DOy#)h@{~>8@*&YtDJt8){4mehG9WF+a z!F6Z=uDyioz!p`9)%n47VE$xvU^~}gDbHs4Bc4^ z(yV8T8h@8=!Q*HCWaDRh$UNYXJhkuQ@!!FDVtX-g_?xXUh;2)V?M|_wDq{N=5ZBEH z!ShFg$sMx)u8>w+gIh7+OBId=TJgX@4@!C8AT*MTjn4m*m2>%jcU>cIAp zdB7pL4i9i0ZbdRSxQzi0c)a~^uV>wlh~sA1)R}?LJ?a?dQ#oIXfWbNA@a3$=e!B2@G;EJBTwaV8JvRiz%k5Oi=&@e&lZ)(#{+}& zVE$xzusviBaY)YNNzUVPoyTN_ttTB~vj-)Ac8I+8E+=!-<`43~{>Y#7;MhlQowx@Ax>l1_ch@hL;1^;t*}t zvqf#giqhb1$o$E+A=^Xd5{Kj|zn8b+N+e-}OM*dTFt{`rG%>)jg9AAHmjRL7_ej81 z0t5Hbon&09v(>Pj=ona_#*W*Hkg=}?uEphqSdzd z7xOr*`WLDk*1;jT{#OFm;!?+~XN$_=;<3RwFn_Wf*dCGthvXa%a1Ix64i>nO0roDj zEC=Ad+%n=BtW=$i4*v=u{h4RTxkj4eG35#C+*OV7DkKm*#`VCpwLC_)s4=EZ3?3u% zCmSQ%L&nGClCS40QdxA19^n3PpeEi{Mq=-&%aa#h+>Fi4GjHI z4J0h!be%9N%h;;y9MH0lTDkU6xo$+D;CkKwTwBGtvPI>3`P|@KnLk;sZ0B6_tZQ8k zsqRn5p;lq4-M{hB`9xVi8gCmO4oOn#2@1`{i8gp+>|XU-pOa})g>$BCNPGgfi? z+i@+g0(4$$dns0R$InKkyE=(JSfa~w9FAu{$62QCJOkUdr^@?gI9YjfQk#Hl=W@N+ zqUx1*MsU5DKUuxl9B&Vel|hY!yV&Vl)p z<-qok95^ITsd&yI13BoUzu?T^oJv$qx1m9BPMd*ir*ckgQ8_L42j|56$#PypAb#d8i8NC*ar3`T0VB!C)RIm-Sa4U@s>qc>w~|40EHvVZhagG2HuNlrB%ASXU_+MwoXWY4E03|7bw;bDW{8DKk!~!w?sb}$eUZ*dDr|y-do|+Chua- z`#Wr)nnxw?yWr$MWaZ6Gbl%~dH{-T>D=*30_A=`N-396`(f=LDn|OWZ`;eP3v?IATcUp!$eVraym1L_ebyK< zzwd=po4osR-cg+Q9?AP2IQc)f^5!NwZ#U=7xNY9bOY*k8%(_5#fxIR97lFLl$IkoQ zf5`hjIJLU}?){D-Z)xk+%n8Mn<_c?Igt*sNozx(nnj(T@c3W*PZ+n&TX{*|wwGBK=q`}AME^RFH~ZLm z<2LYw^ZQ{qwW;?A&ii-H`zgu$AvpQJvGV37I`2r%n{nH`m6zmgdzp2C?gDvB^lt-s zvyYwk`Tvmjqi|}IH{ObI)%=I^#tYS`_akufe`n>*O?2K-oHygPc`Gl;+x9Z+0^J4j zmgwIH@@5}9Z`}Hyu--f2)FyAd=Hse4%6a2uYvlbHoczC9d2I-i7~=_cL&6lXoTO-G%dhTk^)Gp3@&`<;_ik^Jd&O zZ{-!po3UBPQgs)|TcSq=@@Aj^Yu>x;KtadB>74hMh*X0wSzvxY3n#zV%A1?$yrX%Z zFm9W-@{+u5FS9PtT_A6X9v#S=eeAsJ{-NH_!KqEXPvN{aj`qJ;G_cTEPJC5jx~OLI%Ez;3Mz!s^~wc=vM4L9Q!>T z`*aTBs6UNYD)y;L(<+Wc}H{*M}ssukzZk8}7~=dhUjaMYi} zD`)*8Ua4W7&1z!(LSC(4fE;k7LkEyBLwoRRI&-3{+Q#5SRpdZx)z?e9r2V= z6cBqXLKNH^=b^qhrYHH%v&Yd3IbjQ698RB~S-c{&OxDTD%dC4|CON+_!0$mZ@?Ro> zFf4gag&PfiUkEW|?CALgt7lQTUTJnej(QGZ`p)HAxe6oj29FNM&%AKbvz~b^VF!K@ z0s&vN0*V6SC5sRxcx)>ogP!x>sHH#1>czkO)`8MOjHgx$e zm2o+Im&rQWC$47Q>xdN?AEUP88yqseH>}=8IevT`!Sr3h>7Q_XL)7?Iv4bApn^r(k zf`@Y*=gP-hle*g5%i&wEhahINZZFyghQKH=1bYq+4H?5*R+pk2KL!qA`Zlx~1Fo7- z{kN^QqJVhEB18$!e{&%J;C<;v$=~6-S&u{9%({0GCom31Cm2U*$T;>{U5j%3I5-3z z@3$Gpar@E@?4Y;BdsaYEFu3|G#?9QxQ)QIDi|DZZ@+J`|$ z{YRD)E6VA!HclV26TT2v$BMJ&cI;^WuiAKhVtKLRtijEY%l~y7uTL#6R-84s6n6Q) zZ{u~q@?ynVgE{E(|J26opykDivj+XT{J*yGI%IjV;;eym`TuC+^>53I6=%&6_QF>g zvF(Fv+R9#BQ&v>DoNb&wvqG`rtofNkx!ZVsZh5idtofV0JZ-$bu)J7t)`Ve0`(xX9 zeaT*&7Aq>Pgf>oJSx&4dr<68Mhb<>olv7$8Clp7`2UeUlahz0E8?U357c0)1ME1&U z|Lb2kk>A;~1#S35by?~ZBe9I0vcBbO{BDgf8GVB*-9X@SQ zuP}%8eFjGTMJltV9_{Og!-&s9%dqOyHL`O;LPAnaPi%yGd}hFgQeM^JgAYii{KYVu zb==IC&3+@r#4^kNI#xRjgqfi4WN8Ae`3*sC?!OrQdn5dOdh9yfOzIRVUk5WI>PKL3WQe7pe;U}oUN_TN#zDqgBPjgP@74BqBNchtJLB`t)M6jxDuCsFeq`5;v|DH*@>1L>$ygLN`ITY9+)f z5K*6IVrMEy(~p^`d*cFnD2F2M?2N` zgM4o?lylo!#2mrr633+f&%8|D*&0aDTpB5JiSPArJ~Ru|T)GRJtR8o`m`i+ns2`^A zEuvY+wEq|!FqcH%1|4&WPpNt?aWu@OS-iqrl3PfgOA*#wVoPlgJ(t9d=Mpz_`?n(w z=8}ZI6S_5*gy7S%J(r}L1eK?Bg1K}>U@o;Whx@QmcuzZiE?N84D5(YCn+DYaU(a{d z&*7oeoersM!MC(#9n=0F;ec9*UJD(y;M)*g3yy|b%;gnoA-B9-i%6>$Y^g2OwGcP1 z1vhj1FF+jBLP9TvZq-7FB_QltNH+;8Pw6DI7H!NYsfCk%!Q34!wcwj-U5oQ^jJX(Anq$5eOl z1|C~RNrjf0b!@5ah6+Vtw-h(75H}0=Zwv~36?9dhPcyxIG?B;&Dq)Em;k#1iN9qZ! zzN^&qu;<6aPf{iyYf`&A3D+DnMry)0`MM@&q9&WrYdy9FYO)wo*W?@_7Kvn||Gz3x z(Qk#0S;80Cx&|B*v&7FU%#yRQZpX94W6ct_)OOdiMBKOr+|2F21931*B=k+ttyv-j zU!>c!M7l{(*-9s&v!spLo+ax027G4P@t8XP4x2J|m_ax};SX8Tc_l^Ni;BA!_rM1x ze22UUa?b@sITsOizmRDDROnM`s~0XgvxYr3yg{^QFq|2 zxv&jeDe(7V z4HIuaJZG2hWASH8bP&r5*i*4aGx@F_+c_@#^XZt!Ms!zK=5UQd|H`Qu;-dImma{q* z42hv@ack`!lcL;l$sHBUAn=BV++<^$E^yD~S4B={gE&h** zJhSH(oQR0NlTFHVm}lSA0bghK5S@{yf>8`*i|xj7j1s7)pxebW3BSz3o(+T9mQ2G0 zbu4Gp9&bUgZSilr%QEj-9jzABn#HJ|t`k%{{OimI=wiA} z(6dw6wvz4=G;b8!8ZlQn%2lO|E~Uo=9g&!q(UXGiAH%jav{z8CVT`Vzj|3HuV6=`7 z2--T5(N*-7ptHv^x|)6z^iUb2Yw1rx-%7jd@LLVs`=CLb*+z^`&}jC&nPLR}BIp*1 z7xbg_ejB9-N;SCM?Uape5=-y(X4FDB00Z4D=taUk1JGPSuM)0`fs8)v`6gW@C{Ju} z6OP%iebtL??-8zffG!cw59vNZU-V_$N3=uGPC*~bPdCNVjs4j6iTpTIEOnK3pVFh^ zIio+@4#*EO#ZoV6caWYCTY|JZBu7llT|xh*XT(gx(O;U3xf5dj-8Co?jE5Y@rgfCFVEu zu5ml|i2vrDUP<&Vy(j4H0Sdiu@Lu&;$?26nVB2qCBT-Y->6P2)JNiJ-z%WKXXcQg6 z=sy}|itTrecDUH)Fg`GN&M!ce?Gz5gF+X*(&8yMhg5oq9CH*C7bZazw`hYmfrtTc2 zKhW*5L@yI(JwT%w!xV})**2@MLhS{8*-N1gf_%LdN)<$X6iO5HwnpiKmX21o3_;!c zE0iVZ1C6o;&CxOY3c5+7euBO)RPFi;x_p#E0|f2qr_ew_cMeo&kf13#mmz}go}_F; z1$7*!&2dsXL)#*4=|oH9YFZ(2v;;i zG{Su~&}id%(}8_@=Qu_ajF$v;9LQ+0@s_mXBTx^TX1pT^0BE-Ho}h(-<{2Ldx?VgN z8Xub`v?nr&o~Nb8fe_Rhg1!tvM?=teA?U{t^q&y)dkFeF1UVeRxrB$Hs1Otrg5pC^ zatKNdL75>aCj@l~K?RPAhEFrjcNsViEq6I+WA4R}?z~lCZY;VC^47SukpJq&`tp=( zAs_0_dglquKPUPrq8s8fI&qT=KW`L!C*s`b+iFKk6wmmKwP2Ec+coc?{|tB#`uDky z*~}8(Q?@?Lw_EE5eV=eAdfc4x0+{o1U)6j?!;G+fW<|rZ;rme5pS$jLRWwX+Gjp5C z@)H-!H$?96uzo?LFiw_V2;&p$b!dergGKM6m#d5?43{fBW}i8&p`q&su4xTRDpn&^@S2=m&n@&ePZ|3 zI{6T+rxvk%PxNK6hivP&NuPuNP~^A1&uxD8q{HA3RI*H*df4V)?C}klahWU=V_1G5 z%>J>g&n;&;GWHwWe`w4xFuzSI78TYuUYW9v~}5^Q}*r}nm9 z-YLV@@9UCd>$i0B+4_>sU2XmS&OL3twM!pccXS?T>&=}@ZT*Sdky+B&qZBk+WKpqPP6qMxm8*>s8RN^&kD{8H>kJhNAs3JKU? zs=ksg0lz@}ACtD}!k;hvIN@jHUjd)B!e^yyfc}ldc`)G?jwyU$`+q@yR`hpL?t^}j z_~gnl)`JKq0ME)l7FOd#6M{tYuifkt` zS!9~XY>}Ns7Pyn>PWSotY+n=J-94?L7}A>mT_bvdxliO|k#9j-)=_4ESeHk$%#7-9 z^N+ZPfa&XEnPsy4T$t67tp6mk2D}w#muEQmUC}H*gZ!WDYgXIe9b?dHkH}wKW9*nW zdMAKi>}FXl`ZjZdZM`UB3iwZ=Sf1%%`A{Uw_e_>II$8cFjAdmsOTUX{vG6NBtlucD zc1VQz!n=j(Cvps;SsD7=GvNOp4@;lOTf$iX)nM7t%W{m!>}b~C31|7c$R*-ARa*Tb zKF>iIfegf~L(H|4Ig^cJmm@+NU7};2%;&N;K5G#tVIm)&593@Mh<0@wPww$0 zTzj}^WpQx7*K5y7S-6y=CinYvGng%cR#IJ_3wP-W*=%ccM-R9iwxt?%A8;4Ya)nYJ z9ef|&a=KAalY3;wI-C!-X;hg}j?eRUX*77qLvAPiTca^Ub^`rJqo)Qx;|?QdNA9o5 z{p#T7fZ{c}z4AqjAxonND_;fbuF6s5_p{(kMRhs5^n~6VyoE6Mu0h((}qj9}fN#$ES}p z`l;L*kwQl`>KEt2XI%f)Xka!Y{%fFXvwj;J84*B>@{=OcZQJg#=@FUa>CD9SbbU;x zh>kQzqX+YEH9FB2jdqXi86m2~>@>A+gpc+LaW$>#Iw&HK4tC)vjqa97r9cDuF)7d& zlSToJR7mDTK1~Q0E`w;l@}$&W=SK{tUu~Odf(}L8S}_Qy zL{O9a>5BS@p;RlV(H%dy323iIqX(}A`cNV1uau4oYI4u(way$yzYAJP=l8lcVi3P4wZQn>Xy@3=jM3CjqZz$E!!v@h8kP2n#pk%QHM)E7%@O0N zL6FL9Jl&veoY{EVA*j)vFn%YHr-*xKbPpN-3{a9nl36)*5!6H_=x+k`)rfPMM6)&G ztSe}RMx6Cz+N=@hGKHQK^o21D``;9LSI{1ya-di|F5})^U7wGrq(vHa?)oawc?wA` zQ|UHAP4o<+Or!f0f{oGRHi`w>W22eQ>GZCRB8(YyP|)@C#KgBFP9Yy2RPi1@%l%=* zENT$cM7O8?J7P8^*eid;VO%im-h>M*}r_*YUZY?~8=Fztr_05}0 z3kV;@HSr95g1%Lw7qchRS@fw!(=z>Zj-JVfjD;oVP(tM5HEn&1wql8I}F48EgkkJ(y9WJRxlp8d<$5 zH8OiKdQhWR$1&O^sL_3SmKRaddaJA-$%+T+tdL~gM12G`xnHj65P2ER)M#JDR}q)d zVvW8Wml?U5uF@zfz1mz&n>6Z>Zs6I)JsNe*y2)5WJ2e`d6^rK%F9~XNhY!zr2?o(A?fc*8X^c=tnen|DjKiRmvFVa1H*D@32+T)cr+sdnz}rDsQOpo1EnR=O1Eh(Z$cI{IC;b1$e^ zXI@VpehC|uxNGS7k=N5%8ofBQ9;jL&X}6IY1vR;|6V{nG(6t)%N+_orXsbpav|DH1 zNINw;)~+1CL-@Kz3**A#27ZyUO|oS;bT@s-cE)1OqFYP!I;Z|dMhMVx`RduQnRO-Dm8j0_3FrGnyb+$ zT$MD_5{>?v!l+K8=t@SbHA=6HrDocw5M7F+=@#0m5zp%_^qQbX_j{$+1Mv@!b7szA zn}B*MB$?ewWrCXApQkoQ{);AQ&zFX81-e(GKZf52^k`7KyXZyTj`xSH^sYw5X^%v1 zr9&EROI&AerDGZ`%6?2X%~L=evCBcG4lM(Z`I9{DQJO$tfY zchfzpo$QVG&`yn7DsOh*gX?OE>3*y7?Z|uRTa79(Kkuc#G&&XY^InR_dj&kRIM3~r zqtOLJKZx8;qZN|Ow$ma(jc#M?r?9=GQOVfPfZkR}GP{pjRXfS-e)?V`?%{qsOjiB9 zA}Cg)8^+Iwyq|h%baq$v9H!B^UCZfyny%5&n4^(9XuhCE_vo_kfOcuLqU>j&R}_+5 z9-xnOyXEEU%m?YHMyn_M5&0nfsu9P0kldw&zee|^BaEmAX}(4~M}z|{QAlDwL>CKc za=S~SqaLQU8gX?WrcD}gbswgORXg|If$>p~Q0y?(L)f79Kphm4n2%DSpeFZ__E}Mn z(JGDR0_~(%lqWT{FNk`aK2ym3%&4AGPtedZ74wf#eSyX*Br%_)S%R9}yKq!|iq6uW z*Nq+$^%U*VXwT>oKyL)KdzudDc0JP9na|L78gZ4Lp+9uHRl~+dJwr2wtKOd&HW_H1 zLel%QR3oU#eR|r=s9n^c(QlOzk-KP}MhQjL<}SKPqqioU2G4sn;(G3)r!?Yv?xJ@E zHM+l|s;J%6eT3?rjD1>P`AXBWKdKsJ%37jOu-T(!)`2(QHAu zcfuInriV4U2>6sLd=L?#zZTn;Qy1%5SG&%$ z)Mzn~)7YSp`$HTDUB)IsE8WMCwad6u+kQ-|Hp7kW+V*!Ee&^VDRM~Juagp12NzfO@ zru0gW+wfGXJckcF#S>{{D&&45X`LBqbP=@D{Yp|f-mvd3=nLau;v7$uF+;aoHt8nA zV=UF}ax2dCc#I2ly8#u8fL3Z7XXZ85Xd7qdHLg)M$t>E~B8W4q_Cy5=7Hfo0<*Zd^u|}*Qm06t8S5Olzn{=k9oiRxv_o4v}Kr?i^O9osDG*{a=vv^~n zwsB_hMzyj@W(meBL7dqYo&@7HWkY7ydXkI-3Q1;3#+QOrW=Y2Px*gXn*+`kDYQ1by zgD1u4u8^C1PcixmTIuHAQ;bq&liu4Km4di;{Mxm#UfIz5jh+rhvqI8)2jd<=s`n1Y z!@3>!o@#uo+bx^qqBP@xZg&mlQkwClZnq6{Db4s^+c>jy<5z9t%+d{Gx{N_G%P
  • 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 + + + Microsoft.Web.WebView2.Core + + + + + + + + + + + + + + + + + Browser version values from /chrome/VERSION + + + + Product Version + + + + This class is the owner of the object, and + provides support for resizing, showing and hiding, focusing, and other + functionality related to windowing and composition. + + + The owns the , and if all references to the go away, the WebView will be closed. + + + The owner of the object that provides support for resizing, showing and hiding, focusing, and other functionality related to windowing and composition. + + + The CoreWebView2Controller owns the , and if all references to the go away, the WebView is closed. + + + + + Gets the associated with this . + + + + + + Add .Net specific host object helper for the CoreWebView2 so that it can + figure out whether a member is a method of an object. + + + + + Determines whether to show or hide the WebView. + + + If IsVisible is set to false, the WebView is transparent and is not rendered. However, this does not affect the window containing the WebView (the ParentWindow parameter that was passed to ). If you want that window to disappear too, run or on it directly in addition to modifying this. + WebView as a child window does not get window messages when the top window is minimized or restored. For performance reason, developer should set IsVisible property of the WebView to false when the app window is minimized and back to true when app window is restored. App window can do this by handling SC_MINIMIZE and SC_RESTORE command upon receiving WM_SYSCOMMAND message. + + + + + + + Gets or sets the WebView bounds. + + + Bounds are relative to the . The app has two ways to position a WebView: + + + Create a child HWND that is the WebView parent HWND. Position the window where the WebView should be. Use (0, 0) for the top-left corner (the offset) of the Bounds of the WebView. + + + Use the top-most window of the app as the WebView parent HWND. For example, to position ebView correctly in the app, set the top-left corner of the Bounds of the WebView. + + + + The values of Bounds are limited by the coordinate space of the host. + + + + + Gets or sets the zoom factor for the WebView. + + + Note that changing zoom factor may cause window.innerWidth or window.innerHeight and page layout to change. A zoom factor that is applied by the host by setting this ZoomFactor property becomes the new default zoom for the WebView. This zoom factor applies across navigations and is the zoom factor WebView is returned to when the user presses Ctrl+0. When the zoom factor is changed by the user (resulting in the app receiving ), that zoom applies only for the current page. Any user applied zoom is only for the current page and is reset on a navigation. Specifying a ZoomFactor less than or equal to 0 is not allowed. WebView also has an internal supported zoom factor range. When a specified zoom factor is out of that range, it is normalized to be within the range, and a event is raised for the real applied zoom factor. When this range normalization happens, this reports the zoom factor specified during the previous modification of the ZoomFactor property until the event is received after WebView applies the normalized zoom factor. + + + + + Gets the parent window provided by the app or sets the parent window that this WebView is using to render content. + + + It initially returns the ParentWindow passed into . Setting the property causes the WebView to re-parent the main WebView window to the newly provided window. + + + + + ZoomFactorChanged is raised when the property changes. + + + The event may be raised because the property was modified, or due to the user manually modifying the zoom. When it is modified using the property, the internal zoom factor is updated immediately and no ZoomFactorChanged event is raised. WebView associates the last used zoom factor for each site. It is possible for the zoom factor to change when navigating to a different page. When the zoom factor changes due to a navigation change, the ZoomFactorChanged event is raised right after the event. + + + + + + MoveFocusRequested is raised when user tries to tab out of the WebView. + + + The focus of the WebView has not changed when this event is raised. + + + + + GotFocus is raised when WebView gets focus. + + + + + LostFocus is raised when WebView loses focus. + + + In the case where event is raised, the focus is still on WebView when event is raised. LostFocus is only raised afterwards when code of the app or default action of event sets focus away from WebView. + + + + + AcceleratorKeyPressed is raised when an accelerator key or key combo is pressed or released while the WebView is focused. + + + A key is considered an accelerator if either of the following conditions are true: + + + + Ctrl or Alt is currently being held. + + + The pressed key does not map to a character. + + + + A few specific keys are never considered accelerators, such as Shift. The Escape key is always considered an accelerator. + + Autorepeated key events caused by holding the key down will also raise this event. Filter out the auto-repeated key events by verifying or . + + In windowed mode, this event is synchronous. Until you set to true or the event handler returns, the browser process is blocked and outgoing cross-process COM calls will fail with RPC_E_CANTCALLOUT_ININPUTSYNCCALL. All methods work, however. + + In windowless mode, the event is asynchronous. Further input do not reach the browser until the event handler returns or is set to true, but the browser process is not blocked, and outgoing COM calls work normally. + + It is recommended to set to true as early as you are able to know that you want to handle the accelerator key. + + + + + Updates and properties at the same time. + + The bounds to be updated. + The zoom factor to be updated. + + This operation is atomic from the perspective of the host. After returning from this function, the and properties are both updated if the function is successful, or neither is updated if the function fails. If and are both updated by the same scale (for example, and are both doubled), then the page does not display a change in window.innerWidth or window.innerHeight and the WebView renders the content at the new size and zoom without intermediate renderings. This function also updates just one of or by passing in the new value for one and the current value for the other. + + + + + Moves focus into WebView. + + The reason for moving focus. + + WebView will get focus and focus will be set to correspondent element in the page hosted in the WebView. For reason, focus is set to previously focused element or the default element if no previously focused element exists. For reason, focus is set to the first element. For reason, focus is set to the last element. WebView changes focus through user interaction including selecting into a WebView or Tab into it. For tabbing, the app runs MoveFocus with or to align with Tab and Shift+Tab respectively when it decides the WebView is the next tabbable element. + + + + + Tells WebView that the main WebView parent (or any ancestor) HWND moved. + + + This is a notification separate from . This is needed for accessibility and certain dialogs in WebView to work correctly. + + + + + Closes the WebView and cleans up the underlying browser instance. + + + Cleaning up the browser instance releases the resources powering the WebView. The browser instance is shut down if no other WebViews are using it. + + After running Close, all methods fail and event handlers stop running. Specifically, the WebView releases the associated references to any associated event handlers when Close is run. + + Close is implicitly run when the loses the final reference and is destructed. But it is best practice to explicitly run Close to avoid any accidental cycle of references between the WebView and the app code. Specifically, if you capture a reference to the WebView in an event handler you create a reference cycle between the WebView and the event handler. Run Close to break the cycle by releasing all event handlers. But to avoid the situation, it is best to both explicitly run Close on the WebView and to not capture a reference to the WebView to ensure the WebView is cleaned up correctly. + + + + + This represents the WebView2 Environment. + + + WebViews created from an environment run on the Browser process specified with environment parameters and objects created from an environment should be used in the same environment. Using it in different environments are not guaranteed to be compatible and may fail. + + + + + + Creates a WebView2 Environment using the installed or a custom WebView2 Runtime version. + + + The relative path to the folder that contains a custom version of WebView2 Runtime. + + To use a fixed version of the WebView2 Runtime, pass the relative + folder path that contains the fixed version of the WebView2 Runtime + to browserExecutableFolder. To create WebView2 controls that + use the installed version of the WebView2 Runtime that exists on + user machines, pass a null or empty string to + browserExecutableFolder. In this scenario, the API tries to + find a compatible version of the WebView2 Runtime that is installed + on the user machine (first at the machine level, and then per user) + using the selected channel preference. The path of fixed version of + the WebView2 Runtime should not contain _\Edge\Application\_. When + such a path is used, the API fails with ERROR_NOT_SUPPORTED. + + + + The user data folder location for WebView2. + + The path is either an absolute file path or a relative file path + that is interpreted as relative to the compiled code for the + current process. The default user data _{Executable File + Name}.WebView2_ folder is created in the same directory next to the + compiled code for the app. WebView2 creation fails if the compiled + code is running in a directory in which the process does not have + permission to create a new directory. The app is responsible to + clean up the associated user data folder when it is done. + + + + Options used to create WebView2 Environment. + + As a browser process may be shared among WebViews, WebView creation + fails if the specified options does not match the options of + the WebViews that are currently running in the shared browser + process. + + + + + The default channel search order is the WebView2 Runtime, Beta, Dev, and + Canary. When an override WEBVIEW2_RELEASE_CHANNEL_PREFERENCE environment + variable or applicable releaseChannelPreference registry value is set to + 1, the channel search order is reversed. + + + To use a fixed version of the WebView2 Runtime, pass the relative + folder path that contains the fixed version of the WebView2 Runtime + to browserExecutableFolder. To create WebView2 controls that + use the installed version of the WebView2 Runtime that exists on + user machines, pass a null or empty string to + browserExecutableFolder. In this scenario, the API tries to + find a compatible version of the WebView2 Runtime that is installed + on the user machine (first at the machine level, and then per user) + using the selected channel preference. The path of fixed version of + the WebView2 Runtime should not contain _\Edge\Application\_. When + such a path is used, the API fails with the following error. + + + The , , and may be + overriden by values either specified in environment variables or in + the registry. + + + When creating a the following environment variables are verified. + + + WEBVIEW2_BROWSER_EXECUTABLE_FOLDER + WEBVIEW2_USER_DATA_FOLDER + WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS + WEBVIEW2_RELEASE_CHANNEL_PREFERENCE + + + If browser executable folder or user data folder is specified in an + environment variable or in the registry, the specified or values are overridden. If additional browser + arguments are specified in an environment variable or in the + registry, it is appended to the corresponding value in the specified + . + + + While not strictly overrides, additional environment variables may be set. + + + WEBVIEW2_WAIT_FOR_SCRIPT_DEBUGGER + + + When found with a non-empty value, this indicates that the WebView + is being launched under a script debugger. In this case, the WebView + issues a Page.waitForDebugger CDP command that runs the + script inside the WebView to pause on launch, until a debugger + issues a corresponding Runtime.runIfWaitingForDebugger CDP + command to resume the runtime. + Note that this environment variable does not have a registry key equivalent. + + + WEBVIEW2_PIPE_FOR_SCRIPT_DEBUGGER + + + When found with a non-empty value, it indicates that the WebView is + being launched under a script debugger that also supports host apps + that use multiple WebViews. The value is used as the identifier for + a named pipe that is opened and written to when a new WebView is + created by the host app. The payload should match the payload of the + remote-debugging-port JSON target and an external debugger + may use it to attach to a specific WebView instance. The format of + the pipe created by the debugger should be + \\.\pipe\WebView2\Debugger\{app_name}\{pipe_name}, where the + following are true. + + {app_name} is the host app exe file name, for example, WebView2Example.exe + {pipe_name} is the value set for WEBVIEW2_PIPE_FOR_SCRIPT_DEBUGGER + + + To enable debugging of the targets identified by the JSON, you must + set the WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS environment + variable to send --remote-debugging-port={port_num}, where + the following is true. + + {port_num} is the port on which the CDP server binds. + + + If both WEBVIEW2_PIPE_FOR_SCRIPT_DEBUGGER and + WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS environment variables, + the WebViews hosted in your app and associated contents may exposed + to 3rd party apps such as debuggers. Note that this environment + variable does not have a registry key equivalent. + + + If none of those environment variables exist, then the registry is examined + next. + + + [{Root}]\Software\Policies\Microsoft\Edge\WebView2\BrowserExecutableFolder + "{AppId}"="" + + [{Root}]\Software\Policies\Microsoft\Edge\WebView2\ReleaseChannelPreference + "{AppId}"="" + + [{Root}]\Software\Policies\Microsoft\Edge\WebView2\AdditionalBrowserArguments + "{AppId}"="" + + [{Root}]\Software\Policies\Microsoft\Edge\WebView2\UserDataFolder + "{AppId}"="" + + + Use a group policy under **Administrative Templates** > + **Microsoft Edge WebView2** to configure browser executable folder + and release channel preference. + + + In the unlikely scenario where some instances of WebView are open during a + browser update, the deletion of the previous WebView2 Runtime may be + blocked. To avoid running out of disk space, a new WebView creation fails + with the following error if it detects that too many previous WebView2 + Runtime versions exist. + + + ERROR_DISK_FULL + + + The default maximum number of WebView2 Runtime versions allowed is 20. + To override the maximum number of the previous WebView2 Runtime versions + allowed, set the value of the following environment variable. + + + WEBVIEW2_MAX_INSTANCES + + + If the Webview depends upon an installed WebView2 Runtime version and it is + uninstalled, any subsequent creation fails with the following error. + + + ERROR_PRODUCT_UNINSTALLED + + + First verify with Root as HKLM and then HKCU. AppId is first set to + the Application User Model ID of the process, then if no corresponding + registry key, the AppId is set to the compiled code name of the process, + or if that is not a registry key then *. If an override registry key is + found, use the browserExecutableFolder and userDataFolder registry + values as replacements and append additionalBrowserArguments registry + values for the corresponding values in the provided . + + + + + + Gets the browser version info including channel name if it is not the stable channel or WebView2 Runtime. + + + The relative path to the folder that contains the WebView2 Runtime. + + + + + Compares two instances of browser versions correctly and returns an integer that indicates whether the first instance is older, the same as, or newer than the second instance. + + + One of the version strings to compare. + + + The other version string to compare. + + + An integer that indicates whether the first instance is older, the same as, or newer than the second instance. + + + Value Type + Condition + + + Less than zero + version1 is older than version2. + + + Zero + version1 is the same as version2. + + + Greater than zero + version1 is newer than version2. + + + + + + + Gets the browser version info of the current , including channel name if it is not the stable channel. + + + It matches the format of the method. Channel names are beta, dev, and canary. + + + + + NewBrowserVersionAvailable is raised when a newer version of the WebView2 Runtime is installed and available using WebView2. + + + To use the newer version of the browser you must create a new environment and WebView. The event is only raised for new version from the same WebView2 Runtime from which the code is running. When not running with installed WebView2 Runtime, no event is raised. + + Because a user data folder is only able to be used by one browser process at a time, if you want to use the same user data folder in the WebViews using the new version of the browser, you must close the environment and instance of WebView that are using the older version of the browser first. Or simply prompt the user to restart the app. + + + + + Asynchronously creates a new WebView. + + The HWND in which the WebView should be displayed and from which receive input. + + The WebView adds a child window to the provided window during WebView creation. Z-order and other things impacted by sibling window order are affected accordingly. + + + It is recommended that the application set Application User Model ID for the process or the application window. If none is set, during WebView creation a generated Application User Model ID is set to root window of ParentWindow. + + + + It is recommended that the app handles restart manager messages, to gracefully restart it in the case when the app is using the WebView2 Runtime from a certain installation and that installation is being uninstalled. For example, if a user installs a version of the WebView2 Runtime and opts to use another version of the WebView2 Runtime for testing the app, and then uninstalls the 1st version of the WebView2 Runtime without closing the app, the app restarts to allow un-installation to succeed. + + + + When the app retries CreateCoreWebView2ControllerAsync upon failure, it is recommended that the app restarts from creating a new WebView2 Environment. If a WebView2 Runtime update happens, the version associated with a WebView2 Environment may have been removed and causing the object to no longer work. Creating a new WebView2 Environment works since it uses the latest version. + + + + WebView creation fails if a running instance using the same user data folder exists, and the Environment objects have different . For example, if a WebView was created with one , an attempt to create a WebView with a different using the same user data folder fails. + + + + + + Creates a new object. + + HTTP response content as stream. + The HTTP response status code. + The HTTP response reason phrase. + The raw response header string delimited by newline. + + It is also possible to create this object with empty headers string and then use the to construct the headers line by line. + + + + + + Options used to create WebView2 Environment. + + + Default values will use your defaulted Edge browser and user data folder. + + + + + + Initializes a new instance of the CoreWebView2EnvironmentOptions class. + + + AdditionalBrowserArguments can be specified to change the behavior of the WebView. + + + The default language that WebView will run with. + + + The version of the Edge WebView2 Runtime binaries required to be compatible with the calling application. + + + Set to true if single sign on be enabled using the end user's OS primary account. Defaults to false. + + + + + Gets or sets the additional browser arguments to change the behavior of the WebView. + + + + The arguments are passed to the browser process as part of the command. For more information about using command-line switches with Chromium browser processes, navigate to [Run Chromium with Flags](https://aka.ms/RunChromiumWithFlags). The value appended to a switch is appended to the browser process, for example, in --edge-webview-switches=xxx the value is xxx. If you specify a switch that is important to WebView functionality, it is ignore, for example, --user-data-dir. Specific features are disabled internally and blocked from being enabled. If a switch is specified multiple times, only the last instance is used. + + + + A merge of the different values of the same switch is not attempted, except for disabled and enabled features. The features specified by --enable-features and --disable-features will be merged with simple logic: + + + + The features are the union of the specified features and built-in features. If a feature is disabled, it is removed from the enabled features list. + + + + + If you specify command-line switches and sets this property, the --edge-webview-switches value takes precedence and is processed last. If a switch fails to parse, the switch is ignored. The default state for the operation is to run the browser process with no extra flags. + + + + + + Gets or sets the default display language for WebView. + + + It applies to browser UIs such as context menu and dialogs. It also applies to the accept-languages HTTP header that WebView sends to websites. It is in the format of language[-country] where language is the 2-letter code from [ISO 639](https://www.iso.org/iso-639-language-codes.html) and country is the 2-letter code from [ISO 3166](https://www.iso.org/standard/72482.html). + + + + + Gets or sets the version of the WebView2 Runtime binaries required to be compatible with the your app. + + + This defaults to the WebView2 Runtime version that corresponds with the version of the SDK the app is using. The format of this value is the same as the format of the property and other BrowserVersion values. Only the version part of the BrowserVersion value is respected. The channel suffix, if it exists, is ignored. The version of the WebView2 Runtime binaries actually used may be different from the specified TargetCompatibleBrowserVersion. They binaries are only guaranteed to be compatible. Verify the actual version on the property. + + + + + Determines whether to enable single sign on with Azure Active Directory (AAD) resources inside WebView using the logged in Windows account and single sign on (SSO) with web sites using Microsoft account associated with the login in Windows account. + + + The default value is false. Universal Windows Platform apps must also declare enterpriseCloudSSO [restricted capability](https://docs.microsoft.com/windows/uwp/packaging/app-capability-declarations#restricted-capabilities) for the single sign on (SSO) to work. + + + + + + This represents a helper object for Host Objects. + + + This object helps CoreWebView2 interact with managed Host Objects correctly. + + + + + + + + Create a new instance of CoreWebView2HostObjectHelper. + + + + + Check whether a member is a method of an object. + + + The host object to check. + + + The name of the member to check. + + + + + Iterator for a collection of HTTP headers. + + + + + + + No COM support; throws instead. + + + No COM support. + + + + + Gets the header in in the or collection at the current + position of the enumerator. + + + + + + true when the iterator has not run out of headers. + + + If the collection over which the iterator is iterating is empty or if the iterator has gone past the end of the collection then this is false. + + + + + + + + Moves the iterator to the next HTTP header in the collection. + + false if there are no more HTTP headers. + + + + HTTP request headers. + + + Used to inspect the HTTP request on event and event. It is possible to modify the HTTP request headers from a event, but not from a event. + + + + + + + + + + Returns an enumerator that iterates through the or collection. + + + + + Gets the header value matching the name. + + The header value matching the name. + + + + Gets the header value matching the name using a . + + The header value matching the name. + + + + Checks whether the headers contain an entry that matches the header name. + + Whether the headers contain an entry that matches the header name. + + + + Adds or updates header that matches the name. + + + + + Removes header that matches the name. + + + + + Gets a over the collection of request headers. + + + + + HTTP response headers. + + + Used to construct a for the event. + + + + + + + + Returns an enumerator that iterates through the or collection. + + + + + Appends header line with name and value. + + The header name to be appended. + The header value to be appended. + + + + Checks whether this CoreWebView2HttpResponseHeaders contain entries matching the header name. + + The name of the header to seek. + + + + Gets the first header value in the collection matching the name. + + The header name. + The first header value in the collection matching the name. + + + + Gets the header values matching the name. + + The header name. + + + + Gets a over the collection of entire . + + + + + This is used to complete deferrals on event args that support getting deferrals using the GetDeferral method. This class implements . + + + + + Wraps in SafeHandle so resources can be released if consumer forgets to call Dispose. Recommended + pattern for any type that is not sealed. + https://docs.microsoft.com/en-us/dotnet/api/system.idisposable?view=netcore-3.1#idisposable-and-the-inheritance-hierarchy + + + + + + + Protected implementation of Dispose pattern. + + + + + Completes the associated deferred event. + + + Complete should only be run once for each deferral taken. + + + + + The exception that is thrown when an Edge installation is missing. + + + + + Initializes a new instance of the EdgeNotFoundException class. + + + + + Initializes a new instance of the EdgeNotFoundException class with a specified error message. + + + The error message that explains the reason for the exception. + + + + + Initializes a new instance of the EdgeNotFoundException class with a reference to the inner exception that is the cause of this exception. + + + The exception that is the cause of the current exception. + + + + + Initializes a new instance of the EdgeNotFoundException class with a specified error message and a reference to the inner exception that is the cause of this exception. + + + The error message that explains the reason for the exception. + + + The exception that is the cause of the current exception. + + + + + This represents a helper object for Host Objects. + + + This object helps CoreWebView2 interact with managed Host Objects correctly. + + + + + Check whether a member is a method of an object. + + + The host object to check. + + + The name of the member to check. + + + + + Constructor + + + + + Read at most bufferSize bytes into buffer and return the effective + number of bytes read in bytesReadPtr (unless null). + + + mscorlib disassembly shows the following MarshalAs parameters + void Read([Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex=1)] byte[] pv, int cb, IntPtr pcbRead); + This means marshaling code will have found the size of the array buffer in the parameter bufferSize. + + + Critical: calls Marshal.WriteInt32 which LinkDemands, takes pointers as input + + + + + Move the stream pointer to the specified position. + + + System.IO.stream supports searching past the end of the stream, like + OLE streams. + newPositionPtr is not an out parameter because the method is required + to accept NULL pointers. + + + Critical: calls Marshal.WriteInt64 which LinkDemands, takes pointers as input + + + + + Sets stream's size. + + + + + Obtain stream stats. + + + STATSG has to be qualified because it is defined both in System.Runtime.InteropServices and + System.Runtime.InteropServices.ComTypes. + The STATSTG structure is shared by streams, storages and byte arrays. Members irrelevant to streams + or not available from System.IO.Stream are not returned, which leaves only cbSize and grfMode as + meaningful and available pieces of information. + grfStatFlag is used to indicate whether the stream name should be returned and is ignored because + this information is unavailable. + + + + + Write at most bufferSize bytes from buffer. + + + Critical: calls Marshal.WriteInt32 which LinkDemands, takes pointers as input + + + + + Create a clone. + + + Not implemented. + + + + + Read at most bufferSize bytes from the receiver and write them to targetStream. + + + Not implemented. + + + + + Commit changes. + + + Only relevant to transacted streams. + + + + + Lock at most byteCount bytes starting at offset. + + + Not supported by System.IO.Stream. + + + + + Undo writes performed since last Commit. + + + Relevant only to transacted streams. + + + + + Unlock the specified region. + + + Not supported by System.IO.Stream. + + + + + Specifies the web resource request contexts. + + + + + Specifies all resources. + + + + + Specifies a document resources. + + + + + Specifies a CSS resources. + + + + + Specifies an image resources. + + + + + Specifies another media resource such as a video. + + + + + Specifies a font resource. + + + + + Specifies a script resource. + + + + + Specifies an XML HTTP request. + + + + + Specifies a Fetch API communication. + + + + + Specifies a TextTrack resource. + + + + + Specifies an EventSource API communication. + + + + + Specifies a WebSocket API communication. + + + + + Specifies a Web App Manifest. + + + + + Specifies a Signed HTTP Exchange. + + + + + Specifies a Ping request. + + + + + Specifies a CSP Violation Report. + + + + + Specifies an other resource. + + + + + Indicates the error status values for web navigations. + + + + + Indicates that an unknown error occurred. + + + + + Indicates that the SSL certificate common name does not match the web address. + + + + + Indicates that the SSL certificate has expired. + + + + + Indicates that the SSL client certificate contains errors. + + + + + Indicates that the SSL certificate has been revoked. + + + + + Indicates that the SSL certificate is not valid. The certificate may not match the public key pins for the host name, the certificate is signed by an untrusted authority or using a weak sign algorithm, the certificate claimed DNS names violate name constraints, the certificate contains a weak key, the validity period of the certificate is too long, lack of revocation information or revocation mechanism, non-unique host name, lack of certificate transparency information, or the certificate is chained to a [legacy Symantec root](https://security.googleblog.com/2018/03/distrust-of-symantec-pki-immediate.html). + + + + + Indicates that the host is unreachable. + + + + + Indicates that the connection has timed out. + + + + + Indicates that the server returned an invalid or unrecognized response. + + + + + Indicates that the connection was stopped. + + + + + Indicates that the connection was reset. + + + + + Indicates that the Internet connection has been lost. + + + + + Indicates that a connection to the destination was not established. + + + + + Indicates that the provided host name was not able to be resolved. + + + + + Indicates that the operation was canceled. + + + + + Indicates that the request redirect failed. + + + + + An unexpected error occurred. + + + + + Specifies the JavaScript dialog kind used in . + + + + + Indicates that the dialog uses window.alert JavaScript function. + + + + + Indicates that the dialog uses window.confirm JavaScript function. + + + + + Indicates that the dialog uses window.prompt JavaScript function. + + + + + Indicates that the dialog uses window.beforeunload JavaScript event. + + + + + Specifies the process failure kind used in . + + + + + Indicates that the browser process ended unexpectedly. + + + The WebView automatically moves to the Closed state. The app has to recreate a new WebView to recover from this failure. + + + + + Indicates that the render process ended unexpectedly. + + + A new render process is created automatically and navigated to an error page. The app runs to try to recover from the failure. + + + + + Indicates that the render process is unresponsive. + + + + + Specifies the response to a permission request. + + + + + Specifies that the default browser behavior is used, which normally prompts users for decision. + + + + + Specifies that the permission request is granted. + + + + + Specifies that the permission request is denied. + + + + + Indicates the kind of a permission request. + + + + + Indicates an unknown permission. + + + + + Indicates permission to capture audio. + + + + + Indicates permission to capture video. + + + + + Indicates permission to access geolocation. + + + + + Indicates permission to send web notifications. + + + This permission request is currently auto-rejected and no event is raised for it. + + + + + Indicates permission to access generic sensor. + + + Generic Sensor covers ambient-light-sensor, accelerometer, gyroscope, and magnetometer. + + + + + Indicates permission to read the system clipboard without a user gesture. + + + + + Specifies the reason for moving focus. + + + + + Specifies that the code is setting focus into WebView. + + + + + Specifies that the focus is moved due to Tab traversal forward. + + + + + Specifies that the focus is moved due to Tab traversal backward. + + + + + Specifies the key event kind that raises an event. + + + + + Specifies that the key event kind corresponds to window message WM_KEYDOWN. + + + + + Specifies that the key event kind corresponds to window message WM_KEYUP. + + + + + Specifies that the key event kind corresponds to window message WM_SYSKEYDOWN. + + + + + Specifies that the key event kind corresponds to window message WM_SYSKEYUP. + + + + + Specifies the image format for the method. + + + + + Indicates that the PNG image format is used. + + + + + Indicates that the JPEG image format is used. + + + + + Contains the information packed into the LPARAM sent to a Win32 key event. + + + For more information about WM_KEYDOWN, navigate to [WM_KEYDOWN message](https://docs.microsoft.com/windows/win32/inputdev/wm-keydown). + + + + + Specifies the repeat count for the current message. + + + + + Specifies the scan code. + + + + + Indicates that the key is an extended key. + + + + + Indicates that a menu key is held down (context code). + + + + + Indicates that the key was held down. + + + + + Indicates that the key was released. + + + + + The window features for a WebView popup window. + + + The fields match the windowFeatures passed to window.open() as specified in [Window features](https://developer.mozilla.org/docs/Web/API/Window/open#Window_features) on MDN. There is no requirement for you to respect the values. If your app does not have corresponding UI features (for example, no toolbar) or if all instance of WebView are opened in tabs and do not have distinct size or positions, then your app does not respect the values. You may want to respect values, but perhaps only some apply to the UI of you app. Accordingly, you may respect all, some, or none of the properties as appropriate for your app. For all numeric properties, if the value that is passed to window.open() is outside the range of an , the resulting value is . If you are not able to parse the value an integer, it is considered 0. If the value is a floating point value, it is rounded down to an integer. + + + + + Indicates whether the left and top values are specified. + + + + + Indicates whether the height and width values are specified. + + + + + Gets the left position of the window. Ignored if is false. + + + + + Gets the top position of the window. Ignored if is false. + + + + + Gets the height of the window. Ignored if is false. + + + + + Gets the width of the window. Ignored if is false. + + + + + Indicates that the menu bar is displayed. + + + + + Indicates that the status bar is displayed. + + + + + Indicates that the browser toolbar is displayed. + + + + + Indicates that the scroll bars are displayed. + + + + + An HTTP response used with the event. + + + + + Gets HTTP response content as stream. + + + Stream must have all the content data available by the time the event deferral of this response is completed. Stream should be agile or be created from a background thread to prevent performance impact to the UI thread. null means no content data. + + + + + + Gets the overridden HTTP response headers. + + + + + Gets or sets the HTTP response status code. + + + + + Gets or sets the HTTP response reason phrase. + + + + + Event args for the event. + + + + + Gets the web resource request. + + + The request object may be missing some headers that are added by network stack at a later time. + + + + + Gets or sets the object. + + + If this object is set, the event will be completed with this Response. + An empty object can be created with and then modified to construct the Response. + + + + + Gets the web resource request context. + + + + + Gets a object and put the event into a deferred state. + + + Use this to the event at a later time. + + + + + An HTTP request used with the event. + + + + + Gets or sets the request URI. + + + + + Gets or sets the HTTP request method. + + + + + Gets or sets the HTTP request message body as stream. + + + POST data should be here. If a stream is set, which overrides the message body, the stream must have all the content data available by the time the event deferral of this request is completed. Stream should be agile or be created from a background STA to prevent performance impact to the UI thread. null means no content data. + + + + + + Gets the mutable HTTP request headers. + + + + + Event args for the event. + + + + + Gets the URI of the document that sent this web message. + + + + + Gets the message posted from the WebView content to the host converted to a JSON string. + + + Run this operation to communicate using JavaScript objects. + + For example, the following postMessage runs result in the following WebMessageAsJson values: + + + postMessage({'a': 'b'}) {\"a\": \"b\"}" + postMessage(1.2) 1.2" + postMessage('example') \"example\"" + + + + + + Gets the message posted from the WebView content to the host as a . + + The message posted from the WebView content to the host + The message posted is some other kind of JavaScript type. + + Run this operation to communicate using simple strings. + + For example the following postMessage runs result in the following values returned by TryWebMessageAsString: + + + postMessage({'a': 'b'}) ArgumentException + postMessage(1.2) ArgumentException + postMessage('example') "example" + + + + + + Event args for the event. + + + + + true if the page being navigated to is a new document. + + + + + Defines properties that enable, disable, or modify WebView features. + + + Setting changes made after event do not apply until the next top-level navigation. + + + + + Determines whether running JavaScript is enabled in all future navigations in the WebView. + + + This only affects scripts in the document. Scripts injected with runs even if script is disabled. The default value is true. + + + + + Determines whether communication from the host to the top-level HTML document of the WebView is allowed. + + + This is used when loading a new HTML document. If set to true, communication from the host to the top-level HTML document of the WebView is allowed using , , and message event of window.chrome.webview. Communication from the top-level HTML document of the WebView to the host is allowed using window.chrome.webview.postMessage function and the event. If set to false, then communication is disallowed. and fail and window.chrome.webview.postMessage fails by throwing an instance of an Error object. The default value is true. + + + + + + + + Determines whether WebView renders the default Javascript dialog box. + + + This is used when loading a new HTML document. If set to false, WebView does not render the default JavaScript dialog box (specifically those displayed by the JavaScript alert, confirm, prompt functions and beforeunload event). Instead, WebView raises event that contains all of the information for the dialog and allow the host app to show a custom UI. The default value is true. + + + + + + Determines whether the status bar is displayed. + + + The status bar is usually displayed in the lower left of the WebView and shows things such as the URI of a link when the user hovers over it and other information. The default value is true. + + + + + Determines whether the user is able to use the context menu or keyboard shortcuts to open the DevTools window. + + + The default value is true. + + + + + Determines whether the default context menus are shown to the user in WebView. + + + The default value is true. + + + + + Determines whether host objects are accessible from the page in WebView. + + + The default value is true. + + + + + Determines whether the user is able to impact the zoom of the WebView. + + + When disabled, the user is not able to zoom using Ctrl++, Ctr+-, or Ctrl+mouse wheel, but the zoom is set using property. The default value is true. + + + + + Determines whether to disable built in error page for navigation failure and render process failure. + + + When disabled, blank page is displayed when related error happens. The default value is true. + + + + + Event args for the event. + + + + + Gets the URI of the page that requested the dialog box. + + + + + Gets the kind of JavaScript dialog box. + + + + + + Gets the message of the dialog box. + + + From JavaScript this is the first parameter passed to alert, confirm, and prompt and is empty for beforeunload. + + + + + Gets the default value to use for the result of the prompt JavaScript function. + + + This is the second parameter passed to the JavaScript prompt dialog. + + + + + Gets or sets the return value from the JavaScript prompt function if is run. + + + This value is ignored for s other than . If is not run, this value is ignored and false is returned from prompt. + + + + + + Responds with **OK** to confirm, prompt, and beforeunload dialogs. Not run this method to indicate cancel. + + + From JavaScript, this means that the confirm function and beforeunload event returns true if Accept is run. And for the prompt function it returns the value of if Accept is run and otherwise returns false. + + + + + Gets a object. + + + Use this to the event at a later time. + + + + + Event args for the event. + + + + + Gets the kind of process failure that has occurred. + + + + + Event args for the event. + + + + + Gets the origin of the web content that requests the permission. + + + + + Gets the kind of the permission that is requested. + + + + + true when the permission request was initiated through a user gesture such as clicking an anchor tag with target. + + + Being initiated through a user gesture does not mean that user intended to access the associated resource. + + + + + Gets or sets the status of a permission request. For example, whether the request is granted. + + + The default value is . + + + + + Gets a object. + + + Use the deferral object to make the permission decision at a later time. + + + + + Event args for the event. + + + + + Gets the target uri of the new window request. + + + + + Gets the new window or sets a WebView as a result of the new window requested. + + + The target WebView should not be navigated. If NewWindow is set, the top-level window returns as the opened WindowProxy. + + + + + Indicates whether the event is handled by host. + + + If this is false and no is set, the WebView opens a popup window and it returns as opened WindowProxy. If set to true and no is set for window.open(), the opened WindowProxy is for a dummy window object and no window loads. The default value is false. + + + + + true when the new window request was initiated through a user gesture such as selecting an anchor tag with target. + + + The Microsoft Edge popup blocker is disabled for WebView so the app is able to use this flag to block non-user initiated popups. + + + + + Gets the window features specified by the window.open() call. These features should be considered for positioning and sizing of new WebView windows. + + + + + Gets a object and put the event into a deferred state. + + + Use this to the window open request at a later time. While this event is deferred the opener window returns a WindowProxy to an un-navigated window, which navigates when the deferral is complete. + + + + + Event args for the event. + + + + + Gets the uri of the requested navigation. + + + + + true when the navigation was initiated through a user gesture as opposed to programmatic navigation. + + + + + true when the navigation is redirected. + + + + + Gets the HTTP request headers for the navigation. + + + Note, you are not able to modify the HTTP request headers in a event. + + + + + + Determines whether to cancel the navigation. + + + If set to true, the navigation is no longer present and the content of the current page is intact. For performance reasons, GET HTTP requests may happen, while the host is responding. You may set cookies and use part of a request for the navigation. Cancellation for navigation to about:blank or frame navigation to srcdoc is not supported and ignored. + + + + + Gets the ID of the navigation. + + + + + Event args for the event. + + + + + true when the navigation is successful; false for a navigation that ended up in an error page (failures due to no network, DNS lookup failure, HTTP server responds with 4xx). + + + This may also be false for additional scenarios such as window.stop() run on navigated page. + + + + + Gets the error code if the navigation failed. + + + + + Gets the ID of the navigation. + + + + + Event args for the event. + + + + + Gets the reason for WebView to raise the event. + + + + + Indicates whether the event has been handled by the app. + + + If the app has moved the focus to another desired location, it should set Handled property to true. When Handled property is false after the event handler returns, default action is taken. The default action is to try to find the next tab stop child window in the app and try to move focus to that window. If no other window exists to move focus, focus is cycled within the web content of the WebView. + + + + + A Receiver is created for a particular DevTools Protocol event and allows you to subscribe and unsubscribe from that event. + + + Obtained from the WebView object using . + + + + + + DevToolsProtocolEventReceived is raised when the corresponding DevToolsProtocol event is raised. + + + + + + Event args for the event. + + + + + Gets the parameter object of the corresponding DevToolsProtocol event represented as a JSON string. + + + + + Event args for the event. + + + + + true if the loaded content is an error page. + + + + + Gets the ID of the navigation. + + + + + Event args for the event. + + + + + Gets the key event kind that caused the event to run. + + + + + Gets the Win32 virtual key code of the key that was pressed or released. + + + It is one of the Win32 virtual key constants such as VK_RETURN or an (uppercase) ASCII value such as 'A'. Verify whether Ctrl or Alt are pressed by running GetKeyState(VK_CONTROL) or GetKeyState(VK_MENU). + + + + + Gets the LPARAM value that accompanied the window message. + + + See the documentation for the WM_KEYDOWN and WM_KEYUP messages. + + + + + Gets a representing the information passed in the LPARAM of the window message. + + + + + Indicates whether the event is handled by host. + + + If set to true then this prevents the WebView from performing the default action for this accelerator key. Otherwise the WebView will perform the default action for the accelerator key. + + + + + WebView2 enables you to host web content using the latest Microsoft Edge browser and web technology. + + + + + Gets the object contains various modifiable settings for the running WebView. + + + + + Gets the URI of the current top level document. + + + This value potentially changes as a part of the event raised for some cases such as navigating to a different site or fragment navigations. It remains the same for other types of navigations such as page refreshes or history.pushState with the same URL as the current page. + + + + + + Gets the process ID of the browser process that hosts the WebView. + + + + + true if the WebView is able to navigate to a previous page in the navigation history. + + + If CanGoBack changes value, the event is raised. + + + + + + true if the WebView is able to navigate to a next page in the navigation history. + + + If CanGoForward changes value, the event is raised. + + + + + + Gets the title for the current top-level document. + + + If the document has no explicit title or is otherwise empty, a default that may or may not match the URI of the document is used. + + + + + Indicates if the WebView contains a fullscreen HTML element. + + + + + NavigationStarting is raised when the WebView main frame is requesting permission to navigate to a different URI. + + + Redirects raises this event as well. You may block corresponding navigations until the event handler returns. + + + + + ContentLoading is raised before any content is loaded, including scripts added with . ContentLoading is not raised if a same page navigation occurs (such as through fragment navigations or history.pushState navigations). + + + This operation follows the and events and precedes the and events. + + + + + + + + + SourceChanged is raised when the property changes. + + + SourceChanged is raised when navigating to a different site or fragment navigations. It is not raised for other types of navigations such as page refreshes or history.pushState with the same URL as the current page. This event is raised before for navigation to a new document. + + + + + + + HistoryChanged is raised when there is change of navigation history for the top level document. + + + Use HistoryChanged to verify that the or value has changed. HistoryChanged is also raised for using or . HistoryChanged is raised after and . + + + + + + + + + NavigationCompleted is raised when the WebView has completely loaded (body.onload has been raised) or loading stopped with error. + + + + + FrameNavigationStarting is raised when a child frame in the WebView requests permission to navigate to a different URI. + + + Redirects raise this operation as well. You may block corresponding navigations until the event handler returns. + + + + + FrameNavigationCompleted is raised when a child frame has completely loaded (body.onload has been raised) or loading stopped with error. + + + + + ScriptDialogOpening is raised when a JavaScript dialog (alert, confirm, prompt, or beforeunload) displays for the WebView. + + + This event only is raised if the property is set to false. This event suppresses dialogs or replaces default dialogs with custom dialogs. + + If a deferral is not taken on the event args, the subsequent scripts are blocked until the event handler returns. If a deferral is taken, the scripts are blocked until the deferral is completed. + + + + + + PermissionRequested is raised when content in a WebView requests permission to access some privileged resources. + + + If a deferral is not taken on the event args, the subsequent scripts are blocked until the event handler returns. If a deferral is taken, the scripts are blocked until the deferral is completed. + + + + + ProcessFailed is raised when a WebView process ends unexpectedly or becomes unresponsive. + + + + + WebMessageReceived is raised when the setting is set and the top-level document of the WebView runs window.chrome.webview.postMessage. + + + The postMessage function is void postMessage(object) where object is any object supported by JSON conversion. + When postMessage is called, the handler's Invoke method will be called with the object parameter postMessage converted to a JSON string. + + + + + NewWindowRequested is raised when content inside the WebView requests to open a new window, such as through window.open(). + + + The app passes a target WebView that is considered the opened window. + If a deferral is not taken on the event args, scripts that resulted in the new window that are requested are blocked until the event handler returns. If a deferral is taken, then scripts are blocked until the deferral is completed. + + + + + DocumentTitleChanged is raised when the property changes and may be raised before or after the event. + + + + + + ContainsFullScreenElementChanged is raised when the property changes. + + + An HTML element inside the WebView may enter fullscreen to the size of the WebView or leave fullscreen. This event is useful when, for example, a video element requests to go fullscreen. The listener of this event may resize the WebView in response. + + + + + + WebResourceRequested is raised when the WebView is performing a URL request to a matching URL and resource context filter that was added with . + + + At least one filter must be added for the event to be raised. + The web resource requested may be blocked until the event handler returns if a deferral is not taken on the event args. If a deferral is taken, then the web resource requested is blocked until the deferral is completed. + + + + + + WindowCloseRequested is raised when content inside the WebView requested to close the window, such as after window.close() is run. + + + The app should close the WebView and related app window if that makes sense to the app. + + + + + Causes a navigation of the top level document to the specified URI. + + The URI to navigate to. + + For more information, navigate to [Navigation event](https://docs.microsoft.com/microsoft-edge/webview2/concepts/navigation-events). Note that this operation starts a navigation and the corresponding event is raised sometime after Navigate runs. + + + + + + + Initiates a navigation to as source HTML of a new document. + + A source HTML of a new document. + + The htmlContent parameter may not be larger than 2 MB in total size. The origin of the new page is about:blank. + + + + + + + Adds the provided JavaScript to a list of scripts that should be run after the global object has been created, but before the HTML document has been parsed and before any other script included by the HTML document is run. + + The JavaScript code to be run. + + A script ID that may be passed when calling . + + + The injected script will apply to all future top level document and child frame navigations until removed with . + This is applied asynchronously and you must wait for the returned to complete before you can be sure that the script is ready to execute on future navigations. + + Note that if an HTML document has sandboxing of some kind via [sandbox](https://developer.mozilla.org/docs/Web/HTML/Element/iframe#attr-sandbox) properties or the [Content-Security-Policy HTTP header](https://developer.mozilla.org/docs/Web/HTTP/Headers/Content-Security-Policy) this will affect the script run here. So, for example, if the allow-modals keyword is not set then calls to the alert function will be ignored. + + + + + + Removes the corresponding JavaScript added via with the specified script ID. + + The ID corresponds to the JavaScript code to be removed from the list of scripts. + + + + Runs JavaScript code from the parameter in the current top-level document rendered in the WebView. + + The JavaScript code to be run in the current top-level document rendered in the WebView. + + A JSON encoded string that represents the result of running the provided JavaScript. + + + If the result is undefined, contains a reference cycle, or otherwise is not able to be encoded into JSON, the JSON null value is returned as the "null" string. + + A function that has no explicit return value returns undefined. If the script that was run throws an unhandled exception, then the result is also null. This method is applied asynchronously. If the method is run after the event during a navigation, the script runs in the new document when loading it, around the time is run. This operation works even if is set to false. + + + + + + Captures an image of what WebView is displaying. + + The format of the image to be captured. + The stream to which the resulting image binary data is written. + + When CapturePreviewAsync finishes writing to the stream, the Invoke method on the provided handler parameter is called. + + + + + + Reloads the current page. + + + This is similar to navigating to the URI of current top level document including all navigation events firing and respecting any entries in the HTTP cache. But, the back or forward history will not be modified. + + + + + Posts the specified to the top level document in this WebView. + + The web message to be posted to the top level document in this WebView. + + Runs the message event of the window.chrome.webview of the top-level document. JavaScript in that document may subscribe and unsubscribe to the event using the following code: + + + window.chrome.webview.addEventListener('message', handler) + window.chrome.webview.removeEventListener('message', handler) + + + The event args is an instance of MessageEvent. The setting must be true or this method will fail with E_INVALIDARG. The event arg's data property of the event arg is the webMessageAsJson parameter parsed as a JSON string into a JavaScript object. The event arg's source property of the event arg is a reference to the window.chrome.webview object. For information about sending messages from the HTML document in the WebView to the host, navigate to . The message is sent asynchronously. If a navigation occurs before the message is posted to the page, the message is not be sent. + + + + + + + + Posts a message that is a simple rather than a JSON string representation of a JavaScript object. + + The web message to be posted to the top level document in this WebView. + + This behaves in exactly the same manner as , but the data property of the event arg of the window.chrome.webview message is a with the same value as webMessageAsString. Use this instead of if you want to communicate using simple strings rather than JSON objects. + + + + + + + Runs an asynchronous DevToolsProtocol method. + + + The full name of the method in the format {domain}.{method} + + + A JSON formatted string containing the parameters for the corresponding method. + + + A JSON string that represents the method's return object. + + + For more information about available methods, navigate to [DevTools Protocol Viewer](https://aka.ms/DevToolsProtocolDocs). The handler's Invoke method will be called when the method asynchronously completes. Invoke will be called with the method's return object as a JSON string. + + + + + Navigates the WebView to the previous page in the navigation history. + + + + + Navigates the WebView to the next page in the navigation history. + + + + + Gets a DevTools Protocol event receiver that allows you to subscribe to a DevToolsProtocol event. + + The full name of the event in the format {domain}.{event}. + A Devtools Protocol event receiver. + + For more information about DevToolsProtocol events description and event args, navigate to [DevTools Protocol Viewer](https://aka.ms/DevToolsProtocolDocs). + + + + + Stops all navigations and pending resource fetches. + + + Does not stop scripts. + + + + + Adds the provided host object to script running in the WebView with the specified name. + + The name of the host object. + The host object to be added to script. + + Host objects are exposed as host object proxies via window.chrome.webview.hostObjects.{name}. Host object proxies are promises and will resolve to an object representing the host object. Only the COM visible objects/properties/methods can be accessed from script. The app can control which part of .NET objects are exposed using . + + JavaScript code in the WebView will be able to access appObject as following and then access attributes and methods of appObject. + + To create a [IDispatch](https://docs.microsoft.com/windows/win32/api/oaidl/nn-oaidl-idispatch) implementing class in C# use the following attributes on each class you intend to expose. + + // Bridge and BridgeAnotherClass are C# classes that implement IDispatch and works with AddHostObjectToScript. + [ClassInterface(ClassInterfaceType.AutoDual)] + [ComVisible(true)] + public class BridgeAnotherClass + { + // Sample property. + public string Prop { get; set; } = "Example"; + } + + [ClassInterface(ClassInterfaceType.AutoDual)] + [ComVisible(true)] + public class Bridge + { + public string Func(string param) + { + return "Example: " + param; + } + + public BridgeAnotherClass AnotherObject { get; set; } = new BridgeAnotherClass(); + + // Sample indexed property. + [System.Runtime.CompilerServices.IndexerName("Items")] + public string this[int index] + { + get { return m_dictionary[index]; } + set { m_dictionary[index] = value; } + } + private Dictionary<int, string> m_dictionary = new Dictionary<int, string>(); + } + + Then add instances of those classes via : + + webView.CoreWebView2.AddHostObjectToScript("bridge", new Bridge()); + + And then in script you can call the methods, and access those properties of the objects added via : + + // Find added objects on the hostObjects property + const bridge = chrome.webview.hostObjects.bridge; + + // Call a method and pass in a parameter. + // The result is another proxy promise so you must await to get the result. + console.log(await bridge.Func("testing...")); + + // A property may be another object as long as its class also implements + // IDispatch. + // Getting a property also gets a proxy promise you must await. + const propValue = await bridge.AnotherObject.Prop; + console.log(propValue); + + // Indexed properties + let index = 123; + bridge[index] = "test"; + let result = await bridge[index]; + console.log(result); + + + Note that while simple types, IDispatch and array are supported, generic IUnknown, VT_DECIMAL, or VT_RECORD variant is not supported. Remote JavaScript objects like callback functions are represented as an VT_DISPATCH VARIANT with the object implementing IDispatch. The JavaScript callback method may be invoked using DISPID_VALUE for the DISPID. Nested arrays are supported up to a depth of 3. Arrays of by reference types are not supported. VT_EMPTY and VT_NULL are mapped into JavaScript as null. In JavaScript null and undefined are mapped to VT_EMPTY. + + Additionally, all host objects are exposed as window.chrome.webview.hostObjects.sync.{name}. Here the host objects are exposed as synchronous host object proxies. These are not promises and calls to functions or property access synchronously block running script waiting to communicate cross process for the host code to run. Accordingly this can result in reliability issues and it is recommended that you use the promise based asynchronous window.chrome.webview.hostObjects.{name} API described above. + + Synchronous host object proxies and asynchronous host object proxies can both proxy the same host object. Remote changes made by one proxy will be reflected in any other proxy of that same host object whether the other proxies and synchronous or asynchronous. + + While JavaScript is blocked on a synchronous call to native code, that native code is unable to call back to JavaScript. Attempts to do so will fail with HRESULT_FROM_WIN32(ERROR_POSSIBLE_DEADLOCK). + + Host object proxies are JavaScript Proxy objects that intercept all property get, property set, and method invocations. Properties or methods that are a part of the Function or Object prototype are run locally. Additionally any property or method in the array chrome.webview.hostObjects.options.forceLocalProperties will also be run locally. This defaults to including optional methods that have meaning in JavaScript like toJSON and Symbol.toPrimitive. You can add more to this array as required. + + There's a method chrome.webview.hostObjects.cleanupSome that will best effort garbage collect host object proxies. + + Host object proxies additionally have the following methods which run locally: + + + + + + + + applyHostFunction, getHostProperty, setHostProperty + + Perform a method invocation, property get, or property set on the host object. You can use these to explicitly force a method or property to run remotely if there is a conflicting local method or property. For instance, proxy.toString() will run the local toString method on the proxy object. But proxy.applyHostFunction('toString') runs toString on the host proxied object instead. + + + + getLocalProperty, setLocalProperty + + Perform property get, or property set locally. You can use these methods to force getting or setting a property on the host object proxy itself rather than on the host object it represents. For instance, proxy.unknownProperty will get the property named unknownProperty from the host proxied object. But proxy.getLocalProperty('unknownProperty') will get the value of the property unknownProperty on the proxy object itself. + + + + sync + + Asynchronous host object proxies expose a sync method which returns a promise for a synchronous host object proxy for the same host object. For example, chrome.webview.hostObjects.sample.methodCall() returns an asynchronous host object proxy. You can use the sync method to obtain a synchronous host object proxy instead: + const syncProxy = await chrome.webview.hostObjects.sample.methodCall().sync() + + + + async + + Synchronous host object proxies expose an async method which blocks and returns an asynchronous host object proxy for the same host object. For example, chrome.webview.hostObjects.sync.sample.methodCall() returns a synchronous host object proxy. Calling the async method on this blocks and then returns an asynchronous host object proxy for the same host object: const asyncProxy = chrome.webview.hostObjects.sync.sample.methodCall().async() + + + + then + + Asynchronous host object proxies have a then method. This allows them to be awaitable. then will return a promise that resolves with a representation of the host object. If the proxy represents a JavaScript literal then a copy of that is returned locally. If the proxy represents a function then a non-awaitable proxy is returned. If the proxy represents a JavaScript object with a mix of literal properties and function properties, then the a copy of the object is returned with some properties as host object proxies. + + + + + All other property and method invocations (other than the above Remote object proxy methods, forceLocalProperties list, and properties on Function and Object prototypes) are run remotely. Asynchronous host object proxies return a promise representing asynchronous completion of remotely invoking the method, or getting the property. The promise resolves after the remote operations complete and the promises resolve to the resulting value of the operation. Synchronous host object proxies work similarly but block JavaScript execution and wait for the remote operation to complete. + + Setting a property on an asynchronous host object proxy works slightly differently. The set returns immediately and the return value is the value that will be set. This is a requirement of the JavaScript Proxy object. If you need to asynchronously wait for the property set to complete, use the setHostProperty method which returns a promise as described above. Synchronous object property set property synchronously blocks until the property is set. + + Exposing host objects to script has security risk. Please follow [best practices](https://docs.microsoft.com/microsoft-edge/webview2/concepts/security). + + + + + + Removes the host object specified by the name so that it is no longer accessible from JavaScript code in the WebView. + + The name of the host object to be removed. + + While new access attempts are denied, if the object is already obtained by JavaScript code in the WebView, the JavaScript code continues to have access to that object. Running this method for a name that is already removed or never added fails. + + + + + Opens the DevTools window for the current document in the WebView. + + + Does nothing if run when the DevTools window is already open. + + + + + Adds a URI and resource context filter to the event. + + An URI to be added to the event. + A resource context filter to be added to the event. + + The uri parameter may be set to a wildcard string ('*': zero or more, '?': exactly one). null is equivalent to an empty string. + + + + + + + + Removes a matching WebResource filter that was previously added for the event. + + An URI to at which a web resource filter was added. + A previously added resource context filter to be removed. + A filter that was never added. + + If the same filter was added multiple times, then it must need to be removed as many times as it was added for the removal to be effective. + + + + + diff --git a/library/webview/script/microsoft.web.webview2.1.0.664.37/lib/net462/Microsoft.Web.WebView2.WinForms.dll b/library/webview/script/microsoft.web.webview2.1.0.664.37/lib/net462/Microsoft.Web.WebView2.WinForms.dll new file mode 100644 index 0000000000000000000000000000000000000000..77cac8d99439613009edb4339cffc97ae658129e GIT binary patch literal 27040 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 aL(EwdhfI;W + + + Microsoft.Web.WebView2.WinForms + + + + + This class is a bundle of the most common parameters used to create a . + Its main purpose is to be set to in order to customize the environment used by a during implicit initialization. + + + This class isn't intended to contain all possible environment customization options. + If you need complete control over the environment used by a WebView2 control then you'll need to initialize the control explicitly by + creating your own environment with and passing it to + *before* you set the property to anything. + See the class documentation for an initialization overview. + + + + + Creates a new instance of with default data for all properties. + + + + + Gets or sets the value to pass as the browserExecutableFolder parameter of when creating an environment with this instance. + + + + + Gets or sets the value to pass as the userDataFolder parameter of when creating an environment with this instance. + + + + + Gets or sets the value to use for the Language property of the CoreWebView2EnvironmentOptions parameter passed to when creating an environment with this instance. + + + + + Create a using the current values of this instance's properties. + + A task which will provide the created environment on completion. + + As long as no other properties on this instance are changed, repeated calls to this method will return the same task/environment as earlier calls. + If some other property is changed then the next call to this method will return a different task/environment. + + + + + Control to embed WebView2 in WinForms. + + + This control is effectively a wrapper around the [WebView2 COM + API](https://aka.ms/webview2). You can directly access the underlying + ICoreWebView2 interface and all of its functionality by accessing the + property. Some of the most common COM + functionality is also accessible directly through wrapper + methods/properties/events on the control. + + Upon creation, the control's property will be null. + This is because creating the CoreWebView2 is an expensive operation which involves things like launching Edge browser processes. + There are two ways to cause the CoreWebView2 to be created: + blocked while these handlers execute, so: + + + Call the method. This is referred to as explicit initialization. + + + Set the property. This is referred to as implicit initialization. + + + Either option will start initialization in the background and return back to the caller without waiting for it to finish. + To specify options regarding the initialization process, either pass your own to or set the control's property prior to initialization. + + When initialization has finished (regardless of how it was triggered) then the following things will occur, in this order: + + + The control's event will be invoked. If you need to perform one time setup operations on the CoreWebView2 prior to its use then you should do so in a handler for that event. + + + If a Uri has been set to the property then the control will start navigating to it in the background (i.e. these steps will continue without waiting for the navigation to finish). + + + The Task returned from will complete. + + + + For more details about any of the methods/properties/events involved in the initialization process, see its specific documentation. + + Accelerator key presses (e.g. Ctrl+P) that occur within the control will + fire standard key press events such as OnKeyDown. You can suppress the + control's default implementation of an accelerator key press (e.g. + printing, in the case of Ctrl+P) by setting the Handled property of its + EventArgs to true. Also note that the underlying browser process is + blocked while these handlers execute, so: + + + You should avoid doing a lot of work in these handlers. + + + Some of the WebView2 and CoreWebView2 APIs may throw errors if + invoked within these handlers due to being unable to communicate with + the browser process. + + + If you need to do a lot of work and/or invoke WebView2 APIs in response to + accelerator keys then consider kicking off a background task or queuing + the work for later execution on the UI thread. + + + + + Create a new WebView2 WinForms control. + + + After construction the property is null. + Call to initialize the underlying . + + + + + Cleans up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Overrides the base OnPaint event to have custom actions + in designer mode + + The graphics devices which is the source + + + + Gets or sets a bag of options which are used during initialization of the control's . + This property cannot be modified (an exception will be thrown) after initialization of the control's CoreWebView2 has started. + + Thrown if initialization of the control's CoreWebView2 has already started. + + + + Explicitly trigger initialization of the control's . + + + A pre-created that should be used to create the . + Creating your own environment gives you control over several options that affect how the is initialized. + If you pass null (the default value) then a default environment will be created and used automatically. + + + A Task that represents the background initialization process. + When the task completes then the property will be available for use (i.e. non-null). + Note that the control's event will be invoked before the task completes. + + + Calling this method additional times will have no effect (any specified environment is ignored) and return the same Task as the first call. + Calling this method after initialization has been implicitly triggered by setting the property will have no effect (any specified environment is ignored) and simply return a Task representing that initialization already in progress. + + Thrown when invoked from non-UI thread. + + + + This is the private function which implements the actual background initialization task. + Cannot be called if the control is already initialized or has been disposed. + + + The environment to use to create the . + If that is null then a default environment is created with and its default parameters. + + A task representing the background initialization process. + All the event handlers added here need to be removed in . + + + + Protected VisibilityChanged handler. + + + + + Protected command key handler. + + + + + Protected SizeChanged handler. + + + + + True if initialization finished successfully and the control is not disposed yet. + + + + + Recursive retrieval of the parent control + + The control to get the parent for + The root parent control + + + + The underlying CoreWebView2. Use this property to perform more operations on the WebView2 content than is exposed + on the WebView2. This value is null until it is initialized. You can force the underlying CoreWebView2 to + initialize via the InitializeAsync method. + + + + + The zoom factor for the WebView. + + + + + The Source property is the URI of the top level document of the + WebView2. Setting the Source is equivalent to calling . + Setting the Source will trigger initialization of the , if not already initialized. + The default value of Source is null, indicating that the is not yet initialized. + + Specified value is not an absolute . + Specified value is null and the control is initialized. + + + + + Returns true if the webview can navigate to a next page in the + navigation history via the method. + This is equivalent to the . + If the underlying is not yet initialized, this property is false. + + + + + + Returns true if the webview can navigate to a previous page in the + navigation history via the method. + This is equivalent to the . + If the underlying is not yet initialized, this property is false. + + + + + + Executes the provided script in the top level document of the . + This is equivalent to . + + The underlying is not yet initialized. + + + + + Reloads the top level document of the . + This is equivalent to . + + The underlying is not yet initialized. + + + + + Navigates to the next page in navigation history. + This is equivalent to . + If the underlying is not yet initialized, this method does nothing. + + + + + + Navigates to the previous page in navigation history. + This is equivalent to . + If the underlying is not yet initialized, this method does nothing. + + + + + + Renders the provided HTML as the top level document of the . + This is equivalent to . + + The underlying is not yet initialized. + + + + + Stops any in progress navigation in the . + This is equivalent to . + If the underlying is not yet initialized, this method does nothing. + + + + + + This event is triggered when the control's has finished being initialized (regardless of how initialization was triggered) but before it is used for anything. + You should handle this event if you need to perform one time setup operations on the CoreWebView2 which you want to affect all of its usages + (e.g. adding event handlers, configuring settings, installing document creation scripts, adding host objects). + + + This event doesn't provide any arguments, and the sender will be the WebView2 control, whose property will now be valid (i.e. non-null) for the first time. + + + + + NavigationStarting dispatches before a new navigate starts for the top + level document of the . + This is equivalent to the event. + + + + + + NavigationCompleted dispatches after a navigate of the top level + document completes rendering either successfully or not. + This is equivalent to the event. + + + + + + WebMessageReceived dispatches after web content sends a message to the + app host via chrome.webview.postMessage. + This is equivalent to the event. + + + + + + SourceChanged dispatches after the property changes. This may happen + during a navigation or if otherwise the script in the page changes the + URI of the document. + This is equivalent to the event. + + + + + + ContentLoading dispatches after a navigation begins to a new URI and the + content of that URI begins to render. + This is equivalent to the event. + + + + + + ZoomFactorChanged dispatches when the property changes. + This is equivalent to the event. + + + + + + Required designer variable. + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + diff --git a/library/webview/script/microsoft.web.webview2.1.0.664.37/lib/net462/Microsoft.Web.WebView2.Wpf.dll b/library/webview/script/microsoft.web.webview2.1.0.664.37/lib/net462/Microsoft.Web.WebView2.Wpf.dll new file mode 100644 index 0000000000000000000000000000000000000000..b15be9c44d6d4e132695eb23f005bc884e55d008 GIT binary patch literal 30616 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 J_382S{{cz~2O + + + Microsoft.Web.WebView2.Wpf + + + + + This class is a bundle of the most common parameters used to create a . + Its main purpose is to be set to in order to customize the environment used by a during implicit initialization. + It is also a nice WPF integration utility which allows commonly used environment parameters to be dependency properties and be created and used in markup. + + + This class isn't intended to contain all possible environment customization options. + If you need complete control over the environment used by a WebView2 control then you'll need to initialize the control explicitly by + creating your own environment with and passing it to + *before* you set the property to anything. + See the class documentation for an initialization overview. + + + + + Creates a new instance of with default data for all properties. + + + + + The WPF DependencyProperty which backs the property. + + + + + Gets or sets the value to pass as the browserExecutableFolder parameter of when creating an environment with this instance. + + + + + The WPF DependencyProperty which backs the property. + + + + + Gets or sets the value to pass as the userDataFolder parameter of when creating an environment with this instance. + + + + + The WPF DependencyProperty which backs the property. + + + + + Gets or sets the value to use for the Language property of the CoreWebView2EnvironmentOptions parameter passed to when creating an environment with this instance. + + + + + Create a using the current values of this instance's properties. + + A task which will provide the created environment on completion. + + As long as no other properties on this instance are changed, repeated calls to this method will return the same task/environment as earlier calls. + If some other property is changed then the next call to this method will return a different task/environment. + + + + + A control to embed web content in a WPF application. + + + This control is effectively a wrapper around the [WebView2 COM + API](https://aka.ms/webview2). You can directly access the underlying + ICoreWebView2 interface and all of its functionality by accessing the + property. Some of the most common COM + functionality is also accessible directly through wrapper + methods/properties/events on the control. + + Upon creation, the control's property will be + null. This is because creating the is an + expensive operation which involves things like launching Edge browser + processes. There are two ways to cause the to + be created: + + + Call the method. This is + referred to as explicit initialization. + + + Set the property (which could be done from + markup, for example). This is referred to as implicit initialization. + Either option will start initialization in the background and return + back to the caller without waiting for it to finish. + To specify options regarding the initialization process, either pass + your own to or set the control's property prior to initialization. + + + + When initialization has finished (regardless of how it was triggered) + then the following things will occur, in this + order: + + + The control's event + will be invoked. If you need to perform one time setup operations on + the prior to its use then you should + do so in a handler for that event. + + + If a Uri has been set to the property then the control will start navigating to it in + the background (i.e. these steps will continue without waiting for the + navigation to finish). + + + The Task returned from will + complete. + + + + For more details about any of the methods/properties/events involved in + the initialization process, see its specific documentation. + + Because the control's is a very heavyweight + object (potentially responsible for multiple running processes and + megabytes of disk space) the control implements to provide an explicit means to free it. + Calling will release the + and its underlying resources (except any that are also being used by other + WebViews), and reset to null. After has been called the cannot be + re-initialized, and any attempt to use functionality which requires it + will throw an . + + Accelerator key presses (e.g. Ctrl+P) that occur within the control will + fire standard key press events such as OnKeyDown. You can suppress the + control's default implementation of an accelerator key press (e.g. + printing, in the case of Ctrl+P) by setting the Handled property of its + EventArgs to true. Also note that the underlying browser process is + blocked while these handlers execute, so: + + + You should avoid doing a lot of work in these handlers. + + + Some of the WebView2 and CoreWebView2 APIs may throw errors if + invoked within these handlers due to being unable to communicate with + the browser process. + + + If you need to do a lot of work and/or invoke WebView2 APIs in response to + accelerator keys then consider kicking off a background task or queuing + the work for later execution on the UI thread. + + Note that this control extends in order to embed + windows which live outside of the WPF ecosystem. This has some + implications regarding the control's input and output behavior as well as + the functionality it "inherits" from and . + See the and [WPF/Win32 + interop](https://docs.microsoft.com/dotnet/framework/wpf/advanced/wpf-and-win32-interoperation#hwnds-inside-wpf) + documentation for more information. + + + + + + Creates a new instance of a WebView2 control. + Note that the control's will be null until initialized. + See the class documentation for an initialization overview. + + + + + The WPF which backs the property. + + + + + + Gets or sets a bag of options which are used during initialization of the control's . + Setting this property will not work after initialization of the control's has started (the old value will be retained). + See the class documentation for an initialization overview. + + + + + + This is overridden from and is called to instruct us to create our HWND. + + The HWND that we should use as the parent of the one we create. + The HWND that we created. + + + + + This is overridden from and is called to instruct us to destroy our HWND. + + Our HWND that we need to destroy. + + + + + This is overridden from and is called to provide us with Win32 messages that are sent to our hwnd. + + Window receiving the message (should always match our ). + Indicates the message being received. See Win32 documentation for WM_* constant values. + The "wParam" data being provided with the message. Meaning varies by message. + The "lParam" data being provided with the message. Meaning varies by message. + If true then the message will not be forwarded to any (more) handlers. + Return value varies by message. + + + + + Accesses the complete functionality of the underlying COM API. + Returns null until initialization has completed. + See the class documentation for an initialization overview. + + Thrown if the calling thread isn't the thread which created this object (usually the UI thread). See for more info. + Thrown if has already been called on the control. + + + + + + This event is triggered when the control's has finished being initialized (regardless of how initialization was triggered) but before it is used for anything. + You should handle this event if you need to perform one time setup operations on the which you want to affect all of its usages + (e.g. adding event handlers, configuring settings, installing document creation scripts, adding host objects). + See the class documentation for an initialization overview. + + + This event doesn't provide any arguments, and the sender will be the control, whose property will now be valid (i.e. non-null) for the first time. + + + + + + Explicitly triggers initialization of the control's . + See the class documentation for an initialization overview. + + + A pre-created that should be used to create the . + Creating your own environment gives you control over several options that affect how the is initialized. + If you pass an environment to this method then it will override any settings specified on the property. + If you pass null (the default value) and no value has been set to then a default environment will be created and used automatically. + + + A Task that represents the background initialization process. + When the task completes then the property will be available for use (i.e. non-null). + Note that the control's event will be invoked before the task completes. + + + Calling this method additional times will have no effect (any specified environment is ignored) and return the same Task as the first call. + Calling this method after initialization has been implicitly triggered by setting the property will have no effect (any specified environment is ignored) and simply return a Task representing that initialization already in progress. + Note that even though this method is asynchronous and returns a Task, it still must be called on the UI thread like most public functionality of most UI controls. + + Thrown if the calling thread isn't the thread which created this object (usually the UI thread). See for more info. + Thrown if has already been called on the control. + + + + + + This is called by our base class according to the typical implementation of the pattern. + We implement it by releasing all of our underlying COM resources, including our . + + True if a caller is explicitly calling Dispose, false if we're being finalized. + + + + Updates one of our dependency properties to match a new value from the . + It both sets the value and remembers (in _propertyChangingFromCore) that it came from the CoreWebView2 rather than the caller, + allowing the property's "on changed" handler to alter its behavior based on where the new value came from. + It's only intended to be called in a CoreWebView2 event handler that's informing us of a new property value. + It's basically just a wrapper around the inherited SetValue which also maintains _propertyChangingFromCore. + See the comments on for additional background info. + + The property to change due to an equivalent change in the CoreWebView2. + The new value from the CoreWebView2. + + + + Checks if a given property is currently being updated to match an equivalent change in the . + This method should only be called from a property's "on changed" handler; it has no meaning at any other time. + It is used to determine if the property is changing to match the CoreWebView2 or because the caller set it. + Usually this is used in order to decide if the new value needs to be propagated down to the CoreWebView2. + See the comments on for additional background info. + + The property to check. + True if the property is changing to match the CoreWebView2, or false if the property was changed by the caller. + + + + Changes our controller's ParentWindow to the given HWND, along with any other necessary associated work. + + The new HWND to set as the controller's parent. IntPtr.Zero means that the controller will have no parent and the CoreWebView2 will be hidden. + Whether or not to call as required. Defaults to true. If you pass false then you should call it yourself if required. + + Reparenting the controller isn't necessarily as simple as changing its ParentWindow property, + and this method exists to ensure that any other work that needs to be done at the same time gets done. + The reason that SyncControllerWithParentWindow isn't baked directly into this method is because + sometimes we want to call the Sync functionality without necessarily reparenting (e.g. during initialization). + + + + + Syncs visual/windowing information between the controller and its parent HWND. + This should be called any time a new, non-null HWND is set as the controller's parent, + including when the controller is first created. + + + + + This is a handler for our base UIElement's IsVisibleChanged event. + It's predictably fired whenever IsVisible changes, and IsVisible reflects the actual current visibility status of the control. + We just need to pass this info through to our CoreWebView2Controller so it can save some effort when the control isn't visible. + + + + + This is overridden from and called when our control's location has changed. + The HwndHost takes care of updating the HWND we created. + What we need to do is move our CoreWebView2 to match the new location. + + + + + The WPF which backs the property. + + + + + The top-level which the WebView is currently displaying (or will display once initialization of its is finished). + Generally speaking, getting this property is equivalent to getting the property and setting this property (to a different value) is equivalent to calling the method. + + + Getting this property before the has been initialized will retrieve the last Uri which was set to it, or null (the default) if none has been. + Setting this property before the has been initialized will cause initialization to start in the background (if not already in progress), after which the will navigate to the specified . + This property can never be set back to null or to a relative . + See the class documentation for an initialization overview. + + Thrown if has already been called on the control. + Thrown if the property is set to null. + Thrown if the property is set to a relative (i.e. a whose property is false). + + + + + This is a callback that WPF calls when the WPF Source property's value changes. + This might have been triggered by either: + 1) The caller set Source to programmatically trigger a navigation. + 2) The CoreWebView changed its own source and we're just updating the dependency property to match. + We use to distinguish the two cases. + + + + + A wrapper around the . + The only difference between this event and is the first parameter that's passed to handlers. + Handlers of this event will receive the control, whereas handlers of will receive the instance. + + + + + + This is an event handler for our CoreWebView2's SourceChanged event. + Unsurprisingly, it fires when the CoreWebView2's source URI has been changed. + Note that there are two distinct triggers for this: + 1) The CoreWebView2 was told to navigate programmatically (potentially by us, see SourcePropertyChanged). + 2) The user interacted with the CoreWebView2, e.g. clicked a link. + In either of the above cases, this event might trigger several times due to e.g. redirection. + Aside from propagating to our own event, we just need to update our WPF Source property to match the CoreWebView2's. + + + + + A wrapper around the . + The only difference between this event and is the first parameter that's passed to handlers. + Handlers of this event will receive the control, whereas handlers of will receive the instance. + + + + + + This is an event handler for our CoreWebView2's NavigationStarting event. + We just need to propagate the event to WPF. + + + + + A wrapper around the . + The only difference between this event and is the first parameter that's passed to handlers. + Handlers of this event will receive the control, whereas handlers of will receive the instance. + + + + + + This is an event handler for our CoreWebView2's NavigationCompleted event. + We just need to propagate the event to WPF. + + + + + This is an event handler for our CoreWebView2's HistoryChanged event. + We're handling it in order to update our WPF CanGoBack and CanGoForward properties. + + + + + The WPF which backs the property. + + + + + Returns true if the WebView can navigate to a previous page in the navigation history. + Wrapper around the property of . + If isn't initialized yet then returns false. + + + + + + The WPF which backs the property. + + + + + Returns true if the WebView can navigate to a next page in the navigation history. + Wrapper around the property of . + If isn't initialized yet then returns false. + + + + + + This is overridden from and is called to inform us that tabbing has caused the focus to move into our control/window. + Since WPF can't manage the transition of focus to a non-WPF HWND, it delegates the transition to us here. + So our job is just to place the focus in our external HWND. + + Information about how the focus is moving. + true to indicate that we handled the navigation, or false to indicate that we didn't. + + + + This is overridden from and is called to inform us when we receive the keyboard focus. + We handle this by passing the keyboard focus on to the underlying . + We never want to land in a state where our window (this.Handle) actually has the keyboard focus. + + Arguments from the underlying GotKeyboardFocus event. + + Note that it's actually possible for us to receive keyboard focus without this method being called. + One known case where that happens is when our parent window is deactivated while we have focus, then reactivated. + We handle that case in . + + + + + + This is an event handler for our CoreWebView2Controller's MoveFocusRequested event. + It fires when the CoreWebView2Controller has focus but wants to move it elsewhere in the app. + E.g. this happens when the user tabs past the last item in the CoreWebView2 and focus needs to return to some other app control. + So our job is just to tell WPF to move the focus on to the next control. + Note that we don't propagate this event outward as a standard WPF routed event because we've implemented its purpose here. + If users of the control want to track focus shifting in/out of the control, they should use standard WPF events. + + + + + This is overridden from and is called when WPF needs to know if the focus is in our control/window. + WPF can't know on its own since we're hosting a non-WPF window, so instead it asks us by calling this. + To answer, we just track state based on events that fire when it gains or loses focus. + + True if the focus is in our control/window, false if it isn't. + + + + This is an event handler for our CoreWebView2Controller's GotFocus event. + Aside from propagating the event to WPF, we just need to update our internal _hasFocus state. + That state is used when HwndHost needs to know if our HWND contains the focus (see HasFocusWithinCore). + + + + + This is an event handler for our CoreWebView2Controller's LostFocus event. + Aside from propagating the event to WPF, we just need to update our internal _hasFocus state. + That state is used when HwndHost needs to know if our HWND contains the focus (see HasFocusWithinCore). + + + + + This is an event handler for our CoreWebView2Controller's AcceleratorKeyPressed event. + This is called to inform us about key presses that are likely to have special behavior (e.g. esc, return, Function keys, letters with modifier keys). + WPF can't detect this input because Windows sends it directly to the Win32 CoreWebView2Controller control. + We implement this by generating standard WPF key input events, allowing callers to handle the input in the usual WPF way if they want. + If nobody handles the WPF key events then we'll allow the default CoreWebView2Controller logic (if any) to handle it. + Of the possible options, this implementation should provide the most flexibility to callers. + + + + + This is overridden from and called to allow us to handle key press input. + WPF should never actually call this in response to keyboard events because we're hosting a non-WPF window. + When our window has focus Windows will send the input directly to it rather than to WPF's top-level window and input system. + This override should only be called when we're explicitly forwarding accelerator key input from the CoreWebView2 to WPF (in CoreWebView2Controller_AcceleratorKeyPressed). + Even then, this KeyDownEvent is only triggered because our PreviewKeyDownEvent implementation explicitly triggers it, matching WPF's usual system. + So the process is: + + CoreWebView2Controller_AcceleratorKeyPressed + PreviewKeyDownEvent + KeyDownEvent + OnKeyDown + + . + + + + + See . + + + + + This is the "Preview" (i.e. tunneling) version of , so it actually happens first. + Like OnKeyDown, this will only ever be called if we're explicitly forwarding key presses from the CoreWebView2. + In order to mimic WPF's standard input handling, when we receive this we turn around and fire off the standard bubbling KeyDownEvent. + That way others in the WPF tree see the same standard pair of input events that WPF itself would have triggered if it were handling the key press. + + + + + + See . + + + + + The WPF which backs the property. + + + + + The zoom factor for the WebView. + This property directly exposes , see its documentation for more info. + Getting this property before the has been initialized will retrieve the last value which was set to it, or 1.0 (the default) if none has been. + The most recent value set to this property before the CoreWebView2 has been initialized will be set on it after initialization. + + + + + + This is a callback that WPF calls when our WPF ZoomFactor property's value changes. + This might have been triggered by either: + 1) The caller set ZoomFactor to change the zoom of the CoreWebView2. + 2) The CoreWebView2 changed its own ZoomFactor and we're just updating the dependency property to match. + We use to distinguish the two cases. + + + + + The event is raised when the property changes. + This event directly exposes . + + + + + + + This is an event handler for our CoreWebView2Controller's ZoomFactorChanged event. + Unsurprisingly, it fires when the CoreWebView2Controller's ZoomFactor has been changed. + Note that there are two distinct triggers for this: + 1) The value was changed programmatically (potentially by us, see ZoomFactorPropertyChanged). + 2) The user interacted with the CoreWebView2, e.g. CTRL + Mouse Wheel. + Aside from propagating to our own event, we just need to update our WPF ZoomFactor property to match the CoreWebView2Controller's. + + + + + Navigates the WebView to the previous page in the navigation history. + Equivalent to calling + If hasn't been initialized yet then does nothing. + + Thrown if the calling thread isn't the thread which created this object (usually the UI thread). See for more info. + Thrown if has already been called on the control. + + + + + + Navigates the WebView to the next page in the navigation history. + Equivalent to calling . + If hasn't been initialized yet then does nothing. + + Thrown if the calling thread isn't the thread which created this object (usually the UI thread). See for more info. + Thrown if has already been called on the control. + + + + + + Reloads the current page. + Equivalent to calling . + + Thrown if hasn't been initialized yet." + Thrown if the calling thread isn't the thread which created this object (usually the UI thread). See for more info. + Thrown if has already been called on the control. + + + + + + Stops all navigations and pending resource fetches. + Equivalent to calling . + + Thrown if hasn't been initialized yet." + Thrown if the calling thread isn't the thread which created this object (usually the UI thread). See for more info. + Thrown if has already been called on the control. + + + + + + Initiates a navigation to htmlContent as source HTML of a new document. + Equivalent to calling . + + Thrown if hasn't been initialized yet." + Thrown if the calling thread isn't the thread which created this object (usually the UI thread). See for more info. + Thrown if has already been called on the control. + + + + + + A wrapper around the . + The only difference between this event and is the first parameter that's passed to handlers. + Handlers of this event will receive the control, whereas handlers of will receive the instance. + + + + + + This is an event handler for our CoreWebView2's ContentLoading event. + We just need to propagate the event to WPF. + + + + + Executes JavaScript code from the javaScript parameter in the current top level document rendered in the WebView. + Equivalent to calling . + + Thrown if hasn't been initialized yet. + Thrown if the calling thread isn't the thread which created this object (usually the UI thread). See for more info. + Thrown if has already been called on the control. + + + + + + A wrapper around the . + The only difference between this event and is the first parameter that's passed to handlers. + Handlers of this event will receive the control, whereas handlers of will receive the instance. + + + + + + This is an event handler for our CoreWebView2's WebMessageReceived event. + We just need to propagate the event to WPF. + + + + diff --git a/library/webview/script/microsoft.web.webview2.1.0.664.37/lib/netcoreapp3.0/Microsoft.Web.WebView2.Core.dll b/library/webview/script/microsoft.web.webview2.1.0.664.37/lib/netcoreapp3.0/Microsoft.Web.WebView2.Core.dll new file mode 100644 index 0000000000000000000000000000000000000000..f9192340f4cf5f8c07d3d061f13f2a70ae7ee43c GIT binary patch literal 121752 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
  • 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 + + + Microsoft.Web.WebView2.Core + + + + + + + + + + + + + + + + + Browser version values from /chrome/VERSION + + + + Product Version + + + + This class is the owner of the object, and + provides support for resizing, showing and hiding, focusing, and other + functionality related to windowing and composition. + + + The owns the , and if all references to the go away, the WebView will be closed. + + + The owner of the object that provides support for resizing, showing and hiding, focusing, and other functionality related to windowing and composition. + + + The CoreWebView2Controller owns the , and if all references to the go away, the WebView is closed. + + + + + Gets the associated with this . + + + + + + Add .Net specific host object helper for the CoreWebView2 so that it can + figure out whether a member is a method of an object. + + + + + Determines whether to show or hide the WebView. + + + If IsVisible is set to false, the WebView is transparent and is not rendered. However, this does not affect the window containing the WebView (the ParentWindow parameter that was passed to ). If you want that window to disappear too, run or on it directly in addition to modifying this. + WebView as a child window does not get window messages when the top window is minimized or restored. For performance reason, developer should set IsVisible property of the WebView to false when the app window is minimized and back to true when app window is restored. App window can do this by handling SC_MINIMIZE and SC_RESTORE command upon receiving WM_SYSCOMMAND message. + + + + + + + Gets or sets the WebView bounds. + + + Bounds are relative to the . The app has two ways to position a WebView: + + + Create a child HWND that is the WebView parent HWND. Position the window where the WebView should be. Use (0, 0) for the top-left corner (the offset) of the Bounds of the WebView. + + + Use the top-most window of the app as the WebView parent HWND. For example, to position ebView correctly in the app, set the top-left corner of the Bounds of the WebView. + + + + The values of Bounds are limited by the coordinate space of the host. + + + + + Gets or sets the zoom factor for the WebView. + + + Note that changing zoom factor may cause window.innerWidth or window.innerHeight and page layout to change. A zoom factor that is applied by the host by setting this ZoomFactor property becomes the new default zoom for the WebView. This zoom factor applies across navigations and is the zoom factor WebView is returned to when the user presses Ctrl+0. When the zoom factor is changed by the user (resulting in the app receiving ), that zoom applies only for the current page. Any user applied zoom is only for the current page and is reset on a navigation. Specifying a ZoomFactor less than or equal to 0 is not allowed. WebView also has an internal supported zoom factor range. When a specified zoom factor is out of that range, it is normalized to be within the range, and a event is raised for the real applied zoom factor. When this range normalization happens, this reports the zoom factor specified during the previous modification of the ZoomFactor property until the event is received after WebView applies the normalized zoom factor. + + + + + Gets the parent window provided by the app or sets the parent window that this WebView is using to render content. + + + It initially returns the ParentWindow passed into . Setting the property causes the WebView to re-parent the main WebView window to the newly provided window. + + + + + ZoomFactorChanged is raised when the property changes. + + + The event may be raised because the property was modified, or due to the user manually modifying the zoom. When it is modified using the property, the internal zoom factor is updated immediately and no ZoomFactorChanged event is raised. WebView associates the last used zoom factor for each site. It is possible for the zoom factor to change when navigating to a different page. When the zoom factor changes due to a navigation change, the ZoomFactorChanged event is raised right after the event. + + + + + + MoveFocusRequested is raised when user tries to tab out of the WebView. + + + The focus of the WebView has not changed when this event is raised. + + + + + GotFocus is raised when WebView gets focus. + + + + + LostFocus is raised when WebView loses focus. + + + In the case where event is raised, the focus is still on WebView when event is raised. LostFocus is only raised afterwards when code of the app or default action of event sets focus away from WebView. + + + + + AcceleratorKeyPressed is raised when an accelerator key or key combo is pressed or released while the WebView is focused. + + + A key is considered an accelerator if either of the following conditions are true: + + + + Ctrl or Alt is currently being held. + + + The pressed key does not map to a character. + + + + A few specific keys are never considered accelerators, such as Shift. The Escape key is always considered an accelerator. + + Autorepeated key events caused by holding the key down will also raise this event. Filter out the auto-repeated key events by verifying or . + + In windowed mode, this event is synchronous. Until you set to true or the event handler returns, the browser process is blocked and outgoing cross-process COM calls will fail with RPC_E_CANTCALLOUT_ININPUTSYNCCALL. All methods work, however. + + In windowless mode, the event is asynchronous. Further input do not reach the browser until the event handler returns or is set to true, but the browser process is not blocked, and outgoing COM calls work normally. + + It is recommended to set to true as early as you are able to know that you want to handle the accelerator key. + + + + + Updates and properties at the same time. + + The bounds to be updated. + The zoom factor to be updated. + + This operation is atomic from the perspective of the host. After returning from this function, the and properties are both updated if the function is successful, or neither is updated if the function fails. If and are both updated by the same scale (for example, and are both doubled), then the page does not display a change in window.innerWidth or window.innerHeight and the WebView renders the content at the new size and zoom without intermediate renderings. This function also updates just one of or by passing in the new value for one and the current value for the other. + + + + + Moves focus into WebView. + + The reason for moving focus. + + WebView will get focus and focus will be set to correspondent element in the page hosted in the WebView. For reason, focus is set to previously focused element or the default element if no previously focused element exists. For reason, focus is set to the first element. For reason, focus is set to the last element. WebView changes focus through user interaction including selecting into a WebView or Tab into it. For tabbing, the app runs MoveFocus with or to align with Tab and Shift+Tab respectively when it decides the WebView is the next tabbable element. + + + + + Tells WebView that the main WebView parent (or any ancestor) HWND moved. + + + This is a notification separate from . This is needed for accessibility and certain dialogs in WebView to work correctly. + + + + + Closes the WebView and cleans up the underlying browser instance. + + + Cleaning up the browser instance releases the resources powering the WebView. The browser instance is shut down if no other WebViews are using it. + + After running Close, all methods fail and event handlers stop running. Specifically, the WebView releases the associated references to any associated event handlers when Close is run. + + Close is implicitly run when the loses the final reference and is destructed. But it is best practice to explicitly run Close to avoid any accidental cycle of references between the WebView and the app code. Specifically, if you capture a reference to the WebView in an event handler you create a reference cycle between the WebView and the event handler. Run Close to break the cycle by releasing all event handlers. But to avoid the situation, it is best to both explicitly run Close on the WebView and to not capture a reference to the WebView to ensure the WebView is cleaned up correctly. + + + + + This represents the WebView2 Environment. + + + WebViews created from an environment run on the Browser process specified with environment parameters and objects created from an environment should be used in the same environment. Using it in different environments are not guaranteed to be compatible and may fail. + + + + + + Creates a WebView2 Environment using the installed or a custom WebView2 Runtime version. + + + The relative path to the folder that contains a custom version of WebView2 Runtime. + + To use a fixed version of the WebView2 Runtime, pass the relative + folder path that contains the fixed version of the WebView2 Runtime + to browserExecutableFolder. To create WebView2 controls that + use the installed version of the WebView2 Runtime that exists on + user machines, pass a null or empty string to + browserExecutableFolder. In this scenario, the API tries to + find a compatible version of the WebView2 Runtime that is installed + on the user machine (first at the machine level, and then per user) + using the selected channel preference. The path of fixed version of + the WebView2 Runtime should not contain _\Edge\Application\_. When + such a path is used, the API fails with ERROR_NOT_SUPPORTED. + + + + The user data folder location for WebView2. + + The path is either an absolute file path or a relative file path + that is interpreted as relative to the compiled code for the + current process. The default user data _{Executable File + Name}.WebView2_ folder is created in the same directory next to the + compiled code for the app. WebView2 creation fails if the compiled + code is running in a directory in which the process does not have + permission to create a new directory. The app is responsible to + clean up the associated user data folder when it is done. + + + + Options used to create WebView2 Environment. + + As a browser process may be shared among WebViews, WebView creation + fails if the specified options does not match the options of + the WebViews that are currently running in the shared browser + process. + + + + + The default channel search order is the WebView2 Runtime, Beta, Dev, and + Canary. When an override WEBVIEW2_RELEASE_CHANNEL_PREFERENCE environment + variable or applicable releaseChannelPreference registry value is set to + 1, the channel search order is reversed. + + + To use a fixed version of the WebView2 Runtime, pass the relative + folder path that contains the fixed version of the WebView2 Runtime + to browserExecutableFolder. To create WebView2 controls that + use the installed version of the WebView2 Runtime that exists on + user machines, pass a null or empty string to + browserExecutableFolder. In this scenario, the API tries to + find a compatible version of the WebView2 Runtime that is installed + on the user machine (first at the machine level, and then per user) + using the selected channel preference. The path of fixed version of + the WebView2 Runtime should not contain _\Edge\Application\_. When + such a path is used, the API fails with the following error. + + + The , , and may be + overriden by values either specified in environment variables or in + the registry. + + + When creating a the following environment variables are verified. + + + WEBVIEW2_BROWSER_EXECUTABLE_FOLDER + WEBVIEW2_USER_DATA_FOLDER + WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS + WEBVIEW2_RELEASE_CHANNEL_PREFERENCE + + + If browser executable folder or user data folder is specified in an + environment variable or in the registry, the specified or values are overridden. If additional browser + arguments are specified in an environment variable or in the + registry, it is appended to the corresponding value in the specified + . + + + While not strictly overrides, additional environment variables may be set. + + + WEBVIEW2_WAIT_FOR_SCRIPT_DEBUGGER + + + When found with a non-empty value, this indicates that the WebView + is being launched under a script debugger. In this case, the WebView + issues a Page.waitForDebugger CDP command that runs the + script inside the WebView to pause on launch, until a debugger + issues a corresponding Runtime.runIfWaitingForDebugger CDP + command to resume the runtime. + Note that this environment variable does not have a registry key equivalent. + + + WEBVIEW2_PIPE_FOR_SCRIPT_DEBUGGER + + + When found with a non-empty value, it indicates that the WebView is + being launched under a script debugger that also supports host apps + that use multiple WebViews. The value is used as the identifier for + a named pipe that is opened and written to when a new WebView is + created by the host app. The payload should match the payload of the + remote-debugging-port JSON target and an external debugger + may use it to attach to a specific WebView instance. The format of + the pipe created by the debugger should be + \\.\pipe\WebView2\Debugger\{app_name}\{pipe_name}, where the + following are true. + + {app_name} is the host app exe file name, for example, WebView2Example.exe + {pipe_name} is the value set for WEBVIEW2_PIPE_FOR_SCRIPT_DEBUGGER + + + To enable debugging of the targets identified by the JSON, you must + set the WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS environment + variable to send --remote-debugging-port={port_num}, where + the following is true. + + {port_num} is the port on which the CDP server binds. + + + If both WEBVIEW2_PIPE_FOR_SCRIPT_DEBUGGER and + WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS environment variables, + the WebViews hosted in your app and associated contents may exposed + to 3rd party apps such as debuggers. Note that this environment + variable does not have a registry key equivalent. + + + If none of those environment variables exist, then the registry is examined + next. + + + [{Root}]\Software\Policies\Microsoft\Edge\WebView2\BrowserExecutableFolder + "{AppId}"="" + + [{Root}]\Software\Policies\Microsoft\Edge\WebView2\ReleaseChannelPreference + "{AppId}"="" + + [{Root}]\Software\Policies\Microsoft\Edge\WebView2\AdditionalBrowserArguments + "{AppId}"="" + + [{Root}]\Software\Policies\Microsoft\Edge\WebView2\UserDataFolder + "{AppId}"="" + + + Use a group policy under **Administrative Templates** > + **Microsoft Edge WebView2** to configure browser executable folder + and release channel preference. + + + In the unlikely scenario where some instances of WebView are open during a + browser update, the deletion of the previous WebView2 Runtime may be + blocked. To avoid running out of disk space, a new WebView creation fails + with the following error if it detects that too many previous WebView2 + Runtime versions exist. + + + ERROR_DISK_FULL + + + The default maximum number of WebView2 Runtime versions allowed is 20. + To override the maximum number of the previous WebView2 Runtime versions + allowed, set the value of the following environment variable. + + + WEBVIEW2_MAX_INSTANCES + + + If the Webview depends upon an installed WebView2 Runtime version and it is + uninstalled, any subsequent creation fails with the following error. + + + ERROR_PRODUCT_UNINSTALLED + + + First verify with Root as HKLM and then HKCU. AppId is first set to + the Application User Model ID of the process, then if no corresponding + registry key, the AppId is set to the compiled code name of the process, + or if that is not a registry key then *. If an override registry key is + found, use the browserExecutableFolder and userDataFolder registry + values as replacements and append additionalBrowserArguments registry + values for the corresponding values in the provided . + + + + + + Gets the browser version info including channel name if it is not the stable channel or WebView2 Runtime. + + + The relative path to the folder that contains the WebView2 Runtime. + + + + + Compares two instances of browser versions correctly and returns an integer that indicates whether the first instance is older, the same as, or newer than the second instance. + + + One of the version strings to compare. + + + The other version string to compare. + + + An integer that indicates whether the first instance is older, the same as, or newer than the second instance. + + + Value Type + Condition + + + Less than zero + version1 is older than version2. + + + Zero + version1 is the same as version2. + + + Greater than zero + version1 is newer than version2. + + + + + + + Gets the browser version info of the current , including channel name if it is not the stable channel. + + + It matches the format of the method. Channel names are beta, dev, and canary. + + + + + NewBrowserVersionAvailable is raised when a newer version of the WebView2 Runtime is installed and available using WebView2. + + + To use the newer version of the browser you must create a new environment and WebView. The event is only raised for new version from the same WebView2 Runtime from which the code is running. When not running with installed WebView2 Runtime, no event is raised. + + Because a user data folder is only able to be used by one browser process at a time, if you want to use the same user data folder in the WebViews using the new version of the browser, you must close the environment and instance of WebView that are using the older version of the browser first. Or simply prompt the user to restart the app. + + + + + Asynchronously creates a new WebView. + + The HWND in which the WebView should be displayed and from which receive input. + + The WebView adds a child window to the provided window during WebView creation. Z-order and other things impacted by sibling window order are affected accordingly. + + + It is recommended that the application set Application User Model ID for the process or the application window. If none is set, during WebView creation a generated Application User Model ID is set to root window of ParentWindow. + + + + It is recommended that the app handles restart manager messages, to gracefully restart it in the case when the app is using the WebView2 Runtime from a certain installation and that installation is being uninstalled. For example, if a user installs a version of the WebView2 Runtime and opts to use another version of the WebView2 Runtime for testing the app, and then uninstalls the 1st version of the WebView2 Runtime without closing the app, the app restarts to allow un-installation to succeed. + + + + When the app retries CreateCoreWebView2ControllerAsync upon failure, it is recommended that the app restarts from creating a new WebView2 Environment. If a WebView2 Runtime update happens, the version associated with a WebView2 Environment may have been removed and causing the object to no longer work. Creating a new WebView2 Environment works since it uses the latest version. + + + + WebView creation fails if a running instance using the same user data folder exists, and the Environment objects have different . For example, if a WebView was created with one , an attempt to create a WebView with a different using the same user data folder fails. + + + + + + Creates a new object. + + HTTP response content as stream. + The HTTP response status code. + The HTTP response reason phrase. + The raw response header string delimited by newline. + + It is also possible to create this object with empty headers string and then use the to construct the headers line by line. + + + + + + Options used to create WebView2 Environment. + + + Default values will use your defaulted Edge browser and user data folder. + + + + + + Initializes a new instance of the CoreWebView2EnvironmentOptions class. + + + AdditionalBrowserArguments can be specified to change the behavior of the WebView. + + + The default language that WebView will run with. + + + The version of the Edge WebView2 Runtime binaries required to be compatible with the calling application. + + + Set to true if single sign on be enabled using the end user's OS primary account. Defaults to false. + + + + + Gets or sets the additional browser arguments to change the behavior of the WebView. + + + + The arguments are passed to the browser process as part of the command. For more information about using command-line switches with Chromium browser processes, navigate to [Run Chromium with Flags](https://aka.ms/RunChromiumWithFlags). The value appended to a switch is appended to the browser process, for example, in --edge-webview-switches=xxx the value is xxx. If you specify a switch that is important to WebView functionality, it is ignore, for example, --user-data-dir. Specific features are disabled internally and blocked from being enabled. If a switch is specified multiple times, only the last instance is used. + + + + A merge of the different values of the same switch is not attempted, except for disabled and enabled features. The features specified by --enable-features and --disable-features will be merged with simple logic: + + + + The features are the union of the specified features and built-in features. If a feature is disabled, it is removed from the enabled features list. + + + + + If you specify command-line switches and sets this property, the --edge-webview-switches value takes precedence and is processed last. If a switch fails to parse, the switch is ignored. The default state for the operation is to run the browser process with no extra flags. + + + + + + Gets or sets the default display language for WebView. + + + It applies to browser UIs such as context menu and dialogs. It also applies to the accept-languages HTTP header that WebView sends to websites. It is in the format of language[-country] where language is the 2-letter code from [ISO 639](https://www.iso.org/iso-639-language-codes.html) and country is the 2-letter code from [ISO 3166](https://www.iso.org/standard/72482.html). + + + + + Gets or sets the version of the WebView2 Runtime binaries required to be compatible with the your app. + + + This defaults to the WebView2 Runtime version that corresponds with the version of the SDK the app is using. The format of this value is the same as the format of the property and other BrowserVersion values. Only the version part of the BrowserVersion value is respected. The channel suffix, if it exists, is ignored. The version of the WebView2 Runtime binaries actually used may be different from the specified TargetCompatibleBrowserVersion. They binaries are only guaranteed to be compatible. Verify the actual version on the property. + + + + + Determines whether to enable single sign on with Azure Active Directory (AAD) resources inside WebView using the logged in Windows account and single sign on (SSO) with web sites using Microsoft account associated with the login in Windows account. + + + The default value is false. Universal Windows Platform apps must also declare enterpriseCloudSSO [restricted capability](https://docs.microsoft.com/windows/uwp/packaging/app-capability-declarations#restricted-capabilities) for the single sign on (SSO) to work. + + + + + + This represents a helper object for Host Objects. + + + This object helps CoreWebView2 interact with managed Host Objects correctly. + + + + + + + + Create a new instance of CoreWebView2HostObjectHelper. + + + + + Check whether a member is a method of an object. + + + The host object to check. + + + The name of the member to check. + + + + + Iterator for a collection of HTTP headers. + + + + + + + No COM support; throws instead. + + + No COM support. + + + + + Gets the header in in the or collection at the current + position of the enumerator. + + + + + + true when the iterator has not run out of headers. + + + If the collection over which the iterator is iterating is empty or if the iterator has gone past the end of the collection then this is false. + + + + + + + + Moves the iterator to the next HTTP header in the collection. + + false if there are no more HTTP headers. + + + + HTTP request headers. + + + Used to inspect the HTTP request on event and event. It is possible to modify the HTTP request headers from a event, but not from a event. + + + + + + + + + + Returns an enumerator that iterates through the or collection. + + + + + Gets the header value matching the name. + + The header value matching the name. + + + + Gets the header value matching the name using a . + + The header value matching the name. + + + + Checks whether the headers contain an entry that matches the header name. + + Whether the headers contain an entry that matches the header name. + + + + Adds or updates header that matches the name. + + + + + Removes header that matches the name. + + + + + Gets a over the collection of request headers. + + + + + HTTP response headers. + + + Used to construct a for the event. + + + + + + + + Returns an enumerator that iterates through the or collection. + + + + + Appends header line with name and value. + + The header name to be appended. + The header value to be appended. + + + + Checks whether this CoreWebView2HttpResponseHeaders contain entries matching the header name. + + The name of the header to seek. + + + + Gets the first header value in the collection matching the name. + + The header name. + The first header value in the collection matching the name. + + + + Gets the header values matching the name. + + The header name. + + + + Gets a over the collection of entire . + + + + + This is used to complete deferrals on event args that support getting deferrals using the GetDeferral method. This class implements . + + + + + Wraps in SafeHandle so resources can be released if consumer forgets to call Dispose. Recommended + pattern for any type that is not sealed. + https://docs.microsoft.com/en-us/dotnet/api/system.idisposable?view=netcore-3.1#idisposable-and-the-inheritance-hierarchy + + + + + + + Protected implementation of Dispose pattern. + + + + + Completes the associated deferred event. + + + Complete should only be run once for each deferral taken. + + + + + The exception that is thrown when an Edge installation is missing. + + + + + Initializes a new instance of the EdgeNotFoundException class. + + + + + Initializes a new instance of the EdgeNotFoundException class with a specified error message. + + + The error message that explains the reason for the exception. + + + + + Initializes a new instance of the EdgeNotFoundException class with a reference to the inner exception that is the cause of this exception. + + + The exception that is the cause of the current exception. + + + + + Initializes a new instance of the EdgeNotFoundException class with a specified error message and a reference to the inner exception that is the cause of this exception. + + + The error message that explains the reason for the exception. + + + The exception that is the cause of the current exception. + + + + + This represents a helper object for Host Objects. + + + This object helps CoreWebView2 interact with managed Host Objects correctly. + + + + + Check whether a member is a method of an object. + + + The host object to check. + + + The name of the member to check. + + + + + Constructor + + + + + Read at most bufferSize bytes into buffer and return the effective + number of bytes read in bytesReadPtr (unless null). + + + mscorlib disassembly shows the following MarshalAs parameters + void Read([Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex=1)] byte[] pv, int cb, IntPtr pcbRead); + This means marshaling code will have found the size of the array buffer in the parameter bufferSize. + + + Critical: calls Marshal.WriteInt32 which LinkDemands, takes pointers as input + + + + + Move the stream pointer to the specified position. + + + System.IO.stream supports searching past the end of the stream, like + OLE streams. + newPositionPtr is not an out parameter because the method is required + to accept NULL pointers. + + + Critical: calls Marshal.WriteInt64 which LinkDemands, takes pointers as input + + + + + Sets stream's size. + + + + + Obtain stream stats. + + + STATSG has to be qualified because it is defined both in System.Runtime.InteropServices and + System.Runtime.InteropServices.ComTypes. + The STATSTG structure is shared by streams, storages and byte arrays. Members irrelevant to streams + or not available from System.IO.Stream are not returned, which leaves only cbSize and grfMode as + meaningful and available pieces of information. + grfStatFlag is used to indicate whether the stream name should be returned and is ignored because + this information is unavailable. + + + + + Write at most bufferSize bytes from buffer. + + + Critical: calls Marshal.WriteInt32 which LinkDemands, takes pointers as input + + + + + Create a clone. + + + Not implemented. + + + + + Read at most bufferSize bytes from the receiver and write them to targetStream. + + + Not implemented. + + + + + Commit changes. + + + Only relevant to transacted streams. + + + + + Lock at most byteCount bytes starting at offset. + + + Not supported by System.IO.Stream. + + + + + Undo writes performed since last Commit. + + + Relevant only to transacted streams. + + + + + Unlock the specified region. + + + Not supported by System.IO.Stream. + + + + + Specifies the web resource request contexts. + + + + + Specifies all resources. + + + + + Specifies a document resources. + + + + + Specifies a CSS resources. + + + + + Specifies an image resources. + + + + + Specifies another media resource such as a video. + + + + + Specifies a font resource. + + + + + Specifies a script resource. + + + + + Specifies an XML HTTP request. + + + + + Specifies a Fetch API communication. + + + + + Specifies a TextTrack resource. + + + + + Specifies an EventSource API communication. + + + + + Specifies a WebSocket API communication. + + + + + Specifies a Web App Manifest. + + + + + Specifies a Signed HTTP Exchange. + + + + + Specifies a Ping request. + + + + + Specifies a CSP Violation Report. + + + + + Specifies an other resource. + + + + + Indicates the error status values for web navigations. + + + + + Indicates that an unknown error occurred. + + + + + Indicates that the SSL certificate common name does not match the web address. + + + + + Indicates that the SSL certificate has expired. + + + + + Indicates that the SSL client certificate contains errors. + + + + + Indicates that the SSL certificate has been revoked. + + + + + Indicates that the SSL certificate is not valid. The certificate may not match the public key pins for the host name, the certificate is signed by an untrusted authority or using a weak sign algorithm, the certificate claimed DNS names violate name constraints, the certificate contains a weak key, the validity period of the certificate is too long, lack of revocation information or revocation mechanism, non-unique host name, lack of certificate transparency information, or the certificate is chained to a [legacy Symantec root](https://security.googleblog.com/2018/03/distrust-of-symantec-pki-immediate.html). + + + + + Indicates that the host is unreachable. + + + + + Indicates that the connection has timed out. + + + + + Indicates that the server returned an invalid or unrecognized response. + + + + + Indicates that the connection was stopped. + + + + + Indicates that the connection was reset. + + + + + Indicates that the Internet connection has been lost. + + + + + Indicates that a connection to the destination was not established. + + + + + Indicates that the provided host name was not able to be resolved. + + + + + Indicates that the operation was canceled. + + + + + Indicates that the request redirect failed. + + + + + An unexpected error occurred. + + + + + Specifies the JavaScript dialog kind used in . + + + + + Indicates that the dialog uses window.alert JavaScript function. + + + + + Indicates that the dialog uses window.confirm JavaScript function. + + + + + Indicates that the dialog uses window.prompt JavaScript function. + + + + + Indicates that the dialog uses window.beforeunload JavaScript event. + + + + + Specifies the process failure kind used in . + + + + + Indicates that the browser process ended unexpectedly. + + + The WebView automatically moves to the Closed state. The app has to recreate a new WebView to recover from this failure. + + + + + Indicates that the render process ended unexpectedly. + + + A new render process is created automatically and navigated to an error page. The app runs to try to recover from the failure. + + + + + Indicates that the render process is unresponsive. + + + + + Specifies the response to a permission request. + + + + + Specifies that the default browser behavior is used, which normally prompts users for decision. + + + + + Specifies that the permission request is granted. + + + + + Specifies that the permission request is denied. + + + + + Indicates the kind of a permission request. + + + + + Indicates an unknown permission. + + + + + Indicates permission to capture audio. + + + + + Indicates permission to capture video. + + + + + Indicates permission to access geolocation. + + + + + Indicates permission to send web notifications. + + + This permission request is currently auto-rejected and no event is raised for it. + + + + + Indicates permission to access generic sensor. + + + Generic Sensor covers ambient-light-sensor, accelerometer, gyroscope, and magnetometer. + + + + + Indicates permission to read the system clipboard without a user gesture. + + + + + Specifies the reason for moving focus. + + + + + Specifies that the code is setting focus into WebView. + + + + + Specifies that the focus is moved due to Tab traversal forward. + + + + + Specifies that the focus is moved due to Tab traversal backward. + + + + + Specifies the key event kind that raises an event. + + + + + Specifies that the key event kind corresponds to window message WM_KEYDOWN. + + + + + Specifies that the key event kind corresponds to window message WM_KEYUP. + + + + + Specifies that the key event kind corresponds to window message WM_SYSKEYDOWN. + + + + + Specifies that the key event kind corresponds to window message WM_SYSKEYUP. + + + + + Specifies the image format for the method. + + + + + Indicates that the PNG image format is used. + + + + + Indicates that the JPEG image format is used. + + + + + Contains the information packed into the LPARAM sent to a Win32 key event. + + + For more information about WM_KEYDOWN, navigate to [WM_KEYDOWN message](https://docs.microsoft.com/windows/win32/inputdev/wm-keydown). + + + + + Specifies the repeat count for the current message. + + + + + Specifies the scan code. + + + + + Indicates that the key is an extended key. + + + + + Indicates that a menu key is held down (context code). + + + + + Indicates that the key was held down. + + + + + Indicates that the key was released. + + + + + The window features for a WebView popup window. + + + The fields match the windowFeatures passed to window.open() as specified in [Window features](https://developer.mozilla.org/docs/Web/API/Window/open#Window_features) on MDN. There is no requirement for you to respect the values. If your app does not have corresponding UI features (for example, no toolbar) or if all instance of WebView are opened in tabs and do not have distinct size or positions, then your app does not respect the values. You may want to respect values, but perhaps only some apply to the UI of you app. Accordingly, you may respect all, some, or none of the properties as appropriate for your app. For all numeric properties, if the value that is passed to window.open() is outside the range of an , the resulting value is . If you are not able to parse the value an integer, it is considered 0. If the value is a floating point value, it is rounded down to an integer. + + + + + Indicates whether the left and top values are specified. + + + + + Indicates whether the height and width values are specified. + + + + + Gets the left position of the window. Ignored if is false. + + + + + Gets the top position of the window. Ignored if is false. + + + + + Gets the height of the window. Ignored if is false. + + + + + Gets the width of the window. Ignored if is false. + + + + + Indicates that the menu bar is displayed. + + + + + Indicates that the status bar is displayed. + + + + + Indicates that the browser toolbar is displayed. + + + + + Indicates that the scroll bars are displayed. + + + + + An HTTP response used with the event. + + + + + Gets HTTP response content as stream. + + + Stream must have all the content data available by the time the event deferral of this response is completed. Stream should be agile or be created from a background thread to prevent performance impact to the UI thread. null means no content data. + + + + + + Gets the overridden HTTP response headers. + + + + + Gets or sets the HTTP response status code. + + + + + Gets or sets the HTTP response reason phrase. + + + + + Event args for the event. + + + + + Gets the web resource request. + + + The request object may be missing some headers that are added by network stack at a later time. + + + + + Gets or sets the object. + + + If this object is set, the event will be completed with this Response. + An empty object can be created with and then modified to construct the Response. + + + + + Gets the web resource request context. + + + + + Gets a object and put the event into a deferred state. + + + Use this to the event at a later time. + + + + + An HTTP request used with the event. + + + + + Gets or sets the request URI. + + + + + Gets or sets the HTTP request method. + + + + + Gets or sets the HTTP request message body as stream. + + + POST data should be here. If a stream is set, which overrides the message body, the stream must have all the content data available by the time the event deferral of this request is completed. Stream should be agile or be created from a background STA to prevent performance impact to the UI thread. null means no content data. + + + + + + Gets the mutable HTTP request headers. + + + + + Event args for the event. + + + + + Gets the URI of the document that sent this web message. + + + + + Gets the message posted from the WebView content to the host converted to a JSON string. + + + Run this operation to communicate using JavaScript objects. + + For example, the following postMessage runs result in the following WebMessageAsJson values: + + + postMessage({'a': 'b'}) {\"a\": \"b\"}" + postMessage(1.2) 1.2" + postMessage('example') \"example\"" + + + + + + Gets the message posted from the WebView content to the host as a . + + The message posted from the WebView content to the host + The message posted is some other kind of JavaScript type. + + Run this operation to communicate using simple strings. + + For example the following postMessage runs result in the following values returned by TryWebMessageAsString: + + + postMessage({'a': 'b'}) ArgumentException + postMessage(1.2) ArgumentException + postMessage('example') "example" + + + + + + Event args for the event. + + + + + true if the page being navigated to is a new document. + + + + + Defines properties that enable, disable, or modify WebView features. + + + Setting changes made after event do not apply until the next top-level navigation. + + + + + Determines whether running JavaScript is enabled in all future navigations in the WebView. + + + This only affects scripts in the document. Scripts injected with runs even if script is disabled. The default value is true. + + + + + Determines whether communication from the host to the top-level HTML document of the WebView is allowed. + + + This is used when loading a new HTML document. If set to true, communication from the host to the top-level HTML document of the WebView is allowed using , , and message event of window.chrome.webview. Communication from the top-level HTML document of the WebView to the host is allowed using window.chrome.webview.postMessage function and the event. If set to false, then communication is disallowed. and fail and window.chrome.webview.postMessage fails by throwing an instance of an Error object. The default value is true. + + + + + + + + Determines whether WebView renders the default Javascript dialog box. + + + This is used when loading a new HTML document. If set to false, WebView does not render the default JavaScript dialog box (specifically those displayed by the JavaScript alert, confirm, prompt functions and beforeunload event). Instead, WebView raises event that contains all of the information for the dialog and allow the host app to show a custom UI. The default value is true. + + + + + + Determines whether the status bar is displayed. + + + The status bar is usually displayed in the lower left of the WebView and shows things such as the URI of a link when the user hovers over it and other information. The default value is true. + + + + + Determines whether the user is able to use the context menu or keyboard shortcuts to open the DevTools window. + + + The default value is true. + + + + + Determines whether the default context menus are shown to the user in WebView. + + + The default value is true. + + + + + Determines whether host objects are accessible from the page in WebView. + + + The default value is true. + + + + + Determines whether the user is able to impact the zoom of the WebView. + + + When disabled, the user is not able to zoom using Ctrl++, Ctr+-, or Ctrl+mouse wheel, but the zoom is set using property. The default value is true. + + + + + Determines whether to disable built in error page for navigation failure and render process failure. + + + When disabled, blank page is displayed when related error happens. The default value is true. + + + + + Event args for the event. + + + + + Gets the URI of the page that requested the dialog box. + + + + + Gets the kind of JavaScript dialog box. + + + + + + Gets the message of the dialog box. + + + From JavaScript this is the first parameter passed to alert, confirm, and prompt and is empty for beforeunload. + + + + + Gets the default value to use for the result of the prompt JavaScript function. + + + This is the second parameter passed to the JavaScript prompt dialog. + + + + + Gets or sets the return value from the JavaScript prompt function if is run. + + + This value is ignored for s other than . If is not run, this value is ignored and false is returned from prompt. + + + + + + Responds with **OK** to confirm, prompt, and beforeunload dialogs. Not run this method to indicate cancel. + + + From JavaScript, this means that the confirm function and beforeunload event returns true if Accept is run. And for the prompt function it returns the value of if Accept is run and otherwise returns false. + + + + + Gets a object. + + + Use this to the event at a later time. + + + + + Event args for the event. + + + + + Gets the kind of process failure that has occurred. + + + + + Event args for the event. + + + + + Gets the origin of the web content that requests the permission. + + + + + Gets the kind of the permission that is requested. + + + + + true when the permission request was initiated through a user gesture such as clicking an anchor tag with target. + + + Being initiated through a user gesture does not mean that user intended to access the associated resource. + + + + + Gets or sets the status of a permission request. For example, whether the request is granted. + + + The default value is . + + + + + Gets a object. + + + Use the deferral object to make the permission decision at a later time. + + + + + Event args for the event. + + + + + Gets the target uri of the new window request. + + + + + Gets the new window or sets a WebView as a result of the new window requested. + + + The target WebView should not be navigated. If NewWindow is set, the top-level window returns as the opened WindowProxy. + + + + + Indicates whether the event is handled by host. + + + If this is false and no is set, the WebView opens a popup window and it returns as opened WindowProxy. If set to true and no is set for window.open(), the opened WindowProxy is for a dummy window object and no window loads. The default value is false. + + + + + true when the new window request was initiated through a user gesture such as selecting an anchor tag with target. + + + The Microsoft Edge popup blocker is disabled for WebView so the app is able to use this flag to block non-user initiated popups. + + + + + Gets the window features specified by the window.open() call. These features should be considered for positioning and sizing of new WebView windows. + + + + + Gets a object and put the event into a deferred state. + + + Use this to the window open request at a later time. While this event is deferred the opener window returns a WindowProxy to an un-navigated window, which navigates when the deferral is complete. + + + + + Event args for the event. + + + + + Gets the uri of the requested navigation. + + + + + true when the navigation was initiated through a user gesture as opposed to programmatic navigation. + + + + + true when the navigation is redirected. + + + + + Gets the HTTP request headers for the navigation. + + + Note, you are not able to modify the HTTP request headers in a event. + + + + + + Determines whether to cancel the navigation. + + + If set to true, the navigation is no longer present and the content of the current page is intact. For performance reasons, GET HTTP requests may happen, while the host is responding. You may set cookies and use part of a request for the navigation. Cancellation for navigation to about:blank or frame navigation to srcdoc is not supported and ignored. + + + + + Gets the ID of the navigation. + + + + + Event args for the event. + + + + + true when the navigation is successful; false for a navigation that ended up in an error page (failures due to no network, DNS lookup failure, HTTP server responds with 4xx). + + + This may also be false for additional scenarios such as window.stop() run on navigated page. + + + + + Gets the error code if the navigation failed. + + + + + Gets the ID of the navigation. + + + + + Event args for the event. + + + + + Gets the reason for WebView to raise the event. + + + + + Indicates whether the event has been handled by the app. + + + If the app has moved the focus to another desired location, it should set Handled property to true. When Handled property is false after the event handler returns, default action is taken. The default action is to try to find the next tab stop child window in the app and try to move focus to that window. If no other window exists to move focus, focus is cycled within the web content of the WebView. + + + + + A Receiver is created for a particular DevTools Protocol event and allows you to subscribe and unsubscribe from that event. + + + Obtained from the WebView object using . + + + + + + DevToolsProtocolEventReceived is raised when the corresponding DevToolsProtocol event is raised. + + + + + + Event args for the event. + + + + + Gets the parameter object of the corresponding DevToolsProtocol event represented as a JSON string. + + + + + Event args for the event. + + + + + true if the loaded content is an error page. + + + + + Gets the ID of the navigation. + + + + + Event args for the event. + + + + + Gets the key event kind that caused the event to run. + + + + + Gets the Win32 virtual key code of the key that was pressed or released. + + + It is one of the Win32 virtual key constants such as VK_RETURN or an (uppercase) ASCII value such as 'A'. Verify whether Ctrl or Alt are pressed by running GetKeyState(VK_CONTROL) or GetKeyState(VK_MENU). + + + + + Gets the LPARAM value that accompanied the window message. + + + See the documentation for the WM_KEYDOWN and WM_KEYUP messages. + + + + + Gets a representing the information passed in the LPARAM of the window message. + + + + + Indicates whether the event is handled by host. + + + If set to true then this prevents the WebView from performing the default action for this accelerator key. Otherwise the WebView will perform the default action for the accelerator key. + + + + + WebView2 enables you to host web content using the latest Microsoft Edge browser and web technology. + + + + + Gets the object contains various modifiable settings for the running WebView. + + + + + Gets the URI of the current top level document. + + + This value potentially changes as a part of the event raised for some cases such as navigating to a different site or fragment navigations. It remains the same for other types of navigations such as page refreshes or history.pushState with the same URL as the current page. + + + + + + Gets the process ID of the browser process that hosts the WebView. + + + + + true if the WebView is able to navigate to a previous page in the navigation history. + + + If CanGoBack changes value, the event is raised. + + + + + + true if the WebView is able to navigate to a next page in the navigation history. + + + If CanGoForward changes value, the event is raised. + + + + + + Gets the title for the current top-level document. + + + If the document has no explicit title or is otherwise empty, a default that may or may not match the URI of the document is used. + + + + + Indicates if the WebView contains a fullscreen HTML element. + + + + + NavigationStarting is raised when the WebView main frame is requesting permission to navigate to a different URI. + + + Redirects raises this event as well. You may block corresponding navigations until the event handler returns. + + + + + ContentLoading is raised before any content is loaded, including scripts added with . ContentLoading is not raised if a same page navigation occurs (such as through fragment navigations or history.pushState navigations). + + + This operation follows the and events and precedes the and events. + + + + + + + + + SourceChanged is raised when the property changes. + + + SourceChanged is raised when navigating to a different site or fragment navigations. It is not raised for other types of navigations such as page refreshes or history.pushState with the same URL as the current page. This event is raised before for navigation to a new document. + + + + + + + HistoryChanged is raised when there is change of navigation history for the top level document. + + + Use HistoryChanged to verify that the or value has changed. HistoryChanged is also raised for using or . HistoryChanged is raised after and . + + + + + + + + + NavigationCompleted is raised when the WebView has completely loaded (body.onload has been raised) or loading stopped with error. + + + + + FrameNavigationStarting is raised when a child frame in the WebView requests permission to navigate to a different URI. + + + Redirects raise this operation as well. You may block corresponding navigations until the event handler returns. + + + + + FrameNavigationCompleted is raised when a child frame has completely loaded (body.onload has been raised) or loading stopped with error. + + + + + ScriptDialogOpening is raised when a JavaScript dialog (alert, confirm, prompt, or beforeunload) displays for the WebView. + + + This event only is raised if the property is set to false. This event suppresses dialogs or replaces default dialogs with custom dialogs. + + If a deferral is not taken on the event args, the subsequent scripts are blocked until the event handler returns. If a deferral is taken, the scripts are blocked until the deferral is completed. + + + + + + PermissionRequested is raised when content in a WebView requests permission to access some privileged resources. + + + If a deferral is not taken on the event args, the subsequent scripts are blocked until the event handler returns. If a deferral is taken, the scripts are blocked until the deferral is completed. + + + + + ProcessFailed is raised when a WebView process ends unexpectedly or becomes unresponsive. + + + + + WebMessageReceived is raised when the setting is set and the top-level document of the WebView runs window.chrome.webview.postMessage. + + + The postMessage function is void postMessage(object) where object is any object supported by JSON conversion. + When postMessage is called, the handler's Invoke method will be called with the object parameter postMessage converted to a JSON string. + + + + + NewWindowRequested is raised when content inside the WebView requests to open a new window, such as through window.open(). + + + The app passes a target WebView that is considered the opened window. + If a deferral is not taken on the event args, scripts that resulted in the new window that are requested are blocked until the event handler returns. If a deferral is taken, then scripts are blocked until the deferral is completed. + + + + + DocumentTitleChanged is raised when the property changes and may be raised before or after the event. + + + + + + ContainsFullScreenElementChanged is raised when the property changes. + + + An HTML element inside the WebView may enter fullscreen to the size of the WebView or leave fullscreen. This event is useful when, for example, a video element requests to go fullscreen. The listener of this event may resize the WebView in response. + + + + + + WebResourceRequested is raised when the WebView is performing a URL request to a matching URL and resource context filter that was added with . + + + At least one filter must be added for the event to be raised. + The web resource requested may be blocked until the event handler returns if a deferral is not taken on the event args. If a deferral is taken, then the web resource requested is blocked until the deferral is completed. + + + + + + WindowCloseRequested is raised when content inside the WebView requested to close the window, such as after window.close() is run. + + + The app should close the WebView and related app window if that makes sense to the app. + + + + + Causes a navigation of the top level document to the specified URI. + + The URI to navigate to. + + For more information, navigate to [Navigation event](https://docs.microsoft.com/microsoft-edge/webview2/concepts/navigation-events). Note that this operation starts a navigation and the corresponding event is raised sometime after Navigate runs. + + + + + + + Initiates a navigation to as source HTML of a new document. + + A source HTML of a new document. + + The htmlContent parameter may not be larger than 2 MB in total size. The origin of the new page is about:blank. + + + + + + + Adds the provided JavaScript to a list of scripts that should be run after the global object has been created, but before the HTML document has been parsed and before any other script included by the HTML document is run. + + The JavaScript code to be run. + + A script ID that may be passed when calling . + + + The injected script will apply to all future top level document and child frame navigations until removed with . + This is applied asynchronously and you must wait for the returned to complete before you can be sure that the script is ready to execute on future navigations. + + Note that if an HTML document has sandboxing of some kind via [sandbox](https://developer.mozilla.org/docs/Web/HTML/Element/iframe#attr-sandbox) properties or the [Content-Security-Policy HTTP header](https://developer.mozilla.org/docs/Web/HTTP/Headers/Content-Security-Policy) this will affect the script run here. So, for example, if the allow-modals keyword is not set then calls to the alert function will be ignored. + + + + + + Removes the corresponding JavaScript added via with the specified script ID. + + The ID corresponds to the JavaScript code to be removed from the list of scripts. + + + + Runs JavaScript code from the parameter in the current top-level document rendered in the WebView. + + The JavaScript code to be run in the current top-level document rendered in the WebView. + + A JSON encoded string that represents the result of running the provided JavaScript. + + + If the result is undefined, contains a reference cycle, or otherwise is not able to be encoded into JSON, the JSON null value is returned as the "null" string. + + A function that has no explicit return value returns undefined. If the script that was run throws an unhandled exception, then the result is also null. This method is applied asynchronously. If the method is run after the event during a navigation, the script runs in the new document when loading it, around the time is run. This operation works even if is set to false. + + + + + + Captures an image of what WebView is displaying. + + The format of the image to be captured. + The stream to which the resulting image binary data is written. + + When CapturePreviewAsync finishes writing to the stream, the Invoke method on the provided handler parameter is called. + + + + + + Reloads the current page. + + + This is similar to navigating to the URI of current top level document including all navigation events firing and respecting any entries in the HTTP cache. But, the back or forward history will not be modified. + + + + + Posts the specified to the top level document in this WebView. + + The web message to be posted to the top level document in this WebView. + + Runs the message event of the window.chrome.webview of the top-level document. JavaScript in that document may subscribe and unsubscribe to the event using the following code: + + + window.chrome.webview.addEventListener('message', handler) + window.chrome.webview.removeEventListener('message', handler) + + + The event args is an instance of MessageEvent. The setting must be true or this method will fail with E_INVALIDARG. The event arg's data property of the event arg is the webMessageAsJson parameter parsed as a JSON string into a JavaScript object. The event arg's source property of the event arg is a reference to the window.chrome.webview object. For information about sending messages from the HTML document in the WebView to the host, navigate to . The message is sent asynchronously. If a navigation occurs before the message is posted to the page, the message is not be sent. + + + + + + + + Posts a message that is a simple rather than a JSON string representation of a JavaScript object. + + The web message to be posted to the top level document in this WebView. + + This behaves in exactly the same manner as , but the data property of the event arg of the window.chrome.webview message is a with the same value as webMessageAsString. Use this instead of if you want to communicate using simple strings rather than JSON objects. + + + + + + + Runs an asynchronous DevToolsProtocol method. + + + The full name of the method in the format {domain}.{method} + + + A JSON formatted string containing the parameters for the corresponding method. + + + A JSON string that represents the method's return object. + + + For more information about available methods, navigate to [DevTools Protocol Viewer](https://aka.ms/DevToolsProtocolDocs). The handler's Invoke method will be called when the method asynchronously completes. Invoke will be called with the method's return object as a JSON string. + + + + + Navigates the WebView to the previous page in the navigation history. + + + + + Navigates the WebView to the next page in the navigation history. + + + + + Gets a DevTools Protocol event receiver that allows you to subscribe to a DevToolsProtocol event. + + The full name of the event in the format {domain}.{event}. + A Devtools Protocol event receiver. + + For more information about DevToolsProtocol events description and event args, navigate to [DevTools Protocol Viewer](https://aka.ms/DevToolsProtocolDocs). + + + + + Stops all navigations and pending resource fetches. + + + Does not stop scripts. + + + + + Adds the provided host object to script running in the WebView with the specified name. + + The name of the host object. + The host object to be added to script. + + Host objects are exposed as host object proxies via window.chrome.webview.hostObjects.{name}. Host object proxies are promises and will resolve to an object representing the host object. Only the COM visible objects/properties/methods can be accessed from script. The app can control which part of .NET objects are exposed using . + + JavaScript code in the WebView will be able to access appObject as following and then access attributes and methods of appObject. + + To create a [IDispatch](https://docs.microsoft.com/windows/win32/api/oaidl/nn-oaidl-idispatch) implementing class in C# use the following attributes on each class you intend to expose. + + // Bridge and BridgeAnotherClass are C# classes that implement IDispatch and works with AddHostObjectToScript. + [ClassInterface(ClassInterfaceType.AutoDual)] + [ComVisible(true)] + public class BridgeAnotherClass + { + // Sample property. + public string Prop { get; set; } = "Example"; + } + + [ClassInterface(ClassInterfaceType.AutoDual)] + [ComVisible(true)] + public class Bridge + { + public string Func(string param) + { + return "Example: " + param; + } + + public BridgeAnotherClass AnotherObject { get; set; } = new BridgeAnotherClass(); + + // Sample indexed property. + [System.Runtime.CompilerServices.IndexerName("Items")] + public string this[int index] + { + get { return m_dictionary[index]; } + set { m_dictionary[index] = value; } + } + private Dictionary<int, string> m_dictionary = new Dictionary<int, string>(); + } + + Then add instances of those classes via : + + webView.CoreWebView2.AddHostObjectToScript("bridge", new Bridge()); + + And then in script you can call the methods, and access those properties of the objects added via : + + // Find added objects on the hostObjects property + const bridge = chrome.webview.hostObjects.bridge; + + // Call a method and pass in a parameter. + // The result is another proxy promise so you must await to get the result. + console.log(await bridge.Func("testing...")); + + // A property may be another object as long as its class also implements + // IDispatch. + // Getting a property also gets a proxy promise you must await. + const propValue = await bridge.AnotherObject.Prop; + console.log(propValue); + + // Indexed properties + let index = 123; + bridge[index] = "test"; + let result = await bridge[index]; + console.log(result); + + + Note that while simple types, IDispatch and array are supported, generic IUnknown, VT_DECIMAL, or VT_RECORD variant is not supported. Remote JavaScript objects like callback functions are represented as an VT_DISPATCH VARIANT with the object implementing IDispatch. The JavaScript callback method may be invoked using DISPID_VALUE for the DISPID. Nested arrays are supported up to a depth of 3. Arrays of by reference types are not supported. VT_EMPTY and VT_NULL are mapped into JavaScript as null. In JavaScript null and undefined are mapped to VT_EMPTY. + + Additionally, all host objects are exposed as window.chrome.webview.hostObjects.sync.{name}. Here the host objects are exposed as synchronous host object proxies. These are not promises and calls to functions or property access synchronously block running script waiting to communicate cross process for the host code to run. Accordingly this can result in reliability issues and it is recommended that you use the promise based asynchronous window.chrome.webview.hostObjects.{name} API described above. + + Synchronous host object proxies and asynchronous host object proxies can both proxy the same host object. Remote changes made by one proxy will be reflected in any other proxy of that same host object whether the other proxies and synchronous or asynchronous. + + While JavaScript is blocked on a synchronous call to native code, that native code is unable to call back to JavaScript. Attempts to do so will fail with HRESULT_FROM_WIN32(ERROR_POSSIBLE_DEADLOCK). + + Host object proxies are JavaScript Proxy objects that intercept all property get, property set, and method invocations. Properties or methods that are a part of the Function or Object prototype are run locally. Additionally any property or method in the array chrome.webview.hostObjects.options.forceLocalProperties will also be run locally. This defaults to including optional methods that have meaning in JavaScript like toJSON and Symbol.toPrimitive. You can add more to this array as required. + + There's a method chrome.webview.hostObjects.cleanupSome that will best effort garbage collect host object proxies. + + Host object proxies additionally have the following methods which run locally: + + + + + + + + applyHostFunction, getHostProperty, setHostProperty + + Perform a method invocation, property get, or property set on the host object. You can use these to explicitly force a method or property to run remotely if there is a conflicting local method or property. For instance, proxy.toString() will run the local toString method on the proxy object. But proxy.applyHostFunction('toString') runs toString on the host proxied object instead. + + + + getLocalProperty, setLocalProperty + + Perform property get, or property set locally. You can use these methods to force getting or setting a property on the host object proxy itself rather than on the host object it represents. For instance, proxy.unknownProperty will get the property named unknownProperty from the host proxied object. But proxy.getLocalProperty('unknownProperty') will get the value of the property unknownProperty on the proxy object itself. + + + + sync + + Asynchronous host object proxies expose a sync method which returns a promise for a synchronous host object proxy for the same host object. For example, chrome.webview.hostObjects.sample.methodCall() returns an asynchronous host object proxy. You can use the sync method to obtain a synchronous host object proxy instead: + const syncProxy = await chrome.webview.hostObjects.sample.methodCall().sync() + + + + async + + Synchronous host object proxies expose an async method which blocks and returns an asynchronous host object proxy for the same host object. For example, chrome.webview.hostObjects.sync.sample.methodCall() returns a synchronous host object proxy. Calling the async method on this blocks and then returns an asynchronous host object proxy for the same host object: const asyncProxy = chrome.webview.hostObjects.sync.sample.methodCall().async() + + + + then + + Asynchronous host object proxies have a then method. This allows them to be awaitable. then will return a promise that resolves with a representation of the host object. If the proxy represents a JavaScript literal then a copy of that is returned locally. If the proxy represents a function then a non-awaitable proxy is returned. If the proxy represents a JavaScript object with a mix of literal properties and function properties, then the a copy of the object is returned with some properties as host object proxies. + + + + + All other property and method invocations (other than the above Remote object proxy methods, forceLocalProperties list, and properties on Function and Object prototypes) are run remotely. Asynchronous host object proxies return a promise representing asynchronous completion of remotely invoking the method, or getting the property. The promise resolves after the remote operations complete and the promises resolve to the resulting value of the operation. Synchronous host object proxies work similarly but block JavaScript execution and wait for the remote operation to complete. + + Setting a property on an asynchronous host object proxy works slightly differently. The set returns immediately and the return value is the value that will be set. This is a requirement of the JavaScript Proxy object. If you need to asynchronously wait for the property set to complete, use the setHostProperty method which returns a promise as described above. Synchronous object property set property synchronously blocks until the property is set. + + Exposing host objects to script has security risk. Please follow [best practices](https://docs.microsoft.com/microsoft-edge/webview2/concepts/security). + + + + + + Removes the host object specified by the name so that it is no longer accessible from JavaScript code in the WebView. + + The name of the host object to be removed. + + While new access attempts are denied, if the object is already obtained by JavaScript code in the WebView, the JavaScript code continues to have access to that object. Running this method for a name that is already removed or never added fails. + + + + + Opens the DevTools window for the current document in the WebView. + + + Does nothing if run when the DevTools window is already open. + + + + + Adds a URI and resource context filter to the event. + + An URI to be added to the event. + A resource context filter to be added to the event. + + The uri parameter may be set to a wildcard string ('*': zero or more, '?': exactly one). null is equivalent to an empty string. + + + + + + + + Removes a matching WebResource filter that was previously added for the event. + + An URI to at which a web resource filter was added. + A previously added resource context filter to be removed. + A filter that was never added. + + If the same filter was added multiple times, then it must need to be removed as many times as it was added for the removal to be effective. + + + + + diff --git a/library/webview/script/microsoft.web.webview2.1.0.664.37/lib/netcoreapp3.0/Microsoft.Web.WebView2.WinForms.dll b/library/webview/script/microsoft.web.webview2.1.0.664.37/lib/netcoreapp3.0/Microsoft.Web.WebView2.WinForms.dll new file mode 100644 index 0000000000000000000000000000000000000000..7c6eeb013f7b7cd6a3b0d525a209acdebdaba262 GIT binary patch literal 27544 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 + + + Microsoft.Web.WebView2.WinForms + + + +

    + This class is a bundle of the most common parameters used to create a . + Its main purpose is to be set to in order to customize the environment used by a during implicit initialization. + + + This class isn't intended to contain all possible environment customization options. + If you need complete control over the environment used by a WebView2 control then you'll need to initialize the control explicitly by + creating your own environment with and passing it to + *before* you set the property to anything. + See the class documentation for an initialization overview. + + + + + Creates a new instance of with default data for all properties. + + + + + Gets or sets the value to pass as the browserExecutableFolder parameter of when creating an environment with this instance. + + + + + Gets or sets the value to pass as the userDataFolder parameter of when creating an environment with this instance. + + + + + Gets or sets the value to use for the Language property of the CoreWebView2EnvironmentOptions parameter passed to when creating an environment with this instance. + + + + + Create a using the current values of this instance's properties. + + A task which will provide the created environment on completion. + + As long as no other properties on this instance are changed, repeated calls to this method will return the same task/environment as earlier calls. + If some other property is changed then the next call to this method will return a different task/environment. + + + + + Control to embed WebView2 in WinForms. + + + This control is effectively a wrapper around the [WebView2 COM + API](https://aka.ms/webview2). You can directly access the underlying + ICoreWebView2 interface and all of its functionality by accessing the + property. Some of the most common COM + functionality is also accessible directly through wrapper + methods/properties/events on the control. + + Upon creation, the control's property will be null. + This is because creating the CoreWebView2 is an expensive operation which involves things like launching Edge browser processes. + There are two ways to cause the CoreWebView2 to be created: + blocked while these handlers execute, so: + + + Call the method. This is referred to as explicit initialization. + + + Set the property. This is referred to as implicit initialization. + + + Either option will start initialization in the background and return back to the caller without waiting for it to finish. + To specify options regarding the initialization process, either pass your own to or set the control's property prior to initialization. + + When initialization has finished (regardless of how it was triggered) then the following things will occur, in this order: + + + The control's event will be invoked. If you need to perform one time setup operations on the CoreWebView2 prior to its use then you should do so in a handler for that event. + + + If a Uri has been set to the property then the control will start navigating to it in the background (i.e. these steps will continue without waiting for the navigation to finish). + + + The Task returned from will complete. + + + + For more details about any of the methods/properties/events involved in the initialization process, see its specific documentation. + + Accelerator key presses (e.g. Ctrl+P) that occur within the control will + fire standard key press events such as OnKeyDown. You can suppress the + control's default implementation of an accelerator key press (e.g. + printing, in the case of Ctrl+P) by setting the Handled property of its + EventArgs to true. Also note that the underlying browser process is + blocked while these handlers execute, so: + + + You should avoid doing a lot of work in these handlers. + + + Some of the WebView2 and CoreWebView2 APIs may throw errors if + invoked within these handlers due to being unable to communicate with + the browser process. + + + If you need to do a lot of work and/or invoke WebView2 APIs in response to + accelerator keys then consider kicking off a background task or queuing + the work for later execution on the UI thread. + + + + + Create a new WebView2 WinForms control. + + + After construction the property is null. + Call to initialize the underlying . + + + + + Cleans up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Overrides the base OnPaint event to have custom actions + in designer mode + + The graphics devices which is the source + + + + Gets or sets a bag of options which are used during initialization of the control's . + This property cannot be modified (an exception will be thrown) after initialization of the control's CoreWebView2 has started. + + Thrown if initialization of the control's CoreWebView2 has already started. + + + + Explicitly trigger initialization of the control's . + + + A pre-created that should be used to create the . + Creating your own environment gives you control over several options that affect how the is initialized. + If you pass null (the default value) then a default environment will be created and used automatically. + + + A Task that represents the background initialization process. + When the task completes then the property will be available for use (i.e. non-null). + Note that the control's event will be invoked before the task completes. + + + Calling this method additional times will have no effect (any specified environment is ignored) and return the same Task as the first call. + Calling this method after initialization has been implicitly triggered by setting the property will have no effect (any specified environment is ignored) and simply return a Task representing that initialization already in progress. + + Thrown when invoked from non-UI thread. + + + + This is the private function which implements the actual background initialization task. + Cannot be called if the control is already initialized or has been disposed. + + + The environment to use to create the . + If that is null then a default environment is created with and its default parameters. + + A task representing the background initialization process. + All the event handlers added here need to be removed in . + + + + Protected VisibilityChanged handler. + + + + + Protected command key handler. + + + + + Protected SizeChanged handler. + + + + + True if initialization finished successfully and the control is not disposed yet. + + + + + Recursive retrieval of the parent control + + The control to get the parent for + The root parent control + + + + The underlying CoreWebView2. Use this property to perform more operations on the WebView2 content than is exposed + on the WebView2. This value is null until it is initialized. You can force the underlying CoreWebView2 to + initialize via the InitializeAsync method. + + + + + The zoom factor for the WebView. + + + + + The Source property is the URI of the top level document of the + WebView2. Setting the Source is equivalent to calling . + Setting the Source will trigger initialization of the , if not already initialized. + The default value of Source is null, indicating that the is not yet initialized. + + Specified value is not an absolute . + Specified value is null and the control is initialized. + + + + + Returns true if the webview can navigate to a next page in the + navigation history via the method. + This is equivalent to the . + If the underlying is not yet initialized, this property is false. + + + + + + Returns true if the webview can navigate to a previous page in the + navigation history via the method. + This is equivalent to the . + If the underlying is not yet initialized, this property is false. + + + + + + Executes the provided script in the top level document of the . + This is equivalent to . + + The underlying is not yet initialized. + + + + + Reloads the top level document of the . + This is equivalent to . + + The underlying is not yet initialized. + + + + + Navigates to the next page in navigation history. + This is equivalent to . + If the underlying is not yet initialized, this method does nothing. + + + + + + Navigates to the previous page in navigation history. + This is equivalent to . + If the underlying is not yet initialized, this method does nothing. + + + + + + Renders the provided HTML as the top level document of the . + This is equivalent to . + + The underlying is not yet initialized. + + + + + Stops any in progress navigation in the . + This is equivalent to . + If the underlying is not yet initialized, this method does nothing. + + + + + + This event is triggered when the control's has finished being initialized (regardless of how initialization was triggered) but before it is used for anything. + You should handle this event if you need to perform one time setup operations on the CoreWebView2 which you want to affect all of its usages + (e.g. adding event handlers, configuring settings, installing document creation scripts, adding host objects). + + + This event doesn't provide any arguments, and the sender will be the WebView2 control, whose property will now be valid (i.e. non-null) for the first time. + + + + + NavigationStarting dispatches before a new navigate starts for the top + level document of the . + This is equivalent to the event. + + + + + + NavigationCompleted dispatches after a navigate of the top level + document completes rendering either successfully or not. + This is equivalent to the event. + + + + + + WebMessageReceived dispatches after web content sends a message to the + app host via chrome.webview.postMessage. + This is equivalent to the event. + + + + + + SourceChanged dispatches after the property changes. This may happen + during a navigation or if otherwise the script in the page changes the + URI of the document. + This is equivalent to the event. + + + + + + ContentLoading dispatches after a navigation begins to a new URI and the + content of that URI begins to render. + This is equivalent to the event. + + + + + + ZoomFactorChanged dispatches when the property changes. + This is equivalent to the event. + + + + + + Required designer variable. + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + diff --git a/library/webview/script/microsoft.web.webview2.1.0.664.37/lib/netcoreapp3.0/Microsoft.Web.WebView2.Wpf.dll b/library/webview/script/microsoft.web.webview2.1.0.664.37/lib/netcoreapp3.0/Microsoft.Web.WebView2.Wpf.dll new file mode 100644 index 0000000000000000000000000000000000000000..df5e2ddde4fc51334738af4757f56794c6b54d15 GIT binary patch literal 30616 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

    {6tB!09N7Z(!| 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 literal 0 HcmV?d00001 diff --git a/library/webview/script/microsoft.web.webview2.1.0.664.37/lib/netcoreapp3.0/Microsoft.Web.WebView2.Wpf.xml b/library/webview/script/microsoft.web.webview2.1.0.664.37/lib/netcoreapp3.0/Microsoft.Web.WebView2.Wpf.xml new file mode 100644 index 0000000..17135e0 --- /dev/null +++ b/library/webview/script/microsoft.web.webview2.1.0.664.37/lib/netcoreapp3.0/Microsoft.Web.WebView2.Wpf.xml @@ -0,0 +1,674 @@ + + + + Microsoft.Web.WebView2.Wpf + + + +

    + This class is a bundle of the most common parameters used to create a . + Its main purpose is to be set to in order to customize the environment used by a during implicit initialization. + It is also a nice WPF integration utility which allows commonly used environment parameters to be dependency properties and be created and used in markup. + + + This class isn't intended to contain all possible environment customization options. + If you need complete control over the environment used by a WebView2 control then you'll need to initialize the control explicitly by + creating your own environment with and passing it to + *before* you set the property to anything. + See the class documentation for an initialization overview. + + + + + Creates a new instance of with default data for all properties. + + + + + The WPF DependencyProperty which backs the property. + + + + + Gets or sets the value to pass as the browserExecutableFolder parameter of when creating an environment with this instance. + + + + + The WPF DependencyProperty which backs the property. + + + + + Gets or sets the value to pass as the userDataFolder parameter of when creating an environment with this instance. + + + + + The WPF DependencyProperty which backs the property. + + + + + Gets or sets the value to use for the Language property of the CoreWebView2EnvironmentOptions parameter passed to when creating an environment with this instance. + + + + + Create a using the current values of this instance's properties. + + A task which will provide the created environment on completion. + + As long as no other properties on this instance are changed, repeated calls to this method will return the same task/environment as earlier calls. + If some other property is changed then the next call to this method will return a different task/environment. + + + + + A control to embed web content in a WPF application. + + + This control is effectively a wrapper around the [WebView2 COM + API](https://aka.ms/webview2). You can directly access the underlying + ICoreWebView2 interface and all of its functionality by accessing the + property. Some of the most common COM + functionality is also accessible directly through wrapper + methods/properties/events on the control. + + Upon creation, the control's property will be + null. This is because creating the is an + expensive operation which involves things like launching Edge browser + processes. There are two ways to cause the to + be created: + + + Call the method. This is + referred to as explicit initialization. + + + Set the property (which could be done from + markup, for example). This is referred to as implicit initialization. + Either option will start initialization in the background and return + back to the caller without waiting for it to finish. + To specify options regarding the initialization process, either pass + your own to or set the control's property prior to initialization. + + + + When initialization has finished (regardless of how it was triggered) + then the following things will occur, in this + order: + + + The control's event + will be invoked. If you need to perform one time setup operations on + the prior to its use then you should + do so in a handler for that event. + + + If a Uri has been set to the property then the control will start navigating to it in + the background (i.e. these steps will continue without waiting for the + navigation to finish). + + + The Task returned from will + complete. + + + + For more details about any of the methods/properties/events involved in + the initialization process, see its specific documentation. + + Because the control's is a very heavyweight + object (potentially responsible for multiple running processes and + megabytes of disk space) the control implements to provide an explicit means to free it. + Calling will release the + and its underlying resources (except any that are also being used by other + WebViews), and reset to null. After has been called the cannot be + re-initialized, and any attempt to use functionality which requires it + will throw an . + + Accelerator key presses (e.g. Ctrl+P) that occur within the control will + fire standard key press events such as OnKeyDown. You can suppress the + control's default implementation of an accelerator key press (e.g. + printing, in the case of Ctrl+P) by setting the Handled property of its + EventArgs to true. Also note that the underlying browser process is + blocked while these handlers execute, so: + + + You should avoid doing a lot of work in these handlers. + + + Some of the WebView2 and CoreWebView2 APIs may throw errors if + invoked within these handlers due to being unable to communicate with + the browser process. + + + If you need to do a lot of work and/or invoke WebView2 APIs in response to + accelerator keys then consider kicking off a background task or queuing + the work for later execution on the UI thread. + + Note that this control extends in order to embed + windows which live outside of the WPF ecosystem. This has some + implications regarding the control's input and output behavior as well as + the functionality it "inherits" from and . + See the and [WPF/Win32 + interop](https://docs.microsoft.com/dotnet/framework/wpf/advanced/wpf-and-win32-interoperation#hwnds-inside-wpf) + documentation for more information. + + + + + + Creates a new instance of a WebView2 control. + Note that the control's will be null until initialized. + See the class documentation for an initialization overview. + + + + + The WPF which backs the property. + + + + + + Gets or sets a bag of options which are used during initialization of the control's . + Setting this property will not work after initialization of the control's has started (the old value will be retained). + See the class documentation for an initialization overview. + + + + + + This is overridden from and is called to instruct us to create our HWND. + + The HWND that we should use as the parent of the one we create. + The HWND that we created. + + + + + This is overridden from and is called to instruct us to destroy our HWND. + + Our HWND that we need to destroy. + + + + + This is overridden from and is called to provide us with Win32 messages that are sent to our hwnd. + + Window receiving the message (should always match our ). + Indicates the message being received. See Win32 documentation for WM_* constant values. + The "wParam" data being provided with the message. Meaning varies by message. + The "lParam" data being provided with the message. Meaning varies by message. + If true then the message will not be forwarded to any (more) handlers. + Return value varies by message. + + + + + Accesses the complete functionality of the underlying COM API. + Returns null until initialization has completed. + See the class documentation for an initialization overview. + + Thrown if the calling thread isn't the thread which created this object (usually the UI thread). See for more info. + Thrown if has already been called on the control. + + + + + + This event is triggered when the control's has finished being initialized (regardless of how initialization was triggered) but before it is used for anything. + You should handle this event if you need to perform one time setup operations on the which you want to affect all of its usages + (e.g. adding event handlers, configuring settings, installing document creation scripts, adding host objects). + See the class documentation for an initialization overview. + + + This event doesn't provide any arguments, and the sender will be the control, whose property will now be valid (i.e. non-null) for the first time. + + + + + + Explicitly triggers initialization of the control's . + See the class documentation for an initialization overview. + + + A pre-created that should be used to create the . + Creating your own environment gives you control over several options that affect how the is initialized. + If you pass an environment to this method then it will override any settings specified on the property. + If you pass null (the default value) and no value has been set to then a default environment will be created and used automatically. + + + A Task that represents the background initialization process. + When the task completes then the property will be available for use (i.e. non-null). + Note that the control's event will be invoked before the task completes. + + + Calling this method additional times will have no effect (any specified environment is ignored) and return the same Task as the first call. + Calling this method after initialization has been implicitly triggered by setting the property will have no effect (any specified environment is ignored) and simply return a Task representing that initialization already in progress. + Note that even though this method is asynchronous and returns a Task, it still must be called on the UI thread like most public functionality of most UI controls. + + Thrown if the calling thread isn't the thread which created this object (usually the UI thread). See for more info. + Thrown if has already been called on the control. + + + + + + This is called by our base class according to the typical implementation of the pattern. + We implement it by releasing all of our underlying COM resources, including our . + + True if a caller is explicitly calling Dispose, false if we're being finalized. + + + + Updates one of our dependency properties to match a new value from the . + It both sets the value and remembers (in _propertyChangingFromCore) that it came from the CoreWebView2 rather than the caller, + allowing the property's "on changed" handler to alter its behavior based on where the new value came from. + It's only intended to be called in a CoreWebView2 event handler that's informing us of a new property value. + It's basically just a wrapper around the inherited SetValue which also maintains _propertyChangingFromCore. + See the comments on for additional background info. + + The property to change due to an equivalent change in the CoreWebView2. + The new value from the CoreWebView2. + + + + Checks if a given property is currently being updated to match an equivalent change in the . + This method should only be called from a property's "on changed" handler; it has no meaning at any other time. + It is used to determine if the property is changing to match the CoreWebView2 or because the caller set it. + Usually this is used in order to decide if the new value needs to be propagated down to the CoreWebView2. + See the comments on for additional background info. + + The property to check. + True if the property is changing to match the CoreWebView2, or false if the property was changed by the caller. + + + + Changes our controller's ParentWindow to the given HWND, along with any other necessary associated work. + + The new HWND to set as the controller's parent. IntPtr.Zero means that the controller will have no parent and the CoreWebView2 will be hidden. + Whether or not to call as required. Defaults to true. If you pass false then you should call it yourself if required. + + Reparenting the controller isn't necessarily as simple as changing its ParentWindow property, + and this method exists to ensure that any other work that needs to be done at the same time gets done. + The reason that SyncControllerWithParentWindow isn't baked directly into this method is because + sometimes we want to call the Sync functionality without necessarily reparenting (e.g. during initialization). + + + + + Syncs visual/windowing information between the controller and its parent HWND. + This should be called any time a new, non-null HWND is set as the controller's parent, + including when the controller is first created. + + + + + This is a handler for our base UIElement's IsVisibleChanged event. + It's predictably fired whenever IsVisible changes, and IsVisible reflects the actual current visibility status of the control. + We just need to pass this info through to our CoreWebView2Controller so it can save some effort when the control isn't visible. + + + + + This is overridden from and called when our control's location has changed. + The HwndHost takes care of updating the HWND we created. + What we need to do is move our CoreWebView2 to match the new location. + + + + + The WPF which backs the property. + + + + + The top-level which the WebView is currently displaying (or will display once initialization of its is finished). + Generally speaking, getting this property is equivalent to getting the property and setting this property (to a different value) is equivalent to calling the method. + + + Getting this property before the has been initialized will retrieve the last Uri which was set to it, or null (the default) if none has been. + Setting this property before the has been initialized will cause initialization to start in the background (if not already in progress), after which the will navigate to the specified . + This property can never be set back to null or to a relative . + See the class documentation for an initialization overview. + + Thrown if has already been called on the control. + Thrown if the property is set to null. + Thrown if the property is set to a relative (i.e. a whose property is false). + + + + + This is a callback that WPF calls when the WPF Source property's value changes. + This might have been triggered by either: + 1) The caller set Source to programmatically trigger a navigation. + 2) The CoreWebView changed its own source and we're just updating the dependency property to match. + We use to distinguish the two cases. + + + + + A wrapper around the . + The only difference between this event and is the first parameter that's passed to handlers. + Handlers of this event will receive the control, whereas handlers of will receive the instance. + + + + + + This is an event handler for our CoreWebView2's SourceChanged event. + Unsurprisingly, it fires when the CoreWebView2's source URI has been changed. + Note that there are two distinct triggers for this: + 1) The CoreWebView2 was told to navigate programmatically (potentially by us, see SourcePropertyChanged). + 2) The user interacted with the CoreWebView2, e.g. clicked a link. + In either of the above cases, this event might trigger several times due to e.g. redirection. + Aside from propagating to our own event, we just need to update our WPF Source property to match the CoreWebView2's. + + + + + A wrapper around the . + The only difference between this event and is the first parameter that's passed to handlers. + Handlers of this event will receive the control, whereas handlers of will receive the instance. + + + + + + This is an event handler for our CoreWebView2's NavigationStarting event. + We just need to propagate the event to WPF. + + + + + A wrapper around the . + The only difference between this event and is the first parameter that's passed to handlers. + Handlers of this event will receive the control, whereas handlers of will receive the instance. + + + + + + This is an event handler for our CoreWebView2's NavigationCompleted event. + We just need to propagate the event to WPF. + + + + + This is an event handler for our CoreWebView2's HistoryChanged event. + We're handling it in order to update our WPF CanGoBack and CanGoForward properties. + + + + + The WPF which backs the property. + + + + + Returns true if the WebView can navigate to a previous page in the navigation history. + Wrapper around the property of . + If isn't initialized yet then returns false. + + + + + + The WPF which backs the property. + + + + + Returns true if the WebView can navigate to a next page in the navigation history. + Wrapper around the property of . + If isn't initialized yet then returns false. + + + + + + This is overridden from and is called to inform us that tabbing has caused the focus to move into our control/window. + Since WPF can't manage the transition of focus to a non-WPF HWND, it delegates the transition to us here. + So our job is just to place the focus in our external HWND. + + Information about how the focus is moving. + true to indicate that we handled the navigation, or false to indicate that we didn't. + + + + This is overridden from and is called to inform us when we receive the keyboard focus. + We handle this by passing the keyboard focus on to the underlying . + We never want to land in a state where our window (this.Handle) actually has the keyboard focus. + + Arguments from the underlying GotKeyboardFocus event. + + Note that it's actually possible for us to receive keyboard focus without this method being called. + One known case where that happens is when our parent window is deactivated while we have focus, then reactivated. + We handle that case in . + + + + + + This is an event handler for our CoreWebView2Controller's MoveFocusRequested event. + It fires when the CoreWebView2Controller has focus but wants to move it elsewhere in the app. + E.g. this happens when the user tabs past the last item in the CoreWebView2 and focus needs to return to some other app control. + So our job is just to tell WPF to move the focus on to the next control. + Note that we don't propagate this event outward as a standard WPF routed event because we've implemented its purpose here. + If users of the control want to track focus shifting in/out of the control, they should use standard WPF events. + + + + + This is overridden from and is called when WPF needs to know if the focus is in our control/window. + WPF can't know on its own since we're hosting a non-WPF window, so instead it asks us by calling this. + To answer, we just track state based on events that fire when it gains or loses focus. + + True if the focus is in our control/window, false if it isn't. + + + + This is an event handler for our CoreWebView2Controller's GotFocus event. + Aside from propagating the event to WPF, we just need to update our internal _hasFocus state. + That state is used when HwndHost needs to know if our HWND contains the focus (see HasFocusWithinCore). + + + + + This is an event handler for our CoreWebView2Controller's LostFocus event. + Aside from propagating the event to WPF, we just need to update our internal _hasFocus state. + That state is used when HwndHost needs to know if our HWND contains the focus (see HasFocusWithinCore). + + + + + This is an event handler for our CoreWebView2Controller's AcceleratorKeyPressed event. + This is called to inform us about key presses that are likely to have special behavior (e.g. esc, return, Function keys, letters with modifier keys). + WPF can't detect this input because Windows sends it directly to the Win32 CoreWebView2Controller control. + We implement this by generating standard WPF key input events, allowing callers to handle the input in the usual WPF way if they want. + If nobody handles the WPF key events then we'll allow the default CoreWebView2Controller logic (if any) to handle it. + Of the possible options, this implementation should provide the most flexibility to callers. + + + + + This is overridden from and called to allow us to handle key press input. + WPF should never actually call this in response to keyboard events because we're hosting a non-WPF window. + When our window has focus Windows will send the input directly to it rather than to WPF's top-level window and input system. + This override should only be called when we're explicitly forwarding accelerator key input from the CoreWebView2 to WPF (in CoreWebView2Controller_AcceleratorKeyPressed). + Even then, this KeyDownEvent is only triggered because our PreviewKeyDownEvent implementation explicitly triggers it, matching WPF's usual system. + So the process is: + + CoreWebView2Controller_AcceleratorKeyPressed + PreviewKeyDownEvent + KeyDownEvent + OnKeyDown + + . + + + + + See . + + + + + This is the "Preview" (i.e. tunneling) version of , so it actually happens first. + Like OnKeyDown, this will only ever be called if we're explicitly forwarding key presses from the CoreWebView2. + In order to mimic WPF's standard input handling, when we receive this we turn around and fire off the standard bubbling KeyDownEvent. + That way others in the WPF tree see the same standard pair of input events that WPF itself would have triggered if it were handling the key press. + + + + + + See . + + + + + The WPF which backs the property. + + + + + The zoom factor for the WebView. + This property directly exposes , see its documentation for more info. + Getting this property before the has been initialized will retrieve the last value which was set to it, or 1.0 (the default) if none has been. + The most recent value set to this property before the CoreWebView2 has been initialized will be set on it after initialization. + + + + + + This is a callback that WPF calls when our WPF ZoomFactor property's value changes. + This might have been triggered by either: + 1) The caller set ZoomFactor to change the zoom of the CoreWebView2. + 2) The CoreWebView2 changed its own ZoomFactor and we're just updating the dependency property to match. + We use to distinguish the two cases. + + + + + The event is raised when the property changes. + This event directly exposes . + + + + + + + This is an event handler for our CoreWebView2Controller's ZoomFactorChanged event. + Unsurprisingly, it fires when the CoreWebView2Controller's ZoomFactor has been changed. + Note that there are two distinct triggers for this: + 1) The value was changed programmatically (potentially by us, see ZoomFactorPropertyChanged). + 2) The user interacted with the CoreWebView2, e.g. CTRL + Mouse Wheel. + Aside from propagating to our own event, we just need to update our WPF ZoomFactor property to match the CoreWebView2Controller's. + + + + + Navigates the WebView to the previous page in the navigation history. + Equivalent to calling + If hasn't been initialized yet then does nothing. + + Thrown if the calling thread isn't the thread which created this object (usually the UI thread). See for more info. + Thrown if has already been called on the control. + + + + + + Navigates the WebView to the next page in the navigation history. + Equivalent to calling . + If hasn't been initialized yet then does nothing. + + Thrown if the calling thread isn't the thread which created this object (usually the UI thread). See for more info. + Thrown if has already been called on the control. + + + + + + Reloads the current page. + Equivalent to calling . + + Thrown if hasn't been initialized yet." + Thrown if the calling thread isn't the thread which created this object (usually the UI thread). See for more info. + Thrown if has already been called on the control. + + + + + + Stops all navigations and pending resource fetches. + Equivalent to calling . + + Thrown if hasn't been initialized yet." + Thrown if the calling thread isn't the thread which created this object (usually the UI thread). See for more info. + Thrown if has already been called on the control. + + + + + + Initiates a navigation to htmlContent as source HTML of a new document. + Equivalent to calling . + + Thrown if hasn't been initialized yet." + Thrown if the calling thread isn't the thread which created this object (usually the UI thread). See for more info. + Thrown if has already been called on the control. + + + + + + A wrapper around the . + The only difference between this event and is the first parameter that's passed to handlers. + Handlers of this event will receive the control, whereas handlers of will receive the instance. + + + + + + This is an event handler for our CoreWebView2's ContentLoading event. + We just need to propagate the event to WPF. + + + + + Executes JavaScript code from the javaScript parameter in the current top level document rendered in the WebView. + Equivalent to calling . + + Thrown if hasn't been initialized yet. + Thrown if the calling thread isn't the thread which created this object (usually the UI thread). See for more info. + Thrown if has already been called on the control. + + + + + + A wrapper around the . + The only difference between this event and is the first parameter that's passed to handlers. + Handlers of this event will receive the control, whereas handlers of will receive the instance. + + + + + + This is an event handler for our CoreWebView2's WebMessageReceived event. + We just need to propagate the event to WPF. + + + + diff --git a/library/webview/script/microsoft.web.webview2.1.0.664.37/package/services/metadata/core-properties/f1ba39472b9b4e14a0ebe2816e3adec7.psmdcp b/library/webview/script/microsoft.web.webview2.1.0.664.37/package/services/metadata/core-properties/f1ba39472b9b4e14a0ebe2816e3adec7.psmdcp new file mode 100644 index 0000000..e8f4364 --- /dev/null +++ b/library/webview/script/microsoft.web.webview2.1.0.664.37/package/services/metadata/core-properties/f1ba39472b9b4e14a0ebe2816e3adec7.psmdcp @@ -0,0 +1,10 @@ + + + Microsoft + The WebView2 control enables you to embed web technologies (HTML, CSS, and JavaScript) in your native applications powered by Microsoft Edge (Chromium). +This package is necessary for Win 32 C/C++ applications. To learn more about package versions checkout https://aka.ms/wv2-packageversion. To learn best practices checkout: https://aka.ms/wv2-bestpractices. + Microsoft.Web.WebView2 + 1.0.664.37 + Microsoft Web WebView Native native package Edge C++ Win32 Webview2 + NuGet, Version=5.7.0.7, Culture=neutral, PublicKeyToken=31bf3856ad364e35;Microsoft Windows NT 10.0.17763.0;.NET Framework 4.7.2 + \ No newline at end of file diff --git a/library/webview/script/microsoft.web.webview2.1.0.664.37/runtimes/win-arm/native/WebView2Loader.dll b/library/webview/script/microsoft.web.webview2.1.0.664.37/runtimes/win-arm/native/WebView2Loader.dll new file mode 100644 index 0000000000000000000000000000000000000000..ecdd7d9220f879b30484f1a41bf09a9daef03db0 GIT binary patch literal 124832 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 i+)zoQ?T^OVQ literal 0 HcmV?d00001 diff --git a/library/webview/script/microsoft.web.webview2.1.0.664.37/runtimes/win-x86/native/WebView2Loader.dll b/library/webview/script/microsoft.web.webview2.1.0.664.37/runtimes/win-x86/native/WebView2Loader.dll new file mode 100644 index 0000000000000000000000000000000000000000..e46c83ea31492de726ca2c9e61e5cd900b412745 GIT binary patch literal 109984 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�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 Pi>PbMoJ?zyeZ>C*C1Jan literal 0 HcmV?d00001 diff --git a/library/webview/webview.cc b/library/webview/webview.cc new file mode 100644 index 0000000..96ecd0d --- /dev/null +++ b/library/webview/webview.cc @@ -0,0 +1,3 @@ +// +build !windows + +#include "webview.h" diff --git a/library/webview/webview.h b/library/webview/webview.h new file mode 100644 index 0000000..cc0805b --- /dev/null +++ b/library/webview/webview.h @@ -0,0 +1,1388 @@ +/* + * MIT License + * + * Copyright (c) 2017 Serge Zaitsev + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +#ifndef WEBVIEW_H +#define WEBVIEW_H + +#ifndef WEBVIEW_API +#define WEBVIEW_API extern +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void *webview_t; + +// Creates a new webview instance. If debug is non-zero - developer tools will +// be enabled (if the platform supports them). Window parameter can be a +// pointer to the native window handle. If it's non-null - then child WebView +// is embedded into the given parent window. Otherwise a new window is created. +// Depending on the platform, a GtkWindow, NSWindow or HWND pointer can be +// passed here. +WEBVIEW_API webview_t webview_create(int debug, void *window); + +// Destroys a webview and closes the native window. +WEBVIEW_API void webview_destroy(webview_t w); + +// Runs the main loop until it's terminated. After this function exits - you +// must destroy the webview. +WEBVIEW_API void webview_run(webview_t w); + +// Stops the main loop. It is safe to call this function from another other +// background thread. +WEBVIEW_API void webview_terminate(webview_t w); + +// Posts a function to be executed on the main thread. You normally do not need +// to call this function, unless you want to tweak the native window. +WEBVIEW_API void +webview_dispatch(webview_t w, void (*fn)(webview_t w, void *arg), void *arg); + +// Returns a native window handle pointer. When using GTK backend the pointer +// is GtkWindow pointer, when using Cocoa backend the pointer is NSWindow +// pointer, when using Win32 backend the pointer is HWND pointer. +WEBVIEW_API void *webview_get_window(webview_t w); + +// Updates the title of the native window. Must be called from the UI thread. +WEBVIEW_API void webview_set_title(webview_t w, const char *title); + +// Window size hints +#define WEBVIEW_HINT_NONE 0 // Width and height are default size +#define WEBVIEW_HINT_MIN 1 // Width and height are minimum bounds +#define WEBVIEW_HINT_MAX 2 // Width and height are maximum bounds +#define WEBVIEW_HINT_FIXED 3 // Window size can not be changed by a user +// Updates native window size. See WEBVIEW_HINT constants. +WEBVIEW_API void webview_set_size(webview_t w, int width, int height, + int hints); + +// Navigates webview to the given URL. URL may be a data URI, i.e. +// "data:text/text,...". It is often ok not to url-encode it +// properly, webview will re-encode it for you. +WEBVIEW_API void webview_navigate(webview_t w, const char *url); + +// Injects JavaScript code at the initialization of the new page. Every time +// the webview will open a the new page - this initialization code will be +// executed. It is guaranteed that code is executed before window.onload. +WEBVIEW_API void webview_init(webview_t w, const char *js); + +// Evaluates arbitrary JavaScript code. Evaluation happens asynchronously, also +// the result of the expression is ignored. Use RPC bindings if you want to +// receive notifications about the results of the evaluation. +WEBVIEW_API void webview_eval(webview_t w, const char *js); + +// Binds a native C callback so that it will appear under the given name as a +// global JavaScript function. Internally it uses webview_init(). Callback +// receives a request string and a user-provided argument pointer. Request +// string is a JSON array of all the arguments passed to the JavaScript +// function. +WEBVIEW_API void webview_bind(webview_t w, const char *name, + void (*fn)(const char *seq, const char *req, + void *arg), + void *arg); + +// Allows to return a value from the native binding. Original request pointer +// must be provided to help internal RPC engine match requests with responses. +// If status is zero - result is expected to be a valid JSON result value. +// If status is not zero - result is an error JSON object. +WEBVIEW_API void webview_return(webview_t w, const char *seq, int status, + const char *result); + +#ifdef __cplusplus +} +#endif + +#ifndef WEBVIEW_HEADER + +#if !defined(WEBVIEW_GTK) && !defined(WEBVIEW_COCOA) && !defined(WEBVIEW_EDGE) +#if defined(__linux__) +#define WEBVIEW_GTK +#elif defined(__APPLE__) +#define WEBVIEW_COCOA +#elif defined(_WIN32) +#define WEBVIEW_EDGE +#else +#error "please, specify webview backend" +#endif +#endif + +#include +#include +#include +#include +#include +#include +#include + +#include + +namespace webview { +using dispatch_fn_t = std::function; + +inline std::string url_encode(const std::string s) { + std::string encoded; + for (unsigned int i = 0; i < s.length(); i++) { + auto c = s[i]; + if (isalnum(c) || c == '-' || c == '_' || c == '.' || c == '~') { + encoded = encoded + c; + } else { + char hex[4]; + snprintf(hex, sizeof(hex), "%%%02x", c); + encoded = encoded + hex; + } + } + return encoded; +} + +inline std::string url_decode(const std::string s) { + std::string decoded; + for (unsigned int i = 0; i < s.length(); i++) { + if (s[i] == '%') { + int n; + n = std::stoul(s.substr(i + 1, 2), nullptr, 16); + decoded = decoded + static_cast(n); + i = i + 2; + } else if (s[i] == '+') { + decoded = decoded + ' '; + } else { + decoded = decoded + s[i]; + } + } + return decoded; +} + +inline std::string html_from_uri(const std::string s) { + if (s.substr(0, 15) == "data:text/html,") { + return url_decode(s.substr(15)); + } + return ""; +} + +inline int json_parse_c(const char *s, size_t sz, const char *key, size_t keysz, + const char **value, size_t *valuesz) { + enum { + JSON_STATE_VALUE, + JSON_STATE_LITERAL, + JSON_STATE_STRING, + JSON_STATE_ESCAPE, + JSON_STATE_UTF8 + } state = JSON_STATE_VALUE; + const char *k = NULL; + int index = 1; + int depth = 0; + int utf8_bytes = 0; + + if (key == NULL) { + index = keysz; + keysz = 0; + } + + *value = NULL; + *valuesz = 0; + + for (; sz > 0; s++, sz--) { + enum { + JSON_ACTION_NONE, + JSON_ACTION_START, + JSON_ACTION_END, + JSON_ACTION_START_STRUCT, + JSON_ACTION_END_STRUCT + } action = JSON_ACTION_NONE; + unsigned char c = *s; + switch (state) { + case JSON_STATE_VALUE: + if (c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == ',' || + c == ':') { + continue; + } else if (c == '"') { + action = JSON_ACTION_START; + state = JSON_STATE_STRING; + } else if (c == '{' || c == '[') { + action = JSON_ACTION_START_STRUCT; + } else if (c == '}' || c == ']') { + action = JSON_ACTION_END_STRUCT; + } else if (c == 't' || c == 'f' || c == 'n' || c == '-' || + (c >= '0' && c <= '9')) { + action = JSON_ACTION_START; + state = JSON_STATE_LITERAL; + } else { + return -1; + } + break; + case JSON_STATE_LITERAL: + if (c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == ',' || + c == ']' || c == '}' || c == ':') { + state = JSON_STATE_VALUE; + s--; + sz++; + action = JSON_ACTION_END; + } else if (c < 32 || c > 126) { + return -1; + } // fallthrough + case JSON_STATE_STRING: + if (c < 32 || (c > 126 && c < 192)) { + return -1; + } else if (c == '"') { + action = JSON_ACTION_END; + state = JSON_STATE_VALUE; + } else if (c == '\\') { + state = JSON_STATE_ESCAPE; + } else if (c >= 192 && c < 224) { + utf8_bytes = 1; + state = JSON_STATE_UTF8; + } else if (c >= 224 && c < 240) { + utf8_bytes = 2; + state = JSON_STATE_UTF8; + } else if (c >= 240 && c < 247) { + utf8_bytes = 3; + state = JSON_STATE_UTF8; + } else if (c >= 128 && c < 192) { + return -1; + } + break; + case JSON_STATE_ESCAPE: + if (c == '"' || c == '\\' || c == '/' || c == 'b' || c == 'f' || + c == 'n' || c == 'r' || c == 't' || c == 'u') { + state = JSON_STATE_STRING; + } else { + return -1; + } + break; + case JSON_STATE_UTF8: + if (c < 128 || c > 191) { + return -1; + } + utf8_bytes--; + if (utf8_bytes == 0) { + state = JSON_STATE_STRING; + } + break; + default: + return -1; + } + + if (action == JSON_ACTION_END_STRUCT) { + depth--; + } + + if (depth == 1) { + if (action == JSON_ACTION_START || action == JSON_ACTION_START_STRUCT) { + if (index == 0) { + *value = s; + } else if (keysz > 0 && index == 1) { + k = s; + } else { + index--; + } + } else if (action == JSON_ACTION_END || + action == JSON_ACTION_END_STRUCT) { + if (*value != NULL && index == 0) { + *valuesz = (size_t)(s + 1 - *value); + return 0; + } else if (keysz > 0 && k != NULL) { + if (keysz == (size_t)(s - k - 1) && memcmp(key, k + 1, keysz) == 0) { + index = 0; + } else { + index = 2; + } + k = NULL; + } + } + } + + if (action == JSON_ACTION_START_STRUCT) { + depth++; + } + } + return -1; +} + +inline std::string json_escape(std::string s) { + // TODO: implement + return '"' + s + '"'; +} + +inline int json_unescape(const char *s, size_t n, char *out) { + int r = 0; + if (*s++ != '"') { + return -1; + } + while (n > 2) { + char c = *s; + if (c == '\\') { + s++; + n--; + switch (*s) { + case 'b': + c = '\b'; + break; + case 'f': + c = '\f'; + break; + case 'n': + c = '\n'; + break; + case 'r': + c = '\r'; + break; + case 't': + c = '\t'; + break; + case '\\': + c = '\\'; + break; + case '/': + c = '/'; + break; + case '\"': + c = '\"'; + break; + default: // TODO: support unicode decoding + return -1; + } + } + if (out != NULL) { + *out++ = c; + } + s++; + n--; + r++; + } + if (*s != '"') { + return -1; + } + if (out != NULL) { + *out = '\0'; + } + return r; +} + +inline std::string json_parse(const std::string s, const std::string key, + const int index) { + const char *value; + size_t value_sz; + if (key == "") { + json_parse_c(s.c_str(), s.length(), nullptr, index, &value, &value_sz); + } else { + json_parse_c(s.c_str(), s.length(), key.c_str(), key.length(), &value, + &value_sz); + } + if (value != nullptr) { + if (value[0] != '"') { + return std::string(value, value_sz); + } + int n = json_unescape(value, value_sz, nullptr); + if (n > 0) { + char *decoded = new char[n + 1]; + json_unescape(value, value_sz, decoded); + std::string result(decoded, n); + delete[] decoded; + return result; + } + } + return ""; +} + +} // namespace webview + +#if defined(WEBVIEW_GTK) +// +// ==================================================================== +// +// This implementation uses webkit2gtk backend. It requires gtk+3.0 and +// webkit2gtk-4.0 libraries. Proper compiler flags can be retrieved via: +// +// pkg-config --cflags --libs gtk+-3.0 webkit2gtk-4.0 +// +// ==================================================================== +// +#include +#include +#include + +namespace webview { + +class gtk_webkit_engine { +public: + gtk_webkit_engine(bool debug, void *window) + : m_window(static_cast(window)) { + gtk_init_check(0, NULL); + m_window = static_cast(window); + if (m_window == nullptr) { + m_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + } + g_signal_connect(G_OBJECT(m_window), "destroy", + G_CALLBACK(+[](GtkWidget *, gpointer arg) { + static_cast(arg)->terminate(); + }), + this); + // Initialize webview widget + m_webview = webkit_web_view_new(); + WebKitUserContentManager *manager = + webkit_web_view_get_user_content_manager(WEBKIT_WEB_VIEW(m_webview)); + g_signal_connect(manager, "script-message-received::external", + G_CALLBACK(+[](WebKitUserContentManager *, + WebKitJavascriptResult *r, gpointer arg) { + auto *w = static_cast(arg); +#if WEBKIT_MAJOR_VERSION >= 2 && WEBKIT_MINOR_VERSION >= 22 + JSCValue *value = + webkit_javascript_result_get_js_value(r); + char *s = jsc_value_to_string(value); +#else + JSGlobalContextRef ctx = + webkit_javascript_result_get_global_context(r); + JSValueRef value = webkit_javascript_result_get_value(r); + JSStringRef js = JSValueToStringCopy(ctx, value, NULL); + size_t n = JSStringGetMaximumUTF8CStringSize(js); + char *s = g_new(char, n); + JSStringGetUTF8CString(js, s, n); + JSStringRelease(js); +#endif + w->on_message(s); + g_free(s); + }), + this); + webkit_user_content_manager_register_script_message_handler(manager, + "external"); + init("window.external={invoke:function(s){window.webkit.messageHandlers." + "external.postMessage(s);}}"); + + gtk_container_add(GTK_CONTAINER(m_window), GTK_WIDGET(m_webview)); + gtk_widget_grab_focus(GTK_WIDGET(m_webview)); + + WebKitSettings *settings = + webkit_web_view_get_settings(WEBKIT_WEB_VIEW(m_webview)); + webkit_settings_set_javascript_can_access_clipboard(settings, true); + if (debug) { + webkit_settings_set_enable_write_console_messages_to_stdout(settings, + true); + webkit_settings_set_enable_developer_extras(settings, true); + } + + gtk_widget_show_all(m_window); + } + void *window() { return (void *)m_window; } + void run() { gtk_main(); } + void terminate() { gtk_main_quit(); } + void dispatch(std::function f) { + g_idle_add_full(G_PRIORITY_HIGH_IDLE, (GSourceFunc)([](void *f) -> int { + (*static_cast(f))(); + return G_SOURCE_REMOVE; + }), + new std::function(f), + [](void *f) { delete static_cast(f); }); + } + + void set_title(const std::string title) { + gtk_window_set_title(GTK_WINDOW(m_window), title.c_str()); + } + + void set_size(int width, int height, int hints) { + gtk_window_set_resizable(GTK_WINDOW(m_window), hints != WEBVIEW_HINT_FIXED); + if (hints == WEBVIEW_HINT_NONE) { + gtk_window_resize(GTK_WINDOW(m_window), width, height); + } else if (hints == WEBVIEW_HINT_FIXED) { + gtk_widget_set_size_request(m_window, width, height); + } else { + GdkGeometry g; + g.min_width = g.max_width = width; + g.min_height = g.max_height = height; + GdkWindowHints h = + (hints == WEBVIEW_HINT_MIN ? GDK_HINT_MIN_SIZE : GDK_HINT_MAX_SIZE); + // This defines either MIN_SIZE, or MAX_SIZE, but not both: + gtk_window_set_geometry_hints(GTK_WINDOW(m_window), nullptr, &g, h); + } + } + + void navigate(const std::string url) { + webkit_web_view_load_uri(WEBKIT_WEB_VIEW(m_webview), url.c_str()); + } + + void init(const std::string js) { + WebKitUserContentManager *manager = + webkit_web_view_get_user_content_manager(WEBKIT_WEB_VIEW(m_webview)); + webkit_user_content_manager_add_script( + manager, webkit_user_script_new( + js.c_str(), WEBKIT_USER_CONTENT_INJECT_TOP_FRAME, + WEBKIT_USER_SCRIPT_INJECT_AT_DOCUMENT_START, NULL, NULL)); + } + + void eval(const std::string js) { + webkit_web_view_run_javascript(WEBKIT_WEB_VIEW(m_webview), js.c_str(), NULL, + NULL, NULL); + } + +private: + virtual void on_message(const std::string msg) = 0; + GtkWidget *m_window; + GtkWidget *m_webview; +}; + +using browser_engine = gtk_webkit_engine; + +} // namespace webview + +#elif defined(WEBVIEW_COCOA) + +// +// ==================================================================== +// +// This implementation uses Cocoa WKWebView backend on macOS. It is +// written using ObjC runtime and uses WKWebView class as a browser runtime. +// You should pass "-framework Webkit" flag to the compiler. +// +// ==================================================================== +// + +#include +#include + +#define NSBackingStoreBuffered 2 + +#define NSWindowStyleMaskResizable 8 +#define NSWindowStyleMaskMiniaturizable 4 +#define NSWindowStyleMaskTitled 1 +#define NSWindowStyleMaskClosable 2 + +#define NSApplicationActivationPolicyRegular 0 + +#define WKUserScriptInjectionTimeAtDocumentStart 0 + +namespace webview { + +// Helpers to avoid too much typing +id operator"" _cls(const char *s, std::size_t) { return (id)objc_getClass(s); } +SEL operator"" _sel(const char *s, std::size_t) { return sel_registerName(s); } +id operator"" _str(const char *s, std::size_t) { + return ((id(*)(id, SEL, const char *))objc_msgSend)( + "NSString"_cls, "stringWithUTF8String:"_sel, s); +} + +class cocoa_wkwebview_engine { +public: + cocoa_wkwebview_engine(bool debug, void *window) { + // Application + id app = ((id(*)(id, SEL))objc_msgSend)("NSApplication"_cls, + "sharedApplication"_sel); + ((void (*)(id, SEL, long))objc_msgSend)( + app, "setActivationPolicy:"_sel, NSApplicationActivationPolicyRegular); + + // Delegate + auto cls = + objc_allocateClassPair((Class) "NSResponder"_cls, "AppDelegate", 0); + class_addProtocol(cls, objc_getProtocol("NSTouchBarProvider")); + class_addMethod(cls, "applicationShouldTerminateAfterLastWindowClosed:"_sel, + (IMP)(+[](id, SEL, id) -> BOOL { return 1; }), "c@:@"); + class_addMethod(cls, "userContentController:didReceiveScriptMessage:"_sel, + (IMP)(+[](id self, SEL, id, id msg) { + auto w = + (cocoa_wkwebview_engine *)objc_getAssociatedObject( + self, "webview"); + assert(w); + w->on_message(((const char *(*)(id, SEL))objc_msgSend)( + ((id(*)(id, SEL))objc_msgSend)(msg, "body"_sel), + "UTF8String"_sel)); + }), + "v@:@@"); + objc_registerClassPair(cls); + + auto delegate = ((id(*)(id, SEL))objc_msgSend)((id)cls, "new"_sel); + objc_setAssociatedObject(delegate, "webview", (id)this, + OBJC_ASSOCIATION_ASSIGN); + ((void (*)(id, SEL, id))objc_msgSend)(app, sel_registerName("setDelegate:"), + delegate); + + // Main window + if (window == nullptr) { + m_window = ((id(*)(id, SEL))objc_msgSend)("NSWindow"_cls, "alloc"_sel); + m_window = + ((id(*)(id, SEL, CGRect, int, unsigned long, int))objc_msgSend)( + m_window, "initWithContentRect:styleMask:backing:defer:"_sel, + CGRectMake(0, 0, 0, 0), 0, NSBackingStoreBuffered, 0); + } else { + m_window = (id)window; + } + + // Webview + auto config = + ((id(*)(id, SEL))objc_msgSend)("WKWebViewConfiguration"_cls, "new"_sel); + m_manager = + ((id(*)(id, SEL))objc_msgSend)(config, "userContentController"_sel); + m_webview = ((id(*)(id, SEL))objc_msgSend)("WKWebView"_cls, "alloc"_sel); + + if (debug) { + // Equivalent Obj-C: + // [[config preferences] setValue:@YES forKey:@"developerExtrasEnabled"]; + ((id(*)(id, SEL, id, id))objc_msgSend)( + ((id(*)(id, SEL))objc_msgSend)(config, "preferences"_sel), + "setValue:forKey:"_sel, + ((id(*)(id, SEL, BOOL))objc_msgSend)("NSNumber"_cls, + "numberWithBool:"_sel, 1), + "developerExtrasEnabled"_str); + } + + // Equivalent Obj-C: + // [[config preferences] setValue:@YES forKey:@"fullScreenEnabled"]; + ((id(*)(id, SEL, id, id))objc_msgSend)( + ((id(*)(id, SEL))objc_msgSend)(config, "preferences"_sel), + "setValue:forKey:"_sel, + ((id(*)(id, SEL, BOOL))objc_msgSend)("NSNumber"_cls, + "numberWithBool:"_sel, 1), + "fullScreenEnabled"_str); + + // Equivalent Obj-C: + // [[config preferences] setValue:@YES forKey:@"javaScriptCanAccessClipboard"]; + ((id(*)(id, SEL, id, id))objc_msgSend)( + ((id(*)(id, SEL))objc_msgSend)(config, "preferences"_sel), + "setValue:forKey:"_sel, + ((id(*)(id, SEL, BOOL))objc_msgSend)("NSNumber"_cls, + "numberWithBool:"_sel, 1), + "javaScriptCanAccessClipboard"_str); + + // Equivalent Obj-C: + // [[config preferences] setValue:@YES forKey:@"DOMPasteAllowed"]; + ((id(*)(id, SEL, id, id))objc_msgSend)( + ((id(*)(id, SEL))objc_msgSend)(config, "preferences"_sel), + "setValue:forKey:"_sel, + ((id(*)(id, SEL, BOOL))objc_msgSend)("NSNumber"_cls, + "numberWithBool:"_sel, 1), + "DOMPasteAllowed"_str); + + ((void (*)(id, SEL, CGRect, id))objc_msgSend)( + m_webview, "initWithFrame:configuration:"_sel, CGRectMake(0, 0, 0, 0), + config); + ((void (*)(id, SEL, id, id))objc_msgSend)( + m_manager, "addScriptMessageHandler:name:"_sel, delegate, + "external"_str); + + init(R"script( + window.external = { + invoke: function(s) { + window.webkit.messageHandlers.external.postMessage(s); + }, + }; + )script"); + ((void (*)(id, SEL, id))objc_msgSend)(m_window, "setContentView:"_sel, + m_webview); + ((void (*)(id, SEL, id))objc_msgSend)(m_window, "makeKeyAndOrderFront:"_sel, + nullptr); + } + ~cocoa_wkwebview_engine() { close(); } + void *window() { return (void *)m_window; } + void terminate() { + close(); + ((void (*)(id, SEL, id))objc_msgSend)("NSApp"_cls, "terminate:"_sel, + nullptr); + } + void run() { + id app = ((id(*)(id, SEL))objc_msgSend)("NSApplication"_cls, + "sharedApplication"_sel); + dispatch([&]() { + ((void (*)(id, SEL, BOOL))objc_msgSend)( + app, "activateIgnoringOtherApps:"_sel, 1); + }); + ((void (*)(id, SEL))objc_msgSend)(app, "run"_sel); + } + void dispatch(std::function f) { + dispatch_async_f(dispatch_get_main_queue(), new dispatch_fn_t(f), + (dispatch_function_t)([](void *arg) { + auto f = static_cast(arg); + (*f)(); + delete f; + })); + } + void set_title(const std::string title) { + ((void (*)(id, SEL, id))objc_msgSend)( + m_window, "setTitle:"_sel, + ((id(*)(id, SEL, const char *))objc_msgSend)( + "NSString"_cls, "stringWithUTF8String:"_sel, title.c_str())); + } + void set_size(int width, int height, int hints) { + auto style = NSWindowStyleMaskTitled | NSWindowStyleMaskClosable | + NSWindowStyleMaskMiniaturizable; + if (hints != WEBVIEW_HINT_FIXED) { + style = style | NSWindowStyleMaskResizable; + } + ((void (*)(id, SEL, unsigned long))objc_msgSend)( + m_window, "setStyleMask:"_sel, style); + + if (hints == WEBVIEW_HINT_MIN) { + ((void (*)(id, SEL, CGSize))objc_msgSend)( + m_window, "setContentMinSize:"_sel, CGSizeMake(width, height)); + } else if (hints == WEBVIEW_HINT_MAX) { + ((void (*)(id, SEL, CGSize))objc_msgSend)( + m_window, "setContentMaxSize:"_sel, CGSizeMake(width, height)); + } else { + ((void (*)(id, SEL, CGRect, BOOL, BOOL))objc_msgSend)( + m_window, "setFrame:display:animate:"_sel, + CGRectMake(0, 0, width, height), 1, 0); + } + ((void (*)(id, SEL))objc_msgSend)(m_window, "center"_sel); + } + void navigate(const std::string url) { + auto nsurl = ((id(*)(id, SEL, id))objc_msgSend)( + "NSURL"_cls, "URLWithString:"_sel, + ((id(*)(id, SEL, const char *))objc_msgSend)( + "NSString"_cls, "stringWithUTF8String:"_sel, url.c_str())); + + ((void (*)(id, SEL, id))objc_msgSend)( + m_webview, "loadRequest:"_sel, + ((id(*)(id, SEL, id))objc_msgSend)("NSURLRequest"_cls, + "requestWithURL:"_sel, nsurl)); + } + void init(const std::string js) { + // Equivalent Obj-C: + // [m_manager addUserScript:[[WKUserScript alloc] initWithSource:[NSString stringWithUTF8String:js.c_str()] injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:YES]] + ((void (*)(id, SEL, id))objc_msgSend)( + m_manager, "addUserScript:"_sel, + ((id(*)(id, SEL, id, long, BOOL))objc_msgSend)( + ((id(*)(id, SEL))objc_msgSend)("WKUserScript"_cls, "alloc"_sel), + "initWithSource:injectionTime:forMainFrameOnly:"_sel, + ((id(*)(id, SEL, const char *))objc_msgSend)( + "NSString"_cls, "stringWithUTF8String:"_sel, js.c_str()), + WKUserScriptInjectionTimeAtDocumentStart, 1)); + } + void eval(const std::string js) { + ((void (*)(id, SEL, id, id))objc_msgSend)( + m_webview, "evaluateJavaScript:completionHandler:"_sel, + ((id(*)(id, SEL, const char *))objc_msgSend)( + "NSString"_cls, "stringWithUTF8String:"_sel, js.c_str()), + nullptr); + } + +private: + virtual void on_message(const std::string msg) = 0; + void close() { ((void (*)(id, SEL))objc_msgSend)(m_window, "close"_sel); } + id m_window; + id m_webview; + id m_manager; +}; + +using browser_engine = cocoa_wkwebview_engine; + +} // namespace webview + +#elif defined(WEBVIEW_EDGE) + +// +// ==================================================================== +// +// This implementation uses Win32 API to create a native window. It can +// use either EdgeHTML or Edge/Chromium backend as a browser engine. +// +// ==================================================================== +// + +#define WIN32_LEAN_AND_MEAN +#include +#include +#include +#include + +#pragma comment(lib, "user32.lib") +#pragma comment(lib, "Shlwapi.lib") + +// EdgeHTML headers and libs +#include +#include +#include +#include +#pragma comment(lib, "windowsapp") + +// Edge/Chromium headers and libs +#include "webview2.h" +#pragma comment(lib, "ole32.lib") +#pragma comment(lib, "oleaut32.lib") + +namespace webview { + +using msg_cb_t = std::function; + +// Common interface for EdgeHTML and Edge/Chromium +class browser { +public: + virtual ~browser() = default; + virtual bool embed(HWND, bool, msg_cb_t) = 0; + virtual void navigate(const std::string url) = 0; + virtual void eval(const std::string js) = 0; + virtual void init(const std::string js) = 0; + virtual void resize(HWND) = 0; +}; + +// +// EdgeHTML browser engine +// +using namespace winrt; +using namespace Windows::Foundation; +using namespace Windows::Web::UI; +using namespace Windows::Web::UI::Interop; + +class edge_html : public browser { +public: + bool embed(HWND wnd, bool debug, msg_cb_t cb) override { + init_apartment(winrt::apartment_type::single_threaded); + auto process = WebViewControlProcess(); + auto op = process.CreateWebViewControlAsync(reinterpret_cast(wnd), + Rect()); + if (op.Status() != AsyncStatus::Completed) { + handle h(CreateEvent(nullptr, false, false, nullptr)); + op.Completed([h = h.get()](auto, auto) { SetEvent(h); }); + HANDLE hs[] = {h.get()}; + DWORD i; + CoWaitForMultipleHandles(COWAIT_DISPATCH_WINDOW_MESSAGES | + COWAIT_DISPATCH_CALLS | + COWAIT_INPUTAVAILABLE, + INFINITE, 1, hs, &i); + } + m_webview = op.GetResults(); + m_webview.Settings().IsScriptNotifyAllowed(true); + m_webview.IsVisible(true); + m_webview.ScriptNotify([=](auto const &sender, auto const &args) { + std::string s = winrt::to_string(args.Value()); + cb(s.c_str()); + }); + m_webview.NavigationStarting([=](auto const &sender, auto const &args) { + m_webview.AddInitializeScript(winrt::to_hstring(init_js)); + }); + init("window.external.invoke = s => window.external.notify(s)"); + return true; + } + + void navigate(const std::string url) override { + std::string html = html_from_uri(url); + if (html != "") { + m_webview.NavigateToString(winrt::to_hstring(html)); + } else { + Uri uri(winrt::to_hstring(url)); + m_webview.Navigate(uri); + } + } + + void init(const std::string js) override { + init_js = init_js + "(function(){" + js + "})();"; + } + + void eval(const std::string js) override { + m_webview.InvokeScriptAsync( + L"eval", single_threaded_vector({winrt::to_hstring(js)})); + } + + void resize(HWND wnd) override { + if (m_webview == nullptr) { + return; + } + RECT r; + GetClientRect(wnd, &r); + Rect bounds(r.left, r.top, r.right - r.left, r.bottom - r.top); + m_webview.Bounds(bounds); + } + +private: + WebViewControl m_webview = nullptr; + std::string init_js = ""; +}; + +// +// Edge/Chromium browser engine +// +class edge_chromium : public browser { +public: + bool embed(HWND wnd, bool debug, msg_cb_t cb) override { + if (CoInitializeEx(nullptr, COINIT_MULTITHREADED) != S_OK) { + return false; + } + + std::atomic_flag flag = ATOMIC_FLAG_INIT; + flag.test_and_set(); + + char currentExePath[MAX_PATH]; + GetModuleFileNameA(NULL, currentExePath, MAX_PATH); + char *currentExeName = PathFindFileNameA(currentExePath); + + std::wstring_convert> wideCharConverter; + std::wstring userDataFolder = + wideCharConverter.from_bytes(std::getenv("APPDATA")); + std::wstring currentExeNameW = wideCharConverter.from_bytes(currentExeName); + + // TODO: Maybe we need to implement memory cleanup? + auto webview2ComHandler = new webview2_com_handler( + wnd, cb, [&](ICoreWebView2Controller *controller) { + m_controller = controller; + m_controller->get_CoreWebView2(&m_webview); + m_webview->AddRef(); + flag.clear(); + }); + + HRESULT res = + createEnvironment(userDataFolder, currentExeNameW, webview2ComHandler); + + // "HRESULT - 0x80010106 - Cannot change thread mode after it is set." + if (webview2ComHandler->getLastEnvironmentCompleteResult() == 0x80010106) { + CoUninitialize(); + if (CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED) != S_OK) { + delete webview2ComHandler; + return false; + } + res = createEnvironment(userDataFolder, currentExeNameW, + webview2ComHandler); + } + + if (res != S_OK) { + delete webview2ComHandler; + CoUninitialize(); + return false; + } + + MSG msg = {}; + while (flag.test_and_set() && GetMessage(&msg, NULL, 0, 0)) { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + init("window.external={invoke:s=>window.chrome.webview.postMessage(s)}"); + return true; + } + + void resize(HWND wnd) override { + if (m_controller == nullptr) { + return; + } + RECT bounds; + GetClientRect(wnd, &bounds); + m_controller->put_Bounds(bounds); + } + + void navigate(const std::string url) override { + auto wurl = to_lpwstr(url); + m_webview->Navigate(wurl); + delete[] wurl; + } + + void init(const std::string js) override { + LPCWSTR wjs = to_lpwstr(js); + m_webview->AddScriptToExecuteOnDocumentCreated(wjs, nullptr); + delete[] wjs; + } + + void eval(const std::string js) override { + LPCWSTR wjs = to_lpwstr(js); + m_webview->ExecuteScript(wjs, nullptr); + delete[] wjs; + } + +private: + LPWSTR to_lpwstr(const std::string s) { + int n = MultiByteToWideChar(CP_UTF8, 0, s.c_str(), -1, NULL, 0); + wchar_t *ws = new wchar_t[n]; + MultiByteToWideChar(CP_UTF8, 0, s.c_str(), -1, ws, n); + return ws; + } + + ICoreWebView2 *m_webview = nullptr; + ICoreWebView2Controller *m_controller = nullptr; + + class webview2_com_handler + : public ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler, + public ICoreWebView2CreateCoreWebView2ControllerCompletedHandler, + public ICoreWebView2WebMessageReceivedEventHandler, + public ICoreWebView2PermissionRequestedEventHandler { + using webview2_com_handler_cb_t = + std::function; + + public: + webview2_com_handler(HWND hwnd, msg_cb_t msgCb, + webview2_com_handler_cb_t cb) + : m_window(hwnd), m_msgCb(msgCb), m_cb(cb) {} + + HRESULT getLastEnvironmentCompleteResult() const { + return lastEnvironmentCompleteResult; + } + + ULONG STDMETHODCALLTYPE AddRef() { return 1; } + ULONG STDMETHODCALLTYPE Release() { return 1; } + HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, LPVOID *ppv) { + return S_OK; + } + HRESULT STDMETHODCALLTYPE Invoke(HRESULT res, + ICoreWebView2Environment *env) { + + lastEnvironmentCompleteResult = res; + + if (res == S_OK) { + env->CreateCoreWebView2Controller(m_window, this); + return S_OK; + } + + return S_FALSE; + } + HRESULT STDMETHODCALLTYPE Invoke(HRESULT res, + ICoreWebView2Controller *controller) { + controller->AddRef(); + + ICoreWebView2 *webview; + ::EventRegistrationToken token; + controller->get_CoreWebView2(&webview); + webview->add_WebMessageReceived(this, &token); + webview->add_PermissionRequested(this, &token); + + m_cb(controller); + return S_OK; + } + HRESULT STDMETHODCALLTYPE Invoke( + ICoreWebView2 *sender, ICoreWebView2WebMessageReceivedEventArgs *args) { + LPWSTR message; + args->TryGetWebMessageAsString(&message); + + std::wstring_convert> wideCharConverter; + m_msgCb(wideCharConverter.to_bytes(message)); + sender->PostWebMessageAsString(message); + + CoTaskMemFree(message); + return S_OK; + } + HRESULT STDMETHODCALLTYPE + Invoke(ICoreWebView2 *sender, + ICoreWebView2PermissionRequestedEventArgs *args) { + COREWEBVIEW2_PERMISSION_KIND kind; + args->get_PermissionKind(&kind); + if (kind == COREWEBVIEW2_PERMISSION_KIND_CLIPBOARD_READ) { + args->put_State(COREWEBVIEW2_PERMISSION_STATE_ALLOW); + } + return S_OK; + } + + private: + HWND m_window; + msg_cb_t m_msgCb; + webview2_com_handler_cb_t m_cb; + HRESULT lastEnvironmentCompleteResult; + }; + + HRESULT createEnvironment(const std::wstring &userDataFolder, + const std::wstring ¤tExeNameW, + webview2_com_handler *webview2ComHandler) const { + return CreateCoreWebView2EnvironmentWithOptions( + nullptr, (userDataFolder + L"/" + currentExeNameW).c_str(), nullptr, + webview2ComHandler); + } +}; + +class win32_edge_engine { +public: + win32_edge_engine(bool debug, void *window) { + if (window == nullptr) { + HINSTANCE hInstance = GetModuleHandle(nullptr); + HICON icon = (HICON)LoadImage( + hInstance, IDI_APPLICATION, IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), + GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR); + + WNDCLASSEX wc; + ZeroMemory(&wc, sizeof(WNDCLASSEX)); + wc.cbSize = sizeof(WNDCLASSEX); + wc.hInstance = hInstance; + wc.lpszClassName = "webview"; + wc.hIcon = icon; + wc.hIconSm = icon; + wc.lpfnWndProc = + (WNDPROC)(+[](HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) -> int { + auto w = (win32_edge_engine *)GetWindowLongPtr(hwnd, GWLP_USERDATA); + switch (msg) { + case WM_SIZE: + w->m_browser->resize(hwnd); + break; + case WM_CLOSE: + DestroyWindow(hwnd); + break; + case WM_DESTROY: + w->terminate(); + break; + case WM_GETMINMAXINFO: { + auto lpmmi = (LPMINMAXINFO)lp; + if (w == nullptr) { + return 0; + } + if (w->m_maxsz.x > 0 && w->m_maxsz.y > 0) { + lpmmi->ptMaxSize = w->m_maxsz; + lpmmi->ptMaxTrackSize = w->m_maxsz; + } + if (w->m_minsz.x > 0 && w->m_minsz.y > 0) { + lpmmi->ptMinTrackSize = w->m_minsz; + } + } break; + default: + return DefWindowProc(hwnd, msg, wp, lp); + } + return 0; + }); + RegisterClassEx(&wc); + m_window = CreateWindow("webview", "", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, + CW_USEDEFAULT, 640, 480, nullptr, nullptr, + GetModuleHandle(nullptr), nullptr); + SetWindowLongPtr(m_window, GWLP_USERDATA, (LONG_PTR)this); + } else { + m_window = *(static_cast(window)); + } + + SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE); + ShowWindow(m_window, SW_SHOW); + UpdateWindow(m_window); + SetFocus(m_window); + + auto cb = + std::bind(&win32_edge_engine::on_message, this, std::placeholders::_1); + + if (!m_browser->embed(m_window, debug, cb)) { + m_browser = std::make_unique(); + m_browser->embed(m_window, debug, cb); + } + + m_browser->resize(m_window); + } + + void run() { + MSG msg; + BOOL res; + while ((res = GetMessage(&msg, nullptr, 0, 0)) != -1) { + if (msg.hwnd) { + TranslateMessage(&msg); + DispatchMessage(&msg); + continue; + } + if (msg.message == WM_APP) { + auto f = (dispatch_fn_t *)(msg.lParam); + (*f)(); + delete f; + } else if (msg.message == WM_QUIT) { + return; + } + } + } + void *window() { return (void *)m_window; } + void terminate() { PostQuitMessage(0); } + void dispatch(dispatch_fn_t f) { + PostThreadMessage(m_main_thread, WM_APP, 0, (LPARAM) new dispatch_fn_t(f)); + } + + void set_title(const std::string title) { + SetWindowText(m_window, title.c_str()); + } + + void set_size(int width, int height, int hints) { + auto style = GetWindowLong(m_window, GWL_STYLE); + if (hints == WEBVIEW_HINT_FIXED) { + style &= ~(WS_THICKFRAME | WS_MAXIMIZEBOX); + } else { + style |= (WS_THICKFRAME | WS_MAXIMIZEBOX); + } + SetWindowLong(m_window, GWL_STYLE, style); + + if (hints == WEBVIEW_HINT_MAX) { + m_maxsz.x = width; + m_maxsz.y = height; + } else if (hints == WEBVIEW_HINT_MIN) { + m_minsz.x = width; + m_minsz.y = height; + } else { + RECT r; + r.left = r.top = 0; + r.right = width; + r.bottom = height; + AdjustWindowRect(&r, WS_OVERLAPPEDWINDOW, 0); + SetWindowPos( + m_window, NULL, r.left, r.top, r.right - r.left, r.bottom - r.top, + SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOMOVE | SWP_FRAMECHANGED); + m_browser->resize(m_window); + } + } + + void navigate(const std::string url) { m_browser->navigate(url); } + void eval(const std::string js) { m_browser->eval(js); } + void init(const std::string js) { m_browser->init(js); } + +private: + virtual void on_message(const std::string msg) = 0; + + HWND m_window; + POINT m_minsz = POINT{0, 0}; + POINT m_maxsz = POINT{0, 0}; + DWORD m_main_thread = GetCurrentThreadId(); + std::unique_ptr m_browser = + std::make_unique(); +}; + +using browser_engine = win32_edge_engine; +} // namespace webview + +#endif /* WEBVIEW_GTK, WEBVIEW_COCOA, WEBVIEW_EDGE */ + +namespace webview { + +class webview : public browser_engine { +public: + webview(bool debug = false, void *wnd = nullptr) + : browser_engine(debug, wnd) {} + + void navigate(const std::string url) { + if (url == "") { + browser_engine::navigate("data:text/html," + + url_encode("Hello")); + return; + } + std::string html = html_from_uri(url); + if (html != "") { + browser_engine::navigate("data:text/html," + url_encode(html)); + } else { + browser_engine::navigate(url); + } + } + + using binding_t = std::function; + using binding_ctx_t = std::pair; + + using sync_binding_t = std::function; + using sync_binding_ctx_t = std::pair; + + void bind(const std::string name, sync_binding_t fn) { + bind( + name, + [](std::string seq, std::string req, void *arg) { + auto pair = static_cast(arg); + pair->first->resolve(seq, 0, pair->second(req)); + }, + new sync_binding_ctx_t(this, fn)); + } + + void bind(const std::string name, binding_t f, void *arg) { + auto js = "(function() { var name = '" + name + "';" + R"( + var RPC = window._rpc = (window._rpc || {nextSeq: 1}); + window[name] = function() { + var seq = RPC.nextSeq++; + var promise = new Promise(function(resolve, reject) { + RPC[seq] = { + resolve: resolve, + reject: reject, + }; + }); + window.external.invoke(JSON.stringify({ + id: seq, + method: name, + params: Array.prototype.slice.call(arguments), + })); + return promise; + } + })())"; + init(js); + bindings[name] = new binding_ctx_t(new binding_t(f), arg); + } + + void resolve(const std::string seq, int status, const std::string result) { + dispatch([=]() { + if (status == 0) { + eval("window._rpc[" + seq + "].resolve(" + result + "); window._rpc[" + + seq + "] = undefined"); + } else { + eval("window._rpc[" + seq + "].reject(" + result + "); window._rpc[" + + seq + "] = undefined"); + } + }); + } + +private: + void on_message(const std::string msg) { + auto seq = json_parse(msg, "id", 0); + auto name = json_parse(msg, "method", 0); + auto args = json_parse(msg, "params", 0); + if (bindings.find(name) == bindings.end()) { + return; + } + auto fn = bindings[name]; + (*fn->first)(seq, args, fn->second); + } + std::map bindings; +}; +} // namespace webview + +WEBVIEW_API webview_t webview_create(int debug, void *wnd) { + return new webview::webview(debug, wnd); +} + +WEBVIEW_API void webview_destroy(webview_t w) { + delete static_cast(w); +} + +WEBVIEW_API void webview_run(webview_t w) { + static_cast(w)->run(); +} + +WEBVIEW_API void webview_terminate(webview_t w) { + static_cast(w)->terminate(); +} + +WEBVIEW_API void webview_dispatch(webview_t w, void (*fn)(webview_t, void *), + void *arg) { + static_cast(w)->dispatch([=]() { fn(w, arg); }); +} + +WEBVIEW_API void *webview_get_window(webview_t w) { + return static_cast(w)->window(); +} + +WEBVIEW_API void webview_set_title(webview_t w, const char *title) { + static_cast(w)->set_title(title); +} + +WEBVIEW_API void webview_set_size(webview_t w, int width, int height, + int hints) { + static_cast(w)->set_size(width, height, hints); +} + +WEBVIEW_API void webview_navigate(webview_t w, const char *url) { + static_cast(w)->navigate(url); +} + +WEBVIEW_API void webview_init(webview_t w, const char *js) { + static_cast(w)->init(js); +} + +WEBVIEW_API void webview_eval(webview_t w, const char *js) { + static_cast(w)->eval(js); +} + +WEBVIEW_API void webview_bind(webview_t w, const char *name, + void (*fn)(const char *seq, const char *req, + void *arg), + void *arg) { + static_cast(w)->bind( + name, + [=](std::string seq, std::string req, void *arg) { + fn(seq.c_str(), req.c_str(), arg); + }, + arg); +} + +WEBVIEW_API void webview_return(webview_t w, const char *seq, int status, + const char *result) { + static_cast(w)->resolve(seq, status, result); +} + +#endif /* WEBVIEW_HEADER */ + +#endif /* WEBVIEW_H */ \ No newline at end of file diff --git a/pubspec.yaml b/pubspec.yaml index 5db7f56..95d302b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -13,3 +13,5 @@ environment: dev_dependencies: lints: ^1.0.0 test: ^1.16.0 +dependencies: + ffi: ^1.1.2