webview_win.cpp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. // This file is part of Desktop App Toolkit,
  2. // a set of libraries for developing nice desktop applications.
  3. //
  4. // For license and copyright information please follow this link:
  5. // https://github.com/desktop-app/legal/blob/master/LEGAL
  6. //
  7. #include "webview/platform/win/webview_win.h"
  8. #include "base/random.h"
  9. #include "base/platform/base_platform_info.h"
  10. #include "webview/platform/win/webview_windows_edge_chromium.h"
  11. #include "webview/platform/win/webview_windows_edge_html.h"
  12. #include <QtGui/QWindow>
  13. namespace Webview {
  14. namespace {
  15. [[nodiscard]] bool SystemTooOld() {
  16. return !Platform::IsWindows8Point1OrGreater();
  17. }
  18. } // namespace
  19. base::unique_qptr<QWindow> MakeFramelessWindow() {
  20. auto result = base::make_unique_q<QWindow>();
  21. result->setFlag(Qt::FramelessWindowHint);
  22. return result;
  23. }
  24. Available Availability() {
  25. if (SystemTooOld()) {
  26. return Available{
  27. .error = Available::Error::OldWindows,
  28. .details = "Please update your system to Windows 8.1 or later.",
  29. };
  30. } else if (EdgeChromium::Supported()) {
  31. return Available{
  32. .customSchemeRequests = true,
  33. .customRangeRequests = true,
  34. .customReferer = true,
  35. };
  36. } else if (EdgeHtml::Supported()) {
  37. return Available{};
  38. }
  39. return Available{
  40. .error = Available::Error::NoWebview2,
  41. .details = "Please install Microsoft Edge Webview2 Runtime.",
  42. };
  43. }
  44. bool SupportsEmbedAfterCreate() {
  45. return !SystemTooOld()
  46. && !EdgeChromium::Supported()
  47. && EdgeHtml::Supported();
  48. }
  49. bool SeparateStorageIdSupported() {
  50. return !SystemTooOld() && EdgeChromium::Supported();
  51. }
  52. std::unique_ptr<Interface> CreateInstance(Config config) {
  53. if (SystemTooOld()) {
  54. return nullptr;
  55. } else if (auto result = EdgeChromium::CreateInstance(config)) {
  56. return result;
  57. }
  58. return EdgeHtml::CreateInstance(config);
  59. }
  60. std::string GenerateStorageToken() {
  61. constexpr auto kSize = 16;
  62. auto result = std::string(kSize, ' ');
  63. base::RandomFill(result.data(), result.size());
  64. return result;
  65. }
  66. void ClearStorageDataByToken(const std::string &token) {
  67. }
  68. } // namespace Webview