CoreWebView2Environment Class

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.

Summary

Members Description
BrowserVersionString Gets the browser version info of the current CoreWebView2Environment, including channel name if it is not the stable channel.
FailureReportFolderPath Gets the failure report folder that all CoreWebView2s created from this environment are using.
UserDataFolder Gets the user data folder that all CoreWebView2s created from this environment are using.
CompareBrowserVersionString 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.
CreateAsync Creates a WebView2 Environment using the installed or a custom WebView2 Runtime version.
CreateContextMenuItem Create a custom CoreWebView2ContextMenuItem object to insert into the WebView context menu.
CreateCoreWebView2CompositionControllerAsync Asynchronously creates a new WebView for use with visual hosting.
CreateCoreWebView2CompositionControllerAsync This is a overload method that creates a WebView2 composition controller using parent window and custom controller options.
CreateCoreWebView2ControllerAsync This is a overload method that creates a WebView2 controller using parent window and custom controller options.
CreateCoreWebView2ControllerAsync Asynchronously creates a new WebView.
CreateCoreWebView2ControllerOptions This is a overload method that creates a WebView2 ControllerOptions.
CreateCoreWebView2PointerInfo Creates an empty CoreWebView2PointerInfo.
CreatePrintSettings Creates the CoreWebView2PrintSettings used by the CoreWebView2.PrintToPdfAsync method.
CreateSharedBuffer Create a shared memory based buffer with the specified size in bytes.
CreateWebResourceRequest Creates a new CoreWebView2WebResourceRequest object.
CreateWebResourceResponse Creates a new CoreWebView2WebResourceResponse object.
CreateWithOptionsAsync Creates a WebView2 Environment with a custom version of WebView2 Runtime, user data folder, and environment options.
GetAvailableBrowserVersionString Gets the browser version info including channel name if it is not the stable channel or WebView2 Runtime.
GetAvailableBrowserVersionString Gets the browser version info including channel name if it is not the stable channel or WebView2 Runtime where browserExecutableFolder is the relative path to the folder that contains the WebView2 Runtime.
GetProcessExtendedInfosAsync Returns a snapshot collection of CoreWebView2ProcessInfo corresponding to all currently running processes associated with this CoreWebView2Environment excludes crashpad process. This provides the same list of CoreWebView2ProcessInfo as what's provided in CoreWebView2Environment.GetProcessInfos, but additionally provides a list of associated CoreWebView2FrameInfo which are actively running (showing or hiding UI elements) in the renderer process. See CoreWebView2ProcessExtendedInfo.AssociatedFrameInfos for more information.
GetProcessInfos Returns the list of all CoreWebView2ProcessInfo using same user data folder except for crashpad process.
BrowserProcessExited BrowserProcessExited is raised when the collection of WebView2 Runtime processes for the browser process of this CoreWebView2Environment terminate due to browser process failure or normal shutdown (for example, when all associated WebViews are closed), after all resources have been released (including the user data folder).
NewBrowserVersionAvailable NewBrowserVersionAvailable is raised when a newer version of the WebView2 Runtime is installed and available using WebView2.
ProcessInfosChanged ProcessInfosChanged is raised when a collection of WebView2 Runtime processes changed due to new process being detected or when a existing process gone away.

Properties

BrowserVersionString

readonly string BrowserVersionString

Gets the browser version info of the current CoreWebView2Environment, including channel name if it is not the stable channel. It matches the format of the CoreWebView2Environment.GetAvailableBrowserVersionString method. Channel names are beta, dev, and canary.

FailureReportFolderPath

readonly string FailureReportFolderPath

Gets the failure report folder that all CoreWebView2s created from this environment are using.

UserDataFolder

readonly string UserDataFolder

Gets the user data folder that all CoreWebView2s created from this environment are using. This could be either the value passed in by the developer when creating the environment object or the calculated one for default handling. And will always be an absolute path.

Methods

CompareBrowserVersionString

static int CompareBrowserVersionString(string browserVersionString1, string browserVersionString2)

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. browserVersionString1 is one of the version strings to compare. browserVersionString2 is the other version string to compare.

CreateAsync

static IAsyncOperation<CoreWebView2Environment> CreateAsync()

Creates a WebView2 Environment using the installed or a custom WebView2 Runtime version.

CreateContextMenuItem

CoreWebView2ContextMenuItem CreateContextMenuItem(string Label, IRandomAccessStream iconStream, CoreWebView2ContextMenuItemKind Kind)

