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 < algorithm>
8- #include < pathcch.h>
9- #include < Psapi.h>
10-
11- #include " AppStartPage.h"
12- #include " AppWindow.h"
13- #include " CheckFailure.h"
14-
15- using namespace Microsoft ::WRL;
16-
17- namespace AppStartPage
18- {
19-
20- bool AreFileUrisEqual (std::wstring leftUri, std::wstring rightUri)
21- {
22- // Have to to lower due to current bug
23- std::transform (leftUri.begin (), leftUri.end (),
24- leftUri.begin (), ::tolower);
25- std::transform (rightUri.begin (), rightUri.end (),
26- rightUri.begin (), ::tolower);
27-
28- return leftUri == rightUri;
29- }
30-
31- std::wstring ResolvePathAndTrimFile (std::wstring path)
32- {
33- wchar_t resultPath[MAX_PATH];
34- PathCchCanonicalize (resultPath, ARRAYSIZE (resultPath), path.c_str ());
35- PathCchRemoveFileSpec (resultPath, ARRAYSIZE (resultPath));
36- return resultPath;
37- }
38-
39- std::wstring GetSdkBuild ()
40- {
41- auto options = Microsoft::WRL::Make<CoreWebView2EnvironmentOptions>();
42- wil::unique_cotaskmem_string targetVersion;
43- CHECK_FAILURE (options->get_TargetCompatibleBrowserVersion (&targetVersion));
44-
45- // The full version string A.B.C.D
46- const wchar_t * targetVersionMajorAndRest = targetVersion.get ();
47- // Should now be .B.C.D
48- const wchar_t * targetVersionMinorAndRest = wcschr (targetVersionMajorAndRest, L' .' );
49- CHECK_FAILURE ((targetVersionMinorAndRest != nullptr && *targetVersionMinorAndRest == L' .' ) ? S_OK : E_UNEXPECTED);
50-
51- // Should now be .C.D
52- const wchar_t * targetVersionBuildAndRest = wcschr (targetVersionMinorAndRest + 1 , L' .' );
53- CHECK_FAILURE ((targetVersionBuildAndRest != nullptr && *targetVersionBuildAndRest == L' .' ) ? S_OK : E_UNEXPECTED);
54-
55- // Return + 1 to skip the first . so just C.D
56- return targetVersionBuildAndRest + 1 ;
57- }
58-
59- std::wstring GetRuntimeVersion (AppWindow* appWindow)
60- {
61- wil::com_ptr<ICoreWebView2Environment> environment = appWindow->GetWebViewEnvironment ();
62- wil::unique_cotaskmem_string runtimeVersion;
63- CHECK_FAILURE (environment->get_BrowserVersionString (&runtimeVersion));
64-
65- return runtimeVersion.get ();
66- }
67-
68- std::wstring GetAppPath ()
69- {
70- wchar_t appPath[MAX_PATH];
71- GetModuleFileName (nullptr , appPath, ARRAYSIZE (appPath));
72- return ResolvePathAndTrimFile (appPath);
73- }
74-
75- std::wstring GetRuntimePath (AppWindow* appWindow)
76- {
77- wil::com_ptr<ICoreWebView2> webview = appWindow->GetWebView ();
78- UINT32 browserProcessId = 0 ;
79- wchar_t runtimePath[MAX_PATH];
80- CHECK_FAILURE (webview->get_BrowserProcessId (&browserProcessId));
81-
82- HANDLE processHandle = OpenProcess (PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE , browserProcessId);
83- CHECK_FAILURE (processHandle == nullptr ? E_FAIL : S_OK);
84- GetModuleFileNameEx (processHandle, nullptr , runtimePath, ARRAYSIZE (runtimePath));
85- CloseHandle (processHandle);
86-
87- return ResolvePathAndTrimFile (runtimePath);
88- }
89-
90- std::wstring GetUri (AppWindow* appWindow)
91- {
92- std::wstring uri = appWindow->GetLocalUri (L" AppStartPage.html" );
93-
94- uri += L" ?sdkBuild=" ;
95- uri += GetSdkBuild ();
96-
97- uri += L" &runtimeVersion=" ;
98- uri += GetRuntimeVersion (appWindow);
99-
100- uri += L" &appPath=" ;
101- uri += GetAppPath ();
102-
103- uri += L" &runtimePath=" ;
104- uri += GetRuntimePath (appWindow);
105-
106- return uri;
107- }
108-
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 < algorithm>
8+ #include < pathcch.h>
9+ #include < Psapi.h>
10+
11+ #include " AppStartPage.h"
12+ #include " AppWindow.h"
13+ #include " CheckFailure.h"
14+
15+ using namespace Microsoft ::WRL;
16+
17+ namespace AppStartPage
18+ {
19+
20+ bool AreFileUrisEqual (std::wstring leftUri, std::wstring rightUri)
21+ {
22+ // Have to to lower due to current bug
23+ std::transform (leftUri.begin (), leftUri.end (),
24+ leftUri.begin (), ::tolower);
25+ std::transform (rightUri.begin (), rightUri.end (),
26+ rightUri.begin (), ::tolower);
27+
28+ return leftUri == rightUri;
29+ }
30+
31+ std::wstring ResolvePathAndTrimFile (std::wstring path)
32+ {
33+ wchar_t resultPath[MAX_PATH];
34+ PathCchCanonicalize (resultPath, ARRAYSIZE (resultPath), path.c_str ());
35+ PathCchRemoveFileSpec (resultPath, ARRAYSIZE (resultPath));
36+ return resultPath;
37+ }
38+
39+ std::wstring GetSdkBuild ()
40+ {
41+ auto options = Microsoft::WRL::Make<CoreWebView2EnvironmentOptions>();
42+ wil::unique_cotaskmem_string targetVersion;
43+ CHECK_FAILURE (options->get_TargetCompatibleBrowserVersion (&targetVersion));
44+
45+ // The full version string A.B.C.D
46+ const wchar_t * targetVersionMajorAndRest = targetVersion.get ();
47+ // Should now be .B.C.D
48+ const wchar_t * targetVersionMinorAndRest = wcschr (targetVersionMajorAndRest, L' .' );
49+ CHECK_FAILURE ((targetVersionMinorAndRest != nullptr && *targetVersionMinorAndRest == L' .' ) ? S_OK : E_UNEXPECTED);
50+
51+ // Should now be .C.D
52+ const wchar_t * targetVersionBuildAndRest = wcschr (targetVersionMinorAndRest + 1 , L' .' );
53+ CHECK_FAILURE ((targetVersionBuildAndRest != nullptr && *targetVersionBuildAndRest == L' .' ) ? S_OK : E_UNEXPECTED);
54+
55+ // Return + 1 to skip the first . so just C.D
56+ return targetVersionBuildAndRest + 1 ;
57+ }
58+
59+ std::wstring GetRuntimeVersion (AppWindow* appWindow)
60+ {
61+ wil::com_ptr<ICoreWebView2Environment> environment = appWindow->GetWebViewEnvironment ();
62+ wil::unique_cotaskmem_string runtimeVersion;
63+ CHECK_FAILURE (environment->get_BrowserVersionString (&runtimeVersion));
64+
65+ return runtimeVersion.get ();
66+ }
67+
68+ std::wstring GetAppPath ()
69+ {
70+ wchar_t appPath[MAX_PATH];
71+ GetModuleFileName (nullptr , appPath, ARRAYSIZE (appPath));
72+ return ResolvePathAndTrimFile (appPath);
73+ }
74+
75+ std::wstring GetRuntimePath (AppWindow* appWindow)
76+ {
77+ wil::com_ptr<ICoreWebView2> webview = appWindow->GetWebView ();
78+ UINT32 browserProcessId = 0 ;
79+ wchar_t runtimePath[MAX_PATH];
80+ CHECK_FAILURE (webview->get_BrowserProcessId (&browserProcessId));
81+
82+ HANDLE processHandle = OpenProcess (PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE , browserProcessId);
83+ CHECK_FAILURE (processHandle == nullptr ? E_FAIL : S_OK);
84+ GetModuleFileNameEx (processHandle, nullptr , runtimePath, ARRAYSIZE (runtimePath));
85+ CloseHandle (processHandle);
86+
87+ return ResolvePathAndTrimFile (runtimePath);
88+ }
89+
90+ std::wstring GetUri (AppWindow* appWindow)
91+ {
92+ std::wstring uri = appWindow->GetLocalUri (L" AppStartPage.html" );
93+
94+ uri += L" ?sdkBuild=" ;
95+ uri += GetSdkBuild ();
96+
97+ uri += L" &runtimeVersion=" ;
98+ uri += GetRuntimeVersion (appWindow);
99+
100+ uri += L" &appPath=" ;
101+ uri += GetAppPath ();
102+
103+ uri += L" &runtimePath=" ;
104+ uri += GetRuntimePath (appWindow);
105+
106+ return uri;
107+ }
108+
109109}; // namespace AppStartPage
0 commit comments