-
Notifications
You must be signed in to change notification settings - Fork 518
Expand file tree
/
Copy pathScenarioDedicatedWorker.cpp
More file actions
129 lines (106 loc) · 5.72 KB
/
ScenarioDedicatedWorker.cpp
File metadata and controls
129 lines (106 loc) · 5.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
// 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 "CheckFailure.h"
#include "ScenarioDedicatedWorker.h"
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)
{
wil::com_ptr<ICoreWebView2ExperimentalDedicatedWorker> dedicatedWorker;
CHECK_FAILURE(args->get_Worker(&dedicatedWorker));
wil::unique_cotaskmem_string scriptUri;
CHECK_FAILURE(dedicatedWorker->get_ScriptUri(&scriptUri));
std::wstring scriptUriStr(scriptUri.get());
m_appWindow->AsyncMessageBox(scriptUriStr, L"Dedicated worker is created");
// Subscribe to worker destroying event
dedicatedWorker->add_Destroying(
Callback<ICoreWebView2ExperimentalDedicatedWorkerDestroyingEventHandler>(
[this, scriptUriStr](
ICoreWebView2ExperimentalDedicatedWorker* sender,
IUnknown* args) -> HRESULT
{
/*Cleanup on worker destruction*/
m_appWindow->AsyncMessageBox(
scriptUriStr, L"Dedicated worker is destroyed");
return S_OK;
})
.Get(),
nullptr);
return S_OK;
})
.Get(),
&m_dedicatedWorkerCreatedToken));
//! [DedicatedWorkerCreated]
wil::com_ptr<ICoreWebView2_4> m_webView2_4;
m_appWindow->GetWebView()->QueryInterface(IID_PPV_ARGS(&m_webView2_4));
CHECK_FEATURE_RETURN_EMPTY(m_webView2_4);
CHECK_FAILURE(m_webView2_4->add_FrameCreated(
Callback<ICoreWebView2FrameCreatedEventHandler>(
[this](ICoreWebView2* sender, ICoreWebView2FrameCreatedEventArgs* args) -> HRESULT
{
wil::com_ptr<ICoreWebView2Frame> webviewFrame;
CHECK_FAILURE(args->get_Frame(&webviewFrame));
wil::com_ptr<ICoreWebView2ExperimentalFrame9> m_frameExperimental_9 =
webviewFrame.try_query<ICoreWebView2ExperimentalFrame9>();
m_frameExperimental_9->add_DedicatedWorkerCreated(
Callback<ICoreWebView2ExperimentalFrameDedicatedWorkerCreatedEventHandler>(
[this](
ICoreWebView2Frame* sender,
ICoreWebView2ExperimentalDedicatedWorkerCreatedEventArgs* args)
-> HRESULT
{
// frameInfo that created the worker.
wil::com_ptr<ICoreWebView2FrameInfo> frameInfo;
CHECK_FAILURE(args->get_OriginalSourceFrameInfo(&frameInfo));
wil::com_ptr<ICoreWebView2FrameInfo2> frameInfo2;
CHECK_FAILURE(frameInfo->QueryInterface(IID_PPV_ARGS(&frameInfo2)));
wil::unique_cotaskmem_string frameSource;
CHECK_FAILURE(frameInfo->get_Source(&frameSource));
UINT32 source_frameId;
CHECK_FAILURE(frameInfo2->get_FrameId(&source_frameId));
wil::com_ptr<ICoreWebView2ExperimentalDedicatedWorker>
dedicatedWorker;
CHECK_FAILURE(args->get_Worker(&dedicatedWorker));
wil::unique_cotaskmem_string scriptUri;
CHECK_FAILURE(dedicatedWorker->get_ScriptUri(&scriptUri));
std::wstring scriptUriStr(scriptUri.get());
m_appWindow->AsyncMessageBox(
scriptUriStr, L"Dedicated worker is created");
// Subscribe to worker destroying event
dedicatedWorker->add_Destroying(
Callback<
ICoreWebView2ExperimentalDedicatedWorkerDestroyingEventHandler>(
[this, scriptUriStr](
ICoreWebView2ExperimentalDedicatedWorker* sender,
IUnknown* args) -> HRESULT
{
/*Cleanup on worker destruction*/
m_appWindow->AsyncMessageBox(
scriptUriStr, L"Dedicated worker is destroyed");
return S_OK;
})
.Get(),
nullptr);
return S_OK;
})
.Get(),
nullptr);
return S_OK;
})
.Get(),
nullptr));
}
ScenarioDedicatedWorker::~ScenarioDedicatedWorker()
{
m_webView2Experimental_30->remove_DedicatedWorkerCreated(m_dedicatedWorkerCreatedToken);
}