Create a custom CoreWebView2ContextMenuItem object to insert into the WebView context menu. CoreWebView2 will rewind the icon stream before decoding. There is a limit of 1000 active custom context menu items at a given time per CoreWebView2Environment. Attempting to create more before deleting existing ones will fail with ERROR_NOT_ENOUGH_QUOTA. It is recommended to reuse custom ContextMenuItems across CoreWebView2ContextMenuRequested events for performance. The created object's CoreWebView2ContextMenuItem.IsEnabled property will default to true and CoreWebView2ContextMenuItem.IsChecked property will default to false. A CoreWebView2ContextMenuItem.CommandId will be assigned that's unique across active custom context menu items, but command ID values of deleted custom ContextMenuItems can be reassigned.

CreateCoreWebView2CompositionControllerAsync

IAsyncOperation<CoreWebView2CompositionController> CreateCoreWebView2CompositionControllerAsync(CoreWebView2ControllerWindowReference ParentWindow)

Asynchronously creates a new WebView for use with visual hosting. ParentWindow will be the HWND that the app will receive pointer/mouse input meant for the WebView (and will need to use CoreWebView2CompositionController.SendMouseInput or CoreWebView2CompositionController.SendPointerInput to forward). If the app moves the WebView visual tree to underneath a different window, then it needs to set CoreWebView2Controller.ParentWindow to update the new parent HWND of the visual tree.

Set CoreWebView2CompositionController.RootVisualTarget property on the created CoreWebView2CompositionController to provide a visual to host the browser's visual tree.

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 can also accept a CoreWebView2ControllerOptions which is created by CoreWebView2Environment.CreateCoreWebView2ControllerOptions as the second parameter for multiple profiles support.

CreateCoreWebView2CompositionController is supported in the following versions of Windows:

  • Windows 11
  • Windows 10
  • Windows Server 2019
  • Windows Server 2016

CreateCoreWebView2CompositionControllerAsync

IAsyncOperation<CoreWebView2CompositionController> CreateCoreWebView2CompositionControllerAsync(CoreWebView2ControllerWindowReference ParentWindow, CoreWebView2ControllerOptions options)

This is a overload method that creates a WebView2 composition controller using parent window and custom controller options.

CreateCoreWebView2ControllerAsync

IAsyncOperation<CoreWebView2Controller> CreateCoreWebView2ControllerAsync(CoreWebView2ControllerWindowReference ParentWindow, CoreWebView2ControllerOptions options)

This is a overload method that creates a WebView2 controller using parent window and custom controller options.

CreateCoreWebView2ControllerAsync

IAsyncOperation<CoreWebView2Controller> CreateCoreWebView2ControllerAsync(CoreWebView2ControllerWindowReference ParentWindow)

Asynchronously creates a new WebView. 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.

HWND_MESSAGE is a valid parameter for ParentWindow for an invisible WebView for Windows 8 and above. In this case the window will never become visible. You are not able to reparent the window after you have created the WebView. This is not supported in Windows 7 or below. Passing this parameter in Windows 7 or below will return ERROR_INVALID_WINDOW_HANDLE in the controller callback.

It can also accept a CoreWebView2ControllerOptions which is created by CoreWebView2Environment.CreateCoreWebView2ControllerOptions as the second parameter for multiple profiles support. As WebView2 is built on top of Edge browser, it follows Edge's behavior pattern. To create an InPrivate WebView, we gets an off-the-record profile (an InPrivate profile) from a regular profile, then create the WebView with the off-the-record profile. Multiple profiles under single user data directory can share some system resources including memory, CPU footprint, disk space (such as compiled shaders and safebrowsing data) etc.

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 CoreWebView2EnvironmentOptions. For example, if a WebView was created with one CoreWebView2EnvironmentOptions.Language, an attempt to create a WebView with a different CoreWebView2EnvironmentOptions.Language using the same user data folder fails.

WebView creation can fail with E_UNEXPECTED if runtime does not have permissions to the user data folder.

CreateCoreWebView2ControllerOptions

CoreWebView2ControllerOptions CreateCoreWebView2ControllerOptions()

This is a overload method that creates a WebView2 ControllerOptions.

CreateCoreWebView2PointerInfo

CoreWebView2PointerInfo CreateCoreWebView2PointerInfo()

Creates an empty CoreWebView2PointerInfo. The returned CoreWebView2PointerInfo needs to be populated with all of the relevant info before calling CoreWebView2CompositionController.SendPointerInput.

CreatePrintSettings

CoreWebView2PrintSettings CreatePrintSettings()

Creates the CoreWebView2PrintSettings used by the CoreWebView2.PrintToPdfAsync method.

CreateSharedBuffer

CoreWebView2SharedBuffer CreateSharedBuffer(uint64_t Size)

