Skip to content

Commit ff6beb5

Browse files
authored
Merge pull request #280 from MicrosoftEdge/smoketest/1.0.3415-testing
Smoketest/1.0.3415 testing
2 parents b48eac5 + ac95b08 commit ff6beb5

24 files changed

+1530
-80
lines changed

SampleApps/WebView2APISample/AppWindow.cpp

Lines changed: 179 additions & 69 deletions
Large diffs are not rendered by default.

SampleApps/WebView2APISample/AppWindow.h

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,17 +39,20 @@ struct WebViewCreateOption
3939
WebViewCreateEntry entry = WebViewCreateEntry::OTHER;
4040
bool useOSRegion = false;
4141
std::optional<COREWEBVIEW2_COLOR> bg_color;
42+
bool useWco = false;
4243
WebViewCreateOption()
4344
{
4445
}
4546
WebViewCreateOption(
4647
const std::wstring& profile_, bool inPrivate, const std::wstring& downloadPath,
47-
const std::wstring& scriptLocale_, WebViewCreateEntry entry_, bool useOSRegion_
48-
)
48+
const std::wstring& scriptLocale_, WebViewCreateEntry entry_, bool useOSRegion_,
49+
bool useWco_ = false, const std::optional<COREWEBVIEW2_COLOR>& bg_color_ = std::nullopt)
4950
: profile(profile_), isInPrivate(inPrivate), downloadPath(downloadPath),
50-
scriptLocale(scriptLocale_), entry(entry_), useOSRegion(useOSRegion_)
51+
scriptLocale(scriptLocale_), entry(entry_), useOSRegion(useOSRegion_),
52+
useWco(useWco_), bg_color(bg_color_)
5153
{
5254
}
55+
5356
WebViewCreateOption(const WebViewCreateOption& opt)
5457
{
5558
profile = opt.profile;
@@ -58,6 +61,8 @@ struct WebViewCreateOption
5861
scriptLocale = opt.scriptLocale;
5962
entry = opt.entry;
6063
useOSRegion = opt.useOSRegion;
64+
useWco = opt.useWco;
65+
bg_color = opt.bg_color;
6166
}
6267
void PopupDialog(AppWindow* app);
6368
};
@@ -222,11 +227,11 @@ class AppWindow
222227
bool ShouldMatchWord();
223228
bool SuppressDefaultFindDialog();
224229
bool IsCaseSensitive();
225-
wil::com_ptr<ICoreWebView2ExperimentalFindOptions> SetDefaultFindOptions();
226-
void SetupFindEventHandlers(wil::com_ptr<ICoreWebView2ExperimentalFind> webView2find);
230+
wil::com_ptr<ICoreWebView2FindOptions> SetDefaultFindOptions();
231+
void SetupFindEventHandlers(wil::com_ptr<ICoreWebView2Find> webView2find);
227232
// Find on Page member
228233
std::wstring m_findOnPageLastSearchTerm;
229-
wil::com_ptr<ICoreWebView2ExperimentalFindOptions> findOptions;
234+
wil::com_ptr<ICoreWebView2FindOptions> findOptions;
230235
EventRegistrationToken m_activeMatchIndexChangedToken = {};
231236
EventRegistrationToken m_matchCountChangedToken = {};
232237

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
// Copyright (C) Microsoft Corporation. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
#include "stdafx.h"
6+
7+
#include "CheckFailure.h"
8+
#include "ScenarioDedicatedWorker.h"
9+
10+
using namespace Microsoft::WRL;
11+
12+
ScenarioDedicatedWorker::ScenarioDedicatedWorker(AppWindow* appWindow) : m_appWindow(appWindow)
13+
{
14+
//! [DedicatedWorkerCreated]
15+
m_appWindow->GetWebView()->QueryInterface(IID_PPV_ARGS(&m_webView2Experimental_30));
16+
CHECK_FEATURE_RETURN_EMPTY(m_webView2Experimental_30);
17+
18+
CHECK_FAILURE(m_webView2Experimental_30->add_DedicatedWorkerCreated(
19+
Callback<ICoreWebView2ExperimentalDedicatedWorkerCreatedEventHandler>(
20+
[this](
21+
ICoreWebView2* sender,
22+
ICoreWebView2ExperimentalDedicatedWorkerCreatedEventArgs* args)
23+
{
24+
wil::com_ptr<ICoreWebView2ExperimentalDedicatedWorker> dedicatedWorker;
25+
CHECK_FAILURE(args->get_Worker(&dedicatedWorker));
26+
27+
wil::unique_cotaskmem_string scriptUri;
28+
CHECK_FAILURE(dedicatedWorker->get_ScriptUri(&scriptUri));
29+
30+
std::wstring scriptUriStr(scriptUri.get());
31+
m_appWindow->AsyncMessageBox(scriptUriStr, L"Dedicated worker is created");
32+
33+
// Subscribe to worker destroying event
34+
dedicatedWorker->add_Destroying(
35+
Callback<ICoreWebView2ExperimentalDedicatedWorkerDestroyingEventHandler>(
36+
[this, scriptUriStr](
37+
ICoreWebView2ExperimentalDedicatedWorker* sender,
38+
IUnknown* args) -> HRESULT
39+
{
40+
/*Cleanup on worker destruction*/
41+
m_appWindow->AsyncMessageBox(
42+
scriptUriStr, L"Dedicated worker is destroyed");
43+
return S_OK;
44+
})
45+
.Get(),
46+
nullptr);
47+
48+
return S_OK;
49+
})
50+
.Get(),
51+
&m_dedicatedWorkerCreatedToken));
52+
//! [DedicatedWorkerCreated]
53+
54+
wil::com_ptr<ICoreWebView2_4> m_webView2_4;
55+
m_appWindow->GetWebView()->QueryInterface(IID_PPV_ARGS(&m_webView2_4));
56+
CHECK_FEATURE_RETURN_EMPTY(m_webView2_4);
57+
58+
CHECK_FAILURE(m_webView2_4->add_FrameCreated(
59+
Callback<ICoreWebView2FrameCreatedEventHandler>(
60+
[this](ICoreWebView2* sender, ICoreWebView2FrameCreatedEventArgs* args) -> HRESULT
61+
{
62+
wil::com_ptr<ICoreWebView2Frame> webviewFrame;
63+
CHECK_FAILURE(args->get_Frame(&webviewFrame));
64+
65+
wil::com_ptr<ICoreWebView2ExperimentalFrame9> m_frameExperimental_9 =
66+
webviewFrame.try_query<ICoreWebView2ExperimentalFrame9>();
67+
68+
m_frameExperimental_9->add_DedicatedWorkerCreated(
69+
Callback<ICoreWebView2ExperimentalFrameDedicatedWorkerCreatedEventHandler>(
70+
[this](
71+
ICoreWebView2Frame* sender,
72+
ICoreWebView2ExperimentalDedicatedWorkerCreatedEventArgs* args)
73+
-> HRESULT
74+
{
75+
// frameInfo that created the worker.
76+
wil::com_ptr<ICoreWebView2FrameInfo> frameInfo;
77+
CHECK_FAILURE(args->get_OriginalSourceFrameInfo(&frameInfo));
78+
79+
wil::com_ptr<ICoreWebView2FrameInfo2> frameInfo2;
80+
CHECK_FAILURE(frameInfo->QueryInterface(IID_PPV_ARGS(&frameInfo2)));
81+
82+
wil::unique_cotaskmem_string frameSource;
83+
CHECK_FAILURE(frameInfo->get_Source(&frameSource));
84+
85+
UINT32 source_frameId;
86+
CHECK_FAILURE(frameInfo2->get_FrameId(&source_frameId));
87+
88+
wil::com_ptr<ICoreWebView2ExperimentalDedicatedWorker>
89+
dedicatedWorker;
90+
CHECK_FAILURE(args->get_Worker(&dedicatedWorker));
91+
92+
wil::unique_cotaskmem_string scriptUri;
93+
CHECK_FAILURE(dedicatedWorker->get_ScriptUri(&scriptUri));
94+
95+
std::wstring scriptUriStr(scriptUri.get());
96+
m_appWindow->AsyncMessageBox(
97+
scriptUriStr, L"Dedicated worker is created");
98+
99+
// Subscribe to worker destroying event
100+
dedicatedWorker->add_Destroying(
101+
Callback<
102+
ICoreWebView2ExperimentalDedicatedWorkerDestroyingEventHandler>(
103+
[this, scriptUriStr](
104+
ICoreWebView2ExperimentalDedicatedWorker* sender,
105+
IUnknown* args) -> HRESULT
106+
{
107+
/*Cleanup on worker destruction*/
108+
m_appWindow->AsyncMessageBox(
109+
scriptUriStr, L"Dedicated worker is destroyed");
110+
return S_OK;
111+
})
112+
.Get(),
113+
nullptr);
114+
115+
return S_OK;
116+
})
117+
.Get(),
118+
nullptr);
119+
120+
return S_OK;
121+
})
122+
.Get(),
123+
nullptr));
124+
}
125+
126+
ScenarioDedicatedWorker::~ScenarioDedicatedWorker()
127+
{
128+
m_webView2Experimental_30->remove_DedicatedWorkerCreated(m_dedicatedWorkerCreatedToken);
129+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Copyright (C) Microsoft Corporation. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
#include "stdafx.h"
6+
7+
#include "AppWindow.h"
8+
#include "ComponentBase.h"
9+
10+
class ScenarioDedicatedWorker : public ComponentBase
11+
{
12+
public:
13+
ScenarioDedicatedWorker(AppWindow* appWindow);
14+
~ScenarioDedicatedWorker() override;
15+
16+
private:
17+
AppWindow* m_appWindow;
18+
wil::com_ptr<ICoreWebView2Experimental30> m_webView2Experimental_30;
19+
EventRegistrationToken m_dedicatedWorkerCreatedToken = {};
20+
};
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
// Copyright (C) Microsoft Corporation. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
#include "stdafx.h"
6+
#include <sstream>
7+
8+
#include "CheckFailure.h"
9+
#include "TextInputDialog.h"
10+
11+
#include "ScenarioDedicatedWorkerPostMessage.h"
12+
13+
using namespace Microsoft::WRL;
14+
15+
static constexpr WCHAR c_samplePath[] = L"ScenarioDedicatedWorkerPostMessage.html";
16+
17+
ScenarioDedicatedWorkerPostMessage::ScenarioDedicatedWorkerPostMessage(AppWindow* appWindow)
18+
: m_appWindow(appWindow)
19+
{
20+
//! [DedicatedWorkerCreated]
21+
m_appWindow->GetWebView()->QueryInterface(IID_PPV_ARGS(&m_webView2Experimental_30));
22+
CHECK_FEATURE_RETURN_EMPTY(m_webView2Experimental_30);
23+
24+
CHECK_FAILURE(m_webView2Experimental_30->add_DedicatedWorkerCreated(
25+
Callback<ICoreWebView2ExperimentalDedicatedWorkerCreatedEventHandler>(
26+
[this](
27+
ICoreWebView2* sender,
28+
ICoreWebView2ExperimentalDedicatedWorkerCreatedEventArgs* args)
29+
{
30+
wil::com_ptr<ICoreWebView2ExperimentalDedicatedWorker> dedicatedWorker;
31+
CHECK_FAILURE(args->get_Worker(&dedicatedWorker));
32+
33+
wil::unique_cotaskmem_string scriptUri;
34+
CHECK_FAILURE(dedicatedWorker->get_ScriptUri(&scriptUri));
35+
36+
std::wstring scriptUriStr(scriptUri.get());
37+
m_appWindow->AsyncMessageBox(scriptUriStr, L"Dedicated worker is created");
38+
39+
SetupEventsOnDedicatedWorker(dedicatedWorker);
40+
ComputeWithDedicatedWorker(dedicatedWorker);
41+
42+
return S_OK;
43+
})
44+
.Get(),
45+
&m_dedicatedWorkerCreatedToken));
46+
//! [DedicatedWorkerCreated]
47+
48+
// Turn off this scenario if we navigate away from the sample page.
49+
CHECK_FAILURE(m_appWindow->GetWebView()->add_ContentLoading(
50+
Callback<ICoreWebView2ContentLoadingEventHandler>(
51+
[this](ICoreWebView2* sender, ICoreWebView2ContentLoadingEventArgs* args) -> HRESULT
52+
{
53+
wil::unique_cotaskmem_string uri;
54+
sender->get_Source(&uri);
55+
if (uri.get() != m_sampleUri)
56+
{
57+
m_appWindow->DeleteComponent(this);
58+
}
59+
return S_OK;
60+
})
61+
.Get(),
62+
&m_contentLoadingToken));
63+
64+
m_sampleUri = m_appWindow->GetLocalUri(c_samplePath);
65+
CHECK_FAILURE(m_appWindow->GetWebView()->Navigate(m_sampleUri.c_str()));
66+
}
67+
68+
void ScenarioDedicatedWorkerPostMessage::SetupEventsOnDedicatedWorker(
69+
wil::com_ptr<ICoreWebView2ExperimentalDedicatedWorker> dedicatedWorker)
70+
{
71+
//! [WebMessageReceived]
72+
dedicatedWorker->add_WebMessageReceived(
73+
Callback<ICoreWebView2ExperimentalDedicatedWorkerWebMessageReceivedEventHandler>(
74+
[this](
75+
ICoreWebView2ExperimentalDedicatedWorker* sender,
76+
ICoreWebView2WebMessageReceivedEventArgs* args) -> HRESULT
77+
{
78+
wil::unique_cotaskmem_string scriptUri;
79+
CHECK_FAILURE(args->get_Source(&scriptUri));
80+
81+
wil::unique_cotaskmem_string messageRaw;
82+
CHECK_FAILURE(args->TryGetWebMessageAsString(&messageRaw));
83+
std::wstring messageFromWorker = messageRaw.get();
84+
85+
std::wstringstream message{};
86+
message << L"Dedicated Worker: " << std::endl << scriptUri.get() << std::endl;
87+
message << std::endl;
88+
message << L"Message: " << std::endl << messageFromWorker << std::endl;
89+
m_appWindow->AsyncMessageBox(message.str(), L"Message from Dedicated Worker");
90+
91+
return S_OK;
92+
})
93+
.Get(),
94+
nullptr);
95+
//! [WebMessageReceived]
96+
}
97+
98+
void ScenarioDedicatedWorkerPostMessage::ComputeWithDedicatedWorker(
99+
wil::com_ptr<ICoreWebView2ExperimentalDedicatedWorker> dedicatedWorker)
100+
{
101+
//! [PostWebMessageAsJson]
102+
// Do not block from event handler
103+
m_appWindow->RunAsync(
104+
[this, dedicatedWorker]
105+
{
106+
TextInputDialog dialog(
107+
m_appWindow->GetMainWindow(), L"Post Web Message JSON", L"Web message JSON",
108+
L"Enter the web message as JSON.",
109+
L"{\"command\":\"ADD\",\"first\":2,\"second\":3}");
110+
// Ex: {"command":"ADD","first":2,"second":3}
111+
if (dialog.confirmed)
112+
{
113+
dedicatedWorker->PostWebMessageAsJson(dialog.input.c_str());
114+
}
115+
});
116+
//! [PostWebMessageAsJson]
117+
}
118+
119+
ScenarioDedicatedWorkerPostMessage::~ScenarioDedicatedWorkerPostMessage()
120+
{
121+
m_webView2Experimental_30->remove_DedicatedWorkerCreated(m_dedicatedWorkerCreatedToken);
122+
m_appWindow->GetWebView()->remove_ContentLoading(m_contentLoadingToken);
123+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// Copyright (C) Microsoft Corporation. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
#include "stdafx.h"
6+
7+
#include "AppWindow.h"
8+
#include "ComponentBase.h"
9+
10+
class ScenarioDedicatedWorkerPostMessage : public ComponentBase
11+
{
12+
public:
13+
ScenarioDedicatedWorkerPostMessage(AppWindow* appWindow);
14+
~ScenarioDedicatedWorkerPostMessage() override;
15+
16+
private:
17+
void SetupEventsOnDedicatedWorker(
18+
wil::com_ptr<ICoreWebView2ExperimentalDedicatedWorker> dedicatedWorker);
19+
void ComputeWithDedicatedWorker(
20+
wil::com_ptr<ICoreWebView2ExperimentalDedicatedWorker> dedicatedWorker);
21+
22+
AppWindow* m_appWindow;
23+
wil::com_ptr<ICoreWebView2Experimental30> m_webView2Experimental_30;
24+
std::wstring m_sampleUri;
25+
EventRegistrationToken m_contentLoadingToken = {};
26+
EventRegistrationToken m_dedicatedWorkerCreatedToken = {};
27+
};

0 commit comments

Comments
 (0)