Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions SampleApps/WebView2APISample/AppWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2422,12 +2422,13 @@ void AppWindow::RegisterEventHandlers()

//! [WindowCloseRequested]
// Register a handler for the WindowCloseRequested event.
// This handler will close the app window if it is not the main window.
// This handler will close the app window if it is not the main window,
// or if it is a WCO window (where the close button fires this event).
CHECK_FAILURE(m_webView->add_WindowCloseRequested(
Callback<ICoreWebView2WindowCloseRequestedEventHandler>(
[this](ICoreWebView2* sender, IUnknown* args)
{
if (m_isPopupWindow)
if (m_isPopupWindow || m_webviewOption.useWco)
{
CloseAppWindow();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ struct ClientCertificate
PCWSTR CertificateKind;
};

// Constructing this struct will show a client certificate selection dialog and return when
// the user dismisses it. If the user clicks the OK button, confirmed will be true with the
// Constructing this struct will show a client certificate selection dialog and return when
// the user dismisses it. If the user clicks the OK button, confirmed will be true with the
// selected certificate.
struct ClientCertificateSelectionDialog
{
Expand Down
42 changes: 18 additions & 24 deletions SampleApps/WebView2APISample/ScenarioDedicatedWorker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,14 @@ using namespace Microsoft::WRL;
ScenarioDedicatedWorker::ScenarioDedicatedWorker(AppWindow* appWindow) : m_appWindow(appWindow)
{
//! [DedicatedWorkerCreated]
m_appWindow->GetWebView()->QueryInterface(IID_PPV_ARGS(&m_webView2Experimental_30));
CHECK_FEATURE_RETURN_EMPTY(m_webView2Experimental_30);

CHECK_FAILURE(m_webView2Experimental_30->add_DedicatedWorkerCreated(
Callback<ICoreWebView2ExperimentalDedicatedWorkerCreatedEventHandler>(
[this](
ICoreWebView2* sender,
ICoreWebView2ExperimentalDedicatedWorkerCreatedEventArgs* args)
m_appWindow->GetWebView()->QueryInterface(IID_PPV_ARGS(&m_webView2_29));
CHECK_FEATURE_RETURN_EMPTY(m_webView2_29);

CHECK_FAILURE(m_webView2_29->add_DedicatedWorkerCreated(
Callback<ICoreWebView2DedicatedWorkerCreatedEventHandler>(
[this](ICoreWebView2* sender, ICoreWebView2DedicatedWorkerCreatedEventArgs* args)
{
wil::com_ptr<ICoreWebView2ExperimentalDedicatedWorker> dedicatedWorker;
wil::com_ptr<ICoreWebView2DedicatedWorker> dedicatedWorker;
CHECK_FAILURE(args->get_Worker(&dedicatedWorker));

wil::unique_cotaskmem_string scriptUri;
Expand All @@ -32,10 +30,9 @@ ScenarioDedicatedWorker::ScenarioDedicatedWorker(AppWindow* appWindow) : m_appWi

// Subscribe to worker destroying event
dedicatedWorker->add_Destroying(
Callback<ICoreWebView2ExperimentalDedicatedWorkerDestroyingEventHandler>(
Callback<ICoreWebView2DedicatedWorkerDestroyingEventHandler>(
[this, scriptUriStr](
ICoreWebView2ExperimentalDedicatedWorker* sender,
IUnknown* args) -> HRESULT
ICoreWebView2DedicatedWorker* sender, IUnknown* args) -> HRESULT
{
/*Cleanup on worker destruction*/
m_appWindow->AsyncMessageBox(
Expand All @@ -62,15 +59,14 @@ ScenarioDedicatedWorker::ScenarioDedicatedWorker(AppWindow* appWindow) : m_appWi
wil::com_ptr<ICoreWebView2Frame> webviewFrame;
CHECK_FAILURE(args->get_Frame(&webviewFrame));

wil::com_ptr<ICoreWebView2ExperimentalFrame9> m_frameExperimental_9 =
webviewFrame.try_query<ICoreWebView2ExperimentalFrame9>();
wil::com_ptr<ICoreWebView2Frame8> m_frame8 =
webviewFrame.try_query<ICoreWebView2Frame8>();

m_frameExperimental_9->add_DedicatedWorkerCreated(
Callback<ICoreWebView2ExperimentalFrameDedicatedWorkerCreatedEventHandler>(
m_frame8->add_DedicatedWorkerCreated(
Callback<ICoreWebView2FrameDedicatedWorkerCreatedEventHandler>(
[this](
ICoreWebView2Frame* sender,
ICoreWebView2ExperimentalDedicatedWorkerCreatedEventArgs* args)
-> HRESULT
ICoreWebView2DedicatedWorkerCreatedEventArgs* args) -> HRESULT
{
// frameInfo that created the worker.
wil::com_ptr<ICoreWebView2FrameInfo> frameInfo;
Expand All @@ -85,8 +81,7 @@ ScenarioDedicatedWorker::ScenarioDedicatedWorker(AppWindow* appWindow) : m_appWi
UINT32 source_frameId;
CHECK_FAILURE(frameInfo2->get_FrameId(&source_frameId));

wil::com_ptr<ICoreWebView2ExperimentalDedicatedWorker>
dedicatedWorker;
wil::com_ptr<ICoreWebView2DedicatedWorker> dedicatedWorker;
CHECK_FAILURE(args->get_Worker(&dedicatedWorker));

wil::unique_cotaskmem_string scriptUri;
Expand All @@ -98,10 +93,9 @@ ScenarioDedicatedWorker::ScenarioDedicatedWorker(AppWindow* appWindow) : m_appWi

// Subscribe to worker destroying event
dedicatedWorker->add_Destroying(
Callback<
ICoreWebView2ExperimentalDedicatedWorkerDestroyingEventHandler>(
Callback<ICoreWebView2DedicatedWorkerDestroyingEventHandler>(
[this, scriptUriStr](
ICoreWebView2ExperimentalDedicatedWorker* sender,
ICoreWebView2DedicatedWorker* sender,
IUnknown* args) -> HRESULT
{
/*Cleanup on worker destruction*/
Expand All @@ -125,5 +119,5 @@ ScenarioDedicatedWorker::ScenarioDedicatedWorker(AppWindow* appWindow) : m_appWi

ScenarioDedicatedWorker::~ScenarioDedicatedWorker()
{
m_webView2Experimental_30->remove_DedicatedWorkerCreated(m_dedicatedWorkerCreatedToken);
m_webView2_29->remove_DedicatedWorkerCreated(m_dedicatedWorkerCreatedToken);
}
2 changes: 1 addition & 1 deletion SampleApps/WebView2APISample/ScenarioDedicatedWorker.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,6 @@ class ScenarioDedicatedWorker : public ComponentBase

private:
AppWindow* m_appWindow;
wil::com_ptr<ICoreWebView2Experimental30> m_webView2Experimental_30;
wil::com_ptr<ICoreWebView2_29> m_webView2_29;
EventRegistrationToken m_dedicatedWorkerCreatedToken = {};
};
24 changes: 11 additions & 13 deletions SampleApps/WebView2APISample/ScenarioDedicatedWorkerPostMessage.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,14 @@ ScenarioDedicatedWorkerPostMessage::ScenarioDedicatedWorkerPostMessage(AppWindow
: m_appWindow(appWindow)
{
//! [DedicatedWorkerCreated]
m_appWindow->GetWebView()->QueryInterface(IID_PPV_ARGS(&m_webView2Experimental_30));
CHECK_FEATURE_RETURN_EMPTY(m_webView2Experimental_30);
m_appWindow->GetWebView()->QueryInterface(IID_PPV_ARGS(&m_webView2_29));
CHECK_FEATURE_RETURN_EMPTY(m_webView2_29);

CHECK_FAILURE(m_webView2Experimental_30->add_DedicatedWorkerCreated(
Callback<ICoreWebView2ExperimentalDedicatedWorkerCreatedEventHandler>(
[this](
ICoreWebView2* sender,
ICoreWebView2ExperimentalDedicatedWorkerCreatedEventArgs* args)
CHECK_FAILURE(m_webView2_29->add_DedicatedWorkerCreated(
Callback<ICoreWebView2DedicatedWorkerCreatedEventHandler>(
[this](ICoreWebView2* sender, ICoreWebView2DedicatedWorkerCreatedEventArgs* args)
{
wil::com_ptr<ICoreWebView2ExperimentalDedicatedWorker> dedicatedWorker;
wil::com_ptr<ICoreWebView2DedicatedWorker> dedicatedWorker;
CHECK_FAILURE(args->get_Worker(&dedicatedWorker));

wil::unique_cotaskmem_string scriptUri;
Expand Down Expand Up @@ -66,13 +64,13 @@ ScenarioDedicatedWorkerPostMessage::ScenarioDedicatedWorkerPostMessage(AppWindow
}

void ScenarioDedicatedWorkerPostMessage::SetupEventsOnDedicatedWorker(
wil::com_ptr<ICoreWebView2ExperimentalDedicatedWorker> dedicatedWorker)
wil::com_ptr<ICoreWebView2DedicatedWorker> dedicatedWorker)
{
//! [WebMessageReceived]
dedicatedWorker->add_WebMessageReceived(
Callback<ICoreWebView2ExperimentalDedicatedWorkerWebMessageReceivedEventHandler>(
Callback<ICoreWebView2DedicatedWorkerWebMessageReceivedEventHandler>(
[this](
ICoreWebView2ExperimentalDedicatedWorker* sender,
ICoreWebView2DedicatedWorker* sender,
ICoreWebView2WebMessageReceivedEventArgs* args) -> HRESULT
{
wil::unique_cotaskmem_string scriptUri;
Expand All @@ -96,7 +94,7 @@ void ScenarioDedicatedWorkerPostMessage::SetupEventsOnDedicatedWorker(
}

void ScenarioDedicatedWorkerPostMessage::ComputeWithDedicatedWorker(
wil::com_ptr<ICoreWebView2ExperimentalDedicatedWorker> dedicatedWorker)
wil::com_ptr<ICoreWebView2DedicatedWorker> dedicatedWorker)
{
//! [PostWebMessageAsJson]
// Do not block from event handler
Expand All @@ -118,6 +116,6 @@ void ScenarioDedicatedWorkerPostMessage::ComputeWithDedicatedWorker(

ScenarioDedicatedWorkerPostMessage::~ScenarioDedicatedWorkerPostMessage()
{
m_webView2Experimental_30->remove_DedicatedWorkerCreated(m_dedicatedWorkerCreatedToken);
m_webView2_29->remove_DedicatedWorkerCreated(m_dedicatedWorkerCreatedToken);
m_appWindow->GetWebView()->remove_ContentLoading(m_contentLoadingToken);
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,11 @@ class ScenarioDedicatedWorkerPostMessage : public ComponentBase

private:
void SetupEventsOnDedicatedWorker(
wil::com_ptr<ICoreWebView2ExperimentalDedicatedWorker> dedicatedWorker);
void ComputeWithDedicatedWorker(
wil::com_ptr<ICoreWebView2ExperimentalDedicatedWorker> dedicatedWorker);
wil::com_ptr<ICoreWebView2DedicatedWorker> dedicatedWorker);
void ComputeWithDedicatedWorker(wil::com_ptr<ICoreWebView2DedicatedWorker> dedicatedWorker);

AppWindow* m_appWindow;
wil::com_ptr<ICoreWebView2Experimental30> m_webView2Experimental_30;
wil::com_ptr<ICoreWebView2_29> m_webView2_29;
std::wstring m_sampleUri;
EventRegistrationToken m_contentLoadingToken = {};
EventRegistrationToken m_dedicatedWorkerCreatedToken = {};
Expand Down
60 changes: 26 additions & 34 deletions SampleApps/WebView2APISample/ScenarioServiceWorkerManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,9 @@ void ScenarioServiceWorkerManager::CreateServiceWorkerManager()

wil::com_ptr<ICoreWebView2Profile> webView2Profile;
CHECK_FAILURE(webView2_13->get_Profile(&webView2Profile));
auto webViewExperimentalProfile13 =
webView2Profile.try_query<ICoreWebView2ExperimentalProfile13>();
CHECK_FEATURE_RETURN_EMPTY(webViewExperimentalProfile13);
CHECK_FAILURE(
webViewExperimentalProfile13->get_ServiceWorkerManager(&m_serviceWorkerManager));
auto webViewProfile9 = webView2Profile.try_query<ICoreWebView2Profile9>();
CHECK_FEATURE_RETURN_EMPTY(webViewProfile9);
CHECK_FAILURE(webViewProfile9->get_ServiceWorkerManager(&m_serviceWorkerManager));
//! [ServiceWorkerManager]
}

Expand All @@ -44,13 +42,12 @@ void ScenarioServiceWorkerManager::SetupEventsOnWebview()

//! [ServiceWorkerRegistered]
CHECK_FAILURE(m_serviceWorkerManager->add_ServiceWorkerRegistered(
Callback<ICoreWebView2ExperimentalServiceWorkerRegisteredEventHandler>(
Callback<ICoreWebView2ServiceWorkerRegisteredEventHandler>(
[this](
ICoreWebView2ExperimentalServiceWorkerManager* sender,
ICoreWebView2ExperimentalServiceWorkerRegisteredEventArgs* args)
ICoreWebView2ServiceWorkerManager* sender,
ICoreWebView2ServiceWorkerRegisteredEventArgs* args)
{
wil::com_ptr<ICoreWebView2ExperimentalServiceWorkerRegistration>
serviceWorkerRegistration;
wil::com_ptr<ICoreWebView2ServiceWorkerRegistration> serviceWorkerRegistration;
CHECK_FAILURE(args->get_ServiceWorkerRegistration(&serviceWorkerRegistration));

if (serviceWorkerRegistration)
Expand All @@ -69,9 +66,9 @@ void ScenarioServiceWorkerManager::SetupEventsOnWebview()
// Subscribe to worker registration unregistering event
serviceWorkerRegistration->add_Unregistering(
Callback<
ICoreWebView2ExperimentalServiceWorkerRegistrationUnregisteringEventHandler>(
ICoreWebView2ServiceWorkerRegistrationUnregisteringEventHandler>(
[this, scopeUriStr](
ICoreWebView2ExperimentalServiceWorkerRegistration* sender,
ICoreWebView2ServiceWorkerRegistration* sender,
IUnknown* args) -> HRESULT
{
/*Cleanup on worker registration destruction*/
Expand All @@ -82,7 +79,7 @@ void ScenarioServiceWorkerManager::SetupEventsOnWebview()
.Get(),
nullptr);

wil::com_ptr<ICoreWebView2ExperimentalServiceWorker> serviceWorker;
wil::com_ptr<ICoreWebView2ServiceWorker> serviceWorker;
CHECK_FAILURE(
serviceWorkerRegistration->get_ActiveServiceWorker(&serviceWorker));

Expand All @@ -94,10 +91,9 @@ void ScenarioServiceWorkerManager::SetupEventsOnWebview()

// Subscribe to worker destroying event
serviceWorker->add_Destroying(
Callback<
ICoreWebView2ExperimentalServiceWorkerDestroyingEventHandler>(
Callback<ICoreWebView2ServiceWorkerDestroyingEventHandler>(
[this, scriptUriStr](
ICoreWebView2ExperimentalServiceWorker* sender,
ICoreWebView2ServiceWorker* sender,
IUnknown* args) -> HRESULT
{
/*Cleanup on worker destruction*/
Expand All @@ -111,15 +107,13 @@ void ScenarioServiceWorkerManager::SetupEventsOnWebview()
else
{
CHECK_FAILURE(serviceWorkerRegistration->add_ServiceWorkerActivated(
Callback<
ICoreWebView2ExperimentalServiceWorkerActivatedEventHandler>(
Callback<ICoreWebView2ServiceWorkerActivatedEventHandler>(
[this](
ICoreWebView2ExperimentalServiceWorkerRegistration* sender,
ICoreWebView2ExperimentalServiceWorkerActivatedEventArgs*
args) -> HRESULT
ICoreWebView2ServiceWorkerRegistration* sender,
ICoreWebView2ServiceWorkerActivatedEventArgs* args)
-> HRESULT
{
wil::com_ptr<ICoreWebView2ExperimentalServiceWorker>
serviceWorker;
wil::com_ptr<ICoreWebView2ServiceWorker> serviceWorker;
CHECK_FAILURE(
args->get_ActiveServiceWorker(&serviceWorker));
wil::unique_cotaskmem_string scriptUri;
Expand All @@ -129,9 +123,9 @@ void ScenarioServiceWorkerManager::SetupEventsOnWebview()
// Subscribe to worker destroying event
serviceWorker->add_Destroying(
Callback<
ICoreWebView2ExperimentalServiceWorkerDestroyingEventHandler>(
ICoreWebView2ServiceWorkerDestroyingEventHandler>(
[this, scriptUriStr](
ICoreWebView2ExperimentalServiceWorker* sender,
ICoreWebView2ServiceWorker* sender,
IUnknown* args) -> HRESULT
{
/*Cleanup on worker destruction*/
Expand Down Expand Up @@ -166,9 +160,9 @@ void ScenarioServiceWorkerManager::GetAllServiceWorkerRegistrations()
{
CHECK_FEATURE_RETURN_EMPTY(m_serviceWorkerManager);
CHECK_FAILURE(m_serviceWorkerManager->GetServiceWorkerRegistrations(
Callback<ICoreWebView2ExperimentalGetServiceWorkerRegistrationsCompletedHandler>(
Callback<ICoreWebView2GetServiceWorkerRegistrationsCompletedHandler>(
[this](
HRESULT error, ICoreWebView2ExperimentalServiceWorkerRegistrationCollectionView*
HRESULT error, ICoreWebView2ServiceWorkerRegistrationCollectionView*
workerRegistrationCollection) -> HRESULT
{
CHECK_FAILURE(error);
Expand All @@ -181,8 +175,7 @@ void ScenarioServiceWorkerManager::GetAllServiceWorkerRegistrations()

for (UINT32 i = 0; i < workersCount; i++)
{
ComPtr<ICoreWebView2ExperimentalServiceWorkerRegistration>
serviceWorkerRegistration;
ComPtr<ICoreWebView2ServiceWorkerRegistration> serviceWorkerRegistration;
CHECK_FAILURE(workerRegistrationCollection->GetValueAtIndex(
i, &serviceWorkerRegistration));

Expand Down Expand Up @@ -221,11 +214,10 @@ void ScenarioServiceWorkerManager::GetServiceWorkerRegisteredForScope()
std::wstring scope = dialog.input.c_str();
CHECK_FAILURE(m_serviceWorkerManager->GetServiceWorkerRegistrationsForScope(
scope.c_str(),
Callback<ICoreWebView2ExperimentalGetServiceWorkerRegistrationsCompletedHandler>(
Callback<ICoreWebView2GetServiceWorkerRegistrationsCompletedHandler>(
[this, scope](
HRESULT error,
ICoreWebView2ExperimentalServiceWorkerRegistrationCollectionView*
workerRegistrationCollection) -> HRESULT
HRESULT error, ICoreWebView2ServiceWorkerRegistrationCollectionView*
workerRegistrationCollection) -> HRESULT
{
CHECK_FAILURE(error);
UINT32 workersCount = 0;
Expand All @@ -237,7 +229,7 @@ void ScenarioServiceWorkerManager::GetServiceWorkerRegisteredForScope()

for (UINT32 i = 0; i < workersCount; i++)
{
ComPtr<ICoreWebView2ExperimentalServiceWorkerRegistration>
ComPtr<ICoreWebView2ServiceWorkerRegistration>
serviceWorkerRegistration;
CHECK_FAILURE(workerRegistrationCollection->GetValueAtIndex(
i, &serviceWorkerRegistration));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,6 @@ class ScenarioServiceWorkerManager : public ComponentBase

AppWindow* m_appWindow;
wil::com_ptr<ICoreWebView2> m_webView;
wil::com_ptr<ICoreWebView2ExperimentalServiceWorkerManager> m_serviceWorkerManager;
wil::com_ptr<ICoreWebView2ServiceWorkerManager> m_serviceWorkerManager;
EventRegistrationToken m_serviceWorkerRegisteredToken = {};
};
Loading
Loading