<!-- Enter a brief description/summary of your PR here. What does it
fix/what does it change/how was it tested (even manually, if necessary)?
-->
## Summary of the Pull Request
This PR aims to fix some positioning issues of the form used as preview
handler.
It fixes the following issues:
1. The floating window, detached from Explorer that sometimes appears:
#33491#27475#24985
2. The **CoreWebView2 members cannot be accessed after the WebView2
control is disposed** crash: #27276
3. `PowerToys.*.PreviewHandler.exe` process leak
### Repro steps for issue 1
- Navigate through files in a folder invoking their preview handler
- Minimize/Restore Explorer quickly (spam WIN+D usually works)
- 2 weird issues happen:
- Some `PowerToys.*.PreviewHandler.exe` processes are leaked
- Some `PowerToys.*.PreviewHandler.exe` are started with a `NULL` `HWND`

This happens because
[IPreviewHandler::DoPreview](https://learn.microsoft.com/windows/win32/api/shobjidl_core/nf-shobjidl_core-ipreviewhandler-dopreview)
is called multiple times and sometimes before calling
[IPreviewHandler::SetWindow](https://learn.microsoft.com/windows/win32/api/shobjidl_core/nf-shobjidl_core-ipreviewhandler-setwindow).
When the managed previewer try to set the parent of the form to the
`NULL` `HWND`, the desktop window is used instead, resulting in the
floating preview window being displayed.
Reference:
https://learn.microsoft.com/windows/win32/api/winuser/nf-winuser-setparent#parameters5d77874382/src/modules/previewpane/common/controls/FormHandlerControl.cs (L136)
### Repro steps for issue 2
- Preview a file
- Restart `explorer.exe` process
- Make sure `PowerToys.*.PreviewHandler.exe` is leaked and still running
- Preview the same file again
- Preview is displayed (another process is launched)
- Minimize Explorer
What happens here is that the form of the old process have an invalid
`HWND` as parent but receive the `SetRect` for some reason.
<!-- Please review the items on the PR checklist before submitting-->
## PR Checklist
- [x] **Closes:** #33491#27475#24985#27276
- [ ] **Communication:** I've discussed this with core contributors
already. If work hasn't been agreed, this work might be rejected
- [ ] **Tests:** Added/updated and all pass
- [ ] **Localization:** All end user facing strings can be localized
- [ ] **Dev docs:** Added/updated
- [ ] **New binaries:** Added on the required places
- [ ] [JSON for
signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json)
for new binaries
- [ ] [WXS for
installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs)
for new binaries and localization folder
- [ ] [YML for CI
pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml)
for new test projects
- [ ] [YML for signed
pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml)
- [ ] **Documentation updated:** If checked, please file a pull request
on [our docs
repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys)
and link it here: #xxx
<!-- Provide a more detailed description of the PR, other things fixed
or any additional comments/features here -->
## Detailed Description of the Pull Request / Additional comments
- Don't start preview pane process when `HWND` is `NULL`
- Terminate the preview pane process when setting parent fails
- Prevent leaking processes closing them when a new preview is requested
- Fixed an issue where PDF and SVG previews weren't updated after
restoring Explorer
- Added some error handling in the `UpdateWindowBounds` method of the
managed preview
- Terminate the preview pane when the `SetRect` event is received but
the parent `HWND` has become invalid
<!-- Describe how you validated the behavior. Add automated tests
wherever possible, but list manual validation steps taken as well -->
## Validation Steps Performed
- Manually tested all preview panes also using multiple Explorer windows
- Validated that when Explorer is minimized/restored the preview is
updated
- Tested the preview pane resize
- Validated that no window, no taskbar icon and no errors appear on both
repro steps
* [PreviewPane] Monaco Previewer: await initial position, size update + use recieved coordinates
* Fixing size and position issue for all file explorer previewers
* Move MarkdownPreviewHandler from WebBrowser to WebView2
* Disable context menu
Open links in default browser
* Update expect.txt
* Move SvgPreviewHandler from WebBrowser to WebView2
* Migrate SvgThumbnailProvider from WebBrowser to WebView2
* Migrate CustomControlTest to WebView2
Remove WebBrowser related stuff
* Update tests
* Revert GetThumbnail return value
Disable javascript dialogs in WebView2 for Svg thumbnail and preview
* expect.txt
* Increase timeout for Markdown tests
* Add sleeps
* Add zero check
* Added project template for common library
* Added reference to stylecop.json
* Fixed xml documetation file path for common project
* Added reference to stylecop.json
* Added COM interface interpolations to C#
* Changed namespace to Common
* Added xml doc to com interfaces
* Removed AnyCPU configuration from solution file
* Added Preview Hander and form User Control Implementation
* Fix stylecop warnings
* Added test control and handler
* Added Xaml description for preview handler
* Added Xml documenatation
* Updated the control to form
* Added registration and unregistration logic for the handler
* Moved the files in separate folder and fix PR comments
* updated the name of previewhandler class to base class
* Added the DoPreview to PreviewHandlerControl Interface
* Modified the Dopreview and Unload as virtual method
* Uncommented the DocumentText to help bug repro
* HTML Parsing Extension for preview pane markdown renderer (#1108)
* Added Extension for html post processing
* Added unit test poroject for preview pane
* Added pipline test and base test function
* Added Tests for extension
* Added tests for url slashes
* Added tests for url and figure caption
* Markdown preview pane (#1128)
* Added Extension for html post processing
* Added unit test poroject for preview pane
* Added pipline test and base test function
* Added Tests for extension
* Added handler and control for markdown
* Tests added
* Locally working version for markdown
* Working image relative url's in markdown
* Added CSS to preview display
* Updates CSS for code block
* Removed html file write comment in markdown control
* Updated assembly version and web browser control test
* Add Svg preview handler (#1129)
* Added a new project for Svg preview handler
* Added initial implementation of Svg Preview Handler
* Fixed output path
* Added Unit Test Project
* Added StreamWrapper and Update Svg Control
* Updated Svg Handler Guid
* Removed migration backup folder
* Removed Fluent Assertions NuGet
* Added Comments for StreamWrapper
* Removed the manual GC collect
* Added unit tests for Svg preview Handler
* Updated the xml doc for stream wrapper
* User/lamotile/add_powerpreviewsettings (#1075)
* Added powersettings to PowerToys Settings UI
* added settings library
* updated settings-web
* updated project oncfiguration
* updated project onfiguration
* updated project .sln file
* removed .etl file and added it to git-ignore
* separated the PowerPreviewModule into split classes .cpp and .h
* moved PowerPreviewModule implemnetations to .cpp file
* fixed StringTable formatter
* fixed spacing in resource.h
* added m_ to member varibales
* initiliaze m_isPreviewEnabled in the base class
* removed duplication of objects by using pass by refference and std::move
* made the getters const
* updated naming convention
* Split test calsses
* Add const string
* Replaced move with const string
* Made attributes private
* Made attributes private
* removed unused constructor
* Update resource.h
formatted resource.h
* Adding unit tests for preview handler common (#1156)
* Changed the name of the Common library to PreviewHandlerCommon
* Added unit tests project for PreviewHandlerCommon
* Updated ComInterop accessor type
* Added unit tests for PreviewHandlerbase
* Added tests for file and stream based handler
* Added unit tests for StreamWrapper
* Added form handler unit tests
* Added Unit tests for FormHandlerControl
* Added file header
* Add Powerpreview project
* Add spacing in sln file
* swapped string refferences (#1199)
* added registry methods and enable/disable preview handlers (#1230)
* added registry methods and enable/disable preview handlers
* formatted .rc file.
* formatted resource file
* formatted .rc file.
* formatted settings.cpp
* formatted settings.h
* formatted SVGPreviewSettingsClassTest.cpp
* Formatted MarkDownPreviewSettingsClassTest.cpp
* using wide strings
* formatted settings.h
* FileExplorerPreviewSettingsTest.cpp formatting
* fixed typo and formatting
* closing Registry and fixing typos
* formmarted code using ctrl+k+d
* fixed naming
* fixed typo
* changed if/else reverse order
* Markdown preview pane (#1220)
* Added rich text bar for information display
* Added infobar
* Added tests for extension and markdown control
* Added xml docstring for markdown preview handler control
* Updated assembly file for markdown preview pane
* Updated removal of script tag without modifying CSS
* Added info bar text string to resource file.
* Removed error with infobar display on first rendering
* Updated assembly version
* Remove script and image element from Svg (#1231)
* Added implementation to remove script and image tag
* Added Unit tests for SvgPreviewHandlerHelper
* Updated Unit tests for SvgPreviewControl
* Moved the hardcoded string to resource file
* Changed the LocalMachine to CurrentUser for preview handler registration
* Added unit tests for multiple blocked elements tags
* User/lamotile/update settings objects (#1263)
* added registry methods and enable/disable preview handlers
* formatted .rc file.
* formatted resource file
* formatted .rc file.
* formatted settings.cpp
* formatted settings.h
* formatted SVGPreviewSettingsClassTest.cpp
* Formatted MarkDownPreviewSettingsClassTest.cpp
* using wide strings
* formatted settings.h
* FileExplorerPreviewSettingsTest.cpp formatting
* fixed typo and formatting
* closing Registry and fixing typos
* formmarted code using ctrl+k+d
* fixed naming
* fixed typo
* changed if/else reverse order
* updated setiings_objects.cpp
* removed changes on files that are not part of this PR
* removed const ref on primative types
* updated pass by ref semantic and removed pas by reff on primative types
* fixed spaces in the commas
* fixed spaces in brackets
* Preview pane telemetry (#1299)
* Added telemetry base class and markdown telemetry class
* Updated docstring for telemetry event.
* Added telemetry to markdown for error
* Added try catch for markdown preview handler and display error bar
* Updated markdown telemetry to make event names global variable
* Updated parameter name to camel casing and telemetry event name naming.
* Corrected assembbly version for svg renderer
* Markdown Image files display (#1303)
* Added telemetry base class and markdown telemetry class
* Updated docstring for telemetry event.
* Added telemetry to markdown for error
* Added try catch for markdown preview handler and display error bar
* Updated markdown telemetry to make event names global variable
* Updated Markdown preview to display without vertical scrollbar and removed xml doc to html agility pack.
* Updated parameter name to camel casing and telemetry event name naming.
* Corrected assembbly version for svg renderer
* Removed duplicate function
* Add telemetry for Svg preview handler (#1314)
* Added telemetry events for Svg Preview Handler
* Added unit test in case preview handler throws
* Updated the Error event name
* Remove the not required return statement
* User/lamotile/add read me (#1332)
* add readme
* moved images
* re-added images'
* Fixed gramma
* Update figure number refference
* improve preview handler intergration (#1319)
* improve preview handler intergration
* Fixed typo
* updated typo
* updated enable() function
* updated is enabled()
* re-updated is enabled()
* added this-> key word
* (0.16) - Install preview handler with msix (#1339)
* Removed the registration logic from preview handlers
* Updated the output path
* Added logic to shim the activation of .net assembly
* Updated manifest file
* Fix the allowedsilenttakeover filed in manifest
* Updated the appxmanifest file
* Added AllowSilentDefaultTakeOver in manifest
* Fix returned error code by DllGetClassObject
* Moved the CLSID to a common header file
* Added info about where CLSID needs to be updated
* Added a .reg file for the Keys added in registry.dat
* Added comments for DllGetClassObject
* Svg Preview Handler block external component (#1368)
* Removed the registration logic from preview handlers
* Updated the output path
* Added logic to shim the activation of .net assembly
* Updated manifest file
* Fix the allowedsilenttakeover filed in manifest
* Updated the appxmanifest file
* Added AllowSilentDefaultTakeOver in manifest
* Fix returned error code by DllGetClassObject
* Moved the CLSID to a common header file
* Added info about where CLSID needs to be updated
* Added a .reg file for the Keys added in registry.dat
* Added comments for DllGetClassObject
* Extended WebBrowserSite for setting flags in DISPID_AMBIENT_DLCONTROL
* Added XML Documenatation
* Removed the logic for deleting image and script element from Svg
* Updated Unit Tests
* Updated typecast of uint
* Forwarded calls to Type.InvokeMember
* Resolve PR Comments
* Adding MSI Installation for Preview Handler (#1436)
* Updated wxs for including dll and registry keys for preview handlers
* Changed the casing for registry key
* Resolve PR Comments
* Added comments for File element
* Call GC on preview unloading (#1456)
* Call GC collect on preview unloading
* Added github issue link
* Update Web browser control for Markdown Previewer (#1464)
* Updated Webbrowser control
* Updated Unit tests
* Disabled Navigation for Svg Previewer
* Fix power preview unit tests (#1508)
* Decoupled registry interaction logic
* Updated File explorer settings
* Updated unit tests for PowerPreview Settings
* Added Asserrtion for Scope of registry key
* Updated the registry value to match with installation registry value
* Sync master settings.cpp
* Merge settings changes from PreviewHandlers
* Remove newline changes added into in example_powertoy\trace.cpp
* Chaned .net framework to 4.7.2
* Updated Csproj files to auto generate Assembly.info files
* Updated msi installer to use version variable for preview handlers assembly
* Removed the signing of Assembly and updated wxs to not include PublicKeyToken
* Updated the Path in Packaginglayout.xml to modules from Gac and the registry hive binary
* Regenerated updated JS and html file
* Resolve PR Comments
* Readded the wprp file
Co-authored-by: Divyansh <divyan@microsoft.com>
Co-authored-by: Divyansh <somm14divi@gmail.com>
Co-authored-by: Lavius Motileng <58791731+laviusmotileng-ms@users.noreply.github.com>