Create a shared memory based buffer with the specified size in bytes. The buffer can be shared with web contents in WebView by calling CoreWebView2.PostSharedBufferToScript or CoreWebView2Frame.PostSharedBufferToScript. Once shared, the same content of the buffer will be accessible from both the app process and script in WebView. Modification to the content will be visible to all parties that have access to the buffer. The shared buffer is presented to the script as ArrayBuffer. All JavaScript APIs that work for ArrayBuffer including Atomics APIs can be used on it. There is currently a limitation that only size less than 2GB is supported.

CreateWebResourceRequest

CoreWebView2WebResourceRequest CreateWebResourceRequest(string uri, string Method, IRandomAccessStream postData, string Headers)

Creates a new CoreWebView2WebResourceRequest object. uri parameter must be absolute URI. It's also possible to create this object with null headers string and then use the CoreWebView2HttpRequestHeaders to construct the headers line by line.

CreateWebResourceResponse

CoreWebView2WebResourceResponse CreateWebResourceResponse(IRandomAccessStream Content, int StatusCode, string ReasonPhrase, string Headers)

Creates a new CoreWebView2WebResourceResponse object. It is also possible to create this object with empty headers string and then use the CoreWebView2HttpResponseHeaders to construct the headers line by line.

CreateWithOptionsAsync

static IAsyncOperation<CoreWebView2Environment> CreateWithOptionsAsync(string browserExecutableFolder, string userDataFolder, CoreWebView2EnvironmentOptions options)

Creates a WebView2 Environment with a custom version of WebView2 Runtime, user data folder, and environment options.

GetAvailableBrowserVersionString

static string GetAvailableBrowserVersionString()

Gets the browser version info including channel name if it is not the stable channel or WebView2 Runtime.

GetAvailableBrowserVersionString

static string GetAvailableBrowserVersionString(string browserExecutableFolder)

Gets the browser version info including channel name if it is not the stable channel or WebView2 Runtime where browserExecutableFolder is the relative path to the folder that contains the WebView2 Runtime.

GetProcessExtendedInfosAsync

IAsyncOperation<IVectorView<CoreWebView2ProcessExtendedInfo>> GetProcessExtendedInfosAsync()

Returns a snapshot collection of CoreWebView2ProcessInfo corresponding to all currently running processes associated with this CoreWebView2Environment excludes crashpad process. This provides the same list of CoreWebView2ProcessInfo as what's provided in CoreWebView2Environment.GetProcessInfos, but additionally provides a list of associated CoreWebView2FrameInfo which are actively running (showing or hiding UI elements) in the renderer process. See CoreWebView2ProcessExtendedInfo.AssociatedFrameInfos for more information.

GetProcessInfos

IVectorView<CoreWebView2ProcessInfo> GetProcessInfos()

Returns the list of all CoreWebView2ProcessInfo using same user data folder except for crashpad process.

Events

BrowserProcessExited

BrowserProcessExited is raised when the collection of WebView2 Runtime processes for the browser process of this CoreWebView2Environment terminate due to browser process failure or normal shutdown (for example, when all associated WebViews are closed), after all resources have been released (including the user data folder). Multiple app processes can share a browser process by creating their webviews from a CoreWebView2Environment with the same user data folder. When the entire collection of WebView2Runtime processes for the browser process exit, all associated CoreWebView2Environment objects receive the BrowserProcessExited event. Multiple processes sharing the same browser process need to coordinate their use of the shared user data folder to avoid race conditions and unnecessary waits. For example, one process should not clear the user data folder at the same time that another process recovers from a crash by recreating its WebView controls; one process should not block waiting for the event if other app processes are using the same browser process (the browser process will not exit until those other processes have closed their webviews too).

Note this is an event from CoreWebView2Environment, not CoreWebView2. The difference between BrowserProcessExited and CoreWebView2.ProcessFailed is that BrowserProcessExited is raised for any browser process exit (expected or unexpected, after all associated processes have exited too), while CoreWebView2.ProcessFailed is raised for unexpected process exits of any kind (browser, render, GPU, and all other types), or for main frame render process unresponsiveness. To learn more about the WebView2 Process Model, go to Process model.

In the case the browser process crashes, both BrowserProcessExited and CoreWebView2.ProcessFailed events are raised, but the order is not guaranteed. These events are intended for different scenarios. It is up to the app to coordinate the handlers so they do not try to perform reliability recovery while also trying to move to a new WebView2 Runtime version or remove the user data folder.

Type: TypedEventHandler<CoreWebView2Environment, CoreWebView2BrowserProcessExitedEventArgs>

NewBrowserVersionAvailable

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.

Type: TypedEventHandler<CoreWebView2Environment, Object>

ProcessInfosChanged

ProcessInfosChanged is raised when a collection of WebView2 Runtime processes changed due to new process being detected or when a existing process gone away.

Type: TypedEventHandler<CoreWebView2Environment, Object>

Referenced by