From 7d89d80702cf752ab8d9de769d916cd3a5efa83f Mon Sep 17 00:00:00 2001 From: WebView2 Github Bot Date: Wed, 28 Feb 2024 16:39:54 +0000 Subject: [PATCH 1/2] Updates for Win32, WPF, WinForms, UWP and WinUI3 sample apps from 124.0.2432.0 --- SampleApps/WebView2APISample/AppWindow.cpp | 1 + .../WebView2APISample/ProcessComponent.cpp | 2 +- .../ScenarioFileSystemHandleShare.cpp | 73 ++++++++++++++ .../ScenarioFileSystemHandleShare.h | 22 ++++ .../WebView2APISample.vcxproj | 10 +- .../assets/ScenarioFileSystemHandleShare.html | 94 ++++++++++++++++++ SampleApps/WebView2APISample/small.ico | Bin 0 -> 46227 bytes SampleApps/WebView2WpfBrowser/MainWindow.xaml | 2 + .../WebView2WpfBrowser/MainWindow.xaml.cs | 17 ++++ 9 files changed, 218 insertions(+), 3 deletions(-) create mode 100644 SampleApps/WebView2APISample/ScenarioFileSystemHandleShare.cpp create mode 100644 SampleApps/WebView2APISample/ScenarioFileSystemHandleShare.h create mode 100644 SampleApps/WebView2APISample/assets/ScenarioFileSystemHandleShare.html create mode 100644 SampleApps/WebView2APISample/small.ico diff --git a/SampleApps/WebView2APISample/AppWindow.cpp b/SampleApps/WebView2APISample/AppWindow.cpp index 7fceeb78..dbb2701d 100644 --- a/SampleApps/WebView2APISample/AppWindow.cpp +++ b/SampleApps/WebView2APISample/AppWindow.cpp @@ -43,6 +43,7 @@ #include "ScenarioNonClientRegionSupport.h" #include "ScenarioNotificationReceived.h" #include "ScenarioPermissionManagement.h" +#include "ScenarioFileSystemHandleShare.h" #include "ScenarioSharedBuffer.h" #include "ScenarioSharedWorkerWRR.h" #include "ScenarioVirtualHostMappingForPopUpWindow.h" diff --git a/SampleApps/WebView2APISample/ProcessComponent.cpp b/SampleApps/WebView2APISample/ProcessComponent.cpp index 72dda647..a5b9f85b 100644 --- a/SampleApps/WebView2APISample/ProcessComponent.cpp +++ b/SampleApps/WebView2APISample/ProcessComponent.cpp @@ -107,7 +107,7 @@ ProcessComponent::ProcessComponent(AppWindow* appWindow) CHECK_FAILURE(args2->get_ExitCode(&exitCode)); auto argFailedModule = - args.try_query(); + args.try_query(); if (argFailedModule) { CHECK_FAILURE( diff --git a/SampleApps/WebView2APISample/ScenarioFileSystemHandleShare.cpp b/SampleApps/WebView2APISample/ScenarioFileSystemHandleShare.cpp new file mode 100644 index 00000000..4dc33c24 --- /dev/null +++ b/SampleApps/WebView2APISample/ScenarioFileSystemHandleShare.cpp @@ -0,0 +1,73 @@ +// 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. +#include "stdafx.h" + +#include "ScenarioFileSystemHandleShare.h" + +#include "AppWindow.h" +#include "CheckFailure.h" + +#include + +using namespace Microsoft::WRL; + +static constexpr WCHAR c_samplePath[] = L"ScenarioFileSystemHandleShare.html"; + +extern wil::unique_bstr GetDomainOfUri(PWSTR uri); + +ScenarioFileSystemHandleShare::ScenarioFileSystemHandleShare(AppWindow* appWindow) + : m_appWindow(appWindow) +{ + m_webView = m_appWindow->GetWebView(); + + CHECK_FAILURE(m_webView->Navigate(m_appWindow->GetLocalUri(c_samplePath).c_str())); + + CHECK_FAILURE(m_webView->add_NavigationCompleted( + Callback( + [this, appWindow]( + ICoreWebView2* sender, + ICoreWebView2NavigationCompletedEventArgs* args) -> HRESULT + { + wil::com_ptr webview24 = + m_webView.try_query(); + CHECK_FEATURE_RETURN_HRESULT(webview24); + wil::com_ptr environment = + appWindow->GetWebViewEnvironment(); + wil::com_ptr environment_staging14 = + environment.try_query(); + CHECK_FEATURE_RETURN_HRESULT(environment_staging14); + wil::com_ptr rootHandle; + CHECK_FAILURE(environment_staging14->CreateWebFileSystemDirectoryHandle( + L"C:\\", COREWEBVIEW2_FILE_SYSTEM_HANDLE_PERMISSION_READ_ONLY, + &rootHandle)); + wil::com_ptr webObjectCollection; + IUnknown* webObjects[] = {rootHandle.get()}; + CHECK_FAILURE(environment_staging14->CreateObjectCollection( + ARRAYSIZE(webObjects), webObjects, &webObjectCollection)); + wil::com_ptr webObjectCollectionView = + webObjectCollection.try_query(); + wil::unique_cotaskmem_string source; + CHECK_FAILURE(m_webView->get_Source(&source)); + + static const wchar_t* expectedDomain = L"appassets.example"; + wil::unique_bstr sourceDomain = GetDomainOfUri(source.get()); + + // Check the source to ensure the message is sent to the correct target content. + if (std::wstring(expectedDomain) == sourceDomain.get()) + { + CHECK_FAILURE(webview24->PostWebMessageAsJsonWithAdditionalObjects( + L"{ \"messageType\" : \"RootDirectoryHandle\" }", + webObjectCollectionView.get())); + } + + return S_OK; + }) + .Get(), + &m_navigationCompletedToken)); +} + +ScenarioFileSystemHandleShare::~ScenarioFileSystemHandleShare() +{ + CHECK_FAILURE(m_webView->remove_WebMessageReceived(m_navigationCompletedToken)); +} \ No newline at end of file diff --git a/SampleApps/WebView2APISample/ScenarioFileSystemHandleShare.h b/SampleApps/WebView2APISample/ScenarioFileSystemHandleShare.h new file mode 100644 index 00000000..7e986148 --- /dev/null +++ b/SampleApps/WebView2APISample/ScenarioFileSystemHandleShare.h @@ -0,0 +1,22 @@ +// 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. + +#pragma once +#include "stdafx.h" + +#include "AppWindow.h" +#include "ComponentBase.h" + +class ScenarioFileSystemHandleShare : public ComponentBase +{ +public: + ScenarioFileSystemHandleShare(AppWindow* appWindow); + ~ScenarioFileSystemHandleShare() override; + +private: + EventRegistrationToken m_navigationCompletedToken = {}; + + AppWindow* m_appWindow = nullptr; + wil::com_ptr m_webView = nullptr; +}; \ No newline at end of file diff --git a/SampleApps/WebView2APISample/WebView2APISample.vcxproj b/SampleApps/WebView2APISample/WebView2APISample.vcxproj index 64df7948..af03ab7e 100644 --- a/SampleApps/WebView2APISample/WebView2APISample.vcxproj +++ b/SampleApps/WebView2APISample/WebView2APISample.vcxproj @@ -1,4 +1,4 @@ - + @@ -237,6 +237,7 @@ + @@ -287,6 +288,7 @@ + @@ -320,6 +322,7 @@ + @@ -354,6 +357,9 @@ $(OutDir)\assets + + $(OutDir)\assets + $(OutDir)\assets @@ -461,4 +467,4 @@ - + \ No newline at end of file diff --git a/SampleApps/WebView2APISample/assets/ScenarioFileSystemHandleShare.html b/SampleApps/WebView2APISample/assets/ScenarioFileSystemHandleShare.html new file mode 100644 index 00000000..2e776bd6 --- /dev/null +++ b/SampleApps/WebView2APISample/assets/ScenarioFileSystemHandleShare.html @@ -0,0 +1,94 @@ + + + + + + + + +

File System Explorer

+ +
+
    +
    + + + + \ No newline at end of file diff --git a/SampleApps/WebView2APISample/small.ico b/SampleApps/WebView2APISample/small.ico new file mode 100644 index 0000000000000000000000000000000000000000..b3ec03bd617f32e58128fa977fd6ac9605124f4b GIT binary patch literal 46227 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 + @@ -225,6 +226,7 @@ found in the LICENSE file. + diff --git a/SampleApps/WebView2WpfBrowser/MainWindow.xaml.cs b/SampleApps/WebView2WpfBrowser/MainWindow.xaml.cs index 95129b52..5c302eb0 100644 --- a/SampleApps/WebView2WpfBrowser/MainWindow.xaml.cs +++ b/SampleApps/WebView2WpfBrowser/MainWindow.xaml.cs @@ -3317,7 +3317,24 @@ string GetJSONStringField(string jsonMessage, string fieldName) void FileExplorerExecuted(object target, ExecutedRoutedEventArgs e) { +#if USE_WEBVIEW2_EXPERIMENTAL + webView.CoreWebView2.NavigationCompleted += delegate ( + object webview2, CoreWebView2NavigationCompletedEventArgs args) + { + if (args.IsSuccess && webView.CoreWebView2.Source.Equals("https://appassets.example/ScenarioFileSystemHandleShare.html")) + { + webView.CoreWebView2.PostWebMessageAsJsonWithAdditionalObjects("{ \"messageType\" : \"RootDirectoryHandle\" }", new List() + { + webView.CoreWebView2.Environment.CreateWebFileSystemDirectoryHandle( + "C:\\", + CoreWebView2FileSystemHandlePermission.ReadOnly) + }); + } + }; + webView.Source = new Uri("https://appassets.example/ScenarioFileSystemHandleShare.html"); +#endif } + void ThrottlingControlExecuted(object target, ExecutedRoutedEventArgs e) { } From ff5c2e1302d2a87dbbeb46baf143c2760a837d95 Mon Sep 17 00:00:00 2001 From: WebView2 Github Bot Date: Wed, 28 Feb 2024 16:41:09 +0000 Subject: [PATCH 2/2] Updated package version for Win32, WPF and WinForms sample apps to 1.0.2432-prerelease --- SampleApps/WebView2APISample/WebView2APISample.vcxproj | 8 ++++---- SampleApps/WebView2APISample/packages.config | 2 +- .../WebView2WindowsFormsBrowser.csproj | 2 +- SampleApps/WebView2WpfBrowser/WebView2WpfBrowser.csproj | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/SampleApps/WebView2APISample/WebView2APISample.vcxproj b/SampleApps/WebView2APISample/WebView2APISample.vcxproj index af03ab7e..1884a2c9 100644 --- a/SampleApps/WebView2APISample/WebView2APISample.vcxproj +++ b/SampleApps/WebView2APISample/WebView2APISample.vcxproj @@ -1,4 +1,4 @@ - + @@ -458,13 +458,13 @@ - + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - + - \ No newline at end of file + diff --git a/SampleApps/WebView2APISample/packages.config b/SampleApps/WebView2APISample/packages.config index a1f4e011..afc7b144 100644 --- a/SampleApps/WebView2APISample/packages.config +++ b/SampleApps/WebView2APISample/packages.config @@ -1,5 +1,5 @@  - + \ No newline at end of file diff --git a/SampleApps/WebView2WindowsFormsBrowser/WebView2WindowsFormsBrowser.csproj b/SampleApps/WebView2WindowsFormsBrowser/WebView2WindowsFormsBrowser.csproj index f9cb9e12..fc57ee20 100644 --- a/SampleApps/WebView2WindowsFormsBrowser/WebView2WindowsFormsBrowser.csproj +++ b/SampleApps/WebView2WindowsFormsBrowser/WebView2WindowsFormsBrowser.csproj @@ -25,7 +25,7 @@ AnyCPU - + diff --git a/SampleApps/WebView2WpfBrowser/WebView2WpfBrowser.csproj b/SampleApps/WebView2WpfBrowser/WebView2WpfBrowser.csproj index cdc97525..f0562a98 100644 --- a/SampleApps/WebView2WpfBrowser/WebView2WpfBrowser.csproj +++ b/SampleApps/WebView2WpfBrowser/WebView2WpfBrowser.csproj @@ -61,7 +61,7 @@ - +