From 4a1b172ebda54d587db7ecfc61af5443d0c11d0d Mon Sep 17 00:00:00 2001 From: Roger Zanoni Date: Sun, 22 Oct 2023 01:07:31 +0000 Subject: [cef][wam] Make the recipe work with official chromium release tarballs This change drops the chromium mirror repository that was being used for milestone 108 in favor of using the official release tarballs from https://commondatastorage.googleapis.com/chromium-browser-official in an effort to make it easier to upgrade the current chromium milestones (also to improve download and build times). Also, the current milestone is being upgraded from 108 to 118. Bug-AGL: SPEC-3872 Signed-off-by: Roger Zanoni Change-Id: Iba4a94ef762d278864114c02bb9e36a308ff5a7a Reviewed-on: https://gerrit.automotivelinux.org/gerrit/c/AGL/meta-agl-demo/+/29417 Reviewed-by: Jan-Simon Moeller ci-image-build: Jenkins Job builder account Tested-by: Jenkins Job builder account ci-image-boot-test: Jenkins Job builder account --- recipes-wam/cef/cef_git.bb | 278 +- ...on-to-use-an-output-directory-outside-src.patch | 12 +- ...on-to-override-the-default-distrib-direct.patch | 12 +- ...on-to-use-an-alternative-base-output-dire.patch | 11 +- ...tion-to-bypass-sysroot-checking-and-force.patch | 28 +- ...0005-Add-AGL-wayland-window-related-calls.patch | 198 ++ ...ux-Fix-build-without-X11-fixes-issue-3431.patch | 62 - ...0006-Add-AGL-wayland-window-related-calls.patch | 201 -- ...d-to-check-if-the-agl-window-is-configure.patch | 129 + ...d-to-check-if-the-agl-window-is-configure.patch | 131 - .../0007-Add-the-SetActivateRegion-method.patch | 101 + .../0008-Add-the-SetActivateRegion-method.patch | 103 - ...low-passing-the-app_id-on-widget-creation.patch | 130 + ...low-passing-the-app_id-on-widget-creation.patch | 130 - .../cef/files/cef/0009-Update-generated-api.patch | 753 +++++ ...-Make-patcher-work-outside-a-git-checkout.patch | 118 + .../0010-Update-generated-api-wrapper-files.patch | 2912 -------------------- ...untimeError-dictionary-changed-size-durin.patch | 26 + ...tor-Add-agl_shell_wrapper-AGL-wayland-ext.patch | 914 ++++++ ...relax-constraints-on-VirtualCursor-layout.patch | 51 - ...for-depot_tools-in-chrommium-s-third_part.patch | 32 - ...landwindow-window-tree-host-essential-par.patch | 1376 +++++++++ ...GN-settings-done-for-clang-that-conflict-.patch | 116 - ...nd-to-agl_shell-if-it-s-the-browser-proce.patch | 41 + .../chromium/0004-Don-t-use-DRI-for-renesas.patch | 42 - ...ethod-to-check-if-the-agl-window-is-confi.patch | 69 + ...ential-parts-of-wayland-extensions-and-ag.patch | 912 ------ .../0005-agl-Start-using-agl-shell-version-4.patch | 348 +++ ...gl-waylandwindow-window-tree-host-essenti.patch | 1379 --------- .../0006-agl-Don-t-use-DRI-for-renesas.patch | 72 + ...-to-agl_shell-if-it-s-the-browser-process.patch | 39 - ...r-Remove-the-GN-settings-done-for-clang-t.patch | 117 + ...d-to-check-if-the-agl-window-is-configure.patch | 64 - ...-browser-Pass-no-static-libstdc-to-gen.py.patch | 31 + .../0009-Start-using-agl-shell-version-4.patch | 347 --- ...r-IWYU-Add-includes-for-size_t-and-int64_.patch | 42 + ...browser-BUILD-do-not-specify-march-on-arm.patch | 43 + ...r-Avoid-parenthesized-initialization-of-a.patch | 164 ++ ...r-Fix-constexpr-variable-cannot-have-non-.patch | 78 + .../0013-meta-browser-Add-missing-typename-s.patch | 105 + ...014-meta-browser-Avoid-std-ranges-find_if.patch | 70 + ...owser-Avoid-capturing-structured-bindings.patch | 56 + ...r-Delete-compiler-options-not-available-i.patch | 32 + ...r-Don-t-pass-disable-auto-upgrade-debug-i.patch | 39 + ...r-Fix-undefined-symbol-PaintOpWriter-Seri.patch | 49 + ...itialize-ServerCvc-with-designated-initia.patch | 45 + ...n-t-look-for-depot_tools-in-chrommium-s-t.patch | 37 + ...21-M118-fix-Add-multiple-missing-includes.patch | 69 + ...Fix-aggregate-initialization-in-trace_log.patch | 34 + ...d-missing-typename-keyword-in-multiple-st.patch | 140 + ...8-fix-Fix-comparison-in-HostResolverCache.patch | 34 + ...oid-using-std-ranges-any_of-find_if-none_.patch | 92 + ...18-fix-Add-deleted-constructors-operators.patch | 339 +++ ...itialize-percentages-member-on-blink-Font.patch | 52 + ...n-t-delete-ZstdSourceStream-copy-move-cto.patch | 32 + ...x-issue-with-structured-bindinds-captured.patch | 68 + ...ly-default-arm_use_neon-to-true-if-its-va.patch | 107 + ...d-a-way-to-set-different-lib-paths-host-a.patch | 135 + .../0032-M118-fix-zlib-Fix-arm-build.patch | 48 + ...8-fix-Fix-skia-linker-issues-for-arm-neon.patch | 56 + 60 files changed, 6565 insertions(+), 6686 deletions(-) create mode 100644 recipes-wam/cef/files/cef/0005-Add-AGL-wayland-window-related-calls.patch delete mode 100644 recipes-wam/cef/files/cef/0005-Linux-Fix-build-without-X11-fixes-issue-3431.patch delete mode 100644 recipes-wam/cef/files/cef/0006-Add-AGL-wayland-window-related-calls.patch create mode 100644 recipes-wam/cef/files/cef/0006-Add-a-method-to-check-if-the-agl-window-is-configure.patch delete mode 100644 recipes-wam/cef/files/cef/0007-Add-a-method-to-check-if-the-agl-window-is-configure.patch create mode 100644 recipes-wam/cef/files/cef/0007-Add-the-SetActivateRegion-method.patch delete mode 100644 recipes-wam/cef/files/cef/0008-Add-the-SetActivateRegion-method.patch create mode 100644 recipes-wam/cef/files/cef/0008-Allow-passing-the-app_id-on-widget-creation.patch delete mode 100644 recipes-wam/cef/files/cef/0009-Allow-passing-the-app_id-on-widget-creation.patch create mode 100644 recipes-wam/cef/files/cef/0009-Update-generated-api.patch create mode 100644 recipes-wam/cef/files/cef/0010-Make-patcher-work-outside-a-git-checkout.patch delete mode 100644 recipes-wam/cef/files/cef/0010-Update-generated-api-wrapper-files.patch create mode 100644 recipes-wam/cef/files/cef/0011-Avoid-the-RuntimeError-dictionary-changed-size-durin.patch create mode 100644 recipes-wam/cef/files/chromium/0001-agl-compositor-Add-agl_shell_wrapper-AGL-wayland-ext.patch delete mode 100644 recipes-wam/cef/files/chromium/0001-sql-relax-constraints-on-VirtualCursor-layout.patch delete mode 100644 recipes-wam/cef/files/chromium/0002-Don-t-look-for-depot_tools-in-chrommium-s-third_part.patch create mode 100644 recipes-wam/cef/files/chromium/0002-agl-Add-waylandwindow-window-tree-host-essential-par.patch delete mode 100644 recipes-wam/cef/files/chromium/0003-Remove-the-GN-settings-done-for-clang-that-conflict-.patch create mode 100644 recipes-wam/cef/files/chromium/0003-agl-Only-bind-to-agl_shell-if-it-s-the-browser-proce.patch delete mode 100644 recipes-wam/cef/files/chromium/0004-Don-t-use-DRI-for-renesas.patch create mode 100644 recipes-wam/cef/files/chromium/0004-agl-Add-a-method-to-check-if-the-agl-window-is-confi.patch delete mode 100644 recipes-wam/cef/files/chromium/0005-Add-the-essential-parts-of-wayland-extensions-and-ag.patch create mode 100644 recipes-wam/cef/files/chromium/0005-agl-Start-using-agl-shell-version-4.patch delete mode 100644 recipes-wam/cef/files/chromium/0006-Add-webos-agl-waylandwindow-window-tree-host-essenti.patch create mode 100644 recipes-wam/cef/files/chromium/0006-agl-Don-t-use-DRI-for-renesas.patch delete mode 100644 recipes-wam/cef/files/chromium/0007-Only-bind-to-agl_shell-if-it-s-the-browser-process.patch create mode 100644 recipes-wam/cef/files/chromium/0007-meta-browser-Remove-the-GN-settings-done-for-clang-t.patch delete mode 100644 recipes-wam/cef/files/chromium/0008-Add-a-method-to-check-if-the-agl-window-is-configure.patch create mode 100644 recipes-wam/cef/files/chromium/0008-meta-browser-Pass-no-static-libstdc-to-gen.py.patch delete mode 100644 recipes-wam/cef/files/chromium/0009-Start-using-agl-shell-version-4.patch create mode 100644 recipes-wam/cef/files/chromium/0009-meta-browser-IWYU-Add-includes-for-size_t-and-int64_.patch create mode 100644 recipes-wam/cef/files/chromium/0010-meta-browser-BUILD-do-not-specify-march-on-arm.patch create mode 100644 recipes-wam/cef/files/chromium/0011-meta-browser-Avoid-parenthesized-initialization-of-a.patch create mode 100644 recipes-wam/cef/files/chromium/0012-meta-browser-Fix-constexpr-variable-cannot-have-non-.patch create mode 100644 recipes-wam/cef/files/chromium/0013-meta-browser-Add-missing-typename-s.patch create mode 100644 recipes-wam/cef/files/chromium/0014-meta-browser-Avoid-std-ranges-find_if.patch create mode 100644 recipes-wam/cef/files/chromium/0015-meta-browser-Avoid-capturing-structured-bindings.patch create mode 100644 recipes-wam/cef/files/chromium/0016-meta-browser-Delete-compiler-options-not-available-i.patch create mode 100644 recipes-wam/cef/files/chromium/0017-meta-browser-Don-t-pass-disable-auto-upgrade-debug-i.patch create mode 100644 recipes-wam/cef/files/chromium/0018-meta-browser-Fix-undefined-symbol-PaintOpWriter-Seri.patch create mode 100644 recipes-wam/cef/files/chromium/0019-upstream-Initialize-ServerCvc-with-designated-initia.patch create mode 100644 recipes-wam/cef/files/chromium/0020-M118-fix-Don-t-look-for-depot_tools-in-chrommium-s-t.patch create mode 100644 recipes-wam/cef/files/chromium/0021-M118-fix-Add-multiple-missing-includes.patch create mode 100644 recipes-wam/cef/files/chromium/0022-M118-fix-Fix-aggregate-initialization-in-trace_log.patch create mode 100644 recipes-wam/cef/files/chromium/0023-M118-fix-Add-missing-typename-keyword-in-multiple-st.patch create mode 100644 recipes-wam/cef/files/chromium/0024-M118-fix-Fix-comparison-in-HostResolverCache.patch create mode 100644 recipes-wam/cef/files/chromium/0025-M118-fix-Avoid-using-std-ranges-any_of-find_if-none_.patch create mode 100644 recipes-wam/cef/files/chromium/0026-M118-fix-Add-deleted-constructors-operators.patch create mode 100644 recipes-wam/cef/files/chromium/0027-M118-fix-Initialize-percentages-member-on-blink-Font.patch create mode 100644 recipes-wam/cef/files/chromium/0028-M118-fix-Don-t-delete-ZstdSourceStream-copy-move-cto.patch create mode 100644 recipes-wam/cef/files/chromium/0029-M118-fix-Fix-issue-with-structured-bindinds-captured.patch create mode 100644 recipes-wam/cef/files/chromium/0030-M118-fix-Only-default-arm_use_neon-to-true-if-its-va.patch create mode 100644 recipes-wam/cef/files/chromium/0031-M118-fix-Add-a-way-to-set-different-lib-paths-host-a.patch create mode 100644 recipes-wam/cef/files/chromium/0032-M118-fix-zlib-Fix-arm-build.patch create mode 100644 recipes-wam/cef/files/chromium/0033-M118-fix-Fix-skia-linker-issues-for-arm-neon.patch (limited to 'recipes-wam') diff --git a/recipes-wam/cef/cef_git.bb b/recipes-wam/cef/cef_git.bb index 1ce1d5fd..63897f3e 100644 --- a/recipes-wam/cef/cef_git.bb +++ b/recipes-wam/cef/cef_git.bb @@ -7,151 +7,93 @@ LIC_FILES_CHKSUM = "\ file://third_party/blink/renderer/core/LICENSE-LGPL-2;md5=36357ffde2b64ae177b2494445b79d21 \ file://third_party/blink/renderer/core/LICENSE-LGPL-2.1;md5=a778a33ef338abbaf8b8a7c36b6eec80 \ " -CHROMIUM_URL = "github.com/rogerzanoni/chromium108.git" -CHROMIUM_VERSION = "108.0.5359.125" -BRANCH_chromium108 = "5359" -# Taken from https://bitbucket.org/chromiumembedded/cef/src/5615/CHROMIUM_BUILD_COMPATIBILITY.txt -SRCREV_chromium108 = "ef52580d516c7f65e11cb7de66cfb3b3507a2219" -SRCREV_cef = "a98cd4cdc0fdc49b6c38ba10cec800922745441e" + +CHROMIUM_VERSION = "118.0.5993.80" +BRANCH = "5993" +SRCREV = "3cffa575446727e2fe1f6499efa21f8e096e8ca0" + GN_TARGET_CPU = "${@gn_arch_name('${TUNE_ARCH}')}" -PV = "${CHROMIUM_VERSION}.${BRANCH_chromium108}+git" +PV = "${CHROMIUM_VERSION}.${BRANCH}+git" FILESEXTRAPATHS:prepend := "${THISDIR}/files/cef:" FILESEXTRAPATHS:prepend := "${THISDIR}/files/chromium:" +# The [agl]-prefixed patches are the changes needed to make WAM work with +# agl-compositor. The [meta-browser] patches comes from the https://github.com/OSSystems/meta-browser +# project that does similar work on keeping up to the new chromium milestones +# and the [MXX-Fix] patches are the fixes done by us to fix build issues for +# the current chromium milestone. +# For more information about the current milestones: https://chromiumdash.appspot.com/releases?platform=Linux SRC_URI = "\ - git://${CHROMIUM_URL};branch=${BRANCH_chromium108};protocol=https;rev=${SRCREV_chromium108};name=chromium108;destsuffix=git/chromium/src \ - file://0001-sql-relax-constraints-on-VirtualCursor-layout.patch \ - file://0002-Don-t-look-for-depot_tools-in-chrommium-s-third_part.patch \ - file://0003-Remove-the-GN-settings-done-for-clang-that-conflict-.patch \ - file://0004-Don-t-use-DRI-for-renesas.patch \ - file://0005-Add-the-essential-parts-of-wayland-extensions-and-ag.patch \ - file://0006-Add-webos-agl-waylandwindow-window-tree-host-essenti.patch \ - file://0007-Only-bind-to-agl_shell-if-it-s-the-browser-process.patch \ - file://0008-Add-a-method-to-check-if-the-agl-window-is-configure.patch \ - file://0009-Start-using-agl-shell-version-4.patch \ + https://commondatastorage.googleapis.com/chromium-browser-official/chromium-${CHROMIUM_VERSION}.tar.xz \ + file://0001-agl-compositor-Add-agl_shell_wrapper-AGL-wayland-ext.patch \ + file://0002-agl-Add-waylandwindow-window-tree-host-essential-par.patch \ + file://0003-agl-Only-bind-to-agl_shell-if-it-s-the-browser-proce.patch \ + file://0004-agl-Add-a-method-to-check-if-the-agl-window-is-confi.patch \ + file://0005-agl-Start-using-agl-shell-version-4.patch \ + file://0006-agl-Don-t-use-DRI-for-renesas.patch \ + file://0007-meta-browser-Remove-the-GN-settings-done-for-clang-t.patch \ + file://0008-meta-browser-Pass-no-static-libstdc-to-gen.py.patch \ + file://0009-meta-browser-IWYU-Add-includes-for-size_t-and-int64_.patch \ + file://0010-meta-browser-BUILD-do-not-specify-march-on-arm.patch \ + file://0011-meta-browser-Avoid-parenthesized-initialization-of-a.patch \ + file://0012-meta-browser-Fix-constexpr-variable-cannot-have-non-.patch \ + file://0013-meta-browser-Add-missing-typename-s.patch \ + file://0014-meta-browser-Avoid-std-ranges-find_if.patch \ + file://0015-meta-browser-Avoid-capturing-structured-bindings.patch \ + file://0016-meta-browser-Delete-compiler-options-not-available-i.patch \ + file://0017-meta-browser-Don-t-pass-disable-auto-upgrade-debug-i.patch \ + file://0018-meta-browser-Fix-undefined-symbol-PaintOpWriter-Seri.patch \ + file://0019-upstream-Initialize-ServerCvc-with-designated-initia.patch \ + file://0020-M118-fix-Don-t-look-for-depot_tools-in-chrommium-s-t.patch \ + file://0021-M118-fix-Add-multiple-missing-includes.patch \ + file://0022-M118-fix-Fix-aggregate-initialization-in-trace_log.patch \ + file://0023-M118-fix-Add-missing-typename-keyword-in-multiple-st.patch \ + file://0024-M118-fix-Fix-comparison-in-HostResolverCache.patch \ + file://0025-M118-fix-Avoid-using-std-ranges-any_of-find_if-none_.patch \ + file://0026-M118-fix-Add-deleted-constructors-operators.patch \ + file://0027-M118-fix-Initialize-percentages-member-on-blink-Font.patch \ + file://0028-M118-fix-Don-t-delete-ZstdSourceStream-copy-move-cto.patch \ + file://0029-M118-fix-Fix-issue-with-structured-bindinds-captured.patch \ + file://0030-M118-fix-Only-default-arm_use_neon-to-true-if-its-va.patch \ + file://0031-M118-fix-Add-a-way-to-set-different-lib-paths-host-a.patch \ + file://0032-M118-fix-zlib-Fix-arm-build.patch \ + file://0033-M118-fix-Fix-skia-linker-issues-for-arm-neon.patch \ \ - git://bitbucket.org/chromiumembedded/cef.git;branch=${BRANCH_chromium108};protocol=https;rev=${SRCREV_cef};name=cef;destsuffix=git/chromium/src/cef \ + git://bitbucket.org/chromiumembedded/cef.git;branch=${BRANCH};protocol=https;rev=${SRCREV};name=cef;destsuffix=chromium-${CHROMIUM_VERSION}/cef \ file://0001-Add-an-option-to-use-an-output-directory-outside-src.patch;patchdir=cef \ file://0002-Add-an-option-to-override-the-default-distrib-direct.patch;patchdir=cef \ file://0003-Add-an-option-to-use-an-alternative-base-output-dire.patch;patchdir=cef \ file://0004-Add-an-option-to-bypass-sysroot-checking-and-force.patch;patchdir=cef \ - file://0005-Linux-Fix-build-without-X11-fixes-issue-3431.patch;patchdir=cef \ - file://0006-Add-AGL-wayland-window-related-calls.patch;patchdir=cef \ - file://0007-Add-a-method-to-check-if-the-agl-window-is-configure.patch;patchdir=cef \ - file://0008-Add-the-SetActivateRegion-method.patch;patchdir=cef \ - file://0009-Allow-passing-the-app_id-on-widget-creation.patch;patchdir=cef \ - file://0010-Update-generated-api-wrapper-files.patch;patchdir=cef \ + file://0005-Add-AGL-wayland-window-related-calls.patch;patchdir=cef \ + file://0006-Add-a-method-to-check-if-the-agl-window-is-configure.patch;patchdir=cef \ + file://0007-Add-the-SetActivateRegion-method.patch;patchdir=cef \ + file://0008-Allow-passing-the-app_id-on-widget-creation.patch;patchdir=cef \ + file://0009-Update-generated-api.patch;patchdir=cef \ + file://0010-Make-patcher-work-outside-a-git-checkout.patch;patchdir=cef \ + file://0011-Avoid-the-RuntimeError-dictionary-changed-size-durin.patch;patchdir=cef \ " -BASE_DIR = "${WORKDIR}/git/chromium" -CHROMIUM_DIR = "${BASE_DIR}/src" +SRC_URI[sha256sum] = "741c5528a151bc364999969077a13d7a283cfd0eaf34adf47de667a34e5e58ff" + +CHROMIUM_DIR = "${WORKDIR}/chromium-${CHROMIUM_VERSION}" CEF_DIR = "${CHROMIUM_DIR}/cef" DEPOT_TOOLS_DIR="${STAGING_DIR_NATIVE}${datadir}/depot_tools" -S = "${BASE_DIR}/src" +S = "${CHROMIUM_DIR}" B = "${WORKDIR}/build" OUT_PATH = "${B}/out/Release_GN_${GN_TARGET_CPU}" DIST_PATH = "${OUT_PATH}/dist/cef-minimal_${GN_TARGET_CPU}" CEF_DATA_PATH = "${datadir}/cef" -DEPENDS:append = " curl clang-native gperf-native dbus libcxx compiler-rt libxkbcommon nss nss-native atk at-spi2-atk libdrm pango cairo virtual/egl qemu-native pciutils glib-2.0 pkgconfig-native pulseaudio xz-native" +DEPENDS:append = " curl clang clang-native gperf-native gn-native dbus libcxx libcxx-native libpng libxslt jpeg compiler-rt libxkbcommon nss nss-native atk at-spi2-atk libdrm pango cairo virtual/egl qemu-native pciutils glib-2.0 pkgconfig-native pulseaudio xz-native compiler-rt compiler-rt-native" do_sync[depends] += "depot-tools-wam-native:do_populate_sysroot" do_configure[depends] += "depot-tools-wam-native:do_populate_sysroot" do_compile[depends] += "depot-tools-wam-native:do_populate_sysroot" -DOWNLOAD_PGO_PROFILES="False" - -# Adapted from CEF's tools/gclient_hooks.py -python do_gclient_config() { - import os - # Create gclient configuration file. - gclient_file = os.path.join(d.expand('${BASE_DIR}'), '.gclient') - # Exclude unnecessary directories. Intentionally written without newlines. - gclient_spec = \ - "solutions = [{"+\ - "'managed': False,"+\ - "'name': 'src', "+\ - "'url': '" + d.expand('https://${CHROMIUM_URL}') + "', "+\ - "'custom_vars': {"+\ - d.expand("'checkout_pgo_profiles': '${DOWNLOAD_PGO_PROFILES}'") +\ - "}, "+\ - "'custom_deps': {"+\ - "'build': None, "+\ - "'build/scripts/command_wrapper/bin': None, "+\ - "'build/scripts/gsd_generate_index': None, "+\ - "'build/scripts/private/data/reliability': None, "+\ - "'build/scripts/tools/deps2git': None, "+\ - "'build/third_party/lighttpd': None, "+\ - "'commit-queue': None, "+\ - "'depot_tools': None, "+\ - "'src/chrome_frame/tools/test/reference_build/chrome': None, "+\ - "'src/chrome/tools/test/reference_build/chrome_linux': None, "+\ - "'src/chrome/tools/test/reference_build/chrome_mac': None, "+\ - "'src/chrome/tools/test/reference_build/chrome_win': None, "+\ - "}, "+\ - "'deps_file': 'DEPS', "+\ - "'safesync_url': ''"+\ - "}]" - - with open(gclient_file, 'w+', encoding='utf-8') as fp: - fp.write(gclient_spec) -} -addtask do_gclient_config after do_unpack before do_configure - -# Mostly adapted from CEF's tools/automate/automate-git.py -do_sync[network] = "1" -python do_sync() { - import os - def cef_run(command_line, working_dir): - import subprocess - env = os.environ - env['PATH'] = d.expand("${DEPOT_TOOLS_DIR}") + os.pathsep + env['PATH'] - env['DEPOT_TOOLS_UPDATE'] = "0" - env['GCLIENT_PY3'] = "1" - - subprocess.check_output(command_line.split(), - cwd=working_dir, - env=env, - shell=False, - stderr=subprocess.STDOUT) - - def cef_apply_patch(name, patches_path=os.path.join(d.expand("${CEF_DIR}"), 'patch', 'patches')): - patch_file = os.path.join(patches_path, name) - if not os.path.exists(patch_file + ".patch"): - # Attempt to apply the patch file. - patch_tool = os.path.join(d.expand("${CEF_DIR}"), 'tools', 'patcher.py') - cef_run('%s %s --patch-file "%s" --patch-dir "%s"' % - ("python3", patch_tool, patch_file, d.expand("${CHROMIUM_DIR}")), - d.expand("${CHROMIUM_DIR}")) - - def cef_apply_deps_patch(): - """ Patch the Chromium DEPS file before `gclient sync` if necessary. """ - deps_path = os.path.join(d.expand("${CHROMIUM_DIR}"), 'DEPS') - if os.path.isfile(deps_path): - cef_apply_patch('DEPS') - else: - raise Exception("Path does not exist: DEPS") - - def cef_apply_runhooks_patch(): - """ Patch the Chromium runhooks files before `gclient runhooks` if necessary. """ - cef_apply_patch('runhooks') - - # CEF automation script usually applies - # applies patches before running sync and - # runhooks. This is taken directly from the - # automation script - def cef_do_sync(): - cef_apply_deps_patch() - cef_run("gclient sync --reset --nohooks --jobs 16", d.expand("${CHROMIUM_DIR}")) - cef_apply_runhooks_patch() - cef_run("gclient runhooks --jobs 16", d.expand("${CHROMIUM_DIR}")) - - cef_do_sync() -} -addtask do_sync after do_gclient_config before do_configure +GN_UNBUNDLE_LIBS = " libjpeg libpng libxslt" # gn defaults from CEF wiki, except for use_sysroot GN_DEFINES = "use_sysroot=false \ @@ -177,6 +119,7 @@ GN_DEFINES:append = " \ use_wayland_gbm=true \ use_gnome_keyring=false \ enable_remoting=false \ + enable_js_type_check=false \ " # ozone options @@ -189,12 +132,13 @@ GN_DEFINES:append = " \ use_system_minigbm=true \ use_system_libdrm=true \ use_system_libwayland=false \ + use_system_libffi=true \ " GN_DEFINES:append = " \ dcheck_always_on=false \ is_debug=false \ - is_official_build=false \ + is_official_build=true \ " GN_DEFINES:append = " \ @@ -203,12 +147,14 @@ GN_DEFINES:append = " \ use_dri=false \ " -# Disable PGO optimizations -GN_DEFINES:append = " chrome_pgo_phase=0 " - RUNTIME = "llvm" TOOLCHAIN = "clang" TOOLCHAIN:class-native = "clang" +LIBCPLUSPLUS = "-stdlib=libc++" + +BUILD_CPPFLAGS:append:runtime-llvm = " -isysroot=${STAGING_DIR_NATIVE} -stdlib=libc++" +BUILD_LDFLAGS:append:runtime-llvm = " -rtlib=libgcc -unwindlib=libgcc -stdlib=libc++ -lc++abi -rpath ${STAGING_LIBDIR_NATIVE}" +CXXFLAGS:append:runtime-llvm = " -isysroot=${STAGING_DIR_NATIVE} -stdlib=libc++" BUILD_AR:toolchain-clang = "llvm-ar" BUILD_CC:toolchain-clang = "clang" @@ -223,15 +169,76 @@ COMPATIBLE_MACHINE:armv7ve = "(.*)" COMPATIBLE_MACHINE:x86 = "(.*)" COMPATIBLE_MACHINE:x86-64 = "(.*)" +# ARM builds need special additional flags (see ${S}/build/config/arm.gni). +# If we do not pass |arm_arch| and friends to GN, it will deduce a value that +# will then conflict with TUNE_CCARGS and CC. +# Note that as of M61 in some corner cases parts of the build system disable +# the "compiler_arm_fpu" GN config, whereas -mfpu is always passed via ${CC}. +# We might want to rework that if there are issues in the future. +def get_compiler_flag(params, param_name, d): + """Given a sequence of compiler arguments in |params|, returns the value of + an option |param_name| or an empty string if the option is not present.""" + for param in params: + if param.startswith(param_name): + return param.split('=')[1] + return '' + +ARM_FLOAT_ABI = "${@bb.utils.contains('TUNE_FEATURES', 'callconvention-hard', 'hard', 'softfp', d)}" +ARM_FPU = "${@get_compiler_flag(d.getVar('TUNE_CCARGS').split(), '-mfpu', d)}" +ARM_TUNE = "${@get_compiler_flag(d.getVar('TUNE_CCARGS').split(), '-mcpu', d)}" +ARM_VERSION:aarch64 = "8" +ARM_VERSION:armv7a = "7" +ARM_VERSION:armv7ve = "7" +ARM_VERSION:armv6 = "6" + +# GN computes and defaults to it automatically where needed +# forcing it from cmdline breaks build on places where it ends up +# overriding what GN wants +TUNE_CCARGS:remove = "-mthumb" + +GN_DEFINES:append:arm = " \ + arm_float_abi=\"${ARM_FLOAT_ABI}\" \ + arm_fpu=\"${ARM_FPU}\" \ + arm_tune=\"${ARM_TUNE}\" \ + arm_version=${ARM_VERSION} \ +" +# tcmalloc's atomicops-internals-arm-v6plus.h uses the "dmb" instruction that +# is not available on (some?) ARMv6 models, which causes the build to fail. +GN_DEFINES:append:armv6 = ' use_allocator="none"' +# The WebRTC code fails to build on ARMv6 when NEON is enabled. +# https://bugs.chromium.org/p/webrtc/issues/detail?id=6574 + +# Disable unknown attribute warnings that are generating tons of logs +# TODO(rzanoni): check if https://chromium-review.googlesource.com/c/chromium/src/+/4322480 +# needs to be reverted +BUILD_CXXFLAGS:remove = '-Wunknown-attributes' +BUILD_CXXFLAGS:append = ' -Wno-unknown-attributes' +BUILD_CPPFLAGS:remove = '-Wunknown-attributes' +BUILD_CPPFLAGS:append = ' -Wno-unknown-attributes' +CXXFLAGS:remove = '-Wunknown-attributes' +CXXFLAGS:append = ' -Wno-unknown-attributes' +CPPFLAGS:remove = '-Wunknown-attributes' +CPPFLAGS:append = ' -Wno-unknown-attributes' + GN_DEFINES:append = ' \ + arm_use_neon=false \ use_lld=true \ use_gold=false \ + use_custom_libcxx_for_host=false \ + use_custom_libcxx=false \ + chrome_pgo_phase=0 \ gold_path="" \ is_clang=true \ + current_os="linux" \ clang_use_chrome_plugins=false \ - clang_base_path="${STAGING_BINDIR_NATIVE}" \ - host_toolchain=\"//build/toolchain/cros:host\" \ - use_custom_libcxx_for_host=false \ + clang_base_path="${STAGING_DIR_NATIVE}/usr" \ + clang_base_path_target="${STAGING_DIR_TARGET}/usr" \ + clang_version="14.0.6" \ + custom_toolchain="//build/toolchain/cros:target" \ + host_toolchain="//build/toolchain/cros:host" \ + v8_snapshot_toolchain="//build/toolchain/cros:v8_snapshot" \ + target_cpu="${GN_TARGET_CPU}" \ + use_v8_context_snapshot=false \ cros_host_ar=\"${BUILD_AR}\" \ cros_host_cc=\"${BUILD_CC}\" \ cros_host_cxx=\"${BUILD_CXX}\" \ @@ -239,9 +246,6 @@ GN_DEFINES:append = ' \ cros_host_extra_cppflags=\"${BUILD_CPPFLAGS}\" \ cros_host_extra_cxxflags=\"${BUILD_CXXFLAGS}\" \ cros_host_extra_ldflags=\"${BUILD_LDFLAGS}\" \ - custom_toolchain=\"//build/toolchain/cros:target\" \ - use_custom_libcxx=false \ - target_cpu=\"${GN_TARGET_CPU}\" \ cros_target_ar=\"${AR}\" \ cros_target_cc=\"${CC}\" \ cros_target_cxx=\"${CXX}\" \ @@ -249,14 +253,13 @@ GN_DEFINES:append = ' \ cros_target_extra_cppflags=\"${CPPFLAGS}\" \ cros_target_extra_cxxflags=\"${CXXFLAGS}\" \ cros_target_extra_ldflags=\"${LDFLAGS}\" \ - v8_snapshot_toolchain=\"//build/toolchain/cros:v8_snapshot\" \ cros_v8_snapshot_ar=\"${BUILD_AR}\" \ cros_v8_snapshot_cc=\"${BUILD_CC}\" \ cros_v8_snapshot_cxx=\"${BUILD_CXX}\" \ - cros_v8_snapshot_cppflags=\"${CPPFLAGS}\" \ - cros_v8_snapshot_cxxflags=\"${CXXFLAGS}\" \ - cros_v8_snapshot_ldflags=\"${LDFLAGS}\" \ - use_v8_context_snapshot=false \ + cros_v8_snapshot_ld=\"${BUILD_CXX}\" \ + cros_v8_snapshot_cppflags=\"${BUILD_CXXFLAGS}\" \ + cros_v8_snapshot_cxxflags=\"${BUILD_CXXFLAGS}\" \ + cros_v8_snapshot_ldflags=\"${BUILD_LDFLAGS}\" \ ' PACKAGECONFIG ??= "upower use-egl" @@ -276,6 +279,15 @@ do_configure () { export PATH="${DEPOT_TOOLS_DIR}:$PATH" export GN_DEFINES="${GN_DEFINES}" + cd ${S} + python3 ./build/linux/unbundle/replace_gn_files.py --system-libraries ${GN_UNBUNDLE_LIBS} + + # Download a few dependencies. Check the current chromium DEPS file when + # upgrading to a new milestone. + python3 third_party/depot_tools/download_from_google_storage.py --no_resume --extract --no_auth --bucket chromium-fonts -s third_party/test_fonts/test_fonts.tar.gz.sha1 + python3 third_party/depot_tools/download_from_google_storage.py --no_resume --extract --no_auth --bucket chromium-nodejs/16.13.0 -s third_party/node/linux/node-linux-x64.tar.gz.sha1 + python3 tools/rust/update_rust.py + cd ${S}/cef python3 tools/gclient_hook.py --base-out-path ${B} --bypass-sysroot-check } diff --git a/recipes-wam/cef/files/cef/0001-Add-an-option-to-use-an-output-directory-outside-src.patch b/recipes-wam/cef/files/cef/0001-Add-an-option-to-use-an-output-directory-outside-src.patch index 5d3cdac6..af2ea0ba 100644 --- a/recipes-wam/cef/files/cef/0001-Add-an-option-to-use-an-output-directory-outside-src.patch +++ b/recipes-wam/cef/files/cef/0001-Add-an-option-to-use-an-output-directory-outside-src.patch @@ -1,17 +1,17 @@ -From 7b7f5d77e87351cb98b7932eaf8959feaf280215 Mon Sep 17 00:00:00 2001 +From 97e9e8dd589d7d3467d762f6ab25ec4a4f30505f Mon Sep 17 00:00:00 2001 From: Roger Zanoni Date: Mon, 24 Apr 2023 10:52:57 +0200 -Subject: [PATCH 01/10] Add an option to use an output directory outside src +Subject: [PATCH 1/9] Add an option to use an output directory outside src --- tools/make_distrib.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tools/make_distrib.py b/tools/make_distrib.py -index 7122fae19..045430ea3 100644 +index c808ad7df..ea798b86f 100644 --- a/tools/make_distrib.py +++ b/tools/make_distrib.py -@@ -457,6 +457,12 @@ This utility builds the CEF Binary Distribution. +@@ -459,6 +459,12 @@ This utility builds the CEF Binary Distribution. """ parser = OptionParser(description=disc) @@ -24,7 +24,7 @@ index 7122fae19..045430ea3 100644 parser.add_option( '--output-dir', dest='outputdir', -@@ -698,6 +704,8 @@ else: +@@ -700,6 +706,8 @@ else: # Determine the build directory paths. out_dir = os.path.join(src_dir, 'out') @@ -34,5 +34,5 @@ index 7122fae19..045430ea3 100644 build_dir_release = os.path.join(out_dir, 'Release' + build_dir_suffix) -- -2.39.2 +2.42.0 diff --git a/recipes-wam/cef/files/cef/0002-Add-an-option-to-override-the-default-distrib-direct.patch b/recipes-wam/cef/files/cef/0002-Add-an-option-to-override-the-default-distrib-direct.patch index c3df4b24..0061c4d1 100644 --- a/recipes-wam/cef/files/cef/0002-Add-an-option-to-override-the-default-distrib-direct.patch +++ b/recipes-wam/cef/files/cef/0002-Add-an-option-to-override-the-default-distrib-direct.patch @@ -1,7 +1,7 @@ -From 1da1ed1f7035bdb0a4528962c048b7365369f8fd Mon Sep 17 00:00:00 2001 +From d0ab00e0a22cab8f00d2b1b8c6904c68ff3fa09a Mon Sep 17 00:00:00 2001 From: Roger Zanoni Date: Mon, 24 Apr 2023 13:56:10 +0200 -Subject: [PATCH 02/10] Add an option to override the default distrib directory +Subject: [PATCH 2/9] Add an option to override the default distrib directory name --- @@ -9,10 +9,10 @@ Subject: [PATCH 02/10] Add an option to override the default distrib directory 1 file changed, 8 insertions(+) diff --git a/tools/make_distrib.py b/tools/make_distrib.py -index 045430ea3..a858e8ff6 100644 +index ea798b86f..6ed748fe7 100644 --- a/tools/make_distrib.py +++ b/tools/make_distrib.py -@@ -463,6 +463,11 @@ parser.add_option( +@@ -465,6 +465,11 @@ parser.add_option( dest='baseoutpath', default='', help="Use an anternative base path for the generated gn outputs instead of using chromium source dir") @@ -24,7 +24,7 @@ index 045430ea3..a858e8ff6 100644 parser.add_option( '--output-dir', dest='outputdir', -@@ -675,6 +680,9 @@ else: +@@ -677,6 +682,9 @@ else: if options.ozone: output_dir_name = output_dir_name + '_ozone' @@ -35,5 +35,5 @@ index 045430ea3..a858e8ff6 100644 # create the README.TXT file -- -2.39.2 +2.42.0 diff --git a/recipes-wam/cef/files/cef/0003-Add-an-option-to-use-an-alternative-base-output-dire.patch b/recipes-wam/cef/files/cef/0003-Add-an-option-to-use-an-alternative-base-output-dire.patch index b8dd3bd2..600d59dc 100644 --- a/recipes-wam/cef/files/cef/0003-Add-an-option-to-use-an-alternative-base-output-dire.patch +++ b/recipes-wam/cef/files/cef/0003-Add-an-option-to-use-an-alternative-base-output-dire.patch @@ -1,15 +1,14 @@ -From 33aa8b58d5c5d189dcd51d465f1d9d39c740146e Mon Sep 17 00:00:00 2001 +From e54832c051aa34708025f350e81d08bafd3025f7 Mon Sep 17 00:00:00 2001 From: Roger Zanoni Date: Thu, 30 Mar 2023 15:22:32 +0200 -Subject: [PATCH 03/10] Add an option to use an alternative base output - directory +Subject: [PATCH 3/9] Add an option to use an alternative base output directory --- tools/gclient_hook.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/tools/gclient_hook.py b/tools/gclient_hook.py -index 290487433..4e5f9f687 100644 +index c525984e3..3d4375ec0 100644 --- a/tools/gclient_hook.py +++ b/tools/gclient_hook.py @@ -6,12 +6,23 @@ @@ -36,7 +35,7 @@ index 290487433..4e5f9f687 100644 # The CEF directory is the parent directory of _this_ script. cef_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir)) # The src directory is the parent directory of the CEF directory. -@@ -133,14 +144,18 @@ if platform == 'windows': +@@ -136,14 +147,18 @@ if platform == 'windows': configs = GetAllPlatformConfigs(gn_args) for dir, config in configs.items(): # Create out directories and write the args.gn file. @@ -58,5 +57,5 @@ index 290487433..4e5f9f687 100644 cmd.extend(os.environ['GN_ARGUMENTS'].split(' ')) RunAction(src_dir, cmd) -- -2.39.2 +2.42.0 diff --git a/recipes-wam/cef/files/cef/0004-Add-an-option-to-bypass-sysroot-checking-and-force.patch b/recipes-wam/cef/files/cef/0004-Add-an-option-to-bypass-sysroot-checking-and-force.patch index 7755da67..c5790744 100644 --- a/recipes-wam/cef/files/cef/0004-Add-an-option-to-bypass-sysroot-checking-and-force.patch +++ b/recipes-wam/cef/files/cef/0004-Add-an-option-to-bypass-sysroot-checking-and-force.patch @@ -1,7 +1,7 @@ -From 4b16bef4a219af372d022f0ec4f15befb1449808 Mon Sep 17 00:00:00 2001 +From 26d02223b99765f4c6d5ce5807947d4e0c925a0b Mon Sep 17 00:00:00 2001 From: Roger Zanoni Date: Tue, 16 May 2023 16:11:15 +0200 -Subject: [PATCH 04/10] Add an option to bypass sysroot checking and force +Subject: [PATCH 4/9] Add an option to bypass sysroot checking and force --- tools/gclient_hook.py | 8 +++++++- @@ -9,7 +9,7 @@ Subject: [PATCH 04/10] Add an option to bypass sysroot checking and force 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/tools/gclient_hook.py b/tools/gclient_hook.py -index 4e5f9f687..6a7bc0d46 100644 +index 3d4375ec0..c971b9399 100644 --- a/tools/gclient_hook.py +++ b/tools/gclient_hook.py @@ -20,6 +20,12 @@ parser.add_option( @@ -25,9 +25,9 @@ index 4e5f9f687..6a7bc0d46 100644 (options, args) = parser.parse_args() -@@ -141,7 +147,7 @@ if platform == 'windows': - gn_args['visual_studio_runtime_dirs'] = os.environ['VS_CRT_ROOT'] +@@ -144,7 +150,7 @@ if platform == 'windows': gn_args['windows_sdk_path'] = os.environ['SDK_ROOT'] + gn_args['windows_sdk_version'] = os.environ['SDK_VERSION'] -configs = GetAllPlatformConfigs(gn_args) +configs = GetAllPlatformConfigs(gn_args, bypass_sysroot_check=options.bypasssysrootcheck) @@ -35,10 +35,10 @@ index 4e5f9f687..6a7bc0d46 100644 # Create out directories and write the args.gn file. base_out_dir = src_dir diff --git a/tools/gn_args.py b/tools/gn_args.py -index 563a6b9cc..f782bd765 100644 +index c1acac17b..80545da49 100644 --- a/tools/gn_args.py +++ b/tools/gn_args.py -@@ -323,7 +323,7 @@ def GetMergedArgs(build_args): +@@ -327,7 +327,7 @@ def GetMergedArgs(build_args): return MergeDicts(dict, required) @@ -47,7 +47,7 @@ index 563a6b9cc..f782bd765 100644 """ Validate GN arg combinations that we know about. Also provide suggestions where appropriate. -@@ -360,11 +360,11 @@ def ValidateArgs(args): +@@ -365,11 +365,11 @@ def ValidateArgs(args): if platform == 'linux': if target_cpu == 'x86': @@ -62,7 +62,7 @@ index 563a6b9cc..f782bd765 100644 # ASAN requires Release builds. if is_asan: -@@ -452,7 +452,7 @@ def ValidateArgs(args): +@@ -460,7 +460,7 @@ def ValidateArgs(args): "visual_studio_path requires INCLUDE, LIB and PATH env variables" @@ -71,7 +71,7 @@ index 563a6b9cc..f782bd765 100644 """ Return merged GN args for the configuration and validate. """ -@@ -478,11 +478,11 @@ def GetConfigArgs(args, is_debug, cpu): +@@ -490,11 +490,11 @@ def GetConfigArgs(args, is_debug, cpu): if key.startswith('arm_'): del result[key] @@ -85,7 +85,7 @@ index 563a6b9cc..f782bd765 100644 """ Return merged GN args for the cef_sandbox configuration and validate. """ -@@ -548,7 +548,7 @@ def LinuxSysrootExists(cpu): +@@ -566,7 +566,7 @@ def LinuxSysrootExists(cpu): return os.path.isdir(os.path.join(sysroot_root, sysroot_name)) @@ -94,7 +94,7 @@ index 563a6b9cc..f782bd765 100644 """ Return a map of directory name to GN args for the current platform. """ -@@ -568,10 +568,10 @@ def GetAllPlatformConfigs(build_args): +@@ -586,10 +586,10 @@ def GetAllPlatformConfigs(build_args): if platform == 'linux': use_sysroot = GetArgValue(args, 'use_sysroot') @@ -107,7 +107,7 @@ index 563a6b9cc..f782bd765 100644 supported_cpus.append(cpu) else: msg('Not generating %s configuration due to missing sysroot directory' -@@ -593,17 +593,17 @@ def GetAllPlatformConfigs(build_args): +@@ -611,17 +611,17 @@ def GetAllPlatformConfigs(build_args): for cpu in supported_cpus: if create_debug: @@ -130,5 +130,5 @@ index 563a6b9cc..f782bd765 100644 return result -- -2.39.2 +2.42.0 diff --git a/recipes-wam/cef/files/cef/0005-Add-AGL-wayland-window-related-calls.patch b/recipes-wam/cef/files/cef/0005-Add-AGL-wayland-window-related-calls.patch new file mode 100644 index 00000000..d717b817 --- /dev/null +++ b/recipes-wam/cef/files/cef/0005-Add-AGL-wayland-window-related-calls.patch @@ -0,0 +1,198 @@ +From ee2c3e430fd0d1025e46c108a79a4e0b07608dff Mon Sep 17 00:00:00 2001 +From: Roger Zanoni +Date: Thu, 18 May 2023 10:34:08 +0200 +Subject: [PATCH 5/9] Add AGL wayland window related calls + +--- + include/views/cef_window.h | 34 ++++++++++++++++ + libcef/browser/views/view_util.h | 10 +++++ + libcef/browser/views/view_util_aura.cc | 54 ++++++++++++++++++++++++++ + libcef/browser/views/window_impl.cc | 24 ++++++++++++ + libcef/browser/views/window_impl.h | 10 +++++ + 5 files changed, 132 insertions(+) + +diff --git a/include/views/cef_window.h b/include/views/cef_window.h +index ec3843b25..22fe2e2a1 100644 +--- a/include/views/cef_window.h ++++ b/include/views/cef_window.h +@@ -366,6 +366,40 @@ class CefWindow : public CefPanel { + /// + /*--cef()--*/ + virtual void RemoveAllAccelerators() = 0; ++ ++ // AGL-related calls ++ ++ /// ++ /// Tells the agl compositor to activate the app ++ /// ++ /*--cef()--*/ ++ virtual void AglActivateApp(const CefString& app) = 0; ++ ++ /// ++ /// Tells the agl compositor the application id ++ /// ++ /*--cef()--*/ ++ virtual void AglSetAppId(const CefString& app_id) = 0; ++ ++ /// ++ /// Tells the agl compositor that everything is set-up and good to go ++ /// ++ /*--cef()--*/ ++ virtual void AglSetAppReady() = 0; ++ ++ /// ++ /// Tells the agl compositor that the app is the background application ++ /// ++ /*--cef()--*/ ++ virtual void AglSetBackGroundApp() = 0; ++ ++ /// ++ /// Tells the agl compositor that the app is a panel ++ /// ++ /*--cef()--*/ ++ virtual void AglSetPanelApp(uint32_t edge) = 0; ++ ++ // ----------------- + }; + + #endif // CEF_INCLUDE_VIEWS_CEF_WINDOW_H_ +diff --git a/libcef/browser/views/view_util.h b/libcef/browser/views/view_util.h +index a5fb6e522..bc12a9ddc 100644 +--- a/libcef/browser/views/view_util.h ++++ b/libcef/browser/views/view_util.h +@@ -165,6 +165,16 @@ views::View* GetHostView(views::Widget* widget); + float GetNSWindowTitleBarHeight(views::Widget* widget); + #endif + ++// AGL-Related calls ++ ++void AglActivateApp(views::Widget* widget, const std::string& app); ++void AglSetAppId(views::Widget* widget, const std::string& app_id); ++void AglSetAppReady(views::Widget* widget); ++void AglSetBackGroundApp(views::Widget* widget); ++void AglSetPanelApp(views::Widget* widget, uint32_t edge); ++ ++// ----------------- ++ + } // namespace view_util + + #endif // CEF_LIBCEF_BROWSER_VIEWS_VIEW_UTIL_H_ +diff --git a/libcef/browser/views/view_util_aura.cc b/libcef/browser/views/view_util_aura.cc +index 24be3311b..2dabf5eae 100644 +--- a/libcef/browser/views/view_util_aura.cc ++++ b/libcef/browser/views/view_util_aura.cc +@@ -58,4 +58,58 @@ views::View* GetHostView(views::Widget* widget) { + return widget->GetNativeView()->GetProperty(views::kHostViewKey); + } + ++// AGL-Related calls ++ ++void AglActivateApp(views::Widget* widget, const std::string& app) { ++ if (!widget) { ++ return; ++ } ++ aura::Window* window = widget->GetNativeWindow(); ++ if (window && window->GetRootWindow()) { ++ return window->GetHost()->SetAglActivateApp(app); ++ } ++} ++ ++void AglSetAppId(views::Widget* widget, const std::string& app_id) { ++ if (!widget) { ++ return; ++ } ++ aura::Window* window = widget->GetNativeWindow(); ++ if (window && window->GetRootWindow()) { ++ return window->GetHost()->SetAglAppId(app_id); ++ } ++} ++ ++void AglSetAppReady(views::Widget* widget) { ++ if (!widget) { ++ return; ++ } ++ aura::Window* window = widget->GetNativeWindow(); ++ if (window && window->GetRootWindow()) { ++ return window->GetHost()->SetAglReady(); ++ } ++} ++ ++void AglSetBackGroundApp(views::Widget* widget) { ++ if (!widget) { ++ return; ++ } ++ aura::Window* window = widget->GetNativeWindow(); ++ if (window && window->GetRootWindow()) { ++ return window->GetHost()->SetAglBackground(); ++ } ++} ++ ++void AglSetPanelApp(views::Widget* widget, uint32_t edge) { ++ if (!widget) { ++ return; ++ } ++ aura::Window* window = widget->GetNativeWindow(); ++ if (window && window->GetRootWindow()) { ++ return window->GetHost()->SetAglPanel(edge); ++ } ++} ++ ++// ----------------- ++ + } // namespace view_util +diff --git a/libcef/browser/views/window_impl.cc b/libcef/browser/views/window_impl.cc +index 3da94b08a..8b347bf4a 100644 +--- a/libcef/browser/views/window_impl.cc ++++ b/libcef/browser/views/window_impl.cc +@@ -768,3 +768,27 @@ void CefWindowImpl::CreateWidget(gfx::AcceleratedWidget parent_widget) { + delegate()->OnWindowCreated(this); + } + } ++ ++// AGL-Related calls ++ ++void CefWindowImpl::AglActivateApp(const CefString& app) { ++ view_util::AglActivateApp(widget_, app); ++} ++ ++void CefWindowImpl::AglSetAppId(const CefString& app_id) { ++ view_util::AglSetAppId(widget_, app_id); ++} ++ ++void CefWindowImpl::AglSetAppReady() { ++ view_util::AglSetAppReady(widget_); ++} ++ ++void CefWindowImpl::AglSetBackGroundApp() { ++ view_util::AglSetBackGroundApp(widget_); ++} ++ ++void CefWindowImpl::AglSetPanelApp(uint32_t edge) { ++ view_util::AglSetPanelApp(widget_, edge); ++} ++ ++// ----------------- +diff --git a/libcef/browser/views/window_impl.h b/libcef/browser/views/window_impl.h +index fae0ae832..20514fc32 100644 +--- a/libcef/browser/views/window_impl.h ++++ b/libcef/browser/views/window_impl.h +@@ -134,6 +134,16 @@ class CefWindowImpl + views::Widget* widget() const { return widget_; } + bool initialized() const { return initialized_; } + ++ // AGL-Related calls ++ ++ void AglActivateApp(const CefString& app) override; ++ void AglSetAppId(const CefString& app_id) override; ++ void AglSetAppReady() override; ++ void AglSetBackGroundApp() override; ++ void AglSetPanelApp(uint32_t edge) override; ++ ++ // ----------------- ++ + private: + // Create a new implementation object. + // Always call Initialize() after creation. +-- +2.42.0 + diff --git a/recipes-wam/cef/files/cef/0005-Linux-Fix-build-without-X11-fixes-issue-3431.patch b/recipes-wam/cef/files/cef/0005-Linux-Fix-build-without-X11-fixes-issue-3431.patch deleted file mode 100644 index 75b44e3f..00000000 --- a/recipes-wam/cef/files/cef/0005-Linux-Fix-build-without-X11-fixes-issue-3431.patch +++ /dev/null @@ -1,62 +0,0 @@ -From b0bdd62be712b69db9164e80d4190d2bc72dcb3c Mon Sep 17 00:00:00 2001 -From: Enrique Turegano Pedruelo -Date: Tue, 10 Jan 2023 21:30:47 +0000 -Subject: [PATCH 05/10] Linux: Fix build without X11 (fixes issue #3431) - ---- - .../browser_platform_delegate_native_linux.cc | 15 +++++++++++++-- - 1 file changed, 13 insertions(+), 2 deletions(-) - -diff --git a/libcef/browser/native/browser_platform_delegate_native_linux.cc b/libcef/browser/native/browser_platform_delegate_native_linux.cc -index 5972a3134..95ca3df39 100644 ---- a/libcef/browser/native/browser_platform_delegate_native_linux.cc -+++ b/libcef/browser/native/browser_platform_delegate_native_linux.cc -@@ -16,14 +16,14 @@ - #include "third_party/blink/public/mojom/renderer_preferences.mojom.h" - #include "ui/events/keycodes/dom/dom_key.h" - #include "ui/events/keycodes/dom/keycode_converter.h" --#include "ui/events/keycodes/keyboard_code_conversion_x.h" --#include "ui/events/keycodes/keyboard_code_conversion_xkb.h" - #include "ui/events/keycodes/keysym_to_unicode.h" - #include "ui/gfx/font_render_params.h" - #include "ui/views/widget/widget.h" - - #if BUILDFLAG(OZONE_PLATFORM_X11) - #include "libcef/browser/native/window_x11.h" -+#include "ui/events/keycodes/keyboard_code_conversion_x.h" -+#include "ui/events/keycodes/keyboard_code_conversion_xkb.h" - #include "ui/views/widget/desktop_aura/desktop_window_tree_host_linux.h" - #endif - -@@ -240,9 +240,15 @@ ui::KeyEvent CefBrowserPlatformDelegateNativeLinux::TranslateUiKeyEvent( - static_cast(key_event.windows_key_code); - ui::DomCode dom_code = - ui::KeycodeConverter::NativeKeycodeToDomCode(key_event.native_key_code); -+ -+#if BUILDFLAG(OZONE_PLATFORM_X11) - int keysym = ui::XKeysymForWindowsKeyCode( - key_code, !!(key_event.modifiers & EVENTFLAG_SHIFT_DOWN)); - char16_t character = ui::GetUnicodeCharacterFromXKeySym(keysym); -+#else -+ char16_t character = key_event.character; -+#endif -+ - base::TimeTicks time_stamp = GetEventTimeStamp(); - - if (key_event.type == KEYEVENT_CHAR) { -@@ -262,7 +268,12 @@ ui::KeyEvent CefBrowserPlatformDelegateNativeLinux::TranslateUiKeyEvent( - NOTREACHED(); - } - -+#if BUILDFLAG(OZONE_PLATFORM_X11) - ui::DomKey dom_key = ui::XKeySymToDomKey(keysym, character); -+#else -+ ui::DomKey dom_key = ui::DomKey::NONE; -+#endif -+ - return ui::KeyEvent(type, key_code, dom_code, flags, dom_key, time_stamp); - } - --- -2.39.2 - diff --git a/recipes-wam/cef/files/cef/0006-Add-AGL-wayland-window-related-calls.patch b/recipes-wam/cef/files/cef/0006-Add-AGL-wayland-window-related-calls.patch deleted file mode 100644 index 36ae7793..00000000 --- a/recipes-wam/cef/files/cef/0006-Add-AGL-wayland-window-related-calls.patch +++ /dev/null @@ -1,201 +0,0 @@ -From efba58d289ad381c6ca9fae9ded040c816946894 Mon Sep 17 00:00:00 2001 -From: Roger Zanoni -Date: Thu, 18 May 2023 10:34:08 +0200 -Subject: [PATCH 06/10] Add AGL wayland window related calls - ---- - include/views/cef_window.h | 34 ++++++++++++++++ - libcef/browser/views/view_util.h | 10 +++++ - libcef/browser/views/view_util_aura.cc | 54 ++++++++++++++++++++++++++ - libcef/browser/views/window_impl.cc | 24 ++++++++++++ - libcef/browser/views/window_impl.h | 10 +++++ - 5 files changed, 132 insertions(+) - -diff --git a/include/views/cef_window.h b/include/views/cef_window.h -index e34e446bd..dfa7821bc 100644 ---- a/include/views/cef_window.h -+++ b/include/views/cef_window.h -@@ -348,6 +348,40 @@ class CefWindow : public CefPanel { - /// - /*--cef()--*/ - virtual void RemoveAllAccelerators() = 0; -+ -+ // AGL-related calls -+ -+ /// -+ /// Tells the agl compositor to activate the app -+ /// -+ /*--cef()--*/ -+ virtual void AglActivateApp(const CefString& app) = 0; -+ -+ /// -+ /// Tells the agl compositor the application id -+ /// -+ /*--cef()--*/ -+ virtual void AglSetAppId(const CefString& app_id) = 0; -+ -+ /// -+ /// Tells the agl compositor that everything is set-up and good to go -+ /// -+ /*--cef()--*/ -+ virtual void AglSetAppReady() = 0; -+ -+ /// -+ /// Tells the agl compositor that the app is the background application -+ /// -+ /*--cef()--*/ -+ virtual void AglSetBackGroundApp() = 0; -+ -+ /// -+ /// Tells the agl compositor that the app is a panel -+ /// -+ /*--cef()--*/ -+ virtual void AglSetPanelApp(uint32_t edge) = 0; -+ -+ // ----------------- - }; - - #endif // CEF_INCLUDE_VIEWS_CEF_WINDOW_H_ -diff --git a/libcef/browser/views/view_util.h b/libcef/browser/views/view_util.h -index 302eee464..505c66d94 100644 ---- a/libcef/browser/views/view_util.h -+++ b/libcef/browser/views/view_util.h -@@ -141,6 +141,16 @@ CefWindowHandle GetWindowHandle(views::Widget* widget); - // Returns the platform window handle for |window|. May return nullptr. - CefWindowHandle GetWindowHandle(gfx::NativeWindow window); - -+// AGL-Related calls -+ -+void AglActivateApp(views::Widget* widget, const std::string& app); -+void AglSetAppId(views::Widget* widget, const std::string& app_id); -+void AglSetAppReady(views::Widget* widget); -+void AglSetBackGroundApp(views::Widget* widget); -+void AglSetPanelApp(views::Widget* widget, uint32_t edge); -+ -+// ----------------- -+ - } // namespace view_util - - #endif // CEF_LIBCEF_BROWSER_VIEWS_VIEW_UTIL_H_ -diff --git a/libcef/browser/views/view_util_aura.cc b/libcef/browser/views/view_util_aura.cc -index 8a144eb33..2ad2f3dc7 100644 ---- a/libcef/browser/views/view_util_aura.cc -+++ b/libcef/browser/views/view_util_aura.cc -@@ -39,4 +39,58 @@ CefWindowHandle GetWindowHandle(gfx::NativeWindow window) { - return kNullWindowHandle; - } - -+// AGL-Related calls -+ -+void AglActivateApp(views::Widget* widget, const std::string& app) { -+ if (!widget) { -+ return; -+ } -+ aura::Window* window = widget->GetNativeWindow(); -+ if (window && window->GetRootWindow()) { -+ return window->GetHost()->SetAglActivateApp(app); -+ } -+} -+ -+void AglSetAppId(views::Widget* widget, const std::string& app_id) { -+ if (!widget) { -+ return; -+ } -+ aura::Window* window = widget->GetNativeWindow(); -+ if (window && window->GetRootWindow()) { -+ return window->GetHost()->SetAglAppId(app_id); -+ } -+} -+ -+void AglSetAppReady(views::Widget* widget) { -+ if (!widget) { -+ return; -+ } -+ aura::Window* window = widget->GetNativeWindow(); -+ if (window && window->GetRootWindow()) { -+ return window->GetHost()->SetAglReady(); -+ } -+} -+ -+void AglSetBackGroundApp(views::Widget* widget) { -+ if (!widget) { -+ return; -+ } -+ aura::Window* window = widget->GetNativeWindow(); -+ if (window && window->GetRootWindow()) { -+ return window->GetHost()->SetAglBackground(); -+ } -+} -+ -+void AglSetPanelApp(views::Widget* widget, uint32_t edge) { -+ if (!widget) { -+ return; -+ } -+ aura::Window* window = widget->GetNativeWindow(); -+ if (window && window->GetRootWindow()) { -+ return window->GetHost()->SetAglPanel(edge); -+ } -+} -+ -+// ----------------- -+ - } // namespace view_util -diff --git a/libcef/browser/views/window_impl.cc b/libcef/browser/views/window_impl.cc -index 64e5c443e..22a4d39f6 100644 ---- a/libcef/browser/views/window_impl.cc -+++ b/libcef/browser/views/window_impl.cc -@@ -522,6 +522,30 @@ CefWindowHandle CefWindowImpl::GetWindowHandle() { - return view_util::GetWindowHandle(widget_); - } - -+// AGL-Related calls -+ -+void CefWindowImpl::AglActivateApp(const CefString& app) { -+ view_util::AglActivateApp(widget_, app); -+} -+ -+void CefWindowImpl::AglSetAppId(const CefString& app_id) { -+ view_util::AglSetAppId(widget_, app_id); -+} -+ -+void CefWindowImpl::AglSetAppReady() { -+ view_util::AglSetAppReady(widget_); -+} -+ -+void CefWindowImpl::AglSetBackGroundApp() { -+ view_util::AglSetBackGroundApp(widget_); -+} -+ -+void CefWindowImpl::AglSetPanelApp(uint32_t edge) { -+ view_util::AglSetPanelApp(widget_, edge); -+} -+ -+// ----------------- -+ - void CefWindowImpl::SendKeyPress(int key_code, uint32 event_flags) { - CEF_REQUIRE_VALID_RETURN_VOID(); - InitializeUITesting(); -diff --git a/libcef/browser/views/window_impl.h b/libcef/browser/views/window_impl.h -index f9557d415..ad02904f9 100644 ---- a/libcef/browser/views/window_impl.h -+++ b/libcef/browser/views/window_impl.h -@@ -132,6 +132,16 @@ class CefWindowImpl - - views::Widget* widget() const { return widget_; } - -+ // AGL-Related calls -+ -+ void AglActivateApp(const CefString& app) override; -+ void AglSetAppId(const CefString& app_id) override; -+ void AglSetAppReady() override; -+ void AglSetBackGroundApp() override; -+ void AglSetPanelApp(uint32_t edge) override; -+ -+ // ----------------- -+ - private: - // Create a new implementation object. - // Always call Initialize() after creation. --- -2.39.2 - diff --git a/recipes-wam/cef/files/cef/0006-Add-a-method-to-check-if-the-agl-window-is-configure.patch b/recipes-wam/cef/files/cef/0006-Add-a-method-to-check-if-the-agl-window-is-configure.patch new file mode 100644 index 00000000..0f5c4c5f --- /dev/null +++ b/recipes-wam/cef/files/cef/0006-Add-a-method-to-check-if-the-agl-window-is-configure.patch @@ -0,0 +1,129 @@ +From 7eefab1c1a8938145f9fb3a5d7a8fa58ca7ad695 Mon Sep 17 00:00:00 2001 +From: Roger Zanoni +Date: Fri, 30 Jun 2023 10:27:03 +0200 +Subject: [PATCH 6/9] Add a method to check if the agl window is configured + +--- + include/views/cef_window.h | 6 ++++++ + libcef/browser/views/view_util.h | 1 + + libcef/browser/views/view_util_aura.cc | 20 +++++++++++++++----- + libcef/browser/views/window_impl.cc | 4 ++++ + libcef/browser/views/window_impl.h | 1 + + 5 files changed, 27 insertions(+), 5 deletions(-) + +diff --git a/include/views/cef_window.h b/include/views/cef_window.h +index 22fe2e2a1..c34963302 100644 +--- a/include/views/cef_window.h ++++ b/include/views/cef_window.h +@@ -399,6 +399,12 @@ class CefWindow : public CefPanel { + /*--cef()--*/ + virtual void AglSetPanelApp(uint32_t edge) = 0; + ++ /// ++ /// Tells if the window wayland surface is configured ++ /// ++ /*--cef()--*/ ++ virtual bool IsSurfaceConfigured() = 0; ++ + // ----------------- + }; + +diff --git a/libcef/browser/views/view_util.h b/libcef/browser/views/view_util.h +index bc12a9ddc..bf657fd39 100644 +--- a/libcef/browser/views/view_util.h ++++ b/libcef/browser/views/view_util.h +@@ -172,6 +172,7 @@ void AglSetAppId(views::Widget* widget, const std::string& app_id); + void AglSetAppReady(views::Widget* widget); + void AglSetBackGroundApp(views::Widget* widget); + void AglSetPanelApp(views::Widget* widget, uint32_t edge); ++bool IsSurfaceConfigured(views::Widget* widget); + + // ----------------- + +diff --git a/libcef/browser/views/view_util_aura.cc b/libcef/browser/views/view_util_aura.cc +index 2dabf5eae..2946a2d81 100644 +--- a/libcef/browser/views/view_util_aura.cc ++++ b/libcef/browser/views/view_util_aura.cc +@@ -66,7 +66,7 @@ void AglActivateApp(views::Widget* widget, const std::string& app) { + } + aura::Window* window = widget->GetNativeWindow(); + if (window && window->GetRootWindow()) { +- return window->GetHost()->SetAglActivateApp(app); ++ window->GetHost()->SetAglActivateApp(app); + } + } + +@@ -76,7 +76,7 @@ void AglSetAppId(views::Widget* widget, const std::string& app_id) { + } + aura::Window* window = widget->GetNativeWindow(); + if (window && window->GetRootWindow()) { +- return window->GetHost()->SetAglAppId(app_id); ++ window->GetHost()->SetAglAppId(app_id); + } + } + +@@ -86,7 +86,7 @@ void AglSetAppReady(views::Widget* widget) { + } + aura::Window* window = widget->GetNativeWindow(); + if (window && window->GetRootWindow()) { +- return window->GetHost()->SetAglReady(); ++ window->GetHost()->SetAglReady(); + } + } + +@@ -96,7 +96,7 @@ void AglSetBackGroundApp(views::Widget* widget) { + } + aura::Window* window = widget->GetNativeWindow(); + if (window && window->GetRootWindow()) { +- return window->GetHost()->SetAglBackground(); ++ window->GetHost()->SetAglBackground(); + } + } + +@@ -106,7 +106,17 @@ void AglSetPanelApp(views::Widget* widget, uint32_t edge) { + } + aura::Window* window = widget->GetNativeWindow(); + if (window && window->GetRootWindow()) { +- return window->GetHost()->SetAglPanel(edge); ++ window->GetHost()->SetAglPanel(edge); ++ } ++} ++ ++bool IsSurfaceConfigured(views::Widget* widget) { ++ if (!widget) { ++ return false; ++ } ++ aura::Window* window = widget->GetNativeWindow(); ++ if (window && window->GetRootWindow()) { ++ return window->GetHost()->IsSurfaceConfigured(); + } + } + +diff --git a/libcef/browser/views/window_impl.cc b/libcef/browser/views/window_impl.cc +index 8b347bf4a..8edac98b5 100644 +--- a/libcef/browser/views/window_impl.cc ++++ b/libcef/browser/views/window_impl.cc +@@ -791,4 +791,8 @@ void CefWindowImpl::AglSetPanelApp(uint32_t edge) { + view_util::AglSetPanelApp(widget_, edge); + } + ++bool CefWindowImpl::IsSurfaceConfigured() { ++ return view_util::IsSurfaceConfigured(widget_); ++} ++ + // ----------------- +diff --git a/libcef/browser/views/window_impl.h b/libcef/browser/views/window_impl.h +index 20514fc32..7f7b47e1a 100644 +--- a/libcef/browser/views/window_impl.h ++++ b/libcef/browser/views/window_impl.h +@@ -141,6 +141,7 @@ class CefWindowImpl + void AglSetAppReady() override; + void AglSetBackGroundApp() override; + void AglSetPanelApp(uint32_t edge) override; ++ bool IsSurfaceConfigured() override; + + // ----------------- + +-- +2.42.0 + diff --git a/recipes-wam/cef/files/cef/0007-Add-a-method-to-check-if-the-agl-window-is-configure.patch b/recipes-wam/cef/files/cef/0007-Add-a-method-to-check-if-the-agl-window-is-configure.patch deleted file mode 100644 index 14897f1a..00000000 --- a/recipes-wam/cef/files/cef/0007-Add-a-method-to-check-if-the-agl-window-is-configure.patch +++ /dev/null @@ -1,131 +0,0 @@ -From b22b5302f20678bca5f03fe1738ce06fc799263b Mon Sep 17 00:00:00 2001 -From: Roger Zanoni -Date: Fri, 30 Jun 2023 10:27:03 +0200 -Subject: [PATCH 07/10] Add a method to check if the agl window is configured - ---- - include/views/cef_window.h | 6 ++++++ - libcef/browser/views/view_util.h | 1 + - libcef/browser/views/view_util_aura.cc | 20 +++++++++++++++----- - libcef/browser/views/window_impl.cc | 4 ++++ - libcef/browser/views/window_impl.h | 1 + - 5 files changed, 27 insertions(+), 5 deletions(-) - -diff --git a/include/views/cef_window.h b/include/views/cef_window.h -index dfa7821bc..063529964 100644 ---- a/include/views/cef_window.h -+++ b/include/views/cef_window.h -@@ -381,6 +381,12 @@ class CefWindow : public CefPanel { - /*--cef()--*/ - virtual void AglSetPanelApp(uint32_t edge) = 0; - -+ /// -+ /// Tells if the window wayland surface is configured -+ /// -+ /*--cef()--*/ -+ virtual bool IsSurfaceConfigured() = 0; -+ - // ----------------- - }; - -diff --git a/libcef/browser/views/view_util.h b/libcef/browser/views/view_util.h -index 505c66d94..20b97038b 100644 ---- a/libcef/browser/views/view_util.h -+++ b/libcef/browser/views/view_util.h -@@ -148,6 +148,7 @@ void AglSetAppId(views::Widget* widget, const std::string& app_id); - void AglSetAppReady(views::Widget* widget); - void AglSetBackGroundApp(views::Widget* widget); - void AglSetPanelApp(views::Widget* widget, uint32_t edge); -+bool IsSurfaceConfigured(views::Widget* widget); - - // ----------------- - -diff --git a/libcef/browser/views/view_util_aura.cc b/libcef/browser/views/view_util_aura.cc -index 2ad2f3dc7..b5b4f414b 100644 ---- a/libcef/browser/views/view_util_aura.cc -+++ b/libcef/browser/views/view_util_aura.cc -@@ -47,7 +47,7 @@ void AglActivateApp(views::Widget* widget, const std::string& app) { - } - aura::Window* window = widget->GetNativeWindow(); - if (window && window->GetRootWindow()) { -- return window->GetHost()->SetAglActivateApp(app); -+ window->GetHost()->SetAglActivateApp(app); - } - } - -@@ -57,7 +57,7 @@ void AglSetAppId(views::Widget* widget, const std::string& app_id) { - } - aura::Window* window = widget->GetNativeWindow(); - if (window && window->GetRootWindow()) { -- return window->GetHost()->SetAglAppId(app_id); -+ window->GetHost()->SetAglAppId(app_id); - } - } - -@@ -67,7 +67,7 @@ void AglSetAppReady(views::Widget* widget) { - } - aura::Window* window = widget->GetNativeWindow(); - if (window && window->GetRootWindow()) { -- return window->GetHost()->SetAglReady(); -+ window->GetHost()->SetAglReady(); - } - } - -@@ -77,7 +77,7 @@ void AglSetBackGroundApp(views::Widget* widget) { - } - aura::Window* window = widget->GetNativeWindow(); - if (window && window->GetRootWindow()) { -- return window->GetHost()->SetAglBackground(); -+ window->GetHost()->SetAglBackground(); - } - } - -@@ -87,7 +87,17 @@ void AglSetPanelApp(views::Widget* widget, uint32_t edge) { - } - aura::Window* window = widget->GetNativeWindow(); - if (window && window->GetRootWindow()) { -- return window->GetHost()->SetAglPanel(edge); -+ window->GetHost()->SetAglPanel(edge); -+ } -+} -+ -+bool IsSurfaceConfigured(views::Widget* widget) { -+ if (!widget) { -+ return false; -+ } -+ aura::Window* window = widget->GetNativeWindow(); -+ if (window && window->GetRootWindow()) { -+ return window->GetHost()->IsSurfaceConfigured(); - } - } - -diff --git a/libcef/browser/views/window_impl.cc b/libcef/browser/views/window_impl.cc -index 22a4d39f6..1b5d196ab 100644 ---- a/libcef/browser/views/window_impl.cc -+++ b/libcef/browser/views/window_impl.cc -@@ -544,6 +544,10 @@ void CefWindowImpl::AglSetPanelApp(uint32_t edge) { - view_util::AglSetPanelApp(widget_, edge); - } - -+bool CefWindowImpl::IsSurfaceConfigured() { -+ return view_util::IsSurfaceConfigured(widget_); -+} -+ - // ----------------- - - void CefWindowImpl::SendKeyPress(int key_code, uint32 event_flags) { -diff --git a/libcef/browser/views/window_impl.h b/libcef/browser/views/window_impl.h -index ad02904f9..4ab77dbe6 100644 ---- a/libcef/browser/views/window_impl.h -+++ b/libcef/browser/views/window_impl.h -@@ -139,6 +139,7 @@ class CefWindowImpl - void AglSetAppReady() override; - void AglSetBackGroundApp() override; - void AglSetPanelApp(uint32_t edge) override; -+ bool IsSurfaceConfigured() override; - - // ----------------- - --- -2.39.2 - diff --git a/recipes-wam/cef/files/cef/0007-Add-the-SetActivateRegion-method.patch b/recipes-wam/cef/files/cef/0007-Add-the-SetActivateRegion-method.patch new file mode 100644 index 00000000..e2d87065 --- /dev/null +++ b/recipes-wam/cef/files/cef/0007-Add-the-SetActivateRegion-method.patch @@ -0,0 +1,101 @@ +From 6515114202a98f81950687b6656151fa7cfd5ab6 Mon Sep 17 00:00:00 2001 +From: Roger Zanoni +Date: Sun, 2 Jul 2023 12:08:59 +0200 +Subject: [PATCH 7/9] Add the SetActivateRegion method + +--- + include/views/cef_window.h | 6 ++++++ + libcef/browser/views/view_util.h | 1 + + libcef/browser/views/view_util_aura.cc | 17 +++++++++++++++++ + libcef/browser/views/window_impl.cc | 7 +++++++ + libcef/browser/views/window_impl.h | 1 + + 5 files changed, 32 insertions(+) + +diff --git a/include/views/cef_window.h b/include/views/cef_window.h +index c34963302..9f196a1e7 100644 +--- a/include/views/cef_window.h ++++ b/include/views/cef_window.h +@@ -405,6 +405,12 @@ class CefWindow : public CefPanel { + /*--cef()--*/ + virtual bool IsSurfaceConfigured() = 0; + ++ /// ++ /// A hint for the compositor to use a custom area, rather than inferring the activation area. ++ /// ++ /*--cef()--*/ ++ virtual void SetupActivationArea(uint32_t x, uint32_t y, uint32_t width, uint32_t height) = 0; ++ + // ----------------- + }; + +diff --git a/libcef/browser/views/view_util.h b/libcef/browser/views/view_util.h +index bf657fd39..50037a198 100644 +--- a/libcef/browser/views/view_util.h ++++ b/libcef/browser/views/view_util.h +@@ -173,6 +173,7 @@ void AglSetAppReady(views::Widget* widget); + void AglSetBackGroundApp(views::Widget* widget); + void AglSetPanelApp(views::Widget* widget, uint32_t edge); + bool IsSurfaceConfigured(views::Widget* widget); ++void SetupActivationArea(views::Widget* widget, uint32_t x, uint32_t y, uint32_t width, uint32_t height); + + // ----------------- + +diff --git a/libcef/browser/views/view_util_aura.cc b/libcef/browser/views/view_util_aura.cc +index 2946a2d81..bf435078d 100644 +--- a/libcef/browser/views/view_util_aura.cc ++++ b/libcef/browser/views/view_util_aura.cc +@@ -120,6 +120,23 @@ bool IsSurfaceConfigured(views::Widget* widget) { + } + } + ++void SetupActivationArea(views::Widget* widget, ++ uint32_t x, ++ uint32_t y, ++ uint32_t width, ++ uint32_t height) { ++ if (!widget) { ++ return; ++ } ++ aura::Window* window = widget->GetNativeWindow(); ++ if (window && window->GetRootWindow()) { ++ window->GetHost()->SetupActivationArea(x, ++ y, ++ width, ++ height); ++ } ++} ++ + // ----------------- + + } // namespace view_util +diff --git a/libcef/browser/views/window_impl.cc b/libcef/browser/views/window_impl.cc +index 8edac98b5..12858364e 100644 +--- a/libcef/browser/views/window_impl.cc ++++ b/libcef/browser/views/window_impl.cc +@@ -795,4 +795,11 @@ bool CefWindowImpl::IsSurfaceConfigured() { + return view_util::IsSurfaceConfigured(widget_); + } + ++void CefWindowImpl::SetupActivationArea(uint32_t x, ++ uint32_t y, ++ uint32_t width, ++ uint32_t height) { ++ view_util::SetupActivationArea(widget_, x, y, width, height); ++} ++ + // ----------------- +diff --git a/libcef/browser/views/window_impl.h b/libcef/browser/views/window_impl.h +index 7f7b47e1a..aaca3c281 100644 +--- a/libcef/browser/views/window_impl.h ++++ b/libcef/browser/views/window_impl.h +@@ -142,6 +142,7 @@ class CefWindowImpl + void AglSetBackGroundApp() override; + void AglSetPanelApp(uint32_t edge) override; + bool IsSurfaceConfigured() override; ++ void SetupActivationArea(uint32_t x, uint32_t y, uint32_t width, uint32_t height) override; + + // ----------------- + +-- +2.42.0 + diff --git a/recipes-wam/cef/files/cef/0008-Add-the-SetActivateRegion-method.patch b/recipes-wam/cef/files/cef/0008-Add-the-SetActivateRegion-method.patch deleted file mode 100644 index ecc806a2..00000000 --- a/recipes-wam/cef/files/cef/0008-Add-the-SetActivateRegion-method.patch +++ /dev/null @@ -1,103 +0,0 @@ -From fcbb9bc7c390f2b9ab54c9f8996140ff83b46538 Mon Sep 17 00:00:00 2001 -From: Roger Zanoni -Date: Sun, 2 Jul 2023 12:08:59 +0200 -Subject: [PATCH 08/10] Add the SetActivateRegion method - ---- - include/views/cef_window.h | 6 ++++++ - libcef/browser/views/view_util.h | 1 + - libcef/browser/views/view_util_aura.cc | 17 +++++++++++++++++ - libcef/browser/views/window_impl.cc | 7 +++++++ - libcef/browser/views/window_impl.h | 1 + - 5 files changed, 32 insertions(+) - -diff --git a/include/views/cef_window.h b/include/views/cef_window.h -index 063529964..52ccb7dc5 100644 ---- a/include/views/cef_window.h -+++ b/include/views/cef_window.h -@@ -387,6 +387,12 @@ class CefWindow : public CefPanel { - /*--cef()--*/ - virtual bool IsSurfaceConfigured() = 0; - -+ /// -+ /// A hint for the compositor to use a custom area, rather than inferring the activation area. -+ /// -+ /*--cef()--*/ -+ virtual void SetupActivationArea(uint32_t x, uint32_t y, uint32_t width, uint32_t height) = 0; -+ - // ----------------- - }; - -diff --git a/libcef/browser/views/view_util.h b/libcef/browser/views/view_util.h -index 20b97038b..76c023254 100644 ---- a/libcef/browser/views/view_util.h -+++ b/libcef/browser/views/view_util.h -@@ -149,6 +149,7 @@ void AglSetAppReady(views::Widget* widget); - void AglSetBackGroundApp(views::Widget* widget); - void AglSetPanelApp(views::Widget* widget, uint32_t edge); - bool IsSurfaceConfigured(views::Widget* widget); -+void SetupActivationArea(views::Widget* widget, uint32_t x, uint32_t y, uint32_t width, uint32_t height); - - // ----------------- - -diff --git a/libcef/browser/views/view_util_aura.cc b/libcef/browser/views/view_util_aura.cc -index b5b4f414b..96e44dbb6 100644 ---- a/libcef/browser/views/view_util_aura.cc -+++ b/libcef/browser/views/view_util_aura.cc -@@ -101,6 +101,23 @@ bool IsSurfaceConfigured(views::Widget* widget) { - } - } - -+void SetupActivationArea(views::Widget* widget, -+ uint32_t x, -+ uint32_t y, -+ uint32_t width, -+ uint32_t height) { -+ if (!widget) { -+ return; -+ } -+ aura::Window* window = widget->GetNativeWindow(); -+ if (window && window->GetRootWindow()) { -+ window->GetHost()->SetupActivationArea(x, -+ y, -+ width, -+ height); -+ } -+} -+ - // ----------------- - - } // namespace view_util -diff --git a/libcef/browser/views/window_impl.cc b/libcef/browser/views/window_impl.cc -index 1b5d196ab..485943ec6 100644 ---- a/libcef/browser/views/window_impl.cc -+++ b/libcef/browser/views/window_impl.cc -@@ -548,6 +548,13 @@ bool CefWindowImpl::IsSurfaceConfigured() { - return view_util::IsSurfaceConfigured(widget_); - } - -+void CefWindowImpl::SetupActivationArea(uint32_t x, -+ uint32_t y, -+ uint32_t width, -+ uint32_t height) { -+ view_util::SetupActivationArea(widget_, x, y, width, height); -+} -+ - // ----------------- - - void CefWindowImpl::SendKeyPress(int key_code, uint32 event_flags) { -diff --git a/libcef/browser/views/window_impl.h b/libcef/browser/views/window_impl.h -index 4ab77dbe6..89c136873 100644 ---- a/libcef/browser/views/window_impl.h -+++ b/libcef/browser/views/window_impl.h -@@ -140,6 +140,7 @@ class CefWindowImpl - void AglSetBackGroundApp() override; - void AglSetPanelApp(uint32_t edge) override; - bool IsSurfaceConfigured() override; -+ void SetupActivationArea(uint32_t x, uint32_t y, uint32_t width, uint32_t height) override; - - // ----------------- - --- -2.39.2 - diff --git a/recipes-wam/cef/files/cef/0008-Allow-passing-the-app_id-on-widget-creation.patch b/recipes-wam/cef/files/cef/0008-Allow-passing-the-app_id-on-widget-creation.patch new file mode 100644 index 00000000..e0a79b6c --- /dev/null +++ b/recipes-wam/cef/files/cef/0008-Allow-passing-the-app_id-on-widget-creation.patch @@ -0,0 +1,130 @@ +From 5a8d9996ee7b3ce77f7b3fd3c7839806a034ea16 Mon Sep 17 00:00:00 2001 +From: Roger Zanoni +Date: Tue, 4 Jul 2023 12:10:41 +0200 +Subject: [PATCH 08/10] Allow passing the app_id on widget creation + +--- + include/views/cef_window.h | 6 ++++++ + libcef/browser/views/window_impl.cc | 13 +++++++++---- + libcef/browser/views/window_impl.h | 6 ++++-- + libcef/browser/views/window_view.cc | 3 ++- + libcef/browser/views/window_view.h | 2 +- + 5 files changed, 22 insertions(+), 8 deletions(-) + +diff --git a/include/views/cef_window.h b/include/views/cef_window.h +index 9f196a1e7..16c854b09 100644 +--- a/include/views/cef_window.h ++++ b/include/views/cef_window.h +@@ -65,6 +65,12 @@ class CefWindow : public CefPanel { + CefRefPtr delegate); + + /// ++ /// Create a new Window with the provided ID ++ /// ++ /*--cef()--*/ ++ static CefRefPtr CreateTopLevelWindowWithId( ++ CefRefPtr delegate, const CefString& app_id); ++ /// + /// Show the Window. + /// + /*--cef()--*/ +diff --git a/libcef/browser/views/window_impl.cc b/libcef/browser/views/window_impl.cc +index 12858364e..f0fe9dfb2 100644 +--- a/libcef/browser/views/window_impl.cc ++++ b/libcef/browser/views/window_impl.cc +@@ -110,14 +110,19 @@ CefRefPtr CefWindow::CreateTopLevelWindow( + return CefWindowImpl::Create(delegate, gfx::kNullAcceleratedWidget); + } + ++CefRefPtr CefWindow::CreateTopLevelWindowWithId( ++ CefRefPtr delegate, const CefString& app_id) { ++ return CefWindowImpl::Create(delegate, gfx::kNullAcceleratedWidget, app_id); ++} ++ + // static + CefRefPtr CefWindowImpl::Create( + CefRefPtr delegate, +- gfx::AcceleratedWidget parent_widget) { ++ gfx::AcceleratedWidget parent_widget, const CefString& app_id) { + CEF_REQUIRE_UIT_RETURN(nullptr); + CefRefPtr window = new CefWindowImpl(delegate); + window->Initialize(); +- window->CreateWidget(parent_widget); ++ window->CreateWidget(parent_widget, app_id); + return window; + } + +@@ -745,10 +750,10 @@ void CefWindowImpl::InitializeRootView() { + static_cast(root_view())->Initialize(); + } + +-void CefWindowImpl::CreateWidget(gfx::AcceleratedWidget parent_widget) { ++void CefWindowImpl::CreateWidget(gfx::AcceleratedWidget parent_widget, const CefString& app_id) { + DCHECK(!widget_); + +- root_view()->CreateWidget(parent_widget); ++ root_view()->CreateWidget(parent_widget, app_id); + widget_ = root_view()->GetWidget(); + DCHECK(widget_); + +diff --git a/libcef/browser/views/window_impl.h b/libcef/browser/views/window_impl.h +index aaca3c281..1c5be736f 100644 +--- a/libcef/browser/views/window_impl.h ++++ b/libcef/browser/views/window_impl.h +@@ -36,7 +36,8 @@ class CefWindowImpl + // Create a new CefWindow instance. |delegate| may be nullptr. |parent_widget| + // will be used when creating a Chrome child window. + static CefRefPtr Create(CefRefPtr delegate, +- gfx::AcceleratedWidget parent_widget); ++ gfx::AcceleratedWidget parent_widget, ++ const CefString& app_id = ""); + + // CefWindow methods: + void Show() override; +@@ -157,7 +158,8 @@ class CefWindowImpl + void InitializeRootView() override; + + // Initialize the Widget. +- void CreateWidget(gfx::AcceleratedWidget parent_widget); ++ void CreateWidget(gfx::AcceleratedWidget parent_widget, ++ const CefString& app_id = ""); + + views::Widget* widget_ = nullptr; + +diff --git a/libcef/browser/views/window_view.cc b/libcef/browser/views/window_view.cc +index 2331caaea..5e4cb6b53 100644 +--- a/libcef/browser/views/window_view.cc ++++ b/libcef/browser/views/window_view.cc +@@ -371,7 +371,7 @@ CefWindowView::CefWindowView(CefWindowDelegate* cef_delegate, + DCHECK(window_delegate_); + } + +-void CefWindowView::CreateWidget(gfx::AcceleratedWidget parent_widget) { ++void CefWindowView::CreateWidget(gfx::AcceleratedWidget parent_widget, const CefString& app_id) { + DCHECK(!GetWidget()); + + // |widget| is owned by the NativeWidget and will be destroyed in response to +@@ -381,6 +381,7 @@ void CefWindowView::CreateWidget(gfx::AcceleratedWidget parent_widget) { + + views::Widget::InitParams params; + params.delegate = this; ++ params.wayland_app_id = app_id; + + views::Widget* host_widget = nullptr; + +diff --git a/libcef/browser/views/window_view.h b/libcef/browser/views/window_view.h +index b065f3700..c15e75d65 100644 +--- a/libcef/browser/views/window_view.h ++++ b/libcef/browser/views/window_view.h +@@ -52,7 +52,7 @@ class CefWindowView + CefWindowView& operator=(const CefWindowView&) = delete; + + // Create the Widget. +- void CreateWidget(gfx::AcceleratedWidget parent_widget); ++ void CreateWidget(gfx::AcceleratedWidget parent_widget, const CefString& app_id); + + // Returns the CefWindow associated with this view. See comments on + // CefViewView::GetCefView. +-- +2.42.1 + diff --git a/recipes-wam/cef/files/cef/0009-Allow-passing-the-app_id-on-widget-creation.patch b/recipes-wam/cef/files/cef/0009-Allow-passing-the-app_id-on-widget-creation.patch deleted file mode 100644 index 006664d3..00000000 --- a/recipes-wam/cef/files/cef/0009-Allow-passing-the-app_id-on-widget-creation.patch +++ /dev/null @@ -1,130 +0,0 @@ -From 6bd43a70c23d407ca6c4d4a68f0e95eb3301290a Mon Sep 17 00:00:00 2001 -From: Roger Zanoni -Date: Tue, 4 Jul 2023 12:10:41 +0200 -Subject: [PATCH 09/10] Allow passing the app_id on widget creation - ---- - include/views/cef_window.h | 6 ++++++ - libcef/browser/views/window_impl.cc | 13 +++++++++---- - libcef/browser/views/window_impl.h | 6 ++++-- - libcef/browser/views/window_view.cc | 3 ++- - libcef/browser/views/window_view.h | 2 +- - 5 files changed, 22 insertions(+), 8 deletions(-) - -diff --git a/include/views/cef_window.h b/include/views/cef_window.h -index 52ccb7dc5..fd3e1c1b5 100644 ---- a/include/views/cef_window.h -+++ b/include/views/cef_window.h -@@ -63,6 +63,12 @@ class CefWindow : public CefPanel { - CefRefPtr delegate); - - /// -+ /// Create a new Window with the provided ID -+ /// -+ /*--cef()--*/ -+ static CefRefPtr CreateTopLevelWindowWithId( -+ CefRefPtr delegate, const CefString& app_id); -+ /// - /// Show the Window. - /// - /*--cef()--*/ -diff --git a/libcef/browser/views/window_impl.cc b/libcef/browser/views/window_impl.cc -index 485943ec6..35df22c51 100644 ---- a/libcef/browser/views/window_impl.cc -+++ b/libcef/browser/views/window_impl.cc -@@ -115,14 +115,19 @@ CefRefPtr CefWindow::CreateTopLevelWindow( - return CefWindowImpl::Create(delegate, gfx::kNullAcceleratedWidget); - } - -+CefRefPtr CefWindow::CreateTopLevelWindowWithId( -+ CefRefPtr delegate, const CefString& app_id) { -+ return CefWindowImpl::Create(delegate, gfx::kNullAcceleratedWidget, app_id); -+} -+ - // static - CefRefPtr CefWindowImpl::Create( - CefRefPtr delegate, -- gfx::AcceleratedWidget parent_widget) { -+ gfx::AcceleratedWidget parent_widget, const CefString& app_id) { - CEF_REQUIRE_UIT_RETURN(nullptr); - CefRefPtr window = new CefWindowImpl(delegate); - window->Initialize(); -- window->CreateWidget(parent_widget); -+ window->CreateWidget(parent_widget, app_id); - if (delegate) - delegate->OnWindowCreated(window.get()); - return window; -@@ -678,10 +683,10 @@ void CefWindowImpl::InitializeRootView() { - static_cast(root_view())->Initialize(); - } - --void CefWindowImpl::CreateWidget(gfx::AcceleratedWidget parent_widget) { -+void CefWindowImpl::CreateWidget(gfx::AcceleratedWidget parent_widget, const CefString& app_id) { - DCHECK(!widget_); - -- root_view()->CreateWidget(parent_widget); -+ root_view()->CreateWidget(parent_widget, app_id); - widget_ = root_view()->GetWidget(); - DCHECK(widget_); - -diff --git a/libcef/browser/views/window_impl.h b/libcef/browser/views/window_impl.h -index 89c136873..d3330dfd8 100644 ---- a/libcef/browser/views/window_impl.h -+++ b/libcef/browser/views/window_impl.h -@@ -36,7 +36,8 @@ class CefWindowImpl - // Create a new CefWindow instance. |delegate| may be nullptr. |parent_widget| - // will be used when creating a Chrome child window. - static CefRefPtr Create(CefRefPtr delegate, -- gfx::AcceleratedWidget parent_widget); -+ gfx::AcceleratedWidget parent_widget, -+ const CefString& app_id = ""); - - // CefWindow methods: - void Show() override; -@@ -155,7 +156,8 @@ class CefWindowImpl - void InitializeRootView() override; - - // Initialize the Widget. -- void CreateWidget(gfx::AcceleratedWidget parent_widget); -+ void CreateWidget(gfx::AcceleratedWidget parent_widget, -+ const CefString& app_id = ""); - - views::Widget* widget_; - -diff --git a/libcef/browser/views/window_view.cc b/libcef/browser/views/window_view.cc -index 1e8d58a32..f4bf79ce3 100644 ---- a/libcef/browser/views/window_view.cc -+++ b/libcef/browser/views/window_view.cc -@@ -255,7 +255,7 @@ CefWindowView::CefWindowView(CefWindowDelegate* cef_delegate, - DCHECK(window_delegate_); - } - --void CefWindowView::CreateWidget(gfx::AcceleratedWidget parent_widget) { -+void CefWindowView::CreateWidget(gfx::AcceleratedWidget parent_widget, const CefString& app_id) { - DCHECK(!GetWidget()); - - // |widget| is owned by the NativeWidget and will be destroyed in response to -@@ -265,6 +265,7 @@ void CefWindowView::CreateWidget(gfx::AcceleratedWidget parent_widget) { - - views::Widget::InitParams params; - params.delegate = this; -+ params.wayland_app_id = app_id; - - bool can_activate = true; - bool can_resize = true; -diff --git a/libcef/browser/views/window_view.h b/libcef/browser/views/window_view.h -index 6789636b8..ca593c60a 100644 ---- a/libcef/browser/views/window_view.h -+++ b/libcef/browser/views/window_view.h -@@ -51,7 +51,7 @@ class CefWindowView - CefWindowView& operator=(const CefWindowView&) = delete; - - // Create the Widget. -- void CreateWidget(gfx::AcceleratedWidget parent_widget); -+ void CreateWidget(gfx::AcceleratedWidget parent_widget, const CefString& app_id); - - // Returns the CefWindow associated with this view. See comments on - // CefViewView::GetCefView. --- -2.39.2 - diff --git a/recipes-wam/cef/files/cef/0009-Update-generated-api.patch b/recipes-wam/cef/files/cef/0009-Update-generated-api.patch new file mode 100644 index 00000000..aaf8dd14 --- /dev/null +++ b/recipes-wam/cef/files/cef/0009-Update-generated-api.patch @@ -0,0 +1,753 @@ +From c10306e9da62f9c36513b98affc4589ea5016677 Mon Sep 17 00:00:00 2001 +From: Roger Zanoni +Date: Mon, 6 Nov 2023 16:00:35 -0300 +Subject: [PATCH 09/10] Update generated api + +Command used: + +./translator.sh --classes CefWindow CefWindowDelegate CefView CefViewDeleate --root-dir +--- + include/capi/cef_cookie_capi.h | 6 +- + include/capi/cef_media_router_capi.h | 6 +- + include/capi/cef_scheme_capi.h | 10 +- + include/capi/views/cef_window_capi.h | 52 +++++++- + include/cef_api_hash.h | 8 +- + libcef_dll/cpptoc/views/window_cpptoc.cc | 153 ++++++++++++++++++++++- + libcef_dll/ctocpp/views/window_ctocpp.cc | 148 +++++++++++++++++++++- + libcef_dll/ctocpp/views/window_ctocpp.h | 12 +- + libcef_dll/wrapper/libcef_dll_dylib.cc | 72 +++++++---- + 9 files changed, 422 insertions(+), 45 deletions(-) + +diff --git a/include/capi/cef_cookie_capi.h b/include/capi/cef_cookie_capi.h +index 1be978bfd..f6f19ede2 100644 +--- a/include/capi/cef_cookie_capi.h ++++ b/include/capi/cef_cookie_capi.h +@@ -33,7 +33,7 @@ + // by hand. See the translator.README.txt file in the tools directory for + // more information. + // +-// $hash=598c6f530b2e2553197d8c6a72ad9e2bf72b5443$ ++// $hash=8093e45bcbd09f41f21c0cb7c8719166cc481529$ + // + + #ifndef CEF_INCLUDE_CAPI_CEF_COOKIE_CAPI_H_ +@@ -126,8 +126,8 @@ typedef struct _cef_cookie_manager_t { + /// cef_settings_t.cache_path if specified or in memory otherwise. If |callback| + /// is non-NULL it will be executed asnychronously on the UI thread after the + /// manager's storage has been initialized. Using this function is equivalent to +-/// calling cef_request_context_t::cef_request_context_get_global_context()->Get +-/// DefaultCookieManager(). ++/// calling cef_request_context_t::cef_request_context_get_global_context()- ++/// >GetDefaultCookieManager(). + /// + CEF_EXPORT cef_cookie_manager_t* cef_cookie_manager_get_global_manager( + struct _cef_completion_callback_t* callback); +diff --git a/include/capi/cef_media_router_capi.h b/include/capi/cef_media_router_capi.h +index 27f9d0e15..9df759013 100644 +--- a/include/capi/cef_media_router_capi.h ++++ b/include/capi/cef_media_router_capi.h +@@ -33,7 +33,7 @@ + // by hand. See the translator.README.txt file in the tools directory for + // more information. + // +-// $hash=de4a9b856c6951231f446991a9b1efb89096ad3b$ ++// $hash=d3f29de333c90768caac6aee2b7eb2db5f593515$ + // + + #ifndef CEF_INCLUDE_CAPI_CEF_MEDIA_ROUTER_CAPI_H_ +@@ -114,8 +114,8 @@ typedef struct _cef_media_router_t { + /// Returns the MediaRouter object associated with the global request context. + /// If |callback| is non-NULL it will be executed asnychronously on the UI + /// thread after the manager's storage has been initialized. Equivalent to +-/// calling cef_request_context_t::cef_request_context_get_global_context()->get +-/// _media_router(). ++/// calling cef_request_context_t::cef_request_context_get_global_context()- ++/// >get_media_router(). + /// + CEF_EXPORT cef_media_router_t* cef_media_router_get_global( + struct _cef_completion_callback_t* callback); +diff --git a/include/capi/cef_scheme_capi.h b/include/capi/cef_scheme_capi.h +index 5f8796287..bdcd6cc3b 100644 +--- a/include/capi/cef_scheme_capi.h ++++ b/include/capi/cef_scheme_capi.h +@@ -33,7 +33,7 @@ + // by hand. See the translator.README.txt file in the tools directory for + // more information. + // +-// $hash=6b6a7f754abc9ee5d6f775ba9eee802d3244faf5$ ++// $hash=794d4c01f06c656c425779b0189a3b52820498ed$ + // + + #ifndef CEF_INCLUDE_CAPI_CEF_SCHEME_CAPI_H_ +@@ -116,8 +116,8 @@ typedef struct _cef_scheme_handler_factory_t { + /// matches the specified |scheme_name| and optional |domain_name|. Returns + /// false (0) if an error occurs. This function may be called on any thread in + /// the browser process. Using this function is equivalent to calling cef_reques +-/// t_context_t::cef_request_context_get_global_context()->register_scheme_handl +-/// er_factory(). ++/// t_context_t::cef_request_context_get_global_context()- ++/// >register_scheme_handler_factory(). + /// + CEF_EXPORT int cef_register_scheme_handler_factory( + const cef_string_t* scheme_name, +@@ -128,8 +128,8 @@ CEF_EXPORT int cef_register_scheme_handler_factory( + /// Clear all scheme handler factories registered with the global request + /// context. Returns false (0) on error. This function may be called on any + /// thread in the browser process. Using this function is equivalent to calling +-/// cef_request_context_t::cef_request_context_get_global_context()->clear_schem +-/// e_handler_factories(). ++/// cef_request_context_t::cef_request_context_get_global_context()- ++/// >clear_scheme_handler_factories(). + /// + CEF_EXPORT int cef_clear_scheme_handler_factories(void); + +diff --git a/include/capi/views/cef_window_capi.h b/include/capi/views/cef_window_capi.h +index e5e04e83e..b0be32ad2 100644 +--- a/include/capi/views/cef_window_capi.h ++++ b/include/capi/views/cef_window_capi.h +@@ -33,7 +33,7 @@ + // by hand. See the translator.README.txt file in the tools directory for + // more information. + // +-// $hash=4b43fe0b493d860e8b28d7a6d892db49d1135b34$ ++// $hash=53e1bba9189f03819c0646670cab8f9caabc74d6$ + // + + #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_WINDOW_CAPI_H_ +@@ -353,6 +353,49 @@ typedef struct _cef_window_t { + /// Remove all keyboard accelerators. + /// + void(CEF_CALLBACK* remove_all_accelerators)(struct _cef_window_t* self); ++ ++ /// ++ /// Tells the agl compositor to activate the app ++ /// ++ void(CEF_CALLBACK* agl_activate_app)(struct _cef_window_t* self, ++ const cef_string_t* app); ++ ++ /// ++ /// Tells the agl compositor the application id ++ /// ++ void(CEF_CALLBACK* agl_set_app_id)(struct _cef_window_t* self, ++ const cef_string_t* app_id); ++ ++ /// ++ /// Tells the agl compositor that everything is set-up and good to go ++ /// ++ void(CEF_CALLBACK* agl_set_app_ready)(struct _cef_window_t* self); ++ ++ /// ++ /// Tells the agl compositor that the app is the background application ++ /// ++ void(CEF_CALLBACK* agl_set_back_ground_app)(struct _cef_window_t* self); ++ ++ /// ++ /// Tells the agl compositor that the app is a panel ++ /// ++ void(CEF_CALLBACK* agl_set_panel_app)(struct _cef_window_t* self, ++ uint32_t edge); ++ ++ /// ++ /// Tells if the window wayland surface is configured ++ /// ++ int(CEF_CALLBACK* is_surface_configured)(struct _cef_window_t* self); ++ ++ /// ++ /// A hint for the compositor to use a custom area, rather than inferring the ++ /// activation area. ++ /// ++ void(CEF_CALLBACK* setup_activation_area)(struct _cef_window_t* self, ++ uint32_t x, ++ uint32_t y, ++ uint32_t width, ++ uint32_t height); + } cef_window_t; + + /// +@@ -361,6 +404,13 @@ typedef struct _cef_window_t { + CEF_EXPORT cef_window_t* cef_window_create_top_level( + struct _cef_window_delegate_t* delegate); + ++/// ++/// Create a new Window with the provided ID ++/// ++CEF_EXPORT cef_window_t* cef_window_create_top_level_with_id( ++ struct _cef_window_delegate_t* delegate, ++ const cef_string_t* app_id); ++ + #ifdef __cplusplus + } + #endif +diff --git a/include/cef_api_hash.h b/include/cef_api_hash.h +index 90142ccb0..6af07332a 100644 +--- a/include/cef_api_hash.h ++++ b/include/cef_api_hash.h +@@ -42,13 +42,13 @@ + // way that may cause binary incompatibility with other builds. The universal + // hash value will change if any platform is affected whereas the platform hash + // values will change only if that particular platform is affected. +-#define CEF_API_HASH_UNIVERSAL "4acea2e5c7a3e281d9652802ae1d24b25eef299b" ++#define CEF_API_HASH_UNIVERSAL "7d1351328f7aeb7db3ae74b6d687b115ceec7695" + #if defined(OS_WIN) +-#define CEF_API_HASH_PLATFORM "3a181fdfaa42d2214c77cd83f76886b0657b0b53" ++#define CEF_API_HASH_PLATFORM "70c2a3fee7a3f4a4f6d44d4a3b3699ad23cf6f67" + #elif defined(OS_MAC) +-#define CEF_API_HASH_PLATFORM "06bfe874ee215bde0a415bac7ac37ecf4969d4ca" ++#define CEF_API_HASH_PLATFORM "9d9d39318398a7efaf43406ae25967a33c9d9787" + #elif defined(OS_LINUX) +-#define CEF_API_HASH_PLATFORM "1615f7e7079d89e2e81f683d4a8480455b5f2a60" ++#define CEF_API_HASH_PLATFORM "f828859cd19052fd3dab4b9f50f530d7011642b6" + #endif + + #ifdef __cplusplus +diff --git a/libcef_dll/cpptoc/views/window_cpptoc.cc b/libcef_dll/cpptoc/views/window_cpptoc.cc +index 93ee5341f..cbb4bb1a4 100644 +--- a/libcef_dll/cpptoc/views/window_cpptoc.cc ++++ b/libcef_dll/cpptoc/views/window_cpptoc.cc +@@ -9,7 +9,7 @@ + // implementations. See the translator.README.txt file in the tools directory + // for more information. + // +-// $hash=23777aea864e9abf38c2e2c5d79a40d6bd22876d$ ++// $hash=53b37fbf82615184d8b259a2e476431a3e699eea$ + // + + #include "libcef_dll/cpptoc/views/window_cpptoc.h" +@@ -48,6 +48,32 @@ CEF_EXPORT cef_window_t* cef_window_create_top_level( + return CefWindowCppToC::Wrap(_retval); + } + ++CEF_EXPORT cef_window_t* cef_window_create_top_level_with_id( ++ struct _cef_window_delegate_t* delegate, ++ const cef_string_t* app_id) { ++ shutdown_checker::AssertNotShutdown(); ++ ++ // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING ++ ++ // Verify param: delegate; type: refptr_diff ++ DCHECK(delegate); ++ if (!delegate) { ++ return NULL; ++ } ++ // Verify param: app_id; type: string_byref_const ++ DCHECK(app_id); ++ if (!app_id) { ++ return NULL; ++ } ++ ++ // Execute ++ CefRefPtr _retval = CefWindow::CreateTopLevelWindowWithId( ++ CefWindowDelegateCToCpp::Wrap(delegate), CefString(app_id)); ++ ++ // Return type: refptr_same ++ return CefWindowCppToC::Wrap(_retval); ++} ++ + namespace { + + // MEMBER FUNCTIONS - Body may be edited by hand. +@@ -717,6 +743,124 @@ void CEF_CALLBACK window_remove_all_accelerators(struct _cef_window_t* self) { + CefWindowCppToC::Get(self)->RemoveAllAccelerators(); + } + ++void CEF_CALLBACK window_agl_activate_app(struct _cef_window_t* self, ++ const cef_string_t* app) { ++ shutdown_checker::AssertNotShutdown(); ++ ++ // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING ++ ++ DCHECK(self); ++ if (!self) { ++ return; ++ } ++ // Verify param: app; type: string_byref_const ++ DCHECK(app); ++ if (!app) { ++ return; ++ } ++ ++ // Execute ++ CefWindowCppToC::Get(self)->AglActivateApp(CefString(app)); ++} ++ ++void CEF_CALLBACK window_agl_set_app_id(struct _cef_window_t* self, ++ const cef_string_t* app_id) { ++ shutdown_checker::AssertNotShutdown(); ++ ++ // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING ++ ++ DCHECK(self); ++ if (!self) { ++ return; ++ } ++ // Verify param: app_id; type: string_byref_const ++ DCHECK(app_id); ++ if (!app_id) { ++ return; ++ } ++ ++ // Execute ++ CefWindowCppToC::Get(self)->AglSetAppId(CefString(app_id)); ++} ++ ++void CEF_CALLBACK window_agl_set_app_ready(struct _cef_window_t* self) { ++ shutdown_checker::AssertNotShutdown(); ++ ++ // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING ++ ++ DCHECK(self); ++ if (!self) { ++ return; ++ } ++ ++ // Execute ++ CefWindowCppToC::Get(self)->AglSetAppReady(); ++} ++ ++void CEF_CALLBACK window_agl_set_back_ground_app(struct _cef_window_t* self) { ++ shutdown_checker::AssertNotShutdown(); ++ ++ // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING ++ ++ DCHECK(self); ++ if (!self) { ++ return; ++ } ++ ++ // Execute ++ CefWindowCppToC::Get(self)->AglSetBackGroundApp(); ++} ++ ++void CEF_CALLBACK window_agl_set_panel_app(struct _cef_window_t* self, ++ uint32_t edge) { ++ shutdown_checker::AssertNotShutdown(); ++ ++ // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING ++ ++ DCHECK(self); ++ if (!self) { ++ return; ++ } ++ ++ // Execute ++ CefWindowCppToC::Get(self)->AglSetPanelApp(edge); ++} ++ ++int CEF_CALLBACK window_is_surface_configured(struct _cef_window_t* self) { ++ shutdown_checker::AssertNotShutdown(); ++ ++ // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING ++ ++ DCHECK(self); ++ if (!self) { ++ return 0; ++ } ++ ++ // Execute ++ bool _retval = CefWindowCppToC::Get(self)->IsSurfaceConfigured(); ++ ++ // Return type: bool ++ return _retval; ++} ++ ++void CEF_CALLBACK window_setup_activation_area(struct _cef_window_t* self, ++ uint32_t x, ++ uint32_t y, ++ uint32_t width, ++ uint32_t height) { ++ shutdown_checker::AssertNotShutdown(); ++ ++ // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING ++ ++ DCHECK(self); ++ if (!self) { ++ return; ++ } ++ ++ // Execute ++ CefWindowCppToC::Get(self)->SetupActivationArea(x, y, width, height); ++} ++ + struct _cef_window_t* CEF_CALLBACK window_as_window(struct _cef_panel_t* self) { + shutdown_checker::AssertNotShutdown(); + +@@ -2031,6 +2175,13 @@ CefWindowCppToC::CefWindowCppToC() { + GetStruct()->set_accelerator = window_set_accelerator; + GetStruct()->remove_accelerator = window_remove_accelerator; + GetStruct()->remove_all_accelerators = window_remove_all_accelerators; ++ GetStruct()->agl_activate_app = window_agl_activate_app; ++ GetStruct()->agl_set_app_id = window_agl_set_app_id; ++ GetStruct()->agl_set_app_ready = window_agl_set_app_ready; ++ GetStruct()->agl_set_back_ground_app = window_agl_set_back_ground_app; ++ GetStruct()->agl_set_panel_app = window_agl_set_panel_app; ++ GetStruct()->is_surface_configured = window_is_surface_configured; ++ GetStruct()->setup_activation_area = window_setup_activation_area; + GetStruct()->base.as_window = window_as_window; + GetStruct()->base.set_to_fill_layout = window_set_to_fill_layout; + GetStruct()->base.set_to_box_layout = window_set_to_box_layout; +diff --git a/libcef_dll/ctocpp/views/window_ctocpp.cc b/libcef_dll/ctocpp/views/window_ctocpp.cc +index 3a0423d28..aee3d62f1 100644 +--- a/libcef_dll/ctocpp/views/window_ctocpp.cc ++++ b/libcef_dll/ctocpp/views/window_ctocpp.cc +@@ -9,7 +9,7 @@ + // implementations. See the translator.README.txt file in the tools directory + // for more information. + // +-// $hash=b6b0a2a563b475163aa71b20af6ec2ac8c1f0cae$ ++// $hash=61eb77c4622382d6dda0136187c6acbd093f2e83$ + // + + #include "libcef_dll/ctocpp/views/window_ctocpp.h" +@@ -49,6 +49,33 @@ CefRefPtr CefWindow::CreateTopLevelWindow( + return CefWindowCToCpp::Wrap(_retval); + } + ++NO_SANITIZE("cfi-icall") ++CefRefPtr CefWindow::CreateTopLevelWindowWithId( ++ CefRefPtr delegate, ++ const CefString& app_id) { ++ shutdown_checker::AssertNotShutdown(); ++ ++ // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING ++ ++ // Verify param: delegate; type: refptr_diff ++ DCHECK(delegate.get()); ++ if (!delegate.get()) { ++ return nullptr; ++ } ++ // Verify param: app_id; type: string_byref_const ++ DCHECK(!app_id.empty()); ++ if (app_id.empty()) { ++ return nullptr; ++ } ++ ++ // Execute ++ cef_window_t* _retval = cef_window_create_top_level_with_id( ++ CefWindowDelegateCppToC::Wrap(delegate), app_id.GetStruct()); ++ ++ // Return type: refptr_same ++ return CefWindowCToCpp::Wrap(_retval); ++} ++ + // VIRTUAL METHODS - Body may be edited by hand. + + NO_SANITIZE("cfi-icall") void CefWindowCToCpp::Show() { +@@ -707,6 +734,125 @@ NO_SANITIZE("cfi-icall") void CefWindowCToCpp::RemoveAllAccelerators() { + _struct->remove_all_accelerators(_struct); + } + ++NO_SANITIZE("cfi-icall") ++void CefWindowCToCpp::AglActivateApp(const CefString& app) { ++ shutdown_checker::AssertNotShutdown(); ++ ++ cef_window_t* _struct = GetStruct(); ++ if (CEF_MEMBER_MISSING(_struct, agl_activate_app)) { ++ return; ++ } ++ ++ // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING ++ ++ // Verify param: app; type: string_byref_const ++ DCHECK(!app.empty()); ++ if (app.empty()) { ++ return; ++ } ++ ++ // Execute ++ _struct->agl_activate_app(_struct, app.GetStruct()); ++} ++ ++NO_SANITIZE("cfi-icall") ++void CefWindowCToCpp::AglSetAppId(const CefString& app_id) { ++ shutdown_checker::AssertNotShutdown(); ++ ++ cef_window_t* _struct = GetStruct(); ++ if (CEF_MEMBER_MISSING(_struct, agl_set_app_id)) { ++ return; ++ } ++ ++ // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING ++ ++ // Verify param: app_id; type: string_byref_const ++ DCHECK(!app_id.empty()); ++ if (app_id.empty()) { ++ return; ++ } ++ ++ // Execute ++ _struct->agl_set_app_id(_struct, app_id.GetStruct()); ++} ++ ++NO_SANITIZE("cfi-icall") void CefWindowCToCpp::AglSetAppReady() { ++ shutdown_checker::AssertNotShutdown(); ++ ++ cef_window_t* _struct = GetStruct(); ++ if (CEF_MEMBER_MISSING(_struct, agl_set_app_ready)) { ++ return; ++ } ++ ++ // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING ++ ++ // Execute ++ _struct->agl_set_app_ready(_struct); ++} ++ ++NO_SANITIZE("cfi-icall") void CefWindowCToCpp::AglSetBackGroundApp() { ++ shutdown_checker::AssertNotShutdown(); ++ ++ cef_window_t* _struct = GetStruct(); ++ if (CEF_MEMBER_MISSING(_struct, agl_set_back_ground_app)) { ++ return; ++ } ++ ++ // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING ++ ++ // Execute ++ _struct->agl_set_back_ground_app(_struct); ++} ++ ++NO_SANITIZE("cfi-icall") void CefWindowCToCpp::AglSetPanelApp(uint32_t edge) { ++ shutdown_checker::AssertNotShutdown(); ++ ++ cef_window_t* _struct = GetStruct(); ++ if (CEF_MEMBER_MISSING(_struct, agl_set_panel_app)) { ++ return; ++ } ++ ++ // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING ++ ++ // Execute ++ _struct->agl_set_panel_app(_struct, edge); ++} ++ ++NO_SANITIZE("cfi-icall") bool CefWindowCToCpp::IsSurfaceConfigured() { ++ shutdown_checker::AssertNotShutdown(); ++ ++ cef_window_t* _struct = GetStruct(); ++ if (CEF_MEMBER_MISSING(_struct, is_surface_configured)) { ++ return false; ++ } ++ ++ // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING ++ ++ // Execute ++ int _retval = _struct->is_surface_configured(_struct); ++ ++ // Return type: bool ++ return _retval ? true : false; ++} ++ ++NO_SANITIZE("cfi-icall") ++void CefWindowCToCpp::SetupActivationArea(uint32_t x, ++ uint32_t y, ++ uint32_t width, ++ uint32_t height) { ++ shutdown_checker::AssertNotShutdown(); ++ ++ cef_window_t* _struct = GetStruct(); ++ if (CEF_MEMBER_MISSING(_struct, setup_activation_area)) { ++ return; ++ } ++ ++ // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING ++ ++ // Execute ++ _struct->setup_activation_area(_struct, x, y, width, height); ++} ++ + NO_SANITIZE("cfi-icall") CefRefPtr CefWindowCToCpp::AsWindow() { + shutdown_checker::AssertNotShutdown(); + +diff --git a/libcef_dll/ctocpp/views/window_ctocpp.h b/libcef_dll/ctocpp/views/window_ctocpp.h +index bc797350c..9931a7a3e 100644 +--- a/libcef_dll/ctocpp/views/window_ctocpp.h ++++ b/libcef_dll/ctocpp/views/window_ctocpp.h +@@ -9,7 +9,7 @@ + // implementations. See the translator.README.txt file in the tools directory + // for more information. + // +-// $hash=2a7aaed7d4296e29dca74345cf2b2d4db221a738$ ++// $hash=10cca846f56124ef20cd769e018ccfdf0aba26f5$ + // + + #ifndef CEF_LIBCEF_DLL_CTOCPP_VIEWS_WINDOW_CTOCPP_H_ +@@ -86,6 +86,16 @@ class CefWindowCToCpp + bool alt_pressed) override; + void RemoveAccelerator(int command_id) override; + void RemoveAllAccelerators() override; ++ void AglActivateApp(const CefString& app) override; ++ void AglSetAppId(const CefString& app_id) override; ++ void AglSetAppReady() override; ++ void AglSetBackGroundApp() override; ++ void AglSetPanelApp(uint32_t edge) override; ++ bool IsSurfaceConfigured() override; ++ void SetupActivationArea(uint32_t x, ++ uint32_t y, ++ uint32_t width, ++ uint32_t height) override; + + // CefPanel methods. + CefRefPtr AsWindow() override; +diff --git a/libcef_dll/wrapper/libcef_dll_dylib.cc b/libcef_dll/wrapper/libcef_dll_dylib.cc +index 21065db3b..b61ea0d4b 100644 +--- a/libcef_dll/wrapper/libcef_dll_dylib.cc ++++ b/libcef_dll/wrapper/libcef_dll_dylib.cc +@@ -9,7 +9,7 @@ + // implementations. See the translator.README.txt file in the tools directory + // for more information. + // +-// $hash=bcad216e5fef8b9c10a895524f8b1201608138f9$ ++// $hash=51d1746394ff61e17d4fbb3d1415a3b646004563$ + // + + #include +@@ -249,6 +249,8 @@ struct libcef_pointers { + decltype(&cef_scroll_view_create) cef_scroll_view_create; + decltype(&cef_textfield_create) cef_textfield_create; + decltype(&cef_window_create_top_level) cef_window_create_top_level; ++ decltype(&cef_window_create_top_level_with_id) ++ cef_window_create_top_level_with_id; + decltype(&cef_api_hash) cef_api_hash; + decltype(&cef_version_info) cef_version_info; + decltype(&cef_get_min_log_level) cef_get_min_log_level; +@@ -463,6 +465,7 @@ int libcef_init_pointers(const char* path) { + INIT_ENTRY(cef_scroll_view_create); + INIT_ENTRY(cef_textfield_create); + INIT_ENTRY(cef_window_create_top_level); ++ INIT_ENTRY(cef_window_create_top_level_with_id); + INIT_ENTRY(cef_api_hash); + INIT_ENTRY(cef_version_info); + INIT_ENTRY(cef_get_min_log_level); +@@ -705,8 +708,8 @@ int cef_create_url(const struct _cef_urlparts_t* parts, cef_string_t* url) { + } + + NO_SANITIZE("cfi-icall") +-cef_string_userfree_t cef_format_url_for_security_display( +- const cef_string_t* origin_url) { ++cef_string_userfree_t ++ cef_format_url_for_security_display(const cef_string_t* origin_url) { + return g_libcef_pointers.cef_format_url_for_security_display(origin_url); + } + +@@ -978,9 +981,10 @@ void cef_server_create(const cef_string_t* address, + } + + NO_SANITIZE("cfi-icall") +-struct _cef_shared_process_message_builder_t* +-cef_shared_process_message_builder_create(const cef_string_t* name, +- size_t byte_size) { ++struct ++ _cef_shared_process_message_builder_t* cef_shared_process_message_builder_create( ++ const cef_string_t* name, ++ size_t byte_size) { + return g_libcef_pointers.cef_shared_process_message_builder_create(name, + byte_size); + } +@@ -1192,46 +1196,54 @@ struct _cef_translator_test_t* cef_translator_test_create() { + } + + NO_SANITIZE("cfi-icall") +-struct _cef_translator_test_ref_ptr_library_t* +-cef_translator_test_ref_ptr_library_create(int value) { ++struct ++ _cef_translator_test_ref_ptr_library_t* cef_translator_test_ref_ptr_library_create( ++ int value) { + return g_libcef_pointers.cef_translator_test_ref_ptr_library_create(value); + } + + NO_SANITIZE("cfi-icall") +-struct _cef_translator_test_ref_ptr_library_child_t* +-cef_translator_test_ref_ptr_library_child_create(int value, int other_value) { ++struct ++ _cef_translator_test_ref_ptr_library_child_t* cef_translator_test_ref_ptr_library_child_create( ++ int value, ++ int other_value) { + return g_libcef_pointers.cef_translator_test_ref_ptr_library_child_create( + value, other_value); + } + + NO_SANITIZE("cfi-icall") +-struct _cef_translator_test_ref_ptr_library_child_child_t* +-cef_translator_test_ref_ptr_library_child_child_create(int value, +- int other_value, +- int other_other_value) { ++struct ++ _cef_translator_test_ref_ptr_library_child_child_t* cef_translator_test_ref_ptr_library_child_child_create( ++ int value, ++ int other_value, ++ int other_other_value) { + return g_libcef_pointers + .cef_translator_test_ref_ptr_library_child_child_create( + value, other_value, other_other_value); + } + + NO_SANITIZE("cfi-icall") +-struct _cef_translator_test_scoped_library_t* +-cef_translator_test_scoped_library_create(int value) { ++struct ++ _cef_translator_test_scoped_library_t* cef_translator_test_scoped_library_create( ++ int value) { + return g_libcef_pointers.cef_translator_test_scoped_library_create(value); + } + + NO_SANITIZE("cfi-icall") +-struct _cef_translator_test_scoped_library_child_t* +-cef_translator_test_scoped_library_child_create(int value, int other_value) { ++struct ++ _cef_translator_test_scoped_library_child_t* cef_translator_test_scoped_library_child_create( ++ int value, ++ int other_value) { + return g_libcef_pointers.cef_translator_test_scoped_library_child_create( + value, other_value); + } + + NO_SANITIZE("cfi-icall") +-struct _cef_translator_test_scoped_library_child_child_t* +-cef_translator_test_scoped_library_child_child_create(int value, +- int other_value, +- int other_other_value) { ++struct ++ _cef_translator_test_scoped_library_child_child_t* cef_translator_test_scoped_library_child_child_create( ++ int value, ++ int other_value, ++ int other_other_value) { + return g_libcef_pointers + .cef_translator_test_scoped_library_child_child_create(value, other_value, + other_other_value); +@@ -1284,14 +1296,14 @@ void cef_display_get_alls(size_t* displaysCount, + } + + NO_SANITIZE("cfi-icall") +-cef_point_t cef_display_convert_screen_point_to_pixels( +- const cef_point_t* point) { ++cef_point_t ++ cef_display_convert_screen_point_to_pixels(const cef_point_t* point) { + return g_libcef_pointers.cef_display_convert_screen_point_to_pixels(point); + } + + NO_SANITIZE("cfi-icall") +-cef_point_t cef_display_convert_screen_point_from_pixels( +- const cef_point_t* point) { ++cef_point_t ++ cef_display_convert_screen_point_from_pixels(const cef_point_t* point) { + return g_libcef_pointers.cef_display_convert_screen_point_from_pixels(point); + } + +@@ -1342,6 +1354,14 @@ struct _cef_window_t* cef_window_create_top_level( + return g_libcef_pointers.cef_window_create_top_level(delegate); + } + ++NO_SANITIZE("cfi-icall") ++struct _cef_window_t* cef_window_create_top_level_with_id( ++ struct _cef_window_delegate_t* delegate, ++ const cef_string_t* app_id) { ++ return g_libcef_pointers.cef_window_create_top_level_with_id(delegate, ++ app_id); ++} ++ + NO_SANITIZE("cfi-icall") const char* cef_api_hash(int entry) { + return g_libcef_pointers.cef_api_hash(entry); + } +-- +2.42.1 + diff --git a/recipes-wam/cef/files/cef/0010-Make-patcher-work-outside-a-git-checkout.patch b/recipes-wam/cef/files/cef/0010-Make-patcher-work-outside-a-git-checkout.patch new file mode 100644 index 00000000..a59b4f3c --- /dev/null +++ b/recipes-wam/cef/files/cef/0010-Make-patcher-work-outside-a-git-checkout.patch @@ -0,0 +1,118 @@ +From 713ccd00a541ded20b20c84c7d985f87d3a88d00 Mon Sep 17 00:00:00 2001 +From: Roger Zanoni +Date: Wed, 18 Oct 2023 15:59:13 -0300 +Subject: [PATCH 10/11] Make patcher work outside a git checkout + +--- + tools/make_distrib.py | 21 +++++++++++---------- + tools/patch_util.py | 40 ++++++++++++++++++++++++++++++++++++++++ + tools/patcher.py | 3 +++ + 3 files changed, 54 insertions(+), 10 deletions(-) + create mode 100644 tools/patch_util.py + +diff --git a/tools/make_distrib.py b/tools/make_distrib.py +index 6ed748fe7..a8db7947e 100644 +--- a/tools/make_distrib.py ++++ b/tools/make_distrib.py +@@ -621,20 +621,21 @@ cef_url = git.get_url(cef_dir) + cef_rev = git.get_hash(cef_dir) + cef_commit_number = git.get_commit_number(cef_dir) + +-if not git.is_checkout(src_dir): +- raise Exception('Not a valid checkout: %s' % (src_dir)) +- +-# retrieve information for Chromium +-chromium_url = git.get_url(src_dir) +-chromium_rev = git.get_hash(src_dir) +- +-date = get_date() +- +-# format version strings + formatter = VersionFormatter() ++# format version strings + cef_ver = formatter.get_version_string() + chromium_ver = formatter.get_chromium_version_string() + ++if not git.is_checkout(src_dir): ++ chromium_url = git.get_url(src_dir) ++ chromium_rev = git.get_hash(src_dir) ++else: ++ # retrieve information for Chromium ++ chromium_rev = chromium_ver ++ chromium_url = 'https://commondatastorage.googleapis.com/chromium-browser-official/chromium-%s.tar.xz' % chromium_ver ++ ++date = get_date() ++ + # list of output directories to be archived + archive_dirs = [] + +diff --git a/tools/patch_util.py b/tools/patch_util.py +new file mode 100644 +index 000000000..2025e97e0 +--- /dev/null ++++ b/tools/patch_util.py +@@ -0,0 +1,40 @@ ++from __future__ import absolute_import ++from exec_util import exec_cmd ++import os ++import sys ++ ++def patch_apply_patch_file(patch_path, patch_dir): ++ """ Apply |patch_path| to files in |patch_dir|. """ ++ patch_name = os.path.basename(patch_path) ++ sys.stdout.write('\nApply %s in %s\n' % (patch_name, patch_dir)) ++ ++ if not os.path.isfile(patch_path): ++ sys.stdout.write('... patch file does not exist.\n') ++ return 'fail' ++ ++ # Apply the patch file. This should always succeed because the previous ++ # command succeeded. ++ ++ cmd = 'patch -p0 -N --dry-run --ignore-whitespace --input=%s' % patch_path ++ result = exec_cmd(cmd, patch_dir) ++ if result['ret'] != 0: ++ return 'skip' ++ ++ cmd = 'patch --ignore-whitespace -p0 --input=%s --verbose' % patch_path ++ result = exec_cmd(cmd, patch_dir) ++ ++ sys.stdout.write('Err: \t%s\n' % result['err']) ++ sys.stdout.write('Out: \t%s\n' % result['out']) ++ ++ if result['err'].find('FAILED') >= 0: ++ sys.stdout.write('... error applying patch.\n') ++ write_indented_output(result['err'].replace('', patch_name)) ++ return 'fail' ++ ++ if result['err'] == '': ++ sys.stdout.write('... successfully applied.\n') ++ else: ++ sys.stdout.write('... successfully applied (with warnings):\n') ++ sys.stdout.write('\t%s\n' % result['err']) ++ return 'apply' ++ +diff --git a/tools/patcher.py b/tools/patcher.py +index 023e91d4b..fa6eb1946 100644 +--- a/tools/patcher.py ++++ b/tools/patcher.py +@@ -9,6 +9,7 @@ import os + import sys + from file_util import * + from git_util import git_apply_patch_file ++from patch_util import patch_apply_patch_file + + # Cannot be loaded as a module. + if __name__ != "__main__": +@@ -46,6 +47,8 @@ def apply_patch_file(patch_file, patch_dir): + return 'skip' + + result = git_apply_patch_file(patch_path, patch_dir) ++ if result == 'fail': ++ result = patch_apply_patch_file(patch_path, patch_dir) + if result == 'fail': + write_note('ERROR', + 'This patch failed to apply. Your build will not be correct.') +-- +2.42.1 + diff --git a/recipes-wam/cef/files/cef/0010-Update-generated-api-wrapper-files.patch b/recipes-wam/cef/files/cef/0010-Update-generated-api-wrapper-files.patch deleted file mode 100644 index cc794fd8..00000000 --- a/recipes-wam/cef/files/cef/0010-Update-generated-api-wrapper-files.patch +++ /dev/null @@ -1,2912 +0,0 @@ -From 0559c94a3734b7f5ab546d6626a0d4fe6e976383 Mon Sep 17 00:00:00 2001 -From: Roger Zanoni -Date: Wed, 12 Jul 2023 22:15:44 +0200 -Subject: [PATCH 10/10] Update generated api/wrapper files - ---- - cef_paths.gypi | 4 +- - include/capi/cef_accessibility_handler_capi.h | 4 +- - include/capi/cef_app_capi.h | 4 +- - include/capi/cef_audio_handler_capi.h | 4 +- - include/capi/cef_auth_callback_capi.h | 4 +- - include/capi/cef_browser_capi.h | 4 +- - .../capi/cef_browser_process_handler_capi.h | 4 +- - include/capi/cef_callback_capi.h | 4 +- - include/capi/cef_client_capi.h | 4 +- - include/capi/cef_command_handler_capi.h | 4 +- - include/capi/cef_command_line_capi.h | 4 +- - include/capi/cef_context_menu_handler_capi.h | 4 +- - include/capi/cef_cookie_capi.h | 8 +- - include/capi/cef_crash_util_capi.h | 4 +- - .../capi/cef_devtools_message_observer_capi.h | 4 +- - include/capi/cef_dialog_handler_capi.h | 4 +- - include/capi/cef_display_handler_capi.h | 4 +- - include/capi/cef_dom_capi.h | 4 +- - include/capi/cef_download_handler_capi.h | 4 +- - include/capi/cef_download_item_capi.h | 4 +- - include/capi/cef_drag_data_capi.h | 4 +- - include/capi/cef_drag_handler_capi.h | 4 +- - include/capi/cef_extension_capi.h | 4 +- - include/capi/cef_extension_handler_capi.h | 4 +- - include/capi/cef_file_util_capi.h | 4 +- - include/capi/cef_find_handler_capi.h | 4 +- - include/capi/cef_focus_handler_capi.h | 4 +- - include/capi/cef_frame_capi.h | 4 +- - include/capi/cef_frame_handler_capi.h | 4 +- - include/capi/cef_i18n_util_capi.h | 4 +- - include/capi/cef_image_capi.h | 4 +- - include/capi/cef_jsdialog_handler_capi.h | 4 +- - include/capi/cef_keyboard_handler_capi.h | 4 +- - include/capi/cef_life_span_handler_capi.h | 4 +- - include/capi/cef_load_handler_capi.h | 4 +- - include/capi/cef_media_router_capi.h | 8 +- - include/capi/cef_menu_model_capi.h | 4 +- - include/capi/cef_menu_model_delegate_capi.h | 4 +- - include/capi/cef_navigation_entry_capi.h | 4 +- - include/capi/cef_origin_whitelist_capi.h | 4 +- - include/capi/cef_parser_capi.h | 4 +- - include/capi/cef_path_util_capi.h | 4 +- - include/capi/cef_permission_handler_capi.h | 4 +- - include/capi/cef_preference_capi.h | 4 +- - include/capi/cef_print_handler_capi.h | 4 +- - include/capi/cef_print_settings_capi.h | 4 +- - include/capi/cef_process_message_capi.h | 4 +- - include/capi/cef_process_util_capi.h | 4 +- - include/capi/cef_registration_capi.h | 4 +- - include/capi/cef_render_handler_capi.h | 4 +- - .../capi/cef_render_process_handler_capi.h | 4 +- - include/capi/cef_request_capi.h | 4 +- - include/capi/cef_request_context_capi.h | 4 +- - .../capi/cef_request_context_handler_capi.h | 4 +- - include/capi/cef_request_handler_capi.h | 4 +- - include/capi/cef_resource_bundle_capi.h | 4 +- - .../capi/cef_resource_bundle_handler_capi.h | 4 +- - include/capi/cef_resource_handler_capi.h | 4 +- - .../capi/cef_resource_request_handler_capi.h | 4 +- - include/capi/cef_response_capi.h | 4 +- - include/capi/cef_response_filter_capi.h | 4 +- - include/capi/cef_scheme_capi.h | 12 +- - include/capi/cef_server_capi.h | 4 +- - include/capi/cef_shared_memory_region_capi.h | 4 +- - .../cef_shared_process_message_builder_capi.h | 4 +- - include/capi/cef_ssl_info_capi.h | 4 +- - include/capi/cef_ssl_status_capi.h | 4 +- - include/capi/cef_stream_capi.h | 4 +- - include/capi/cef_string_visitor_capi.h | 4 +- - include/capi/cef_task_capi.h | 4 +- - include/capi/cef_thread_capi.h | 4 +- - include/capi/cef_trace_capi.h | 4 +- - include/capi/cef_urlrequest_capi.h | 4 +- - include/capi/cef_v8_capi.h | 4 +- - include/capi/cef_values_capi.h | 4 +- - include/capi/cef_waitable_event_capi.h | 4 +- - include/capi/cef_x509_certificate_capi.h | 4 +- - include/capi/cef_xml_reader_capi.h | 4 +- - include/capi/cef_zip_reader_capi.h | 4 +- - include/capi/test/cef_test_helpers_capi.h | 4 +- - include/capi/test/cef_test_server_capi.h | 4 +- - include/capi/test/cef_translator_test_capi.h | 4 +- - include/capi/views/cef_box_layout_capi.h | 4 +- - include/capi/views/cef_browser_view_capi.h | 4 +- - .../views/cef_browser_view_delegate_capi.h | 4 +- - include/capi/views/cef_button_capi.h | 4 +- - include/capi/views/cef_button_delegate_capi.h | 4 +- - include/capi/views/cef_display_capi.h | 4 +- - include/capi/views/cef_fill_layout_capi.h | 4 +- - include/capi/views/cef_label_button_capi.h | 4 +- - include/capi/views/cef_layout_capi.h | 4 +- - include/capi/views/cef_menu_button_capi.h | 4 +- - .../views/cef_menu_button_delegate_capi.h | 4 +- - .../capi/views/cef_overlay_controller_capi.h | 4 +- - include/capi/views/cef_panel_capi.h | 4 +- - include/capi/views/cef_panel_delegate_capi.h | 4 +- - include/capi/views/cef_scroll_view_capi.h | 4 +- - include/capi/views/cef_textfield_capi.h | 4 +- - .../capi/views/cef_textfield_delegate_capi.h | 4 +- - include/capi/views/cef_view_capi.h | 4 +- - include/capi/views/cef_view_delegate_capi.h | 4 +- - include/capi/views/cef_window_capi.h | 54 ++++++- - include/capi/views/cef_window_delegate_capi.h | 4 +- - include/cef_api_hash.h | 10 +- - libcef_dll/cpptoc/views/window_cpptoc.cc | 144 +++++++++++++++++- - libcef_dll/cpptoc/views/window_cpptoc.h | 4 +- - libcef_dll/ctocpp/views/window_ctocpp.cc | 139 ++++++++++++++++- - libcef_dll/ctocpp/views/window_ctocpp.h | 14 +- - libcef_dll/libcef_dll.cc | 4 +- - libcef_dll/wrapper/libcef_dll_dylib.cc | 74 +++++---- - libcef_dll/wrapper/libcef_dll_wrapper.cc | 32 ++-- - libcef_dll/wrapper_types.h | 4 +- - 112 files changed, 629 insertions(+), 274 deletions(-) - -diff --git a/cef_paths.gypi b/cef_paths.gypi -index 698667879..6adc13873 100644 ---- a/cef_paths.gypi -+++ b/cef_paths.gypi -@@ -1,4 +1,4 @@ --# Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights -+# Copyright (c) 2023 The Chromium Embedded Framework Authors. All rights - # reserved. Use of this source code is governed by a BSD-style license that - # can be found in the LICENSE file. - # -@@ -8,7 +8,7 @@ - # by hand. See the translator.README.txt file in the tools directory for - # more information. - # --# $hash=0373d7e3fc02d16a128a5891aac70af56fb9ddc1$ -+# $hash=ab931540f6f4d80336123acea6cf51e701f5a63a$ - # - - { -diff --git a/include/capi/cef_accessibility_handler_capi.h b/include/capi/cef_accessibility_handler_capi.h -index 5eb40d84f..120714aca 100644 ---- a/include/capi/cef_accessibility_handler_capi.h -+++ b/include/capi/cef_accessibility_handler_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=6bdc0ce413420b45510fcc7f415c6a6fb05f0112$ -+// $hash=0ac3c8ca887778a840c65108d56038d4d776e073$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_ACCESSIBILITY_HANDLER_CAPI_H_ -diff --git a/include/capi/cef_app_capi.h b/include/capi/cef_app_capi.h -index 145947c37..f1b58c56c 100644 ---- a/include/capi/cef_app_capi.h -+++ b/include/capi/cef_app_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=2f4bdc6adde5defdc86dbb5c998266d6372dd164$ -+// $hash=9b523fbf312a8a0cb1c743a3c8aca7bc9cc22bbc$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_APP_CAPI_H_ -diff --git a/include/capi/cef_audio_handler_capi.h b/include/capi/cef_audio_handler_capi.h -index f6d204ce0..78af95ddb 100644 ---- a/include/capi/cef_audio_handler_capi.h -+++ b/include/capi/cef_audio_handler_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=4e243df31e29bc6e473d56e371ed6328d948959c$ -+// $hash=936274d5539f225ff7adb7e0acba517fd9a8e2f8$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_AUDIO_HANDLER_CAPI_H_ -diff --git a/include/capi/cef_auth_callback_capi.h b/include/capi/cef_auth_callback_capi.h -index 76f21490f..6e74c0a48 100644 ---- a/include/capi/cef_auth_callback_capi.h -+++ b/include/capi/cef_auth_callback_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=c0704c0a87e8b57b20887be75700a30e887fee4f$ -+// $hash=4b9c31ef9a23f899c6d8cd3da49934a41f1bd231$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_AUTH_CALLBACK_CAPI_H_ -diff --git a/include/capi/cef_browser_capi.h b/include/capi/cef_browser_capi.h -index c7e4b7214..244a20cd2 100644 ---- a/include/capi/cef_browser_capi.h -+++ b/include/capi/cef_browser_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=f8a604f73a04bec535d72ec7d05906da8c953b6b$ -+// $hash=7254c050cd7db2ff7d40a1f54c99e941dc592692$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_BROWSER_CAPI_H_ -diff --git a/include/capi/cef_browser_process_handler_capi.h b/include/capi/cef_browser_process_handler_capi.h -index eef705553..043deb4d8 100644 ---- a/include/capi/cef_browser_process_handler_capi.h -+++ b/include/capi/cef_browser_process_handler_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=a4d3026623111f1ba226d1579c6b03de3b924457$ -+// $hash=4ef8b73a5218531b370fdd76c23153a1f83b7f7b$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_BROWSER_PROCESS_HANDLER_CAPI_H_ -diff --git a/include/capi/cef_callback_capi.h b/include/capi/cef_callback_capi.h -index a91da31d8..d5086aabb 100644 ---- a/include/capi/cef_callback_capi.h -+++ b/include/capi/cef_callback_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=1bb026d01d1d4bb38ceb4c54f6bcf70300bf5201$ -+// $hash=4fd98ff68ecb42677c3344b75e26d4787161b0d2$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_CALLBACK_CAPI_H_ -diff --git a/include/capi/cef_client_capi.h b/include/capi/cef_client_capi.h -index 3c33a1d78..e85a33b36 100644 ---- a/include/capi/cef_client_capi.h -+++ b/include/capi/cef_client_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=93f1c39c102dc97d6ad8d236a90a2e0e88f10fb7$ -+// $hash=eb9dcb574252483dfab12834af93ba14138d4089$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_CLIENT_CAPI_H_ -diff --git a/include/capi/cef_command_handler_capi.h b/include/capi/cef_command_handler_capi.h -index dea127bed..862bff67a 100644 ---- a/include/capi/cef_command_handler_capi.h -+++ b/include/capi/cef_command_handler_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=ec05ae57537091e3543c4b31d72d2d84d44df876$ -+// $hash=46817ef557307a55a9b7138134c4f5c32562f2d7$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_COMMAND_HANDLER_CAPI_H_ -diff --git a/include/capi/cef_command_line_capi.h b/include/capi/cef_command_line_capi.h -index 7af3177bf..1774c3459 100644 ---- a/include/capi/cef_command_line_capi.h -+++ b/include/capi/cef_command_line_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=f535e9560b9fde9b53fc4d8383905105ed029ea4$ -+// $hash=1d0a15624fec8ca8bd1a5cdf7195b9b553dde44f$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_COMMAND_LINE_CAPI_H_ -diff --git a/include/capi/cef_context_menu_handler_capi.h b/include/capi/cef_context_menu_handler_capi.h -index e16ae5bff..bc2733340 100644 ---- a/include/capi/cef_context_menu_handler_capi.h -+++ b/include/capi/cef_context_menu_handler_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=0ae549ed35e30afcbb01961fe55455beaadcd7f9$ -+// $hash=c82f41d81f5afa5ed6995693e012c13d2a609f88$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_CONTEXT_MENU_HANDLER_CAPI_H_ -diff --git a/include/capi/cef_cookie_capi.h b/include/capi/cef_cookie_capi.h -index 4cd5d3631..f6f19ede2 100644 ---- a/include/capi/cef_cookie_capi.h -+++ b/include/capi/cef_cookie_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=37b5e115ff7abd1df1b9913404b69505fb9fef29$ -+// $hash=8093e45bcbd09f41f21c0cb7c8719166cc481529$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_COOKIE_CAPI_H_ -@@ -126,8 +126,8 @@ typedef struct _cef_cookie_manager_t { - /// cef_settings_t.cache_path if specified or in memory otherwise. If |callback| - /// is non-NULL it will be executed asnychronously on the UI thread after the - /// manager's storage has been initialized. Using this function is equivalent to --/// calling cef_request_context_t::cef_request_context_get_global_context()->Get --/// DefaultCookieManager(). -+/// calling cef_request_context_t::cef_request_context_get_global_context()- -+/// >GetDefaultCookieManager(). - /// - CEF_EXPORT cef_cookie_manager_t* cef_cookie_manager_get_global_manager( - struct _cef_completion_callback_t* callback); -diff --git a/include/capi/cef_crash_util_capi.h b/include/capi/cef_crash_util_capi.h -index 3119367b4..f6272ab0d 100644 ---- a/include/capi/cef_crash_util_capi.h -+++ b/include/capi/cef_crash_util_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=1ce19c3213f033ca9059da738102b9b4292d4a06$ -+// $hash=5c6e0b9e37b8103a182f200fccdf5973104fcd70$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_CRASH_UTIL_CAPI_H_ -diff --git a/include/capi/cef_devtools_message_observer_capi.h b/include/capi/cef_devtools_message_observer_capi.h -index ac64869eb..ee61835f0 100644 ---- a/include/capi/cef_devtools_message_observer_capi.h -+++ b/include/capi/cef_devtools_message_observer_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=076a01db2fc4241efeb46c5f247a9737fd828f9b$ -+// $hash=777485120b9a9df0f890579ee698d33f273819c5$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_DEVTOOLS_MESSAGE_OBSERVER_CAPI_H_ -diff --git a/include/capi/cef_dialog_handler_capi.h b/include/capi/cef_dialog_handler_capi.h -index ecf900c08..82281ad96 100644 ---- a/include/capi/cef_dialog_handler_capi.h -+++ b/include/capi/cef_dialog_handler_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=3a1a3ac84690c6090d356ddec3ddb49b934fe28c$ -+// $hash=69545645f079f4593d9cbb6d8a36535c209245f7$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_DIALOG_HANDLER_CAPI_H_ -diff --git a/include/capi/cef_display_handler_capi.h b/include/capi/cef_display_handler_capi.h -index 17fddfbab..b93421de4 100644 ---- a/include/capi/cef_display_handler_capi.h -+++ b/include/capi/cef_display_handler_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=976a61df924efbcb0c53afeb75265e5e9e80c2de$ -+// $hash=1de3354bd0a042cc28199f1f56753b1df9e279a2$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_DISPLAY_HANDLER_CAPI_H_ -diff --git a/include/capi/cef_dom_capi.h b/include/capi/cef_dom_capi.h -index 2db400cfb..c895e3b7d 100644 ---- a/include/capi/cef_dom_capi.h -+++ b/include/capi/cef_dom_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=47d8c186f687b65c8e7f394b97d72530e67593cd$ -+// $hash=d703b8af664ed9dfac8ad935616ef43fafc062e2$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_DOM_CAPI_H_ -diff --git a/include/capi/cef_download_handler_capi.h b/include/capi/cef_download_handler_capi.h -index 37a770d25..597951344 100644 ---- a/include/capi/cef_download_handler_capi.h -+++ b/include/capi/cef_download_handler_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=aff139899b4b8b769fd0e506d8a46e434f924eee$ -+// $hash=f1f6a110a7ce15611a7062b3d7fe8b5c630f2980$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_DOWNLOAD_HANDLER_CAPI_H_ -diff --git a/include/capi/cef_download_item_capi.h b/include/capi/cef_download_item_capi.h -index 5548c1a7a..d6986eb03 100644 ---- a/include/capi/cef_download_item_capi.h -+++ b/include/capi/cef_download_item_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=a218058d7ceb842c9ea0cf0c252f9787de6562e7$ -+// $hash=332b9cb62b9c85573dc705aba4c9db3b34177e20$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_DOWNLOAD_ITEM_CAPI_H_ -diff --git a/include/capi/cef_drag_data_capi.h b/include/capi/cef_drag_data_capi.h -index 45a7c00c8..32eed2fe8 100644 ---- a/include/capi/cef_drag_data_capi.h -+++ b/include/capi/cef_drag_data_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=9e8375de3d30eb7e4f67488da3568d19848eb038$ -+// $hash=a1ce746f0dd97d21973d4c80d8ef46391c0fd463$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_DRAG_DATA_CAPI_H_ -diff --git a/include/capi/cef_drag_handler_capi.h b/include/capi/cef_drag_handler_capi.h -index a1c717b57..a5023e001 100644 ---- a/include/capi/cef_drag_handler_capi.h -+++ b/include/capi/cef_drag_handler_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=ec450acb2c3cc4d0e69b7da725387d5c1049773b$ -+// $hash=ad16b0f4320d7b363efb152a65e3ce142882b9d9$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_DRAG_HANDLER_CAPI_H_ -diff --git a/include/capi/cef_extension_capi.h b/include/capi/cef_extension_capi.h -index 008ad4a1f..a945b9bfb 100644 ---- a/include/capi/cef_extension_capi.h -+++ b/include/capi/cef_extension_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=b16b1c47d26e911d360159e5535743622a411c31$ -+// $hash=c81a74622b987483e5fcd2c508aec5c13e12389b$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_EXTENSION_CAPI_H_ -diff --git a/include/capi/cef_extension_handler_capi.h b/include/capi/cef_extension_handler_capi.h -index 3e0563b2e..ab29f3496 100644 ---- a/include/capi/cef_extension_handler_capi.h -+++ b/include/capi/cef_extension_handler_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=ba961ade334c82e53213e7e8ac848adc2a7b533a$ -+// $hash=ad6d3845b150f22b88a71dafa601ef01c9579824$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_EXTENSION_HANDLER_CAPI_H_ -diff --git a/include/capi/cef_file_util_capi.h b/include/capi/cef_file_util_capi.h -index 7272180c5..daad7a52b 100644 ---- a/include/capi/cef_file_util_capi.h -+++ b/include/capi/cef_file_util_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=3e2e068a2be0a3b12653eea65a4bbe1c9cdb8c7f$ -+// $hash=4e0e0abcb72327998df950e618b147b196e76b60$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_FILE_UTIL_CAPI_H_ -diff --git a/include/capi/cef_find_handler_capi.h b/include/capi/cef_find_handler_capi.h -index b559e521a..94450d295 100644 ---- a/include/capi/cef_find_handler_capi.h -+++ b/include/capi/cef_find_handler_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=30e86c9dd440616305f94747b313eb526c4323c7$ -+// $hash=8149c82dd6671d676ee62cb6749bf30b32a5832c$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_FIND_HANDLER_CAPI_H_ -diff --git a/include/capi/cef_focus_handler_capi.h b/include/capi/cef_focus_handler_capi.h -index a5ed63eec..f7b699dc1 100644 ---- a/include/capi/cef_focus_handler_capi.h -+++ b/include/capi/cef_focus_handler_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=907b9628ac4b7ab4603dc6e20b7e8675a51987ba$ -+// $hash=53ec33c8937c735f646f9e0a14a416218e32887c$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_FOCUS_HANDLER_CAPI_H_ -diff --git a/include/capi/cef_frame_capi.h b/include/capi/cef_frame_capi.h -index 81e9249d7..94069cedc 100644 ---- a/include/capi/cef_frame_capi.h -+++ b/include/capi/cef_frame_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=48bc345bb0971e3fcaaf839e9e4419b2aec0e33b$ -+// $hash=b9b1308311999efcfd2aa678472f934ca783492c$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_FRAME_CAPI_H_ -diff --git a/include/capi/cef_frame_handler_capi.h b/include/capi/cef_frame_handler_capi.h -index 38d25239c..94b3b8823 100644 ---- a/include/capi/cef_frame_handler_capi.h -+++ b/include/capi/cef_frame_handler_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=3d97135fef535cc94aca6cf1afa4a9461c388b4f$ -+// $hash=4cdadeb6439415d60ec32249c3a0b6457dd586f7$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_FRAME_HANDLER_CAPI_H_ -diff --git a/include/capi/cef_i18n_util_capi.h b/include/capi/cef_i18n_util_capi.h -index 080731b4c..3aab714ef 100644 ---- a/include/capi/cef_i18n_util_capi.h -+++ b/include/capi/cef_i18n_util_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=14f7f979f668fdae0f080daa39f3c1b2e92162f9$ -+// $hash=c564ee1f32a0ef05fe49fc779af5bc0b0e1b36d6$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_I18N_UTIL_CAPI_H_ -diff --git a/include/capi/cef_image_capi.h b/include/capi/cef_image_capi.h -index 31ce53cbe..9d4a0a9ca 100644 ---- a/include/capi/cef_image_capi.h -+++ b/include/capi/cef_image_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=f679dc1ec87e99bed6843d4f4dbbe04585a827bd$ -+// $hash=99c94b208f9b184985220493bba4ea08e6786046$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_IMAGE_CAPI_H_ -diff --git a/include/capi/cef_jsdialog_handler_capi.h b/include/capi/cef_jsdialog_handler_capi.h -index e2d02bb86..a490ddd8c 100644 ---- a/include/capi/cef_jsdialog_handler_capi.h -+++ b/include/capi/cef_jsdialog_handler_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=523a692475e912e4ecad89842596c3d6eac6f4aa$ -+// $hash=e9fb0354243611f3a4de508923a4e01dab42f82d$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_JSDIALOG_HANDLER_CAPI_H_ -diff --git a/include/capi/cef_keyboard_handler_capi.h b/include/capi/cef_keyboard_handler_capi.h -index 52476dc9f..7ff37b46e 100644 ---- a/include/capi/cef_keyboard_handler_capi.h -+++ b/include/capi/cef_keyboard_handler_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=01d7f86c1304efe8dc8758624b74bafccf159e96$ -+// $hash=10fb708c5f550403205a976924abf1886bf3dfa7$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_KEYBOARD_HANDLER_CAPI_H_ -diff --git a/include/capi/cef_life_span_handler_capi.h b/include/capi/cef_life_span_handler_capi.h -index 2814d143c..f02ea6a4a 100644 ---- a/include/capi/cef_life_span_handler_capi.h -+++ b/include/capi/cef_life_span_handler_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=44555ceece9989dabfa57a520168fa874dcfe2df$ -+// $hash=1c807597b96889f44a1e5199e860e8db4948b473$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_LIFE_SPAN_HANDLER_CAPI_H_ -diff --git a/include/capi/cef_load_handler_capi.h b/include/capi/cef_load_handler_capi.h -index 5536cc1f1..3667b8687 100644 ---- a/include/capi/cef_load_handler_capi.h -+++ b/include/capi/cef_load_handler_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=2713381c9969d7039e6c1a1ed2527e5aeb5425ce$ -+// $hash=1ee684174554f7d1cf8899992705d072c1c56ae7$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_LOAD_HANDLER_CAPI_H_ -diff --git a/include/capi/cef_media_router_capi.h b/include/capi/cef_media_router_capi.h -index e078abb01..69e00522c 100644 ---- a/include/capi/cef_media_router_capi.h -+++ b/include/capi/cef_media_router_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=77920892e7d9e8b98106e0bc8dfcf4b4c52a24e6$ -+// $hash=364a4abc293a294bee461a0b75936dedea3294e5$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_MEDIA_ROUTER_CAPI_H_ -@@ -114,8 +114,8 @@ typedef struct _cef_media_router_t { - /// Returns the MediaRouter object associated with the global request context. - /// If |callback| is non-NULL it will be executed asnychronously on the UI - /// thread after the manager's storage has been initialized. Equivalent to --/// calling cef_request_context_t::cef_request_context_get_global_context()->get --/// _media_router(). -+/// calling cef_request_context_t::cef_request_context_get_global_context()- -+/// >get_media_router(). - /// - CEF_EXPORT cef_media_router_t* cef_media_router_get_global( - struct _cef_completion_callback_t* callback); -diff --git a/include/capi/cef_menu_model_capi.h b/include/capi/cef_menu_model_capi.h -index a3352d864..8b5bd6632 100644 ---- a/include/capi/cef_menu_model_capi.h -+++ b/include/capi/cef_menu_model_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=4bf9250599e3ba26e7f74ec22338548492202625$ -+// $hash=d70b78b8108bb08b4f53b2627ed4ebfdffece7c1$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_MENU_MODEL_CAPI_H_ -diff --git a/include/capi/cef_menu_model_delegate_capi.h b/include/capi/cef_menu_model_delegate_capi.h -index a4ed31ee8..dd339c197 100644 ---- a/include/capi/cef_menu_model_delegate_capi.h -+++ b/include/capi/cef_menu_model_delegate_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=8254165498a527d40517c1bc8ec413ad7a0ed259$ -+// $hash=933a90dfb7b94a3aba7f2944e4540662dc8c79d7$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_MENU_MODEL_DELEGATE_CAPI_H_ -diff --git a/include/capi/cef_navigation_entry_capi.h b/include/capi/cef_navigation_entry_capi.h -index 4dd92bc3e..863c11d4b 100644 ---- a/include/capi/cef_navigation_entry_capi.h -+++ b/include/capi/cef_navigation_entry_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=2822d96d72b7df816c0fefb4ce1cbba18add50ac$ -+// $hash=d33771c31b7b0964aa2ccf1c2bc2ca1226194977$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_NAVIGATION_ENTRY_CAPI_H_ -diff --git a/include/capi/cef_origin_whitelist_capi.h b/include/capi/cef_origin_whitelist_capi.h -index 3170bd48d..9b57f38d2 100644 ---- a/include/capi/cef_origin_whitelist_capi.h -+++ b/include/capi/cef_origin_whitelist_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=a40860835e6e693ed2f85eab5fa7990b7f2c7bbe$ -+// $hash=b564dfe24017a0805e393854d12791a71c46c454$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_ORIGIN_WHITELIST_CAPI_H_ -diff --git a/include/capi/cef_parser_capi.h b/include/capi/cef_parser_capi.h -index c9bbdcb13..a6410c293 100644 ---- a/include/capi/cef_parser_capi.h -+++ b/include/capi/cef_parser_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=f6dfdfa5b8c77931d8e083a66f5a9445a2fdbf45$ -+// $hash=5d6dad4bfaeef0117d068b6e67a8da7490fe7c2d$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_PARSER_CAPI_H_ -diff --git a/include/capi/cef_path_util_capi.h b/include/capi/cef_path_util_capi.h -index 84ff5e0ce..5706b8399 100644 ---- a/include/capi/cef_path_util_capi.h -+++ b/include/capi/cef_path_util_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=0b3af613a60e4c74ec83c0bb8f5280464cbe7f48$ -+// $hash=70b306534b9cb8334c9ea260feacfd8f2f503292$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_PATH_UTIL_CAPI_H_ -diff --git a/include/capi/cef_permission_handler_capi.h b/include/capi/cef_permission_handler_capi.h -index ed005a1a0..67d8f0b93 100644 ---- a/include/capi/cef_permission_handler_capi.h -+++ b/include/capi/cef_permission_handler_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=8f2ae563306d1e4ba5fa84a5f9a60712c6fc585f$ -+// $hash=bc44eb70b7f0b48e0646825e919cb9996ac99781$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_PERMISSION_HANDLER_CAPI_H_ -diff --git a/include/capi/cef_preference_capi.h b/include/capi/cef_preference_capi.h -index 89e36b967..fa6d9bd3b 100644 ---- a/include/capi/cef_preference_capi.h -+++ b/include/capi/cef_preference_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=eac0782793e7b9c64668f2a22a859357257140ea$ -+// $hash=922659242ea25c52d02884a7cc5918d086cbfaca$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_PREFERENCE_CAPI_H_ -diff --git a/include/capi/cef_print_handler_capi.h b/include/capi/cef_print_handler_capi.h -index 28b6546d9..47e69b1d3 100644 ---- a/include/capi/cef_print_handler_capi.h -+++ b/include/capi/cef_print_handler_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=0621c349d0ef1e5befe0dc653a5b8ba49e51a54e$ -+// $hash=d09937fb047debd9da39c4072a434659b3c5682c$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_PRINT_HANDLER_CAPI_H_ -diff --git a/include/capi/cef_print_settings_capi.h b/include/capi/cef_print_settings_capi.h -index b58904690..14a52f30b 100644 ---- a/include/capi/cef_print_settings_capi.h -+++ b/include/capi/cef_print_settings_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=22959da4d5a2c94edc7647334507e38c44d40250$ -+// $hash=46508464579e797d4684f4a7facdb39f9bdb312b$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_PRINT_SETTINGS_CAPI_H_ -diff --git a/include/capi/cef_process_message_capi.h b/include/capi/cef_process_message_capi.h -index 6ec7e76ba..586014c38 100644 ---- a/include/capi/cef_process_message_capi.h -+++ b/include/capi/cef_process_message_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=7b8bbe145aa8d54d868b9d9e4ce6ff2e6a596e53$ -+// $hash=e20a8d6a5803dae5ba156adde40c8b964899b176$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_PROCESS_MESSAGE_CAPI_H_ -diff --git a/include/capi/cef_process_util_capi.h b/include/capi/cef_process_util_capi.h -index b7033886f..2ae2c57cb 100644 ---- a/include/capi/cef_process_util_capi.h -+++ b/include/capi/cef_process_util_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=f6b215445a54f565a26f1a62d2671156635d6d46$ -+// $hash=88c42c5f216798304b07bfe985296014cf65996c$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_PROCESS_UTIL_CAPI_H_ -diff --git a/include/capi/cef_registration_capi.h b/include/capi/cef_registration_capi.h -index 5f18c90a7..4ac84d670 100644 ---- a/include/capi/cef_registration_capi.h -+++ b/include/capi/cef_registration_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=28371116427e9457ea366c9f0546cd5eefd8f08a$ -+// $hash=b1b38a3171dd3626029e70e75b482dfa3531215b$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_REGISTRATION_CAPI_H_ -diff --git a/include/capi/cef_render_handler_capi.h b/include/capi/cef_render_handler_capi.h -index f57233399..ccd3d238c 100644 ---- a/include/capi/cef_render_handler_capi.h -+++ b/include/capi/cef_render_handler_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=931b329d62ea6461485b62b79f98165d7185b6e7$ -+// $hash=32d8176f39b05487bae048990b2dee3212ae3b78$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_RENDER_HANDLER_CAPI_H_ -diff --git a/include/capi/cef_render_process_handler_capi.h b/include/capi/cef_render_process_handler_capi.h -index dc4210176..f9c86c941 100644 ---- a/include/capi/cef_render_process_handler_capi.h -+++ b/include/capi/cef_render_process_handler_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=b74afb6f8003ed24256ce7359ea377596b4406d9$ -+// $hash=d807c7566ce3085243e9e7ea279fee7241acfc5f$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_RENDER_PROCESS_HANDLER_CAPI_H_ -diff --git a/include/capi/cef_request_capi.h b/include/capi/cef_request_capi.h -index d39c7d475..9ac916576 100644 ---- a/include/capi/cef_request_capi.h -+++ b/include/capi/cef_request_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=041c1b4e6e57987ad547daff56f96c6ff7ab15c9$ -+// $hash=3339290cad3a77c8b0b07d422f0faf902a047838$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_REQUEST_CAPI_H_ -diff --git a/include/capi/cef_request_context_capi.h b/include/capi/cef_request_context_capi.h -index 8e7321e22..58f3ef2d1 100644 ---- a/include/capi/cef_request_context_capi.h -+++ b/include/capi/cef_request_context_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=62f9dd603840149334ecd1f25222dbda0682b0e6$ -+// $hash=c2a6265e8e9acce475a8b5755a8c58b97b495207$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_REQUEST_CONTEXT_CAPI_H_ -diff --git a/include/capi/cef_request_context_handler_capi.h b/include/capi/cef_request_context_handler_capi.h -index fb4a0a493..d7e06f816 100644 ---- a/include/capi/cef_request_context_handler_capi.h -+++ b/include/capi/cef_request_context_handler_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=c25acf0c0dde9bbd8b9b3526e161aaa9e00445c8$ -+// $hash=b0b532a12106d960adc446b980affeee12b93ae3$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_REQUEST_CONTEXT_HANDLER_CAPI_H_ -diff --git a/include/capi/cef_request_handler_capi.h b/include/capi/cef_request_handler_capi.h -index 398ed8c61..33b1469bc 100644 ---- a/include/capi/cef_request_handler_capi.h -+++ b/include/capi/cef_request_handler_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=0524a218f8cb54cfde70f2ec475520b11923c2f7$ -+// $hash=c4e259fe4432ce8204c7814066d008b493f0001a$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_REQUEST_HANDLER_CAPI_H_ -diff --git a/include/capi/cef_resource_bundle_capi.h b/include/capi/cef_resource_bundle_capi.h -index cf8e96b78..b06728c1d 100644 ---- a/include/capi/cef_resource_bundle_capi.h -+++ b/include/capi/cef_resource_bundle_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=4350dcf46e2fcd18bea2c45446e448e588795afb$ -+// $hash=e8e8dd2730a47aad9414f7bfc2e6ad96aba2c875$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_RESOURCE_BUNDLE_CAPI_H_ -diff --git a/include/capi/cef_resource_bundle_handler_capi.h b/include/capi/cef_resource_bundle_handler_capi.h -index 136e0cef9..bc9eea523 100644 ---- a/include/capi/cef_resource_bundle_handler_capi.h -+++ b/include/capi/cef_resource_bundle_handler_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=5f8c2d1e11779072e83610190ed7215324028d07$ -+// $hash=00023b2ec108ae6e4bd282d16e82032cdc99d548$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_RESOURCE_BUNDLE_HANDLER_CAPI_H_ -diff --git a/include/capi/cef_resource_handler_capi.h b/include/capi/cef_resource_handler_capi.h -index 98ff24eb6..bad0b85ad 100644 ---- a/include/capi/cef_resource_handler_capi.h -+++ b/include/capi/cef_resource_handler_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=3373cc29becf60303d1f01774c1ed8017c3f0da3$ -+// $hash=93e5c4f5e93f56b63b5944208300669dcecba972$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_RESOURCE_HANDLER_CAPI_H_ -diff --git a/include/capi/cef_resource_request_handler_capi.h b/include/capi/cef_resource_request_handler_capi.h -index 057456e32..184055628 100644 ---- a/include/capi/cef_resource_request_handler_capi.h -+++ b/include/capi/cef_resource_request_handler_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=64d090faf64e2ffb99da110840af383b757e113b$ -+// $hash=70d6b393cbdc96a75864911d7ca3568cc8dcdebf$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_RESOURCE_REQUEST_HANDLER_CAPI_H_ -diff --git a/include/capi/cef_response_capi.h b/include/capi/cef_response_capi.h -index 089694295..d8c4b655d 100644 ---- a/include/capi/cef_response_capi.h -+++ b/include/capi/cef_response_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=21354bc7b20a18eb0c25d2aa0abf1211fd9ebcaa$ -+// $hash=7fbcd399c08dc39e33a7d0400a49f2e3a551bd02$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_RESPONSE_CAPI_H_ -diff --git a/include/capi/cef_response_filter_capi.h b/include/capi/cef_response_filter_capi.h -index 425542703..c8a57de29 100644 ---- a/include/capi/cef_response_filter_capi.h -+++ b/include/capi/cef_response_filter_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=cbcb379f7ed86b58e271089a4117267a50f72814$ -+// $hash=2c9b14a86ee6777e4834eadcfc95802f2dedb11a$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_RESPONSE_FILTER_CAPI_H_ -diff --git a/include/capi/cef_scheme_capi.h b/include/capi/cef_scheme_capi.h -index 08786ae5a..bdcd6cc3b 100644 ---- a/include/capi/cef_scheme_capi.h -+++ b/include/capi/cef_scheme_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=1b6cd9a13f93867b1f20418bfa4c7db8b5e6725d$ -+// $hash=794d4c01f06c656c425779b0189a3b52820498ed$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_SCHEME_CAPI_H_ -@@ -116,8 +116,8 @@ typedef struct _cef_scheme_handler_factory_t { - /// matches the specified |scheme_name| and optional |domain_name|. Returns - /// false (0) if an error occurs. This function may be called on any thread in - /// the browser process. Using this function is equivalent to calling cef_reques --/// t_context_t::cef_request_context_get_global_context()->register_scheme_handl --/// er_factory(). -+/// t_context_t::cef_request_context_get_global_context()- -+/// >register_scheme_handler_factory(). - /// - CEF_EXPORT int cef_register_scheme_handler_factory( - const cef_string_t* scheme_name, -@@ -128,8 +128,8 @@ CEF_EXPORT int cef_register_scheme_handler_factory( - /// Clear all scheme handler factories registered with the global request - /// context. Returns false (0) on error. This function may be called on any - /// thread in the browser process. Using this function is equivalent to calling --/// cef_request_context_t::cef_request_context_get_global_context()->clear_schem --/// e_handler_factories(). -+/// cef_request_context_t::cef_request_context_get_global_context()- -+/// >clear_scheme_handler_factories(). - /// - CEF_EXPORT int cef_clear_scheme_handler_factories(void); - -diff --git a/include/capi/cef_server_capi.h b/include/capi/cef_server_capi.h -index 9a65378f4..d1d2d943d 100644 ---- a/include/capi/cef_server_capi.h -+++ b/include/capi/cef_server_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=4d76765604a96b026076f1c930a33d616f23b4ad$ -+// $hash=64e9ebc0e01acca0333ca3419e379d4053892270$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_SERVER_CAPI_H_ -diff --git a/include/capi/cef_shared_memory_region_capi.h b/include/capi/cef_shared_memory_region_capi.h -index 2316e25b1..07be55e69 100644 ---- a/include/capi/cef_shared_memory_region_capi.h -+++ b/include/capi/cef_shared_memory_region_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=5f69190b21f9fa17e6fb4c2284968f8ec5b147ed$ -+// $hash=08f64795d78bdad29a45222a7263e795ce77a52d$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_SHARED_MEMORY_REGION_CAPI_H_ -diff --git a/include/capi/cef_shared_process_message_builder_capi.h b/include/capi/cef_shared_process_message_builder_capi.h -index ef47472f4..1b570648f 100644 ---- a/include/capi/cef_shared_process_message_builder_capi.h -+++ b/include/capi/cef_shared_process_message_builder_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=66198e92ec123e753bb427a0b92d73672610136e$ -+// $hash=1a2d8806256d04362f181350db2835850cb3e0ae$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_SHARED_PROCESS_MESSAGE_BUILDER_CAPI_H_ -diff --git a/include/capi/cef_ssl_info_capi.h b/include/capi/cef_ssl_info_capi.h -index 6fb5939d2..54b2009a5 100644 ---- a/include/capi/cef_ssl_info_capi.h -+++ b/include/capi/cef_ssl_info_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=64d6affe3e8e45869403f829c2aa86026773a17b$ -+// $hash=99dff3042ea437ecf5771eff9b3cab4c22190534$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_SSL_INFO_CAPI_H_ -diff --git a/include/capi/cef_ssl_status_capi.h b/include/capi/cef_ssl_status_capi.h -index c3ca2bd15..0c6c4b799 100644 ---- a/include/capi/cef_ssl_status_capi.h -+++ b/include/capi/cef_ssl_status_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=b40ab326a1bf140859db9288b809a4038833f014$ -+// $hash=034a68aa4901cde95e12a7900cfc65753fbde345$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_SSL_STATUS_CAPI_H_ -diff --git a/include/capi/cef_stream_capi.h b/include/capi/cef_stream_capi.h -index e9f20bf8a..c425b1fe2 100644 ---- a/include/capi/cef_stream_capi.h -+++ b/include/capi/cef_stream_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=9ccb4e6ea821c1b98adcc934429d2bf43cf9d8a2$ -+// $hash=bbb4153d5d7325ac9a410d7f85a8d47eadcfaf6e$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_STREAM_CAPI_H_ -diff --git a/include/capi/cef_string_visitor_capi.h b/include/capi/cef_string_visitor_capi.h -index 564f3a960..5ea9b38fd 100644 ---- a/include/capi/cef_string_visitor_capi.h -+++ b/include/capi/cef_string_visitor_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=3940b4c999764eae305984a16c401e302aefddc6$ -+// $hash=6a22e5144c0254acb09656e6e41eedd05f2dd7e7$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_STRING_VISITOR_CAPI_H_ -diff --git a/include/capi/cef_task_capi.h b/include/capi/cef_task_capi.h -index f7c9caac4..3a04e6bce 100644 ---- a/include/capi/cef_task_capi.h -+++ b/include/capi/cef_task_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=a7a4bf5cd4bde87774b8300d25f12b057a5abf60$ -+// $hash=273a6abfd4ac030701be00c45811c19e74e128bd$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_TASK_CAPI_H_ -diff --git a/include/capi/cef_thread_capi.h b/include/capi/cef_thread_capi.h -index 960359a41..adfb79a0b 100644 ---- a/include/capi/cef_thread_capi.h -+++ b/include/capi/cef_thread_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=b5b17f2a66283495e19978a5bbc36b47d9b61507$ -+// $hash=b111114b291d3b91c526e6b3da5741959469ec4a$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_THREAD_CAPI_H_ -diff --git a/include/capi/cef_trace_capi.h b/include/capi/cef_trace_capi.h -index 0429c2186..183ccdada 100644 ---- a/include/capi/cef_trace_capi.h -+++ b/include/capi/cef_trace_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=587514b02797f420da6ba13ba21c4344f41b56ce$ -+// $hash=8d275bd73854b2b8d5a7a5bc55fa737e020705ee$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_TRACE_CAPI_H_ -diff --git a/include/capi/cef_urlrequest_capi.h b/include/capi/cef_urlrequest_capi.h -index f638122eb..d54ffb78c 100644 ---- a/include/capi/cef_urlrequest_capi.h -+++ b/include/capi/cef_urlrequest_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=5b2bfaf4b7572935b2cfba804dc1625261e32e24$ -+// $hash=91c121d4353a80d7fff3ef582c5a56ac86e0a34c$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_URLREQUEST_CAPI_H_ -diff --git a/include/capi/cef_v8_capi.h b/include/capi/cef_v8_capi.h -index cd57020e4..7119475eb 100644 ---- a/include/capi/cef_v8_capi.h -+++ b/include/capi/cef_v8_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=b8af0d090bcb54f99d98804f7e3aaa0eab24449a$ -+// $hash=0d787ac7676ba90d3a1fe68d5e2494b985b1db0e$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_V8_CAPI_H_ -diff --git a/include/capi/cef_values_capi.h b/include/capi/cef_values_capi.h -index a3eaf710f..50abd75f3 100644 ---- a/include/capi/cef_values_capi.h -+++ b/include/capi/cef_values_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=e8f16d32cc835f9b20b3fcd7048146f52ec9bfe5$ -+// $hash=1b8f7f620685c30b91c8fa656e1a01d182684ae6$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_VALUES_CAPI_H_ -diff --git a/include/capi/cef_waitable_event_capi.h b/include/capi/cef_waitable_event_capi.h -index 1b0ad7434..1f5431c7f 100644 ---- a/include/capi/cef_waitable_event_capi.h -+++ b/include/capi/cef_waitable_event_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=737b3ee4e678de14ebffec828d113b007e06c58d$ -+// $hash=683d592a2405ada0a9c46c004f003d640a3298ad$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_WAITABLE_EVENT_CAPI_H_ -diff --git a/include/capi/cef_x509_certificate_capi.h b/include/capi/cef_x509_certificate_capi.h -index 554013df4..bfd4700f8 100644 ---- a/include/capi/cef_x509_certificate_capi.h -+++ b/include/capi/cef_x509_certificate_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=1d551ff4900e1792bc2d89bebcda1707b8d9c985$ -+// $hash=7a541729b4ac664b22cdea625f19f1dba1b6a685$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_X509_CERTIFICATE_CAPI_H_ -diff --git a/include/capi/cef_xml_reader_capi.h b/include/capi/cef_xml_reader_capi.h -index 71f126e8c..3db9b94e0 100644 ---- a/include/capi/cef_xml_reader_capi.h -+++ b/include/capi/cef_xml_reader_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=988d13daa86a6ed89d2116e44d2307ee01c63c08$ -+// $hash=366f872b03f7c25ef56677cc427a317bb529ad9c$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_XML_READER_CAPI_H_ -diff --git a/include/capi/cef_zip_reader_capi.h b/include/capi/cef_zip_reader_capi.h -index 7c016c349..05c9cd2e3 100644 ---- a/include/capi/cef_zip_reader_capi.h -+++ b/include/capi/cef_zip_reader_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=5e121ff2140e0f1228fd8e2ad632c804ab854210$ -+// $hash=83debac545c04a630270665b391f52b15484b5d3$ - // - - #ifndef CEF_INCLUDE_CAPI_CEF_ZIP_READER_CAPI_H_ -diff --git a/include/capi/test/cef_test_helpers_capi.h b/include/capi/test/cef_test_helpers_capi.h -index 61a5164be..c24bcf5a2 100644 ---- a/include/capi/test/cef_test_helpers_capi.h -+++ b/include/capi/test/cef_test_helpers_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=cdc9af1b664e49e339ab7bb50d04a7ea385e07e5$ -+// $hash=4d10dad2278e6d61367b3deaf501a0e7b4fd60e9$ - // - - #ifndef CEF_INCLUDE_CAPI_TEST_CEF_TEST_HELPERS_CAPI_H_ -diff --git a/include/capi/test/cef_test_server_capi.h b/include/capi/test/cef_test_server_capi.h -index c6ffc5bc4..ba30e6840 100644 ---- a/include/capi/test/cef_test_server_capi.h -+++ b/include/capi/test/cef_test_server_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=7dc00d6af4e26812b78e47ec707f8d271c043a8e$ -+// $hash=df532eb91caf9de44b077abdf00620dd2508402b$ - // - - #ifndef CEF_INCLUDE_CAPI_TEST_CEF_TEST_SERVER_CAPI_H_ -diff --git a/include/capi/test/cef_translator_test_capi.h b/include/capi/test/cef_translator_test_capi.h -index c0b8f509a..b1e87b051 100644 ---- a/include/capi/test/cef_translator_test_capi.h -+++ b/include/capi/test/cef_translator_test_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=58c8adb936b8dba8b13a586adfe9e32e7a02d24c$ -+// $hash=58809bc0a16010773cf11b5165e65b32ec4b4793$ - // - - #ifndef CEF_INCLUDE_CAPI_TEST_CEF_TRANSLATOR_TEST_CAPI_H_ -diff --git a/include/capi/views/cef_box_layout_capi.h b/include/capi/views/cef_box_layout_capi.h -index e480e4a1b..f053f017f 100644 ---- a/include/capi/views/cef_box_layout_capi.h -+++ b/include/capi/views/cef_box_layout_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=fe404a2a9d429c6de2a00a8e27efe553e93e792d$ -+// $hash=31153d0702b646d310e74f04e256c0f5915b8caa$ - // - - #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_BOX_LAYOUT_CAPI_H_ -diff --git a/include/capi/views/cef_browser_view_capi.h b/include/capi/views/cef_browser_view_capi.h -index 89bcd8baf..1e190bf7b 100644 ---- a/include/capi/views/cef_browser_view_capi.h -+++ b/include/capi/views/cef_browser_view_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=f575718f8c4df556ba92a2aff7204cbd6ad87bd6$ -+// $hash=f72e94f6bd63b6ea623c4d3170b5ad4333c136d6$ - // - - #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_BROWSER_VIEW_CAPI_H_ -diff --git a/include/capi/views/cef_browser_view_delegate_capi.h b/include/capi/views/cef_browser_view_delegate_capi.h -index 63484202d..25fc074ff 100644 ---- a/include/capi/views/cef_browser_view_delegate_capi.h -+++ b/include/capi/views/cef_browser_view_delegate_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=0e7953aa553f6987fa0142a9c4848ca59d68fb69$ -+// $hash=e38c41a553d518abcd1b912d32281e99b93c4fd7$ - // - - #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_BROWSER_VIEW_DELEGATE_CAPI_H_ -diff --git a/include/capi/views/cef_button_capi.h b/include/capi/views/cef_button_capi.h -index 2a698c4f2..e4fa6815b 100644 ---- a/include/capi/views/cef_button_capi.h -+++ b/include/capi/views/cef_button_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=6eb1f513763884af55e28aaf1c13b67240d15b33$ -+// $hash=6580dc6ef6c20d5d78dc0160982b9ef57c939f86$ - // - - #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_BUTTON_CAPI_H_ -diff --git a/include/capi/views/cef_button_delegate_capi.h b/include/capi/views/cef_button_delegate_capi.h -index bf580b7fc..caa27da25 100644 ---- a/include/capi/views/cef_button_delegate_capi.h -+++ b/include/capi/views/cef_button_delegate_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=a5faae9e35df9935393dbf1db5df832f8b9a025c$ -+// $hash=9843593667569cf8755386ab2d884620087a36b8$ - // - - #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_BUTTON_DELEGATE_CAPI_H_ -diff --git a/include/capi/views/cef_display_capi.h b/include/capi/views/cef_display_capi.h -index 4b94ca623..3c36324db 100644 ---- a/include/capi/views/cef_display_capi.h -+++ b/include/capi/views/cef_display_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=912c23bc842c87aeca79780746c31e3fe848013a$ -+// $hash=7674d3af52dd4272b454b2028e7a4ee72fb3c9ff$ - // - - #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_DISPLAY_CAPI_H_ -diff --git a/include/capi/views/cef_fill_layout_capi.h b/include/capi/views/cef_fill_layout_capi.h -index 8df6df97f..c9ae6d9c6 100644 ---- a/include/capi/views/cef_fill_layout_capi.h -+++ b/include/capi/views/cef_fill_layout_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=dc1a43f52c873628c98a479ae69f6e24cbd58129$ -+// $hash=fdb3457ac8b18ad3cf0144af5886586dd675c8f8$ - // - - #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_FILL_LAYOUT_CAPI_H_ -diff --git a/include/capi/views/cef_label_button_capi.h b/include/capi/views/cef_label_button_capi.h -index b821bb999..07b387631 100644 ---- a/include/capi/views/cef_label_button_capi.h -+++ b/include/capi/views/cef_label_button_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=88a2e2e9e1b0e7a692aca78be34ce1620c936336$ -+// $hash=eee5b9ebfa58617d5e6fa969e27cc9e378fddb22$ - // - - #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_LABEL_BUTTON_CAPI_H_ -diff --git a/include/capi/views/cef_layout_capi.h b/include/capi/views/cef_layout_capi.h -index 85081f7ee..5430a4595 100644 ---- a/include/capi/views/cef_layout_capi.h -+++ b/include/capi/views/cef_layout_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=01c57abc0a004118040b58bdcec07dfd32827d4f$ -+// $hash=c4a17c07bb2a3518fc5b7350efdc13ffeb803747$ - // - - #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_LAYOUT_CAPI_H_ -diff --git a/include/capi/views/cef_menu_button_capi.h b/include/capi/views/cef_menu_button_capi.h -index 986a21ca9..85cec0fe3 100644 ---- a/include/capi/views/cef_menu_button_capi.h -+++ b/include/capi/views/cef_menu_button_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=cfe68fb772b0c370f6895a1e8756491326de9c14$ -+// $hash=dcfa5d39d1355b2c675637a13378f43376a8053e$ - // - - #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_MENU_BUTTON_CAPI_H_ -diff --git a/include/capi/views/cef_menu_button_delegate_capi.h b/include/capi/views/cef_menu_button_delegate_capi.h -index 8c05669c2..5d9386486 100644 ---- a/include/capi/views/cef_menu_button_delegate_capi.h -+++ b/include/capi/views/cef_menu_button_delegate_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=f52310d3f7e9a8be886161ae0e20e4b903a2e765$ -+// $hash=38177cad78713d382b81f8b8aa4372402c62fac7$ - // - - #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_MENU_BUTTON_DELEGATE_CAPI_H_ -diff --git a/include/capi/views/cef_overlay_controller_capi.h b/include/capi/views/cef_overlay_controller_capi.h -index 9c3e581b4..8084bfd65 100644 ---- a/include/capi/views/cef_overlay_controller_capi.h -+++ b/include/capi/views/cef_overlay_controller_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=937ed3958b86682a88a09493aa5e9e4014d3bbc2$ -+// $hash=a5a2c7fe2c285b45268eee1710a8549ab12727f3$ - // - - #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_OVERLAY_CONTROLLER_CAPI_H_ -diff --git a/include/capi/views/cef_panel_capi.h b/include/capi/views/cef_panel_capi.h -index 6e40c17c0..658b0050d 100644 ---- a/include/capi/views/cef_panel_capi.h -+++ b/include/capi/views/cef_panel_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=7dbcb8d40d3f5ac18dee74621fe472e9ab089f8a$ -+// $hash=40d350f75893a1e4307b282317d55f0fceae3baf$ - // - - #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_PANEL_CAPI_H_ -diff --git a/include/capi/views/cef_panel_delegate_capi.h b/include/capi/views/cef_panel_delegate_capi.h -index 73ccdaabe..227762d5d 100644 ---- a/include/capi/views/cef_panel_delegate_capi.h -+++ b/include/capi/views/cef_panel_delegate_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=ce2d8e40ebdd803221ebcd26dab9461984917fd4$ -+// $hash=e8bdae70e1f16fba3a5e01d9e215a02f13291ff5$ - // - - #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_PANEL_DELEGATE_CAPI_H_ -diff --git a/include/capi/views/cef_scroll_view_capi.h b/include/capi/views/cef_scroll_view_capi.h -index badffb601..dd503c286 100644 ---- a/include/capi/views/cef_scroll_view_capi.h -+++ b/include/capi/views/cef_scroll_view_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=26037d0a585f2d93f19ee0417be670a706ff42ff$ -+// $hash=e3aa3fbb265a600d498884b0fbb852fc5bbf8856$ - // - - #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_SCROLL_VIEW_CAPI_H_ -diff --git a/include/capi/views/cef_textfield_capi.h b/include/capi/views/cef_textfield_capi.h -index e593a6b6e..c525f216d 100644 ---- a/include/capi/views/cef_textfield_capi.h -+++ b/include/capi/views/cef_textfield_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=a38b506d8bc425f3de4809c02d0ec4bc558eb518$ -+// $hash=7d5a43282c9847c5c842abd5de023f4c5c69a9f0$ - // - - #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_TEXTFIELD_CAPI_H_ -diff --git a/include/capi/views/cef_textfield_delegate_capi.h b/include/capi/views/cef_textfield_delegate_capi.h -index 23457452a..a14c0bfed 100644 ---- a/include/capi/views/cef_textfield_delegate_capi.h -+++ b/include/capi/views/cef_textfield_delegate_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=43f4bcda7e81ee1750f5a4c220832455f1ab8300$ -+// $hash=482b091326684014bd799fef864e3dfdfc8693a1$ - // - - #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_TEXTFIELD_DELEGATE_CAPI_H_ -diff --git a/include/capi/views/cef_view_capi.h b/include/capi/views/cef_view_capi.h -index b0d669eb9..5372f61f4 100644 ---- a/include/capi/views/cef_view_capi.h -+++ b/include/capi/views/cef_view_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=dcda9eb9c6258b68faed06f9edfdcabbbb3e7000$ -+// $hash=cb5950b283944d06312903eb554cc4c980713e98$ - // - - #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_VIEW_CAPI_H_ -diff --git a/include/capi/views/cef_view_delegate_capi.h b/include/capi/views/cef_view_delegate_capi.h -index 0edb9d5af..4f4b8f01e 100644 ---- a/include/capi/views/cef_view_delegate_capi.h -+++ b/include/capi/views/cef_view_delegate_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=41b9addf8d38cc522879ba1abd455325e7f98bc4$ -+// $hash=70646cb55b5bf98ccfa2a93b2cf57bd5ba367268$ - // - - #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_VIEW_DELEGATE_CAPI_H_ -diff --git a/include/capi/views/cef_window_capi.h b/include/capi/views/cef_window_capi.h -index e4f515773..b69f47d2f 100644 ---- a/include/capi/views/cef_window_capi.h -+++ b/include/capi/views/cef_window_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=ba3a92d4e09b2f728b330a822669c64ddff1f9d6$ -+// $hash=3582ae824b19ee8d1c56a527a5dff472e64804a6$ - // - - #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_WINDOW_CAPI_H_ -@@ -334,6 +334,49 @@ typedef struct _cef_window_t { - /// Remove all keyboard accelerators. - /// - void(CEF_CALLBACK* remove_all_accelerators)(struct _cef_window_t* self); -+ -+ /// -+ /// Tells the agl compositor to activate the app -+ /// -+ void(CEF_CALLBACK* agl_activate_app)(struct _cef_window_t* self, -+ const cef_string_t* app); -+ -+ /// -+ /// Tells the agl compositor the application id -+ /// -+ void(CEF_CALLBACK* agl_set_app_id)(struct _cef_window_t* self, -+ const cef_string_t* app_id); -+ -+ /// -+ /// Tells the agl compositor that everything is set-up and good to go -+ /// -+ void(CEF_CALLBACK* agl_set_app_ready)(struct _cef_window_t* self); -+ -+ /// -+ /// Tells the agl compositor that the app is the background application -+ /// -+ void(CEF_CALLBACK* agl_set_back_ground_app)(struct _cef_window_t* self); -+ -+ /// -+ /// Tells the agl compositor that the app is a panel -+ /// -+ void(CEF_CALLBACK* agl_set_panel_app)(struct _cef_window_t* self, -+ uint32_t edge); -+ -+ /// -+ /// Tells if the window wayland surface is configured -+ /// -+ int(CEF_CALLBACK* is_surface_configured)(struct _cef_window_t* self); -+ -+ /// -+ /// A hint for the compositor to use a custom area, rather than inferring the -+ /// activation area. -+ /// -+ void(CEF_CALLBACK* setup_activation_area)(struct _cef_window_t* self, -+ uint32_t x, -+ uint32_t y, -+ uint32_t width, -+ uint32_t height); - } cef_window_t; - - /// -@@ -342,6 +385,13 @@ typedef struct _cef_window_t { - CEF_EXPORT cef_window_t* cef_window_create_top_level( - struct _cef_window_delegate_t* delegate); - -+/// -+/// Create a new Window with the provided ID -+/// -+CEF_EXPORT cef_window_t* cef_window_create_top_level_with_id( -+ struct _cef_window_delegate_t* delegate, -+ const cef_string_t* app_id); -+ - #ifdef __cplusplus - } - #endif -diff --git a/include/capi/views/cef_window_delegate_capi.h b/include/capi/views/cef_window_delegate_capi.h -index a74f9e910..e23c097cb 100644 ---- a/include/capi/views/cef_window_delegate_capi.h -+++ b/include/capi/views/cef_window_delegate_capi.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -33,7 +33,7 @@ - // by hand. See the translator.README.txt file in the tools directory for - // more information. - // --// $hash=e1657ed68132b846ad638dc87bc5ee9b9c10f014$ -+// $hash=019abf16be4e151d31181a6bdcb1ad8dfef03d00$ - // - - #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_WINDOW_DELEGATE_CAPI_H_ -diff --git a/include/cef_api_hash.h b/include/cef_api_hash.h -index 47c6a7212..07f19c47a 100644 ---- a/include/cef_api_hash.h -+++ b/include/cef_api_hash.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved. -+// Copyright (c) 2023 Marshall A. Greenblatt. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are -@@ -42,13 +42,13 @@ - // way that may cause binary incompatibility with other builds. The universal - // hash value will change if any platform is affected whereas the platform hash - // values will change only if that particular platform is affected. --#define CEF_API_HASH_UNIVERSAL "e92cde673e73851d8841e2f3c4f38bcd0f6ed2bb" -+#define CEF_API_HASH_UNIVERSAL "3ae58e0ac999d1e3568659c3dc1726a69ff9c0e6" - #if defined(OS_WIN) --#define CEF_API_HASH_PLATFORM "162bfdae56cbfd7f76fd4178be019f0dba512c40" -+#define CEF_API_HASH_PLATFORM "3c150cc7af73ac9579681eb25a037ed70a38922e" - #elif defined(OS_MAC) --#define CEF_API_HASH_PLATFORM "31c5680dbc8d80fffc14214dd1ce4126a08e38d3" -+#define CEF_API_HASH_PLATFORM "79eb6d51d75ffe64614249cb3096c4edc2dcd7d0" - #elif defined(OS_LINUX) --#define CEF_API_HASH_PLATFORM "9682b2251f9973ee9eee0940eb9c773e522c2975" -+#define CEF_API_HASH_PLATFORM "d95070e146608d518fd0152fec6b9e78fb8236a1" - #endif - - #ifdef __cplusplus -diff --git a/libcef_dll/cpptoc/views/window_cpptoc.cc b/libcef_dll/cpptoc/views/window_cpptoc.cc -index fc175de23..4b71b6848 100644 ---- a/libcef_dll/cpptoc/views/window_cpptoc.cc -+++ b/libcef_dll/cpptoc/views/window_cpptoc.cc -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights -+// Copyright (c) 2023 The Chromium Embedded Framework Authors. All rights - // reserved. Use of this source code is governed by a BSD-style license that - // can be found in the LICENSE file. - // -@@ -9,7 +9,7 @@ - // implementations. See the translator.README.txt file in the tools directory - // for more information. - // --// $hash=32506537b2118f2d16285dc09174ae721447adc2$ -+// $hash=1d1f538674280357dedd3f8e57854235fd4391ce$ - // - - #include "libcef_dll/cpptoc/views/window_cpptoc.h" -@@ -48,6 +48,30 @@ CEF_EXPORT cef_window_t* cef_window_create_top_level( - return CefWindowCppToC::Wrap(_retval); - } - -+CEF_EXPORT cef_window_t* cef_window_create_top_level_with_id( -+ struct _cef_window_delegate_t* delegate, -+ const cef_string_t* app_id) { -+ shutdown_checker::AssertNotShutdown(); -+ -+ // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING -+ -+ // Verify param: delegate; type: refptr_diff -+ DCHECK(delegate); -+ if (!delegate) -+ return NULL; -+ // Verify param: app_id; type: string_byref_const -+ DCHECK(app_id); -+ if (!app_id) -+ return NULL; -+ -+ // Execute -+ CefRefPtr _retval = CefWindow::CreateTopLevelWindowWithId( -+ CefWindowDelegateCToCpp::Wrap(delegate), CefString(app_id)); -+ -+ // Return type: refptr_same -+ return CefWindowCppToC::Wrap(_retval); -+} -+ - namespace { - - // MEMBER FUNCTIONS - Body may be edited by hand. -@@ -652,6 +676,115 @@ void CEF_CALLBACK window_remove_all_accelerators(struct _cef_window_t* self) { - CefWindowCppToC::Get(self)->RemoveAllAccelerators(); - } - -+void CEF_CALLBACK window_agl_activate_app(struct _cef_window_t* self, -+ const cef_string_t* app) { -+ shutdown_checker::AssertNotShutdown(); -+ -+ // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING -+ -+ DCHECK(self); -+ if (!self) -+ return; -+ // Verify param: app; type: string_byref_const -+ DCHECK(app); -+ if (!app) -+ return; -+ -+ // Execute -+ CefWindowCppToC::Get(self)->AglActivateApp(CefString(app)); -+} -+ -+void CEF_CALLBACK window_agl_set_app_id(struct _cef_window_t* self, -+ const cef_string_t* app_id) { -+ shutdown_checker::AssertNotShutdown(); -+ -+ // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING -+ -+ DCHECK(self); -+ if (!self) -+ return; -+ // Verify param: app_id; type: string_byref_const -+ DCHECK(app_id); -+ if (!app_id) -+ return; -+ -+ // Execute -+ CefWindowCppToC::Get(self)->AglSetAppId(CefString(app_id)); -+} -+ -+void CEF_CALLBACK window_agl_set_app_ready(struct _cef_window_t* self) { -+ shutdown_checker::AssertNotShutdown(); -+ -+ // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING -+ -+ DCHECK(self); -+ if (!self) -+ return; -+ -+ // Execute -+ CefWindowCppToC::Get(self)->AglSetAppReady(); -+} -+ -+void CEF_CALLBACK window_agl_set_back_ground_app(struct _cef_window_t* self) { -+ shutdown_checker::AssertNotShutdown(); -+ -+ // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING -+ -+ DCHECK(self); -+ if (!self) -+ return; -+ -+ // Execute -+ CefWindowCppToC::Get(self)->AglSetBackGroundApp(); -+} -+ -+void CEF_CALLBACK window_agl_set_panel_app(struct _cef_window_t* self, -+ uint32_t edge) { -+ shutdown_checker::AssertNotShutdown(); -+ -+ // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING -+ -+ DCHECK(self); -+ if (!self) -+ return; -+ -+ // Execute -+ CefWindowCppToC::Get(self)->AglSetPanelApp(edge); -+} -+ -+int CEF_CALLBACK window_is_surface_configured(struct _cef_window_t* self) { -+ shutdown_checker::AssertNotShutdown(); -+ -+ // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING -+ -+ DCHECK(self); -+ if (!self) -+ return 0; -+ -+ // Execute -+ bool _retval = CefWindowCppToC::Get(self)->IsSurfaceConfigured(); -+ -+ // Return type: bool -+ return _retval; -+} -+ -+void CEF_CALLBACK window_setup_activation_area(struct _cef_window_t* self, -+ uint32_t x, -+ uint32_t y, -+ uint32_t width, -+ uint32_t height) { -+ shutdown_checker::AssertNotShutdown(); -+ -+ // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING -+ -+ DCHECK(self); -+ if (!self) -+ return; -+ -+ // Execute -+ CefWindowCppToC::Get(self)->SetupActivationArea(x, y, width, height); -+} -+ - struct _cef_window_t* CEF_CALLBACK window_as_window(struct _cef_panel_t* self) { - shutdown_checker::AssertNotShutdown(); - -@@ -1876,6 +2009,13 @@ CefWindowCppToC::CefWindowCppToC() { - GetStruct()->set_accelerator = window_set_accelerator; - GetStruct()->remove_accelerator = window_remove_accelerator; - GetStruct()->remove_all_accelerators = window_remove_all_accelerators; -+ GetStruct()->agl_activate_app = window_agl_activate_app; -+ GetStruct()->agl_set_app_id = window_agl_set_app_id; -+ GetStruct()->agl_set_app_ready = window_agl_set_app_ready; -+ GetStruct()->agl_set_back_ground_app = window_agl_set_back_ground_app; -+ GetStruct()->agl_set_panel_app = window_agl_set_panel_app; -+ GetStruct()->is_surface_configured = window_is_surface_configured; -+ GetStruct()->setup_activation_area = window_setup_activation_area; - GetStruct()->base.as_window = window_as_window; - GetStruct()->base.set_to_fill_layout = window_set_to_fill_layout; - GetStruct()->base.set_to_box_layout = window_set_to_box_layout; -diff --git a/libcef_dll/cpptoc/views/window_cpptoc.h b/libcef_dll/cpptoc/views/window_cpptoc.h -index de348f70d..e02be4494 100644 ---- a/libcef_dll/cpptoc/views/window_cpptoc.h -+++ b/libcef_dll/cpptoc/views/window_cpptoc.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights -+// Copyright (c) 2023 The Chromium Embedded Framework Authors. All rights - // reserved. Use of this source code is governed by a BSD-style license that - // can be found in the LICENSE file. - // -@@ -9,7 +9,7 @@ - // implementations. See the translator.README.txt file in the tools directory - // for more information. - // --// $hash=5b14236c7e00a7dafa47fdc32ce78d347de477a1$ -+// $hash=12ff3d7d14f9977ff1f62e9a35b04b153a135480$ - // - - #ifndef CEF_LIBCEF_DLL_CPPTOC_VIEWS_WINDOW_CPPTOC_H_ -diff --git a/libcef_dll/ctocpp/views/window_ctocpp.cc b/libcef_dll/ctocpp/views/window_ctocpp.cc -index 145fa125d..718089e21 100644 ---- a/libcef_dll/ctocpp/views/window_ctocpp.cc -+++ b/libcef_dll/ctocpp/views/window_ctocpp.cc -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights -+// Copyright (c) 2023 The Chromium Embedded Framework Authors. All rights - // reserved. Use of this source code is governed by a BSD-style license that - // can be found in the LICENSE file. - // -@@ -9,7 +9,7 @@ - // implementations. See the translator.README.txt file in the tools directory - // for more information. - // --// $hash=a71d84e671749331e5ad99c84ef790f09613b145$ -+// $hash=b94adc237573ebd64f88bbc85aa95810e8efa891$ - // - - #include "libcef_dll/ctocpp/views/window_ctocpp.h" -@@ -49,6 +49,31 @@ CefRefPtr CefWindow::CreateTopLevelWindow( - return CefWindowCToCpp::Wrap(_retval); - } - -+NO_SANITIZE("cfi-icall") -+CefRefPtr CefWindow::CreateTopLevelWindowWithId( -+ CefRefPtr delegate, -+ const CefString& app_id) { -+ shutdown_checker::AssertNotShutdown(); -+ -+ // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING -+ -+ // Verify param: delegate; type: refptr_diff -+ DCHECK(delegate.get()); -+ if (!delegate.get()) -+ return nullptr; -+ // Verify param: app_id; type: string_byref_const -+ DCHECK(!app_id.empty()); -+ if (app_id.empty()) -+ return nullptr; -+ -+ // Execute -+ cef_window_t* _retval = cef_window_create_top_level_with_id( -+ CefWindowDelegateCppToC::Wrap(delegate), app_id.GetStruct()); -+ -+ // Return type: refptr_same -+ return CefWindowCToCpp::Wrap(_retval); -+} -+ - // VIRTUAL METHODS - Body may be edited by hand. - - NO_SANITIZE("cfi-icall") void CefWindowCToCpp::Show() { -@@ -642,6 +667,116 @@ NO_SANITIZE("cfi-icall") void CefWindowCToCpp::RemoveAllAccelerators() { - _struct->remove_all_accelerators(_struct); - } - -+NO_SANITIZE("cfi-icall") -+void CefWindowCToCpp::AglActivateApp(const CefString& app) { -+ shutdown_checker::AssertNotShutdown(); -+ -+ cef_window_t* _struct = GetStruct(); -+ if (CEF_MEMBER_MISSING(_struct, agl_activate_app)) -+ return; -+ -+ // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING -+ -+ // Verify param: app; type: string_byref_const -+ DCHECK(!app.empty()); -+ if (app.empty()) -+ return; -+ -+ // Execute -+ _struct->agl_activate_app(_struct, app.GetStruct()); -+} -+ -+NO_SANITIZE("cfi-icall") -+void CefWindowCToCpp::AglSetAppId(const CefString& app_id) { -+ shutdown_checker::AssertNotShutdown(); -+ -+ cef_window_t* _struct = GetStruct(); -+ if (CEF_MEMBER_MISSING(_struct, agl_set_app_id)) -+ return; -+ -+ // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING -+ -+ // Verify param: app_id; type: string_byref_const -+ DCHECK(!app_id.empty()); -+ if (app_id.empty()) -+ return; -+ -+ // Execute -+ _struct->agl_set_app_id(_struct, app_id.GetStruct()); -+} -+ -+NO_SANITIZE("cfi-icall") void CefWindowCToCpp::AglSetAppReady() { -+ shutdown_checker::AssertNotShutdown(); -+ -+ cef_window_t* _struct = GetStruct(); -+ if (CEF_MEMBER_MISSING(_struct, agl_set_app_ready)) -+ return; -+ -+ // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING -+ -+ // Execute -+ _struct->agl_set_app_ready(_struct); -+} -+ -+NO_SANITIZE("cfi-icall") void CefWindowCToCpp::AglSetBackGroundApp() { -+ shutdown_checker::AssertNotShutdown(); -+ -+ cef_window_t* _struct = GetStruct(); -+ if (CEF_MEMBER_MISSING(_struct, agl_set_back_ground_app)) -+ return; -+ -+ // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING -+ -+ // Execute -+ _struct->agl_set_back_ground_app(_struct); -+} -+ -+NO_SANITIZE("cfi-icall") void CefWindowCToCpp::AglSetPanelApp(uint32_t edge) { -+ shutdown_checker::AssertNotShutdown(); -+ -+ cef_window_t* _struct = GetStruct(); -+ if (CEF_MEMBER_MISSING(_struct, agl_set_panel_app)) -+ return; -+ -+ // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING -+ -+ // Execute -+ _struct->agl_set_panel_app(_struct, edge); -+} -+ -+NO_SANITIZE("cfi-icall") bool CefWindowCToCpp::IsSurfaceConfigured() { -+ shutdown_checker::AssertNotShutdown(); -+ -+ cef_window_t* _struct = GetStruct(); -+ if (CEF_MEMBER_MISSING(_struct, is_surface_configured)) -+ return false; -+ -+ // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING -+ -+ // Execute -+ int _retval = _struct->is_surface_configured(_struct); -+ -+ // Return type: bool -+ return _retval ? true : false; -+} -+ -+NO_SANITIZE("cfi-icall") -+void CefWindowCToCpp::SetupActivationArea(uint32_t x, -+ uint32_t y, -+ uint32_t width, -+ uint32_t height) { -+ shutdown_checker::AssertNotShutdown(); -+ -+ cef_window_t* _struct = GetStruct(); -+ if (CEF_MEMBER_MISSING(_struct, setup_activation_area)) -+ return; -+ -+ // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING -+ -+ // Execute -+ _struct->setup_activation_area(_struct, x, y, width, height); -+} -+ - NO_SANITIZE("cfi-icall") CefRefPtr CefWindowCToCpp::AsWindow() { - shutdown_checker::AssertNotShutdown(); - -diff --git a/libcef_dll/ctocpp/views/window_ctocpp.h b/libcef_dll/ctocpp/views/window_ctocpp.h -index dfdc0c686..160e541e5 100644 ---- a/libcef_dll/ctocpp/views/window_ctocpp.h -+++ b/libcef_dll/ctocpp/views/window_ctocpp.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights -+// Copyright (c) 2023 The Chromium Embedded Framework Authors. All rights - // reserved. Use of this source code is governed by a BSD-style license that - // can be found in the LICENSE file. - // -@@ -9,7 +9,7 @@ - // implementations. See the translator.README.txt file in the tools directory - // for more information. - // --// $hash=5afd032b23745d114bc95d45139cf5d92a82f89a$ -+// $hash=1162283afe7d77f108ab6a4dee7ce58a2222b0fb$ - // - - #ifndef CEF_LIBCEF_DLL_CTOCPP_VIEWS_WINDOW_CTOCPP_H_ -@@ -82,6 +82,16 @@ class CefWindowCToCpp - bool alt_pressed) override; - void RemoveAccelerator(int command_id) override; - void RemoveAllAccelerators() override; -+ void AglActivateApp(const CefString& app) override; -+ void AglSetAppId(const CefString& app_id) override; -+ void AglSetAppReady() override; -+ void AglSetBackGroundApp() override; -+ void AglSetPanelApp(uint32_t edge) override; -+ bool IsSurfaceConfigured() override; -+ void SetupActivationArea(uint32_t x, -+ uint32_t y, -+ uint32_t width, -+ uint32_t height) override; - - // CefPanel methods. - CefRefPtr AsWindow() override; -diff --git a/libcef_dll/libcef_dll.cc b/libcef_dll/libcef_dll.cc -index c3d5f2b5d..563f597fd 100644 ---- a/libcef_dll/libcef_dll.cc -+++ b/libcef_dll/libcef_dll.cc -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights -+// Copyright (c) 2023 The Chromium Embedded Framework Authors. All rights - // reserved. Use of this source code is governed by a BSD-style license that - // can be found in the LICENSE file. - // -@@ -9,7 +9,7 @@ - // implementations. See the translator.README.txt file in the tools directory - // for more information. - // --// $hash=6bc0085b04e78068511eb7198a3f9bda103adc85$ -+// $hash=60eb166db44900db1e9270d781e83b06544a1a3e$ - // - - #include "include/capi/cef_app_capi.h" -diff --git a/libcef_dll/wrapper/libcef_dll_dylib.cc b/libcef_dll/wrapper/libcef_dll_dylib.cc -index 295b3514e..6e57f2859 100644 ---- a/libcef_dll/wrapper/libcef_dll_dylib.cc -+++ b/libcef_dll/wrapper/libcef_dll_dylib.cc -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights -+// Copyright (c) 2023 The Chromium Embedded Framework Authors. All rights - // reserved. Use of this source code is governed by a BSD-style license that - // can be found in the LICENSE file. - // -@@ -9,7 +9,7 @@ - // implementations. See the translator.README.txt file in the tools directory - // for more information. - // --// $hash=aa091bc741fcefee760906fce4c8f86937dd74ca$ -+// $hash=637b28567ccfd4b89ed18bdf77fa81d4a8206173$ - // - - #include -@@ -249,6 +249,8 @@ struct libcef_pointers { - decltype(&cef_scroll_view_create) cef_scroll_view_create; - decltype(&cef_textfield_create) cef_textfield_create; - decltype(&cef_window_create_top_level) cef_window_create_top_level; -+ decltype(&cef_window_create_top_level_with_id) -+ cef_window_create_top_level_with_id; - decltype(&cef_api_hash) cef_api_hash; - decltype(&cef_version_info) cef_version_info; - decltype(&cef_get_min_log_level) cef_get_min_log_level; -@@ -463,6 +465,7 @@ int libcef_init_pointers(const char* path) { - INIT_ENTRY(cef_scroll_view_create); - INIT_ENTRY(cef_textfield_create); - INIT_ENTRY(cef_window_create_top_level); -+ INIT_ENTRY(cef_window_create_top_level_with_id); - INIT_ENTRY(cef_api_hash); - INIT_ENTRY(cef_version_info); - INIT_ENTRY(cef_get_min_log_level); -@@ -704,8 +707,8 @@ int cef_create_url(const struct _cef_urlparts_t* parts, cef_string_t* url) { - } - - NO_SANITIZE("cfi-icall") --cef_string_userfree_t cef_format_url_for_security_display( -- const cef_string_t* origin_url) { -+cef_string_userfree_t -+ cef_format_url_for_security_display(const cef_string_t* origin_url) { - return g_libcef_pointers.cef_format_url_for_security_display(origin_url); - } - -@@ -977,9 +980,10 @@ void cef_server_create(const cef_string_t* address, - } - - NO_SANITIZE("cfi-icall") --struct _cef_shared_process_message_builder_t* --cef_shared_process_message_builder_create(const cef_string_t* name, -- size_t byte_size) { -+struct -+ _cef_shared_process_message_builder_t* cef_shared_process_message_builder_create( -+ const cef_string_t* name, -+ size_t byte_size) { - return g_libcef_pointers.cef_shared_process_message_builder_create(name, - byte_size); - } -@@ -1191,46 +1195,54 @@ struct _cef_translator_test_t* cef_translator_test_create() { - } - - NO_SANITIZE("cfi-icall") --struct _cef_translator_test_ref_ptr_library_t* --cef_translator_test_ref_ptr_library_create(int value) { -+struct -+ _cef_translator_test_ref_ptr_library_t* cef_translator_test_ref_ptr_library_create( -+ int value) { - return g_libcef_pointers.cef_translator_test_ref_ptr_library_create(value); - } - - NO_SANITIZE("cfi-icall") --struct _cef_translator_test_ref_ptr_library_child_t* --cef_translator_test_ref_ptr_library_child_create(int value, int other_value) { -+struct -+ _cef_translator_test_ref_ptr_library_child_t* cef_translator_test_ref_ptr_library_child_create( -+ int value, -+ int other_value) { - return g_libcef_pointers.cef_translator_test_ref_ptr_library_child_create( - value, other_value); - } - - NO_SANITIZE("cfi-icall") --struct _cef_translator_test_ref_ptr_library_child_child_t* --cef_translator_test_ref_ptr_library_child_child_create(int value, -- int other_value, -- int other_other_value) { -+struct -+ _cef_translator_test_ref_ptr_library_child_child_t* cef_translator_test_ref_ptr_library_child_child_create( -+ int value, -+ int other_value, -+ int other_other_value) { - return g_libcef_pointers - .cef_translator_test_ref_ptr_library_child_child_create( - value, other_value, other_other_value); - } - - NO_SANITIZE("cfi-icall") --struct _cef_translator_test_scoped_library_t* --cef_translator_test_scoped_library_create(int value) { -+struct -+ _cef_translator_test_scoped_library_t* cef_translator_test_scoped_library_create( -+ int value) { - return g_libcef_pointers.cef_translator_test_scoped_library_create(value); - } - - NO_SANITIZE("cfi-icall") --struct _cef_translator_test_scoped_library_child_t* --cef_translator_test_scoped_library_child_create(int value, int other_value) { -+struct -+ _cef_translator_test_scoped_library_child_t* cef_translator_test_scoped_library_child_create( -+ int value, -+ int other_value) { - return g_libcef_pointers.cef_translator_test_scoped_library_child_create( - value, other_value); - } - - NO_SANITIZE("cfi-icall") --struct _cef_translator_test_scoped_library_child_child_t* --cef_translator_test_scoped_library_child_child_create(int value, -- int other_value, -- int other_other_value) { -+struct -+ _cef_translator_test_scoped_library_child_child_t* cef_translator_test_scoped_library_child_child_create( -+ int value, -+ int other_value, -+ int other_other_value) { - return g_libcef_pointers - .cef_translator_test_scoped_library_child_child_create(value, other_value, - other_other_value); -@@ -1283,14 +1295,14 @@ void cef_display_get_alls(size_t* displaysCount, - } - - NO_SANITIZE("cfi-icall") --cef_point_t cef_display_convert_screen_point_to_pixels( -- const cef_point_t* point) { -+cef_point_t -+ cef_display_convert_screen_point_to_pixels(const cef_point_t* point) { - return g_libcef_pointers.cef_display_convert_screen_point_to_pixels(point); - } - - NO_SANITIZE("cfi-icall") --cef_point_t cef_display_convert_screen_point_from_pixels( -- const cef_point_t* point) { -+cef_point_t -+ cef_display_convert_screen_point_from_pixels(const cef_point_t* point) { - return g_libcef_pointers.cef_display_convert_screen_point_from_pixels(point); - } - -@@ -1341,6 +1353,14 @@ struct _cef_window_t* cef_window_create_top_level( - return g_libcef_pointers.cef_window_create_top_level(delegate); - } - -+NO_SANITIZE("cfi-icall") -+struct _cef_window_t* cef_window_create_top_level_with_id( -+ struct _cef_window_delegate_t* delegate, -+ const cef_string_t* app_id) { -+ return g_libcef_pointers.cef_window_create_top_level_with_id(delegate, -+ app_id); -+} -+ - NO_SANITIZE("cfi-icall") const char* cef_api_hash(int entry) { - return g_libcef_pointers.cef_api_hash(entry); - } -diff --git a/libcef_dll/wrapper/libcef_dll_wrapper.cc b/libcef_dll/wrapper/libcef_dll_wrapper.cc -index eec632f7f..0f119ff76 100644 ---- a/libcef_dll/wrapper/libcef_dll_wrapper.cc -+++ b/libcef_dll/wrapper/libcef_dll_wrapper.cc -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights -+// Copyright (c) 2023 The Chromium Embedded Framework Authors. All rights - // reserved. Use of this source code is governed by a BSD-style license that - // can be found in the LICENSE file. - // -@@ -9,7 +9,7 @@ - // implementations. See the translator.README.txt file in the tools directory - // for more information. - // --// $hash=24d0396cbcb6e2af587c1126c899277d4ac0b4d2$ -+// $hash=d5a08cdf0fed1ce8d92526cd0423706f3385d098$ - // - - #include "include/capi/cef_app_capi.h" -@@ -150,7 +150,7 @@ NO_SANITIZE("cfi-icall") CEF_GLOBAL bool CefCrashReportingEnabled() { - - NO_SANITIZE("cfi-icall") - CEF_GLOBAL --void CefSetCrashKeyValue(const CefString& key, const CefString& value) { -+ void CefSetCrashKeyValue(const CefString& key, const CefString& value) { - // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING - - // Verify param: key; type: string_byref_const -@@ -305,10 +305,10 @@ NO_SANITIZE("cfi-icall") CEF_GLOBAL bool CefIsRTL() { - - NO_SANITIZE("cfi-icall") - CEF_GLOBAL --bool CefAddCrossOriginWhitelistEntry(const CefString& source_origin, -- const CefString& target_protocol, -- const CefString& target_domain, -- bool allow_target_subdomains) { -+ bool CefAddCrossOriginWhitelistEntry(const CefString& source_origin, -+ const CefString& target_protocol, -+ const CefString& target_domain, -+ bool allow_target_subdomains) { - // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING - - // Verify param: source_origin; type: string_byref_const -@@ -332,10 +332,10 @@ bool CefAddCrossOriginWhitelistEntry(const CefString& source_origin, - - NO_SANITIZE("cfi-icall") - CEF_GLOBAL --bool CefRemoveCrossOriginWhitelistEntry(const CefString& source_origin, -- const CefString& target_protocol, -- const CefString& target_domain, -- bool allow_target_subdomains) { -+ bool CefRemoveCrossOriginWhitelistEntry(const CefString& source_origin, -+ const CefString& target_protocol, -+ const CefString& target_domain, -+ bool allow_target_subdomains) { - // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING - - // Verify param: source_origin; type: string_byref_const -@@ -419,7 +419,7 @@ CEF_GLOBAL bool CefCreateURL(const CefURLParts& parts, CefString& url) { - - NO_SANITIZE("cfi-icall") - CEF_GLOBAL CefString --CefFormatUrlForSecurityDisplay(const CefString& origin_url) { -+ CefFormatUrlForSecurityDisplay(const CefString& origin_url) { - // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING - - // Verify param: origin_url; type: string_byref_const -@@ -457,8 +457,8 @@ CEF_GLOBAL CefString CefGetMimeType(const CefString& extension) { - - NO_SANITIZE("cfi-icall") - CEF_GLOBAL --void CefGetExtensionsForMimeType(const CefString& mime_type, -- std::vector& extensions) { -+ void CefGetExtensionsForMimeType(const CefString& mime_type, -+ std::vector& extensions) { - // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING - - // Verify param: mime_type; type: string_byref_const -@@ -612,8 +612,8 @@ CEF_GLOBAL CefRefPtr CefParseJSONAndReturnError( - } - - NO_SANITIZE("cfi-icall") --CEF_GLOBAL CefString CefWriteJSON(CefRefPtr node, -- cef_json_writer_options_t options) { -+CEF_GLOBAL CefString -+ CefWriteJSON(CefRefPtr node, cef_json_writer_options_t options) { - // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING - - // Verify param: node; type: refptr_same -diff --git a/libcef_dll/wrapper_types.h b/libcef_dll/wrapper_types.h -index 1157bfd1c..eddb3ec90 100644 ---- a/libcef_dll/wrapper_types.h -+++ b/libcef_dll/wrapper_types.h -@@ -1,4 +1,4 @@ --// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights -+// Copyright (c) 2023 The Chromium Embedded Framework Authors. All rights - // reserved. Use of this source code is governed by a BSD-style license that - // can be found in the LICENSE file. - // -@@ -9,7 +9,7 @@ - // implementations. See the translator.README.txt file in the tools directory - // for more information. - // --// $hash=e8bf5997bf7a4e77f39247068da48b539ef838b0$ -+// $hash=220cf66311a9b87b0edfadf9617138d7cf3273f8$ - // - - #ifndef CEF_LIBCEF_DLL_WRAPPER_TYPES_H_ --- -2.39.2 - diff --git a/recipes-wam/cef/files/cef/0011-Avoid-the-RuntimeError-dictionary-changed-size-durin.patch b/recipes-wam/cef/files/cef/0011-Avoid-the-RuntimeError-dictionary-changed-size-durin.patch new file mode 100644 index 00000000..32527b79 --- /dev/null +++ b/recipes-wam/cef/files/cef/0011-Avoid-the-RuntimeError-dictionary-changed-size-durin.patch @@ -0,0 +1,26 @@ +From db006bee47fd4cd5f9138a0b916b81dff9bab3d0 Mon Sep 17 00:00:00 2001 +From: Roger Zanoni +Date: Wed, 8 Nov 2023 13:37:27 -0300 +Subject: [PATCH 11/11] Avoid the RuntimeError: dictionary changed size during + iteration + +--- + tools/gn_args.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tools/gn_args.py b/tools/gn_args.py +index 80545da49..9e2e9c061 100644 +--- a/tools/gn_args.py ++++ b/tools/gn_args.py +@@ -486,7 +486,7 @@ def GetConfigArgs(args, is_debug, cpu, bypass_sysroot_check=False): + + if platform == 'linux' and not cpu.startswith('arm'): + # Remove any arm-related values from non-arm configs. +- for key in result.keys(): ++ for key, value in list(result.items()): + if key.startswith('arm_'): + del result[key] + +-- +2.42.1 + diff --git a/recipes-wam/cef/files/chromium/0001-agl-compositor-Add-agl_shell_wrapper-AGL-wayland-ext.patch b/recipes-wam/cef/files/chromium/0001-agl-compositor-Add-agl_shell_wrapper-AGL-wayland-ext.patch new file mode 100644 index 00000000..6ab4d5b8 --- /dev/null +++ b/recipes-wam/cef/files/chromium/0001-agl-compositor-Add-agl_shell_wrapper-AGL-wayland-ext.patch @@ -0,0 +1,914 @@ +From 019d5dea79b9ac8ec17d5925546aab66473f67f5 Mon Sep 17 00:00:00 2001 +From: Roger Zanoni +Date: Mon, 15 May 2023 20:32:06 +0200 +Subject: [PATCH 01/33] [agl][compositor] Add agl_shell_wrapper / AGL wayland + extension + +This is a backport of the chages we did on top of chromium webosose to +be able to communicate with the agl-compositor + +Signed-off-by: Roger Zanoni +--- + ui/base/ui_base_switches.cc | 2 + + ui/base/ui_base_switches.h | 3 + + ui/ozone/platform/wayland/BUILD.gn | 7 + + .../platform/wayland/extensions/agl/BUILD.gn | 40 ++++ + .../agl/common/wayland_object_agl.cc | 26 +++ + .../agl/common/wayland_object_agl.h | 34 ++++ + .../extensions/agl/host/agl_shell_wrapper.cc | 113 +++++++++++ + .../extensions/agl/host/agl_shell_wrapper.h | 62 ++++++ + .../agl/host/wayland_extensions_agl.h | 37 ++++ + .../agl/host/wayland_extensions_agl_impl.cc | 93 +++++++++ + .../agl/host/wayland_extensions_agl_impl.h | 54 ++++++ + .../extensions/agl/protocol/agl-shell.xml | 179 ++++++++++++++++++ + .../wayland/host/wayland_connection.cc | 12 +- + .../wayland/host/wayland_connection.h | 4 + + .../wayland/host/wayland_extensions.h | 56 ++++++ + 15 files changed, 720 insertions(+), 2 deletions(-) + create mode 100644 ui/ozone/platform/wayland/extensions/agl/BUILD.gn + create mode 100644 ui/ozone/platform/wayland/extensions/agl/common/wayland_object_agl.cc + create mode 100644 ui/ozone/platform/wayland/extensions/agl/common/wayland_object_agl.h + create mode 100644 ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.cc + create mode 100644 ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.h + create mode 100644 ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl.h + create mode 100644 ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.cc + create mode 100644 ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.h + create mode 100644 ui/ozone/platform/wayland/extensions/agl/protocol/agl-shell.xml + create mode 100644 ui/ozone/platform/wayland/host/wayland_extensions.h + +diff --git a/ui/base/ui_base_switches.cc b/ui/base/ui_base_switches.cc +index 514bb3cdb580d..d94e2c5e78306 100644 +--- a/ui/base/ui_base_switches.cc ++++ b/ui/base/ui_base_switches.cc +@@ -112,4 +112,6 @@ const char kUIDisablePartialSwap[] = "ui-disable-partial-swap"; + // Enables the ozone x11 clipboard for linux-chromeos. + const char kUseSystemClipboard[] = "use-system-clipboard"; + ++const char kAglShellAppId[] = "agl-shell-appid"; ++ + } // namespace switches +diff --git a/ui/base/ui_base_switches.h b/ui/base/ui_base_switches.h +index ec664b866c5d2..cf483e0339072 100644 +--- a/ui/base/ui_base_switches.h ++++ b/ui/base/ui_base_switches.h +@@ -53,6 +53,9 @@ COMPONENT_EXPORT(UI_BASE) extern const char kTopChromeTouchUiEnabled[]; + COMPONENT_EXPORT(UI_BASE) extern const char kUIDisablePartialSwap[]; + COMPONENT_EXPORT(UI_BASE) extern const char kUseSystemClipboard[]; + ++// Agl related ++COMPONENT_EXPORT(UI_BASE) extern const char kAglShellAppId[]; ++ + // Test related. + COMPONENT_EXPORT(UI_BASE) extern const char kDisallowNonExactResourceReuse[]; + COMPONENT_EXPORT(UI_BASE) extern const char kMangleLocalizedStrings[]; +diff --git a/ui/ozone/platform/wayland/BUILD.gn b/ui/ozone/platform/wayland/BUILD.gn +index ae763d441d55c..8a436de0fafe3 100644 +--- a/ui/ozone/platform/wayland/BUILD.gn ++++ b/ui/ozone/platform/wayland/BUILD.gn +@@ -397,6 +397,13 @@ source_set("wayland") { + ] + + configs += [ "//third_party/khronos:khronos_headers" ] ++ ++ sources += [ ++ "host/wayland_extensions.h", ++ "host/wayland_extensions_stub.cc", ++ ] ++ ++ deps += [ "extensions/agl" ] + } + + source_set("test_support") { +diff --git a/ui/ozone/platform/wayland/extensions/agl/BUILD.gn b/ui/ozone/platform/wayland/extensions/agl/BUILD.gn +new file mode 100644 +index 0000000000000..ce289bc5dbbca +--- /dev/null ++++ b/ui/ozone/platform/wayland/extensions/agl/BUILD.gn +@@ -0,0 +1,40 @@ ++# Copyright 2021 LG Electronics, Inc. ++# ++# Licensed under the Apache License, Version 2.0 (the "License"); ++# you may not use this file except in compliance with the License. ++# You may obtain a copy of the License at ++# ++# http://www.apache.org/licenses/LICENSE-2.0 ++# ++# Unless required by applicable law or agreed to in writing, software ++# distributed under the License is distributed on an "AS IS" BASIS, ++# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++# See the License for the specific language governing permissions and ++# limitations under the License. ++# ++# SPDX-License-Identifier: Apache-2.0 ++ ++import("//third_party/wayland/wayland_protocol.gni") ++ ++visibility = [ "//ui/ozone/*" ] ++ ++wayland_protocol("agl_shell_protocol") { ++ sources = [ "protocol/agl-shell.xml" ] ++} ++ ++source_set("agl") { ++ sources = [ ++ "common/wayland_object_agl.cc", ++ "common/wayland_object_agl.h", ++ "host/agl_shell_wrapper.cc", ++ "host/agl_shell_wrapper.h", ++ "host/wayland_extensions_agl.h", ++ "host/wayland_extensions_agl_impl.cc", ++ "host/wayland_extensions_agl_impl.h", ++ ] ++ ++ deps = [ ++ ":agl_shell_protocol", ++ "//ui/ozone/platform/wayland/mojom", ++ ] ++} +diff --git a/ui/ozone/platform/wayland/extensions/agl/common/wayland_object_agl.cc b/ui/ozone/platform/wayland/extensions/agl/common/wayland_object_agl.cc +new file mode 100644 +index 0000000000000..9f3300766df2c +--- /dev/null ++++ b/ui/ozone/platform/wayland/extensions/agl/common/wayland_object_agl.cc +@@ -0,0 +1,26 @@ ++// Copyright 2021 LG Electronics, Inc. ++// ++// Licensed under the Apache License, Version 2.0 (the "License"); ++// you may not use this file except in compliance with the License. ++// You may obtain a copy of the License at ++// ++// http://www.apache.org/licenses/LICENSE-2.0 ++// ++// Unless required by applicable law or agreed to in writing, software ++// distributed under the License is distributed on an "AS IS" BASIS, ++// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++// See the License for the specific language governing permissions and ++// limitations under the License. ++// ++// SPDX-License-Identifier: Apache-2.0 ++ ++#include "ui/ozone/platform/wayland/extensions/agl/common/wayland_object_agl.h" ++ ++#include ++ ++namespace wl { ++ ++const wl_interface* ObjectTraits::interface = &agl_shell_interface; ++void (*ObjectTraits::deleter)(agl_shell*) = &agl_shell_destroy; ++ ++} // namespace wl +\ No newline at end of file +diff --git a/ui/ozone/platform/wayland/extensions/agl/common/wayland_object_agl.h b/ui/ozone/platform/wayland/extensions/agl/common/wayland_object_agl.h +new file mode 100644 +index 0000000000000..e91ac0da8d2fc +--- /dev/null ++++ b/ui/ozone/platform/wayland/extensions/agl/common/wayland_object_agl.h +@@ -0,0 +1,34 @@ ++// Copyright 2021 LG Electronics, Inc. ++// ++// Licensed under the Apache License, Version 2.0 (the "License"); ++// you may not use this file except in compliance with the License. ++// You may obtain a copy of the License at ++// ++// http://www.apache.org/licenses/LICENSE-2.0 ++// ++// Unless required by applicable law or agreed to in writing, software ++// distributed under the License is distributed on an "AS IS" BASIS, ++// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++// See the License for the specific language governing permissions and ++// limitations under the License. ++// ++// SPDX-License-Identifier: Apache-2.0 ++ ++#ifndef UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_COMMON_WAYLAND_OBJECT_AGL_H_ ++#define UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_COMMON_WAYLAND_OBJECT_AGL_H_ ++ ++#include "ui/ozone/platform/wayland/common/wayland_object.h" ++ ++struct agl_shell; ++ ++namespace wl { ++ ++template <> ++struct ObjectTraits { ++ static const wl_interface* interface; ++ static void (*deleter)(agl_shell*); ++}; ++ ++} // namespace wl ++ ++#endif // UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_COMMON_WAYLAND_OBJECT_AGL_H_ +\ No newline at end of file +diff --git a/ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.cc b/ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.cc +new file mode 100644 +index 0000000000000..c74fa5d9cd221 +--- /dev/null ++++ b/ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.cc +@@ -0,0 +1,113 @@ ++// Copyright 2021 LG Electronics, Inc. ++// ++// Licensed under the Apache License, Version 2.0 (the "License"); ++// you may not use this file except in compliance with the License. ++// You may obtain a copy of the License at ++// ++// http://www.apache.org/licenses/LICENSE-2.0 ++// ++// Unless required by applicable law or agreed to in writing, software ++// distributed under the License is distributed on an "AS IS" BASIS, ++// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++// See the License for the specific language governing permissions and ++// limitations under the License. ++// ++// SPDX-License-Identifier: Apache-2.0 ++ ++#include "ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.h" ++ ++#include "agl_shell_wrapper.h" ++#include "base/logging.h" ++#include "ui/base/ui_base_switches.h" ++#include "ui/ozone/platform/wayland/host/wayland_connection.h" ++#include "ui/ozone/platform/wayland/host/wayland_output_manager.h" ++#include "ui/ozone/platform/wayland/host/wayland_window.h" ++ ++namespace ui { ++ ++static const struct agl_shell_listener shell_listener = { ++ &AglShellWrapper::AglShellBoundOk, ++ &AglShellWrapper::AglShellBoundFail, ++#ifdef AGL_SHELL_APP_STATE_SINCE_VERSION ++ &AglShellWrapper::AglAppState, ++#endif ++}; ++ ++AglShellWrapper::AglShellWrapper(agl_shell* agl_shell, ++ WaylandConnection* wayland_connection) ++ : agl_shell_(agl_shell), connection_(wayland_connection) { ++ if (wl::get_version_of_object(agl_shell) >= AGL_SHELL_BOUND_OK_SINCE_VERSION) ++ agl_shell_add_listener(agl_shell, &shell_listener, this); ++} ++ ++AglShellWrapper::~AglShellWrapper() = default; ++ ++void AglShellWrapper::SetAglActivateApp(const std::string& app_id) { ++ wl_output* output = ++ connection_->wayland_output_manager()->GetPrimaryOutput()->get_output(); ++ agl_shell_activate_app(agl_shell_.get(), app_id.c_str(), output); ++} ++ ++void AglShellWrapper::SetAglPanel(WaylandWindow* window, uint32_t edge) { ++ wl_surface* surface = window->root_surface()->surface(); ++ wl_output* output = ++ connection_->wayland_output_manager()->GetPrimaryOutput()->get_output(); ++ ++ agl_shell_set_panel(agl_shell_.get(), surface, output, edge); ++} ++ ++void AglShellWrapper::SetAglBackground(WaylandWindow* window) { ++ wl_surface* surface = window->root_surface()->surface(); ++ wl_output* output = ++ connection_->wayland_output_manager()->GetPrimaryOutput()->get_output(); ++ ++ agl_shell_set_background(agl_shell_.get(), surface, output); ++} ++ ++void AglShellWrapper::SetAglReady() { ++ agl_shell_ready(agl_shell_.get()); ++} ++ ++// static ++void AglShellWrapper::AglShellBoundOk(void* data, struct agl_shell*) { ++ AglShellWrapper* wrapper = static_cast(data); ++ wrapper->wait_for_bound_ = false; ++ wrapper->bound_ok_ = true; ++ LOG(INFO) << "Bound to agl_shell (bound_ok)"; ++} ++ ++// static ++void AglShellWrapper::AglShellBoundFail(void* data, struct agl_shell*) { ++ AglShellWrapper* wrapper = static_cast(data); ++ wrapper->wait_for_bound_ = false; ++ wrapper->bound_ok_ = false; ++ LOG(INFO) << "Failed to bind to agl_shell (bound_fail)"; ++} ++ ++#ifdef AGL_SHELL_APP_STATE_SINCE_VERSION ++// static ++void AglShellWrapper::AglAppState(void* data, ++ struct agl_shell*, ++ const char* app_id, ++ uint32_t state) { ++ AglShellWrapper* wrapper = static_cast(data); ++ ++ LOG(INFO) << "State for app " << app_id << " changed to " << state; ++ ++ if (state == AGL_SHELL_APP_STATE_STARTED) { ++ wrapper->SetAglActivateApp(app_id); ++ LOG(INFO) << "Activating app " << app_id; ++ } ++} ++#endif ++ ++bool AglShellWrapper::WaitUntilBoundOk() { ++ int ret = 0; ++ while (ret != -1 && wait_for_bound_) { ++ ret = wl_display_dispatch(connection_->display()); ++ } ++ ++ return bound_ok_; ++} ++ ++} // namespace ui +diff --git a/ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.h b/ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.h +new file mode 100644 +index 0000000000000..2ab765883057e +--- /dev/null ++++ b/ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.h +@@ -0,0 +1,62 @@ ++// Copyright 2021 LG Electronics, Inc. ++// ++// Licensed under the Apache License, Version 2.0 (the "License"); ++// you may not use this file except in compliance with the License. ++// You may obtain a copy of the License at ++// ++// http://www.apache.org/licenses/LICENSE-2.0 ++// ++// Unless required by applicable law or agreed to in writing, software ++// distributed under the License is distributed on an "AS IS" BASIS, ++// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++// See the License for the specific language governing permissions and ++// limitations under the License. ++// ++// SPDX-License-Identifier: Apache-2.0 ++ ++#ifndef UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_HOST_AGL_SHELL_WRAPPER_H_ ++#define UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_HOST_AGL_SHELL_WRAPPER_H_ ++ ++#include ++ ++#include ++ ++#include "ui/ozone/platform/wayland/extensions/agl/common/wayland_object_agl.h" ++ ++namespace ui { ++ ++class WaylandConnection; ++class WaylandWindow; ++ ++class AglShellWrapper { ++ public: ++ AglShellWrapper(agl_shell* agl_shell, WaylandConnection* wayland_connection); ++ AglShellWrapper(const AglShellWrapper&) = delete; ++ AglShellWrapper& operator=(const AglShellWrapper&) = delete; ++ ~AglShellWrapper(); ++ ++ void SetAglActivateApp(const std::string& app_id); ++ void SetAglPanel(WaylandWindow* window, uint32_t edge); ++ void SetAglBackground(WaylandWindow* window); ++ void SetAglReady(); ++ bool WaitUntilBoundOk(); ++ ++ static void AglShellBoundOk(void* data, struct agl_shell*); ++ static void AglShellBoundFail(void* data, struct agl_shell*); ++#ifdef AGL_SHELL_APP_STATE_SINCE_VERSION ++ static void AglAppState(void* data, ++ struct agl_shell*, ++ const char* app_id, ++ uint32_t state); ++#endif ++ ++ private: ++ wl::Object agl_shell_; ++ WaylandConnection* connection_; ++ bool wait_for_bound_ = true; ++ bool bound_ok_ = false; ++}; ++ ++} // namespace ui ++ ++#endif // UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_HOST_AGL_SHELL_WRAPPER_H_ +diff --git a/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl.h b/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl.h +new file mode 100644 +index 0000000000000..df42fc00c84da +--- /dev/null ++++ b/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl.h +@@ -0,0 +1,37 @@ ++// Copyright 2021 LG Electronics, Inc. ++// ++// Licensed under the Apache License, Version 2.0 (the "License"); ++// you may not use this file except in compliance with the License. ++// You may obtain a copy of the License at ++// ++// http://www.apache.org/licenses/LICENSE-2.0 ++// ++// Unless required by applicable law or agreed to in writing, software ++// distributed under the License is distributed on an "AS IS" BASIS, ++// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++// See the License for the specific language governing permissions and ++// limitations under the License. ++// ++// SPDX-License-Identifier: Apache-2.0 ++ ++#ifndef UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_HOST_WAYLAND_EXTENSIONS_AGL_H_ ++#define UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_HOST_WAYLAND_EXTENSIONS_AGL_H_ ++ ++namespace ui { ++ ++class AglShellWrapper; ++ ++// AGL extensions implementation for webOS/Lite ++class WaylandExtensionsAgl { ++ public: ++ WaylandExtensionsAgl() = default; ++ WaylandExtensionsAgl(const WaylandExtensionsAgl&) = delete; ++ WaylandExtensionsAgl& operator=(const WaylandExtensionsAgl&) = delete; ++ virtual ~WaylandExtensionsAgl() = default; ++ ++ virtual AglShellWrapper* GetAglShell() = 0; ++}; ++ ++} // namespace ui ++ ++#endif // UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_HOST_WAYLAND_EXTENSIONS_AGL_H_ +\ No newline at end of file +diff --git a/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.cc b/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.cc +new file mode 100644 +index 0000000000000..26a5f0550c302 +--- /dev/null ++++ b/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.cc +@@ -0,0 +1,93 @@ ++// Copyright 2021 LG Electronics, Inc. ++// ++// Licensed under the Apache License, Version 2.0 (the "License"); ++// you may not use this file except in compliance with the License. ++// You may obtain a copy of the License at ++// ++// http://www.apache.org/licenses/LICENSE-2.0 ++// ++// Unless required by applicable law or agreed to in writing, software ++// distributed under the License is distributed on an "AS IS" BASIS, ++// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++// See the License for the specific language governing permissions and ++// limitations under the License. ++// ++// SPDX-License-Identifier: Apache-2.0 ++ ++#include "ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.h" ++ ++#include ++ ++#include "base/command_line.h" ++#include "base/logging.h" ++#include "ui/base/ui_base_switches.h" ++#include "ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.h" ++#include "ui/ozone/platform/wayland/extensions/agl/common/wayland_object_agl.h" ++#include "ui/ozone/platform/wayland/host/wayland_connection.h" ++ ++namespace ui { ++ ++namespace { ++ ++constexpr uint32_t kMinAglShellExtensionVersion = 1; ++constexpr uint32_t kMaxAglShellExtensionVersion = 3; ++ ++} // namespace ++ ++WaylandExtensionsAglImpl::WaylandExtensionsAglImpl( ++ WaylandConnection* connection) ++ : connection_(connection) {} ++ ++WaylandExtensionsAglImpl::~WaylandExtensionsAglImpl() = default; ++ ++bool WaylandExtensionsAglImpl::Bind(wl_registry* registry, ++ uint32_t name, ++ const char* interface, ++ uint32_t version) { ++ bool should_use_agl_shell = base::CommandLine::ForCurrentProcess()->HasSwitch( ++ switches::kAglShellAppId); ++ bool can_bind = wl::CanBind(interface, version, kMinAglShellExtensionVersion, ++ kMaxAglShellExtensionVersion); ++ bool is_agl_shell_interface = (strcmp(interface, "agl_shell") == 0); ++ ++ if (!is_agl_shell_interface) { ++ return false; ++ } ++ ++ LOG(INFO) << "should_use_agl_shell: " << should_use_agl_shell << ++ " can_bind: " << can_bind; ++ ++ if (should_use_agl_shell && !agl_shell_ && ++ is_agl_shell_interface && can_bind) { ++ wl::Object aglshell = wl::Bind( ++ registry, name, std::min(version, kMaxAglShellExtensionVersion)); ++ if (!aglshell) { ++ LOG(ERROR) << "Failed to bind to agl_shell global"; ++ return false; ++ } ++ agl_shell_ = ++ std::make_unique(aglshell.release(), connection_); ++ ++ LOG(INFO) << "Waiting until bound..."; ++ return agl_shell_->WaitUntilBoundOk(); ++ } else { ++ LOG(INFO) << "Cant bind."; ++ } ++ ++ return false; ++} ++ ++bool WaylandExtensionsAglImpl::HasShellObject() const { ++ return !!agl_shell_; ++} ++ ++AglShellWrapper* WaylandExtensionsAglImpl::GetAglShell() { ++ return agl_shell_.get(); ++} ++ ++std::unique_ptr CreateWaylandExtensions( ++ WaylandConnection* connection) { ++ return std::make_unique(connection); ++} ++ ++} // namespace ui +diff --git a/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.h b/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.h +new file mode 100644 +index 0000000000000..f6cbabe99ed0b +--- /dev/null ++++ b/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.h +@@ -0,0 +1,54 @@ ++// Copyright 2021 LG Electronics, Inc. ++// ++// Licensed under the Apache License, Version 2.0 (the "License"); ++// you may not use this file except in compliance with the License. ++// You may obtain a copy of the License at ++// ++// http://www.apache.org/licenses/LICENSE-2.0 ++// ++// Unless required by applicable law or agreed to in writing, software ++// distributed under the License is distributed on an "AS IS" BASIS, ++// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++// See the License for the specific language governing permissions and ++// limitations under the License. ++// ++// SPDX-License-Identifier: Apache-2.0 ++ ++#ifndef UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_HOST_WAYLAND_EXTENSIONS_AGL_IMPL_H_ ++#define UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_HOST_WAYLAND_EXTENSIONS_AGL_IMPL_H_ ++ ++#include "ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl.h" ++#include "ui/ozone/platform/wayland/host/wayland_extensions.h" ++ ++namespace ui { ++ ++class AglShellWrapper; ++ ++// AGL extension implementation for webOS/Lite ++class WaylandExtensionsAglImpl : public WaylandExtensions, ++ public WaylandExtensionsAgl { ++ public: ++ explicit WaylandExtensionsAglImpl(WaylandConnection* connection); ++ WaylandExtensionsAglImpl(const WaylandExtensionsAglImpl&) = delete; ++ WaylandExtensionsAglImpl& operator=(const WaylandExtensionsAglImpl&) = delete; ++ ~WaylandExtensionsAglImpl() override; ++ ++ // WaylandExtensions overrides ++ bool Bind(wl_registry* registry, ++ uint32_t name, ++ const char* interface, ++ uint32_t version) override; ++ ++ bool HasShellObject() const override; ++ ++ // WaylandExtensionsAgl overrides ++ AglShellWrapper* GetAglShell() override; ++ ++ private: ++ std::unique_ptr agl_shell_; ++ WaylandConnection* connection_; ++}; ++ ++} // namespace ui ++ ++#endif // UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_HOST_WAYLAND_EXTENSIONS_AGL_IMPL_H_ +diff --git a/ui/ozone/platform/wayland/extensions/agl/protocol/agl-shell.xml b/ui/ozone/platform/wayland/extensions/agl/protocol/agl-shell.xml +new file mode 100644 +index 0000000000000..ad5553d61f189 +--- /dev/null ++++ b/ui/ozone/platform/wayland/extensions/agl/protocol/agl-shell.xml +@@ -0,0 +1,179 @@ ++ ++ ++ ++ Copyright © 2019, 2022 Collabora, Ltd. ++ ++ Permission is hereby granted, free of charge, to any person obtaining a ++ copy of this software and associated documentation files (the "Software"), ++ to deal in the Software without restriction, including without limitation ++ the rights to use, copy, modify, merge, publish, distribute, sublicense, ++ and/or sell copies of the Software, and to permit persons to whom the ++ Software is furnished to do so, subject to the following conditions: ++ ++ The above copyright notice and this permission notice (including the next ++ paragraph) shall be included in all copies or substantial portions of the ++ Software. ++ ++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++ THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING ++ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER ++ DEALINGS IN THE SOFTWARE. ++ ++ ++ ++ Starting with version 2 of the protocol, the client is required to wait ++ for the 'bound_ok' or 'bound_fail' events in order to proceed further. ++ ++ In case the client gets a 'bound_fail' event then it should consider that ++ there's another client already bound to the agl_shell protocol. ++ A client that receives a 'bound_ok' event should consider that there's ++ no other client already bound to the interface and can proceed further. ++ ++ If the client uses an older version of the protocol it will receive ++ automatically an error and the compositor will terminate the connection, ++ if there's another client already bound the interface. ++ ++ If the client receives the 'bound_fail' event and attempts to use the ++ interface further it will receive an error and the compositor will ++ terminate the connection. After the 'bound_fail' event was received the ++ client should call the destructor, which has been added with version 2 ++ of the protocol. The client is free to try at a later point in time to ++ see if it will receive the 'bound_ok' event, but there's no explicit way ++ of finding out when that event will be delivered. ++ It is assumed that it can infer that information through other ++ means/other channels. ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Tell the server that this client is ready to be shown. The server ++ will delay presentation during start-up until all shell clients are ++ ready to be shown, and will display a black screen instead. ++ This gives the client an opportunity to set up and configure several ++ surfaces into a coherent interface. ++ ++ The client that binds to this interface must send this request, otherwise ++ they may stall the compositor unnecessarily. ++ ++ If this request is called after the compositor has already finished ++ start-up, no operation is performed. ++ ++ ++ ++ ++ ++ Set the surface to act as the background of an output. After this ++ request, the server will immediately send a configure event with ++ the dimensions the client should use to cover the entire output. ++ ++ The surface must have a "desktop" surface role, as supported by ++ libweston-desktop. ++ ++ Only a single surface may be the background for any output. If a ++ background surface already exists, a protocol error is raised. ++ ++ ++ ++ ++ ++ ++ ++ Set the surface to act as a panel of an output. The 'edge' argument ++ says what edge of the output the surface will be anchored to. ++ After this request, the server will send a configure event with the ++ corresponding width/height that the client should use, and 0 for the ++ other dimension. E.g. if the edge is 'top', the width will be the ++ output's width, and the height will be 0. ++ ++ The surface must have a "desktop" surface role, as supported by ++ libweston-desktop. ++ ++ The compositor will take the panel's window geometry into account when ++ positioning other windows, so the panels are not covered. ++ ++ XXX: What happens if e.g. both top and left are used at the same time? ++ Who gets to have the corner? ++ ++ Only a single surface may be the panel for an output's edge. If a ++ surface already exists on an edge, a protocol error is raised. ++ ++ ++ ++ ++ ++ ++ ++ ++ Ask the compositor to make a toplevel to become the current/focused ++ window for window management purposes. ++ ++ See xdg_toplevel.set_app_id from the xdg-shell protocol for a ++ description of app_id. ++ ++ If multiple toplevels have the same app_id, the result is unspecified. ++ ++ XXX: Do we need feedback to say it didn't work? (e.g. client does ++ not exist) ++ ++ ++ ++ ++ ++ ++ ++ Informs the client that it was able to bind the agl_shell ++ interface succesfully. Clients are required to wait for this ++ event before continuing further. ++ ++ ++ ++ ++ ++ Informs the client that binding to the agl_shell interface was ++ unsuccesfull. Clients are required to wait for this event for ++ continuing further. ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Informs the client that an application has changed its state to another, ++ specified by the app_state enum. Client can use this event to track ++ current application state. For instance to know when the application has ++ started, or when terminated/stopped. ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/ui/ozone/platform/wayland/host/wayland_connection.cc b/ui/ozone/platform/wayland/host/wayland_connection.cc +index ad3bbd6e37157..7a47d4a636998 100644 +--- a/ui/ozone/platform/wayland/host/wayland_connection.cc ++++ b/ui/ozone/platform/wayland/host/wayland_connection.cc +@@ -68,6 +68,8 @@ + #include "ui/ozone/platform/wayland/host/zwp_primary_selection_device_manager.h" + #include "ui/platform_window/common/platform_window_defaults.h" + ++#include "ui/ozone/platform/wayland/host/wayland_extensions.h" ++ + namespace ui { + + namespace { +@@ -212,6 +214,10 @@ bool WaylandConnection::Initialize(bool use_threaded_polling) { + use_threaded_polling = false; + } + ++ if (!extensions_) { ++ extensions_ = CreateWaylandExtensions(this); ++ } ++ + // Now that the connection with the display server has been properly + // estabilished, initialize the event source and input objects. + DCHECK(!event_source_); +@@ -243,7 +249,7 @@ bool WaylandConnection::Initialize(bool use_threaded_polling) { + LOG(ERROR) << "No wl_shm object"; + return false; + } +- if (!shell_) { ++ if (!shell_ && !(extensions_ && extensions_->HasShellObject())) { + LOG(ERROR) << "No Wayland shell found"; + return false; + } +@@ -538,7 +544,9 @@ void WaylandConnection::HandleGlobal(wl_registry* registry, + const char* interface, + uint32_t version) { + auto factory_it = global_object_factories_.find(interface); +- if (factory_it != global_object_factories_.end()) { ++ if (extensions_->Bind(registry, name, interface, version)) { ++ DVLOG(1) << "Successfully bound to " << interface; ++ } else if (factory_it != global_object_factories_.end()) { + (*factory_it->second)(this, registry, name, interface, version); + } else if (!compositor_ && strcmp(interface, "wl_compositor") == 0) { + compositor_ = wl::Bind( +diff --git a/ui/ozone/platform/wayland/host/wayland_connection.h b/ui/ozone/platform/wayland/host/wayland_connection.h +index 6659bc54bd475..ba293e5bcd088 100644 +--- a/ui/ozone/platform/wayland/host/wayland_connection.h ++++ b/ui/ozone/platform/wayland/host/wayland_connection.h +@@ -50,6 +50,7 @@ class WaylandBufferManagerHost; + class WaylandCursor; + class WaylandCursorBufferListener; + class WaylandEventSource; ++class WaylandExtensions; + class WaylandOutputManager; + class WaylandSeat; + class WaylandZAuraShell; +@@ -201,6 +202,8 @@ class WaylandConnection { + + WaylandZAuraShell* zaura_shell() const { return zaura_shell_.get(); } + ++ WaylandExtensions* extensions() { return extensions_.get(); } ++ + WaylandZcrColorManager* zcr_color_manager() const { + return zcr_color_manager_.get(); + } +@@ -486,6 +489,7 @@ class WaylandConnection { + std::unique_ptr overlay_prioritizer_; + std::unique_ptr surface_augmenter_; + std::unique_ptr single_pixel_buffer_; ++ std::unique_ptr extensions_; + + // Clipboard-related objects. |clipboard_| must be declared after all + // DeviceManager instances it depends on, otherwise tests may crash with +diff --git a/ui/ozone/platform/wayland/host/wayland_extensions.h b/ui/ozone/platform/wayland/host/wayland_extensions.h +new file mode 100644 +index 0000000000000..3bd2fd7a211ae +--- /dev/null ++++ b/ui/ozone/platform/wayland/host/wayland_extensions.h +@@ -0,0 +1,56 @@ ++// Copyright 2019 LG Electronics, Inc. ++// ++// Licensed under the Apache License, Version 2.0 (the "License"); ++// you may not use this file except in compliance with the License. ++// You may obtain a copy of the License at ++// ++// http://www.apache.org/licenses/LICENSE-2.0 ++// ++// Unless required by applicable law or agreed to in writing, software ++// distributed under the License is distributed on an "AS IS" BASIS, ++// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++// See the License for the specific language governing permissions and ++// limitations under the License. ++// ++// SPDX-License-Identifier: Apache-2.0 ++ ++#ifndef UI_OZONE_PLATFORM_WAYLAND_HOST_WAYLAND_EXTENSIONS_H_ ++#define UI_OZONE_PLATFORM_WAYLAND_HOST_WAYLAND_EXTENSIONS_H_ ++ ++#include ++ ++#include "ui/ozone/platform/wayland/common/wayland_object.h" ++ ++namespace ui { ++ ++class ShellToplevelWrapper; ++class ShellPopupWrapper; ++class WaylandConnection; ++ ++// Wayland extensions abstract interface to support extending of the Wayland ++// protocol. Inherit it to provide your own Wayland extensions implementation. ++class WaylandExtensions { ++ public: ++ WaylandExtensions() = default; ++ WaylandExtensions(const WaylandExtensions&) = delete; ++ WaylandExtensions& operator=(const WaylandExtensions&) = delete; ++ virtual ~WaylandExtensions() = default; ++ ++ // Binds to the extensions interface(s). Can encapsulate binding of several ++ // interfaces, defined by |interface|. ++ virtual bool Bind(wl_registry* registry, ++ uint32_t name, ++ const char* interface, ++ uint32_t version) = 0; ++ ++ // Checks whether the extensions have bound shell object(s). ++ virtual bool HasShellObject() const = 0; ++}; ++ ++// Creates Wayland extensions. ++std::unique_ptr CreateWaylandExtensions( ++ WaylandConnection* connection); ++ ++} // namespace ui ++ ++#endif // UI_OZONE_PLATFORM_WAYLAND_HOST_WAYLAND_EXTENSIONS_H_ +-- +2.42.1 + diff --git a/recipes-wam/cef/files/chromium/0001-sql-relax-constraints-on-VirtualCursor-layout.patch b/recipes-wam/cef/files/chromium/0001-sql-relax-constraints-on-VirtualCursor-layout.patch deleted file mode 100644 index 624dd501..00000000 --- a/recipes-wam/cef/files/chromium/0001-sql-relax-constraints-on-VirtualCursor-layout.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 94ffefa81d00466fabcf1050080c95fa4b294dda Mon Sep 17 00:00:00 2001 -From: Elly Fong-Jones -Date: Thu, 2 Mar 2023 00:15:11 +0000 -Subject: [PATCH 1/9] sql: relax constraints on VirtualCursor layout - -VirtualCursor::FromSqliteCursor required that VirtualCursor had a -standard layout, but in fact VirtualCursor shouldn't have a standard -layout, and the fact that it does with libc++ is a deviation from the -C++ standard. This change: - -1. Relaxes the requirement that VirtualCursor has a standard layout, and -2. Relaxes the requirement that the sqlite_cursor_ field has to be at - offset 0 - -by use of offsetof() and pointer subtraction. This change both improves -standards compliance and makes this code build with libstdc++. - -Bug: 1380656 -Change-Id: I9c47abd9197b187da0360ca5619ccf7dadab4f33 -Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4292313 -Reviewed-by: Austin Sullivan -Commit-Queue: Elly Fong-Jones -Cr-Commit-Position: refs/heads/main@{#1111925} ---- - sql/recover_module/cursor.h | 10 ++++------ - 1 file changed, 4 insertions(+), 6 deletions(-) - -diff --git a/sql/recover_module/cursor.h b/sql/recover_module/cursor.h -index 1970bdca8c6f1..4cb0655700977 100644 ---- a/sql/recover_module/cursor.h -+++ b/sql/recover_module/cursor.h -@@ -63,12 +63,10 @@ class VirtualCursor { - // |sqlite_cursor| must have been returned by VirtualTable::SqliteCursor(). - static inline VirtualCursor* FromSqliteCursor( - sqlite3_vtab_cursor* sqlite_cursor) { -- static_assert(std::is_standard_layout::value, -- "needed for the reinterpret_cast below"); -- static_assert(offsetof(VirtualCursor, sqlite_cursor_) == 0, -- "sqlite_cursor_ must be the first member of the class"); -- VirtualCursor* result = reinterpret_cast(sqlite_cursor); -- DCHECK_EQ(sqlite_cursor, &result->sqlite_cursor_); -+ VirtualCursor* result = reinterpret_cast( -+ (reinterpret_cast(sqlite_cursor) - -+ offsetof(VirtualCursor, sqlite_cursor_))); -+ CHECK_EQ(sqlite_cursor, &result->sqlite_cursor_); - return result; - } - --- -2.39.2 - diff --git a/recipes-wam/cef/files/chromium/0002-Don-t-look-for-depot_tools-in-chrommium-s-third_part.patch b/recipes-wam/cef/files/chromium/0002-Don-t-look-for-depot_tools-in-chrommium-s-third_part.patch deleted file mode 100644 index dd05b373..00000000 --- a/recipes-wam/cef/files/chromium/0002-Don-t-look-for-depot_tools-in-chrommium-s-third_part.patch +++ /dev/null @@ -1,32 +0,0 @@ -From dd5ce9e0d0dbf55184a9c57c4c81eeaf9a7dd3a9 Mon Sep 17 00:00:00 2001 -From: Roger Zanoni -Date: Fri, 7 Apr 2023 16:28:51 +0200 -Subject: [PATCH 2/9] Don't look for depot_tools in chrommium's third_party - folder - ---- - build/find_depot_tools.py | 8 -------- - 1 file changed, 8 deletions(-) - -diff --git a/build/find_depot_tools.py b/build/find_depot_tools.py -index 94985fe7b3495..6d2adcfa63531 100755 ---- a/build/find_depot_tools.py -+++ b/build/find_depot_tools.py -@@ -28,14 +28,6 @@ def IsRealDepotTools(path): - - def add_depot_tools_to_path(): - """Search for depot_tools and add it to sys.path.""" -- # First, check if we have a DEPS'd in "depot_tools". -- deps_depot_tools = os.path.join(SRC, 'third_party', 'depot_tools') -- if IsRealDepotTools(deps_depot_tools): -- # Put the pinned version at the start of the sys.path, in case there -- # are other non-pinned versions already on the sys.path. -- sys.path.insert(0, deps_depot_tools) -- return deps_depot_tools -- - # Then look if depot_tools is already in PYTHONPATH. - for i in sys.path: - if i.rstrip(os.sep).endswith('depot_tools') and IsRealDepotTools(i): --- -2.39.2 - diff --git a/recipes-wam/cef/files/chromium/0002-agl-Add-waylandwindow-window-tree-host-essential-par.patch b/recipes-wam/cef/files/chromium/0002-agl-Add-waylandwindow-window-tree-host-essential-par.patch new file mode 100644 index 00000000..488b398b --- /dev/null +++ b/recipes-wam/cef/files/chromium/0002-agl-Add-waylandwindow-window-tree-host-essential-par.patch @@ -0,0 +1,1376 @@ +From d50bcc010ca2856979f58b2ffbd0015514c4231f Mon Sep 17 00:00:00 2001 +From: Roger Zanoni +Date: Wed, 17 May 2023 21:25:53 +0200 +Subject: [PATCH 02/33] [agl] Add waylandwindow/window tree host essential + parts + +This is a backport of the work we did on top of chromium webosose to be +able to communicate with the agl compositor. + +Signed-off-by: Roger Zanoni +--- + ui/aura/BUILD.gn | 7 ++ + ui/aura/agl/window_tree_host_agl.h | 42 +++++++++ + ui/aura/agl/window_tree_host_platform_agl.cc | 50 +++++++++++ + ui/aura/agl/window_tree_host_platform_agl.h | 51 +++++++++++ + ui/aura/window_tree_host.h | 5 +- + ui/aura/window_tree_host_platform.cc | 4 +- + ui/aura/window_tree_host_platform.h | 4 +- + ui/ozone/platform/wayland/BUILD.gn | 1 - + .../platform/wayland/extensions/agl/BUILD.gn | 2 + + .../agl/host/wayland_extensions_agl.h | 10 ++- + .../agl/host/wayland_extensions_agl_impl.cc | 11 ++- + .../agl/host/wayland_extensions_agl_impl.h | 9 ++ + .../extensions/agl/host/wayland_window_agl.cc | 86 +++++++++++++++++++ + .../extensions/agl/host/wayland_window_agl.h | 49 +++++++++++ + .../wayland/gpu/gl_surface_wayland.cc | 9 +- + .../host/gtk_primary_selection_device.cc | 2 +- + .../gtk_primary_selection_device_manager.cc | 4 +- + .../wayland/host/proxy/wayland_proxy_impl.cc | 2 +- + .../wayland/host/wayland_connection.cc | 19 +++- + .../wayland/host/wayland_connection.h | 9 +- + .../platform/wayland/host/wayland_cursor.cc | 4 +- + .../wayland/host/wayland_data_device.cc | 10 +-- + .../wayland/host/wayland_data_device_base.cc | 2 +- + .../host/wayland_data_drag_controller.cc | 2 +- + .../wayland/host/wayland_data_source.cc | 6 +- + ui/ozone/platform/wayland/host/wayland_drm.cc | 6 +- + .../wayland/host/wayland_extensions.h | 6 ++ + .../platform/wayland/host/wayland_keyboard.cc | 4 +- + .../platform/wayland/host/wayland_popup.cc | 8 +- + .../platform/wayland/host/wayland_seat.cc | 2 +- + ui/ozone/platform/wayland/host/wayland_shm.cc | 2 +- + .../platform/wayland/host/wayland_surface.cc | 2 +- + .../wayland/host/wayland_toplevel_window.cc | 18 ++-- + .../platform/wayland/host/wayland_window.cc | 6 +- + .../platform/wayland/host/wayland_window.h | 2 + + .../host/wayland_window_drag_controller.cc | 2 +- + .../wayland/host/wayland_window_factory.cc | 14 +++ + .../wayland/host/wayland_zwp_linux_dmabuf.cc | 4 +- + .../wayland/host/xdg_foreign_wrapper.cc | 4 +- + .../wayland/host/xdg_popup_wrapper_impl.cc | 2 +- + .../wayland/host/xdg_surface_wrapper_impl.cc | 2 +- + .../wayland/host/xdg_toplevel_wrapper_impl.cc | 2 +- + .../host/zwp_primary_selection_device.cc | 2 +- + .../zwp_primary_selection_device_manager.cc | 4 +- + ui/platform_window/agl/platform_window_agl.h | 36 ++++++++ + ui/platform_window/platform_window.h | 4 +- + 46 files changed, 469 insertions(+), 63 deletions(-) + create mode 100644 ui/aura/agl/window_tree_host_agl.h + create mode 100644 ui/aura/agl/window_tree_host_platform_agl.cc + create mode 100644 ui/aura/agl/window_tree_host_platform_agl.h + create mode 100644 ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.cc + create mode 100644 ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.h + create mode 100644 ui/platform_window/agl/platform_window_agl.h + +diff --git a/ui/aura/BUILD.gn b/ui/aura/BUILD.gn +index 50ca856b9da18..8fa04492f69f7 100644 +--- a/ui/aura/BUILD.gn ++++ b/ui/aura/BUILD.gn +@@ -99,6 +99,13 @@ component("aura") { + "window_tree_host_platform.cc", + ] + ++ public += [ ++ "agl/window_tree_host_agl.h", ++ "agl/window_tree_host_platform_agl.h" ++ ] ++ ++ sources += [ "agl/window_tree_host_platform_agl.cc" ] ++ + friend = [ ":*" ] + + defines = [ "AURA_IMPLEMENTATION" ] +diff --git a/ui/aura/agl/window_tree_host_agl.h b/ui/aura/agl/window_tree_host_agl.h +new file mode 100644 +index 0000000000000..858a078d939d0 +--- /dev/null ++++ b/ui/aura/agl/window_tree_host_agl.h +@@ -0,0 +1,42 @@ ++// Copyright 2021 LG Electronics, Inc. ++// ++// Licensed under the Apache License, Version 2.0 (the "License"); ++// you may not use this file except in compliance with the License. ++// You may obtain a copy of the License at ++// ++// http://www.apache.org/licenses/LICENSE-2.0 ++// ++// Unless required by applicable law or agreed to in writing, software ++// distributed under the License is distributed on an "AS IS" BASIS, ++// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++// See the License for the specific language governing permissions and ++// limitations under the License. ++// ++// SPDX-License-Identifier: Apache-2.0 ++ ++#ifndef UI_AURA_AGL_WINDOW_TREE_HOST_AGL_H_ ++#define UI_AURA_AGL_WINDOW_TREE_HOST_AGL_H_ ++ ++#include ++ ++#include "ui/aura/aura_export.h" ++ ++namespace aura { ++ ++class AURA_EXPORT WindowTreeHostAgl { ++ public: ++ WindowTreeHostAgl() = default; ++ WindowTreeHostAgl(const WindowTreeHostAgl&) = delete; ++ WindowTreeHostAgl& operator=(const WindowTreeHostAgl&) = delete; ++ ~WindowTreeHostAgl() = default; ++ ++ virtual void SetAglActivateApp(const std::string& app) {} ++ virtual void SetAglAppId(const std::string& title) {} ++ virtual void SetAglReady() {} ++ virtual void SetAglBackground() {} ++ virtual void SetAglPanel(uint32_t edge) {} ++}; ++ ++} // namespace aura ++ ++#endif // UI_AURA_AGL_WINDOW_TREE_HOST_AGL_H_ +diff --git a/ui/aura/agl/window_tree_host_platform_agl.cc b/ui/aura/agl/window_tree_host_platform_agl.cc +new file mode 100644 +index 0000000000000..e34595fe0ed9c +--- /dev/null ++++ b/ui/aura/agl/window_tree_host_platform_agl.cc +@@ -0,0 +1,50 @@ ++// Copyright 2021 LG Electronics, Inc. ++// ++// Licensed under the Apache License, Version 2.0 (the "License"); ++// you may not use this file except in compliance with the License. ++// You may obtain a copy of the License at ++// ++// http://www.apache.org/licenses/LICENSE-2.0 ++// ++// Unless required by applicable law or agreed to in writing, software ++// distributed under the License is distributed on an "AS IS" BASIS, ++// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++// See the License for the specific language governing permissions and ++// limitations under the License. ++// ++// SPDX-License-Identifier: Apache-2.0 ++ ++#include "ui/aura/agl/window_tree_host_platform_agl.h" ++ ++#include "ui/aura/window_tree_host_platform.h" ++#include "ui/platform_window/platform_window.h" ++ ++namespace aura { ++ ++WindowTreeHostPlatformAgl::WindowTreeHostPlatformAgl( ++ std::unique_ptr window, ++ aura::WindowTreeHostPlatform* window_tree_host_platform) ++ : aura::WindowTreeHost(std::move(window)), ++ window_tree_host_platform_(window_tree_host_platform) {} ++ ++void WindowTreeHostPlatformAgl::SetAglActivateApp(const std::string& app) { ++ window_tree_host_platform_->platform_window()->SetAglActivateApp(app); ++} ++ ++void WindowTreeHostPlatformAgl::SetAglAppId(const std::string& title) { ++ window_tree_host_platform_->platform_window()->SetAglAppId(title); ++} ++ ++void WindowTreeHostPlatformAgl::SetAglReady() { ++ window_tree_host_platform_->platform_window()->SetAglReady(); ++} ++ ++void WindowTreeHostPlatformAgl::SetAglBackground() { ++ window_tree_host_platform_->platform_window()->SetAglBackground(); ++} ++ ++void WindowTreeHostPlatformAgl::SetAglPanel(uint32_t edge) { ++ window_tree_host_platform_->platform_window()->SetAglPanel(edge); ++} ++ ++} // namespace aura +diff --git a/ui/aura/agl/window_tree_host_platform_agl.h b/ui/aura/agl/window_tree_host_platform_agl.h +new file mode 100644 +index 0000000000000..181eefae346f7 +--- /dev/null ++++ b/ui/aura/agl/window_tree_host_platform_agl.h +@@ -0,0 +1,51 @@ ++// Copyright 2021 LG Electronics, Inc. ++// ++// Licensed under the Apache License, Version 2.0 (the "License"); ++// you may not use this file except in compliance with the License. ++// You may obtain a copy of the License at ++// ++// http://www.apache.org/licenses/LICENSE-2.0 ++// ++// Unless required by applicable law or agreed to in writing, software ++// distributed under the License is distributed on an "AS IS" BASIS, ++// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++// See the License for the specific language governing permissions and ++// limitations under the License. ++// ++// SPDX-License-Identifier: Apache-2.0 ++ ++#ifndef UI_AURA_AGL_WINDOW_TREE_HOST_PLATFORM_AGL_H_ ++#define UI_AURA_AGL_WINDOW_TREE_HOST_PLATFORM_AGL_H_ ++ ++#include ++ ++#include "ui/aura/aura_export.h" ++#include "ui/aura/window_tree_host.h" ++ ++namespace aura { ++ ++class Window; ++class WindowTreeHostPlatform; ++ ++class AURA_EXPORT WindowTreeHostPlatformAgl : public aura::WindowTreeHost { ++ public: ++ explicit WindowTreeHostPlatformAgl( ++ std::unique_ptr window, ++ aura::WindowTreeHostPlatform* window_tree_host_platform); ++ WindowTreeHostPlatformAgl(const WindowTreeHostPlatformAgl&) = delete; ++ WindowTreeHostPlatformAgl& operator=(const WindowTreeHostPlatformAgl&) = delete; ++ ~WindowTreeHostPlatformAgl() override = default; ++ ++ void SetAglActivateApp(const std::string& app) override; ++ void SetAglAppId(const std::string& title) override; ++ void SetAglReady() override; ++ void SetAglBackground() override; ++ void SetAglPanel(uint32_t edge) override; ++ ++ private: ++ aura::WindowTreeHostPlatform* window_tree_host_platform_; ++}; ++ ++} // namespace aura ++ ++#endif // UI_AURA_AGL_WINDOW_TREE_HOST_PLATFORM_AGL_H_ +diff --git a/ui/aura/window_tree_host.h b/ui/aura/window_tree_host.h +index b4b6e7022ea34..afb37a3a3ed13 100644 +--- a/ui/aura/window_tree_host.h ++++ b/ui/aura/window_tree_host.h +@@ -30,6 +30,8 @@ + #include "ui/gfx/native_widget_types.h" + #include "ui/gfx/overlay_transform.h" + ++#include "ui/aura/agl/window_tree_host_agl.h" ++ + namespace gfx { + class Point; + class Rect; +@@ -66,7 +68,8 @@ class WindowTreeHostObserver; + class AURA_EXPORT WindowTreeHost : public ui::ImeKeyEventDispatcher, + public ui::EventSource, + public display::DisplayObserver, +- public ui::CompositorObserver { ++ public ui::CompositorObserver, ++ public WindowTreeHostAgl { + public: + // VideoCaptureLock ensures state necessary for capturing video remains in + // effect. For example, this may force keeping the compositor visible when +diff --git a/ui/aura/window_tree_host_platform.cc b/ui/aura/window_tree_host_platform.cc +index fd4a560f6cdd1..33b9e892c0212 100644 +--- a/ui/aura/window_tree_host_platform.cc ++++ b/ui/aura/window_tree_host_platform.cc +@@ -52,7 +52,7 @@ std::unique_ptr WindowTreeHost::Create( + WindowTreeHostPlatform::WindowTreeHostPlatform( + ui::PlatformWindowInitProperties properties, + std::unique_ptr window) +- : WindowTreeHost(std::move(window)) { ++ : WindowTreeHostPlatformAgl(std::move(window), this) { + size_in_pixels_ = properties.bounds.size(); + CreateCompositor(false, false, properties.enable_compositing_based_throttling, + properties.compositor_memory_limit_mb); +@@ -60,7 +60,7 @@ WindowTreeHostPlatform::WindowTreeHostPlatform( + } + + WindowTreeHostPlatform::WindowTreeHostPlatform(std::unique_ptr window) +- : WindowTreeHost(std::move(window)), ++ : WindowTreeHostPlatformAgl(std::move(window), this), + widget_(gfx::kNullAcceleratedWidget), + current_cursor_(ui::mojom::CursorType::kNull) {} + +diff --git a/ui/aura/window_tree_host_platform.h b/ui/aura/window_tree_host_platform.h +index 92ae0f0229e70..9c3f742c30ad3 100644 +--- a/ui/aura/window_tree_host_platform.h ++++ b/ui/aura/window_tree_host_platform.h +@@ -15,6 +15,8 @@ + #include "ui/gfx/native_widget_types.h" + #include "ui/platform_window/platform_window_delegate.h" + ++#include "ui/aura/agl/window_tree_host_platform_agl.h" ++ + namespace ui { + enum class DomCode; + class PlatformWindow; +@@ -26,7 +28,7 @@ namespace aura { + + // The unified WindowTreeHost implementation for platforms + // that implement PlatformWindow. +-class AURA_EXPORT WindowTreeHostPlatform : public WindowTreeHost, ++class AURA_EXPORT WindowTreeHostPlatform : public WindowTreeHostPlatformAgl, + public ui::PlatformWindowDelegate { + public: + explicit WindowTreeHostPlatform(ui::PlatformWindowInitProperties properties, +diff --git a/ui/ozone/platform/wayland/BUILD.gn b/ui/ozone/platform/wayland/BUILD.gn +index 8a436de0fafe3..754cb123043a9 100644 +--- a/ui/ozone/platform/wayland/BUILD.gn ++++ b/ui/ozone/platform/wayland/BUILD.gn +@@ -400,7 +400,6 @@ source_set("wayland") { + + sources += [ + "host/wayland_extensions.h", +- "host/wayland_extensions_stub.cc", + ] + + deps += [ "extensions/agl" ] +diff --git a/ui/ozone/platform/wayland/extensions/agl/BUILD.gn b/ui/ozone/platform/wayland/extensions/agl/BUILD.gn +index ce289bc5dbbca..01c590e53df58 100644 +--- a/ui/ozone/platform/wayland/extensions/agl/BUILD.gn ++++ b/ui/ozone/platform/wayland/extensions/agl/BUILD.gn +@@ -31,6 +31,8 @@ source_set("agl") { + "host/wayland_extensions_agl.h", + "host/wayland_extensions_agl_impl.cc", + "host/wayland_extensions_agl_impl.h", ++ "host/wayland_window_agl.cc", ++ "host/wayland_window_agl.h", + ] + + deps = [ +diff --git a/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl.h b/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl.h +index df42fc00c84da..295154dfb437d 100644 +--- a/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl.h ++++ b/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl.h +@@ -20,6 +20,9 @@ + namespace ui { + + class AglShellWrapper; ++class PlatformWindowDelegate; ++class WaylandConnection; ++class WaylandWindow; + + // AGL extensions implementation for webOS/Lite + class WaylandExtensionsAgl { +@@ -29,9 +32,14 @@ class WaylandExtensionsAgl { + WaylandExtensionsAgl& operator=(const WaylandExtensionsAgl&) = delete; + virtual ~WaylandExtensionsAgl() = default; + ++ virtual std::unique_ptr CreateWaylandWindow( ++ PlatformWindowDelegate* delegate, ++ WaylandConnection* connection) = 0; ++ ++ + virtual AglShellWrapper* GetAglShell() = 0; + }; + + } // namespace ui + +-#endif // UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_HOST_WAYLAND_EXTENSIONS_AGL_H_ +\ No newline at end of file ++#endif // UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_HOST_WAYLAND_EXTENSIONS_AGL_H_ +diff --git a/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.cc b/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.cc +index 26a5f0550c302..87376cbb8a9d3 100644 +--- a/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.cc ++++ b/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.cc +@@ -22,6 +22,7 @@ + #include "base/logging.h" + #include "ui/base/ui_base_switches.h" + #include "ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.h" ++#include "ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.h" + #include "ui/ozone/platform/wayland/extensions/agl/common/wayland_object_agl.h" + #include "ui/ozone/platform/wayland/host/wayland_connection.h" + +@@ -68,8 +69,8 @@ bool WaylandExtensionsAglImpl::Bind(wl_registry* registry, + agl_shell_ = + std::make_unique(aglshell.release(), connection_); + +- LOG(INFO) << "Waiting until bound..."; +- return agl_shell_->WaitUntilBoundOk(); ++ //LOG(INFO) << "Waiting until bound..."; ++ //return agl_shell_->WaitUntilBoundOk(); + } else { + LOG(INFO) << "Cant bind."; + } +@@ -85,6 +86,12 @@ AglShellWrapper* WaylandExtensionsAglImpl::GetAglShell() { + return agl_shell_.get(); + } + ++std::unique_ptr WaylandExtensionsAglImpl::CreateWaylandWindow( ++ PlatformWindowDelegate* delegate, ++ WaylandConnection* connection) { ++ return std::make_unique(delegate, connection, this); ++} ++ + std::unique_ptr CreateWaylandExtensions( + WaylandConnection* connection) { + return std::make_unique(connection); +diff --git a/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.h b/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.h +index f6cbabe99ed0b..3218589f1a09a 100644 +--- a/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.h ++++ b/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.h +@@ -17,12 +17,17 @@ + #ifndef UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_HOST_WAYLAND_EXTENSIONS_AGL_IMPL_H_ + #define UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_HOST_WAYLAND_EXTENSIONS_AGL_IMPL_H_ + ++#include ++ + #include "ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl.h" + #include "ui/ozone/platform/wayland/host/wayland_extensions.h" + + namespace ui { + + class AglShellWrapper; ++class PlatformWindowDelegate; ++class WaylandConnection; ++class WaylandWindow; + + // AGL extension implementation for webOS/Lite + class WaylandExtensionsAglImpl : public WaylandExtensions, +@@ -44,6 +49,10 @@ class WaylandExtensionsAglImpl : public WaylandExtensions, + // WaylandExtensionsAgl overrides + AglShellWrapper* GetAglShell() override; + ++ std::unique_ptr CreateWaylandWindow( ++ PlatformWindowDelegate* delegate, ++ WaylandConnection* connection) override; ++ + private: + std::unique_ptr agl_shell_; + WaylandConnection* connection_; +diff --git a/ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.cc b/ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.cc +new file mode 100644 +index 0000000000000..97b21ae537658 +--- /dev/null ++++ b/ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.cc +@@ -0,0 +1,86 @@ ++// Copyright 2021 LG Electronics, Inc. ++// ++// Licensed under the Apache License, Version 2.0 (the "License"); ++// you may not use this file except in compliance with the License. ++// You may obtain a copy of the License at ++// ++// http://www.apache.org/licenses/LICENSE-2.0 ++// ++// Unless required by applicable law or agreed to in writing, software ++// distributed under the License is distributed on an "AS IS" BASIS, ++// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++// See the License for the specific language governing permissions and ++// limitations under the License. ++// ++// SPDX-License-Identifier: Apache-2.0 ++ ++#include "ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.h" ++ ++#include "base/logging.h" ++#include "ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.h" ++#include "ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl.h" ++#include "ui/ozone/platform/wayland/host/shell_surface_wrapper.h" ++#include "ui/ozone/platform/wayland/host/shell_toplevel_wrapper.h" ++#include "ui/ozone/platform/wayland/host/wayland_connection.h" ++ ++namespace ui { ++ ++WaylandWindowAgl::WaylandWindowAgl(PlatformWindowDelegate* delegate, ++ WaylandConnection* connection, ++ WaylandExtensionsAgl* agl_extensions) ++ : WaylandToplevelWindow(delegate, connection), ++ agl_extensions_(agl_extensions) {} ++ ++WaylandWindowAgl::~WaylandWindowAgl() = default; ++ ++void WaylandWindowAgl::SetAglActivateApp(const std::string& app) { ++ if (!agl_extensions_->GetAglShell()) { ++ LOG(ERROR) << "Agl shell wrapper is not created"; ++ return; ++ } ++ ++ agl_extensions_->GetAglShell()->SetAglActivateApp(app); ++ connection()->ScheduleFlush(); ++} ++ ++void WaylandWindowAgl::SetAglAppId(const std::string& title) { ++ if (!shell_toplevel()) { ++ LOG(ERROR) << "Shell toplevel is not created"; ++ return; ++ } ++ ++ shell_toplevel()->SetAppId(title); ++ connection()->ScheduleFlush(); ++} ++ ++void WaylandWindowAgl::SetAglReady() { ++ if (!agl_extensions_->GetAglShell()) { ++ LOG(ERROR) << "Agl shell wrapper is not created"; ++ return; ++ } ++ ++ agl_extensions_->GetAglShell()->SetAglReady(); ++ connection()->ScheduleFlush(); ++} ++ ++void WaylandWindowAgl::SetAglBackground() { ++ if (!agl_extensions_->GetAglShell()) { ++ LOG(ERROR) << "Agl shell wrapper is not created"; ++ return; ++ } ++ ++ agl_extensions_->GetAglShell()->SetAglBackground(this); ++ connection()->ScheduleFlush(); ++} ++ ++void WaylandWindowAgl::SetAglPanel(uint32_t edge) { ++ if (!agl_extensions_->GetAglShell()) { ++ LOG(ERROR) << "Agl shell wrapper is not created"; ++ return; ++ } ++ ++ agl_extensions_->GetAglShell()->SetAglPanel(this, edge); ++ connection()->ScheduleFlush(); ++} ++ ++} // namespace ui +diff --git a/ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.h b/ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.h +new file mode 100644 +index 0000000000000..b2a922604c001 +--- /dev/null ++++ b/ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.h +@@ -0,0 +1,49 @@ ++// Copyright 2021 LG Electronics, Inc. ++// ++// Licensed under the Apache License, Version 2.0 (the "License"); ++// you may not use this file except in compliance with the License. ++// You may obtain a copy of the License at ++// ++// http://www.apache.org/licenses/LICENSE-2.0 ++// ++// Unless required by applicable law or agreed to in writing, software ++// distributed under the License is distributed on an "AS IS" BASIS, ++// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++// See the License for the specific language governing permissions and ++// limitations under the License. ++// ++// SPDX-License-Identifier: Apache-2.0 ++// ++ ++#ifndef UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_HOST_WAYLAND_WINDOW_AGL_H_ ++#define UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_HOST_WAYLAND_WINDOW_AGL_H_ ++ ++#include "ui/ozone/platform/wayland/host/wayland_toplevel_window.h" ++ ++namespace ui { ++ ++class WaylandExtensionsAgl; ++ ++class WaylandWindowAgl : public WaylandToplevelWindow { ++ public: ++ explicit WaylandWindowAgl(PlatformWindowDelegate* delegate, ++ WaylandConnection* connection, ++ WaylandExtensionsAgl* agl_extensions); ++ WaylandWindowAgl(const WaylandWindowAgl&) = delete; ++ WaylandWindowAgl& operator=(const WaylandWindowAgl&) = delete; ++ ~WaylandWindowAgl() override; ++ ++ // Overrides PlatformWindowAgl ++ void SetAglActivateApp(const std::string& app) override; ++ void SetAglAppId(const std::string& title) override; ++ void SetAglReady() override; ++ void SetAglBackground() override; ++ void SetAglPanel(uint32_t edge) override; ++ ++ private: ++ WaylandExtensionsAgl* agl_extensions_; ++}; ++ ++} // namespace ui ++ ++#endif // UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_HOST_WAYLAND_WINDOW_AGL_H_ +diff --git a/ui/ozone/platform/wayland/gpu/gl_surface_wayland.cc b/ui/ozone/platform/wayland/gpu/gl_surface_wayland.cc +index 1cda8aa671ddb..220f759ff30a1 100644 +--- a/ui/ozone/platform/wayland/gpu/gl_surface_wayland.cc ++++ b/ui/ozone/platform/wayland/gpu/gl_surface_wayland.cc +@@ -90,7 +90,14 @@ gfx::SwapResult GLSurfaceWayland::SwapBuffers(PresentationCallback callback, + return scoped_swap_buffers.result(); + } + window_->root_surface()->set_surface_buffer_scale(scale_factor_); +- return gl::NativeViewGLSurfaceEGL::SwapBuffers(std::move(callback), data); ++ ++ gfx::SwapResult result = gl::NativeViewGLSurfaceEGL::SwapBuffers(std::move(callback), data); ++ ++ if (window_) { ++ window_->OnSurfaceContentChanged(); ++ } ++ ++ return result; + } + + gfx::SwapResult GLSurfaceWayland::PostSubBuffer(int x, +diff --git a/ui/ozone/platform/wayland/host/gtk_primary_selection_device.cc b/ui/ozone/platform/wayland/host/gtk_primary_selection_device.cc +index c62dd62be4fbf..2959593cfeb5b 100644 +--- a/ui/ozone/platform/wayland/host/gtk_primary_selection_device.cc ++++ b/ui/ozone/platform/wayland/host/gtk_primary_selection_device.cc +@@ -32,7 +32,7 @@ void GtkPrimarySelectionDevice::SetSelectionSource( + auto* data_source = source ? source->data_source() : nullptr; + gtk_primary_selection_device_set_selection(data_device_.get(), data_source, + serial); +- connection()->Flush(); ++ connection()->ScheduleFlush(); + } + + // static +diff --git a/ui/ozone/platform/wayland/host/gtk_primary_selection_device_manager.cc b/ui/ozone/platform/wayland/host/gtk_primary_selection_device_manager.cc +index 2c39409808128..1e07ae6009776 100644 +--- a/ui/ozone/platform/wayland/host/gtk_primary_selection_device_manager.cc ++++ b/ui/ozone/platform/wayland/host/gtk_primary_selection_device_manager.cc +@@ -66,7 +66,7 @@ GtkPrimarySelectionDevice* GtkPrimarySelectionDeviceManager::GetDevice() { + connection_, + gtk_primary_selection_device_manager_get_device( + device_manager_.get(), connection_->seat()->wl_object())); +- connection_->Flush(); ++ connection_->ScheduleFlush(); + } + DCHECK(device_); + return device_.get(); +@@ -77,7 +77,7 @@ GtkPrimarySelectionDeviceManager::CreateSource( + GtkPrimarySelectionSource::Delegate* delegate) { + auto* data_source = + gtk_primary_selection_device_manager_create_source(device_manager_.get()); +- connection_->Flush(); ++ connection_->ScheduleFlush(); + return std::make_unique(data_source, connection_, + delegate); + } +diff --git a/ui/ozone/platform/wayland/host/proxy/wayland_proxy_impl.cc b/ui/ozone/platform/wayland/host/proxy/wayland_proxy_impl.cc +index f2407d1c306ec..7a7868ded8a52 100644 +--- a/ui/ozone/platform/wayland/host/proxy/wayland_proxy_impl.cc ++++ b/ui/ozone/platform/wayland/host/proxy/wayland_proxy_impl.cc +@@ -69,7 +69,7 @@ void WaylandProxyImpl::DestroyShmForWlBuffer(wl_buffer* buffer) { + } + + void WaylandProxyImpl::FlushForTesting() { +- connection_->Flush(); ++ connection_->ScheduleFlush(); + } + + ui::PlatformWindowType WaylandProxyImpl::GetWindowType( +diff --git a/ui/ozone/platform/wayland/host/wayland_connection.cc b/ui/ozone/platform/wayland/host/wayland_connection.cc +index 7a47d4a636998..8d9e8eea6fd79 100644 +--- a/ui/ozone/platform/wayland/host/wayland_connection.cc ++++ b/ui/ozone/platform/wayland/host/wayland_connection.cc +@@ -264,6 +264,20 @@ bool WaylandConnection::Initialize(bool use_threaded_polling) { + return true; + } + ++void WaylandConnection::ScheduleFlush() { ++ // When we are in tests, the message loop is set later when the ++ // initialization of the OzonePlatform complete. Thus, just ++ // flush directly. This doesn't happen in normal run. ++ if (!base::CurrentUIThread::IsSet()) { ++ Flush(); ++ } else if (!scheduled_flush_) { ++ base::SingleThreadTaskRunner::GetCurrentDefault()->PostTask( ++ FROM_HERE, ++ base::BindOnce(&WaylandConnection::Flush, base::Unretained(this))); ++ scheduled_flush_ = true; ++ } ++} ++ + void WaylandConnection::RoundTripQueue() { + if (roundtrip_closure_for_testing_) { + roundtrip_closure_for_testing_.Run(); +@@ -333,6 +347,7 @@ void WaylandConnection::RegisterGlobalObjectFactory( + + void WaylandConnection::Flush() { + wl_display_flush(display_.get()); ++ scheduled_flush_ = false; + } + + void WaylandConnection::UpdateInputDevices() { +@@ -526,7 +541,7 @@ void WaylandConnection::OnPing(void* data, + uint32_t serial) { + auto* connection = static_cast(data); + xdg_wm_base_pong(shell, serial); +- connection->Flush(); ++ connection->ScheduleFlush(); + } + + // static +@@ -707,7 +722,7 @@ void WaylandConnection::HandleGlobal(wl_registry* registry, + } + + available_globals_.emplace_back(interface, version); +- Flush(); ++ ScheduleFlush(); + } + + } // namespace ui +diff --git a/ui/ozone/platform/wayland/host/wayland_connection.h b/ui/ozone/platform/wayland/host/wayland_connection.h +index ba293e5bcd088..641f36f13db35 100644 +--- a/ui/ozone/platform/wayland/host/wayland_connection.h ++++ b/ui/ozone/platform/wayland/host/wayland_connection.h +@@ -100,8 +100,8 @@ class WaylandConnection { + + bool Initialize(bool use_threaded_polling = false); + +- // Immediately flushes the Wayland display. +- void Flush(); ++ // Schedules a flush of the Wayland connection. ++ void ScheduleFlush(); + + // Calls wl_display_roundtrip_queue. Might be required during initialization + // of some objects that should block until they are initialized. +@@ -388,6 +388,9 @@ class WaylandConnection { + friend class ZwpIdleInhibitManager; + friend class ZwpPrimarySelectionDeviceManager; + ++ // Immediately flushes the Wayland display. ++ void Flush(); ++ + void RegisterGlobalObjectFactory(const char* interface_name, + wl::GlobalObjectFactory factory); + +@@ -535,6 +538,8 @@ class WaylandConnection { + // This is set if delegated composition should not be used. + bool overlay_delegation_disabled_ = false; + ++ bool scheduled_flush_ = false; ++ + wl::SerialTracker serial_tracker_; + + // Global Wayland interfaces available in the current session, with their +diff --git a/ui/ozone/platform/wayland/host/wayland_cursor.cc b/ui/ozone/platform/wayland/host/wayland_cursor.cc +index 1b7d303291cff..a384212c84134 100644 +--- a/ui/ozone/platform/wayland/host/wayland_cursor.cc ++++ b/ui/ozone/platform/wayland/host/wayland_cursor.cc +@@ -107,7 +107,7 @@ void WaylandCursor::HideCursor() { + wl_surface_attach(pointer_surface_.get(), nullptr, 0, 0); + wl_surface_commit(pointer_surface_.get()); + +- connection_->Flush(); ++ connection_->ScheduleFlush(); + + if (listener_) + listener_->OnCursorBufferAttached(nullptr); +@@ -166,7 +166,7 @@ void WaylandCursor::AttachAndCommit(wl_buffer* buffer, + wl_pointer_set_cursor(pointer_->wl_object(), pointer_enter_serial->value, + pointer_surface_.get(), hotspot_x_dip, hotspot_y_dip); + +- connection_->Flush(); ++ connection_->ScheduleFlush(); + } + + } // namespace ui +diff --git a/ui/ozone/platform/wayland/host/wayland_data_device.cc b/ui/ozone/platform/wayland/host/wayland_data_device.cc +index a7adfd313188b..fe16d8577fd35 100644 +--- a/ui/ozone/platform/wayland/host/wayland_data_device.cc ++++ b/ui/ozone/platform/wayland/host/wayland_data_device.cc +@@ -51,7 +51,7 @@ void WaylandDataDevice::StartDrag(const WaylandDataSource& data_source, + origin_window.root_surface()->surface(), + icon_surface, serial); + drag_delegate_->DrawIcon(); +- connection()->Flush(); ++ connection()->ScheduleFlush(); + } + + void WaylandDataDevice::ResetDragDelegate() { +@@ -92,7 +92,7 @@ void WaylandDataDevice::SetSelectionSource(WaylandDataSource* source, + uint32_t serial) { + auto* data_source = source ? source->data_source() : nullptr; + wl_data_device_set_selection(data_device_.get(), data_source, serial); +- connection()->Flush(); ++ connection()->ScheduleFlush(); + } + + void WaylandDataDevice::ReadDragDataFromFD(base::ScopedFD fd, +@@ -146,7 +146,7 @@ void WaylandDataDevice::OnEnter(void* data, + gfx::PointF(wl_fixed_to_double(x), wl_fixed_to_double(y)), window); + self->drag_delegate_->OnDragEnter(window, point, serial); + +- self->connection()->Flush(); ++ self->connection()->ScheduleFlush(); + } + + void WaylandDataDevice::OnMotion(void* data, +@@ -167,7 +167,7 @@ void WaylandDataDevice::OnDrop(void* data, wl_data_device* data_device) { + auto* self = static_cast(data); + if (self->drag_delegate_) { + self->drag_delegate_->OnDragDrop(); +- self->connection()->Flush(); ++ self->connection()->ScheduleFlush(); + } + + // There are buggy Exo versions, which send 'drop' event (even for +@@ -184,7 +184,7 @@ void WaylandDataDevice::OnLeave(void* data, wl_data_device* data_device) { + auto* self = static_cast(data); + if (self->drag_delegate_) { + self->drag_delegate_->OnDragLeave(); +- self->connection()->Flush(); ++ self->connection()->ScheduleFlush(); + } + self->ResetDragDelegateIfNotDragSource(); + } +diff --git a/ui/ozone/platform/wayland/host/wayland_data_device_base.cc b/ui/ozone/platform/wayland/host/wayland_data_device_base.cc +index 203e907f92bfa..a0c72971ac567 100644 +--- a/ui/ozone/platform/wayland/host/wayland_data_device_base.cc ++++ b/ui/ozone/platform/wayland/host/wayland_data_device_base.cc +@@ -64,7 +64,7 @@ void WaylandDataDeviceBase::RegisterDeferredReadCallback() { + static constexpr wl_callback_listener kSyncCallbackListener = { + .done = &OnSyncDone}; + wl_callback_add_listener(sync_callback_.get(), &kSyncCallbackListener, this); +- connection_->Flush(); ++ connection_->ScheduleFlush(); + } + + void WaylandDataDeviceBase::RegisterDeferredReadClosure( +diff --git a/ui/ozone/platform/wayland/host/wayland_data_drag_controller.cc b/ui/ozone/platform/wayland/host/wayland_data_drag_controller.cc +index 705bdec41a1b7..dfa5789e8d149 100644 +--- a/ui/ozone/platform/wayland/host/wayland_data_drag_controller.cc ++++ b/ui/ozone/platform/wayland/host/wayland_data_drag_controller.cc +@@ -256,7 +256,7 @@ void WaylandDataDragController::OnDragSurfaceFrame(void* data, + DCHECK(self); + self->DrawIconInternal(); + self->icon_frame_callback_.reset(); +- self->connection_->Flush(); ++ self->connection_->ScheduleFlush(); + } + + SkBitmap WaylandDataDragController::GetIconBitmap() { +diff --git a/ui/ozone/platform/wayland/host/wayland_data_source.cc b/ui/ozone/platform/wayland/host/wayland_data_source.cc +index c0e95c8a22e48..c294ffb8836aa 100644 +--- a/ui/ozone/platform/wayland/host/wayland_data_source.cc ++++ b/ui/ozone/platform/wayland/host/wayland_data_source.cc +@@ -130,7 +130,7 @@ void DataSource::Offer( + const std::vector& mime_types) { + for (auto& mime_type : mime_types) + wl_data_source_offer(data_source_.get(), mime_type.c_str()); +- connection_->Flush(); ++ connection_->ScheduleFlush(); + } + + template +@@ -165,7 +165,7 @@ void DataSource::Offer( + const std::vector& mime_types) { + for (const auto& mime_type : mime_types) + gtk_primary_selection_source_offer(data_source_.get(), mime_type.c_str()); +- connection_->Flush(); ++ connection_->ScheduleFlush(); + } + + template <> +@@ -185,7 +185,7 @@ void DataSource::Offer( + for (const auto& mime_type : mime_types) + zwp_primary_selection_source_v1_offer(data_source_.get(), + mime_type.c_str()); +- connection_->Flush(); ++ connection_->ScheduleFlush(); + } + + template class DataSource; +diff --git a/ui/ozone/platform/wayland/host/wayland_drm.cc b/ui/ozone/platform/wayland/host/wayland_drm.cc +index 68570a9aacb2c..2b3b16e8859cb 100644 +--- a/ui/ozone/platform/wayland/host/wayland_drm.cc ++++ b/ui/ozone/platform/wayland/host/wayland_drm.cc +@@ -58,7 +58,7 @@ WaylandDrm::WaylandDrm(wl_drm* drm, WaylandConnection* connection) + .capabilities = &OnCapabilities, + }; + wl_drm_add_listener(wl_drm_.get(), &kDrmListener, this); +- connection_->Flush(); ++ connection_->ScheduleFlush(); + + // A roundtrip after binding guarantees that the client has received all + // supported formats and capabilities of the device. +@@ -92,7 +92,7 @@ void WaylandDrm::CreateBuffer(const base::ScopedFD& fd, + wl::Object buffer(wl_drm_create_prime_buffer( + wl_drm_.get(), fd.get(), size.width(), size.height(), format, offset[0], + stride[0], offset[1], stride[1], offset[2], stride[2])); +- connection_->Flush(); ++ connection_->ScheduleFlush(); + + std::move(callback).Run(std::move(buffer)); + } +@@ -146,7 +146,7 @@ void WaylandDrm::Authenticate(const char* drm_device_path) { + } + + wl_drm_authenticate(wl_drm_.get(), magic); +- connection_->Flush(); ++ connection_->ScheduleFlush(); + + // Do the roundtrip to make sure the server processes this request and + // authenticates us. +diff --git a/ui/ozone/platform/wayland/host/wayland_extensions.h b/ui/ozone/platform/wayland/host/wayland_extensions.h +index 3bd2fd7a211ae..f6ed47507d217 100644 +--- a/ui/ozone/platform/wayland/host/wayland_extensions.h ++++ b/ui/ozone/platform/wayland/host/wayland_extensions.h +@@ -25,7 +25,9 @@ namespace ui { + + class ShellToplevelWrapper; + class ShellPopupWrapper; ++class PlatformWindowDelegate; + class WaylandConnection; ++class WaylandWindow; + + // Wayland extensions abstract interface to support extending of the Wayland + // protocol. Inherit it to provide your own Wayland extensions implementation. +@@ -45,6 +47,10 @@ class WaylandExtensions { + + // Checks whether the extensions have bound shell object(s). + virtual bool HasShellObject() const = 0; ++ ++ virtual std::unique_ptr CreateWaylandWindow( ++ PlatformWindowDelegate* delegate, ++ WaylandConnection* connection) = 0; + }; + + // Creates Wayland extensions. +diff --git a/ui/ozone/platform/wayland/host/wayland_keyboard.cc b/ui/ozone/platform/wayland/host/wayland_keyboard.cc +index 2b7fc05d426e1..f24d6993b26ac 100644 +--- a/ui/ozone/platform/wayland/host/wayland_keyboard.cc ++++ b/ui/ozone/platform/wayland/host/wayland_keyboard.cc +@@ -114,7 +114,7 @@ class WaylandKeyboard::ZCRExtendedKeyboard { + + void AckKey(uint32_t serial, bool handled) { + zcr_extended_keyboard_v1_ack_key(obj_.get(), serial, handled); +- keyboard_->connection_->Flush(); ++ keyboard_->connection_->ScheduleFlush(); + } + + // Returns true if connected object will send zcr_extended_keyboard::peek_key. +@@ -373,7 +373,7 @@ void WaylandKeyboard::FlushInput(base::OnceClosure closure) { + .done = &OnSyncDone, + }; + wl_callback_add_listener(sync_callback_.get(), &kSyncCallbackListener, this); +- connection_->Flush(); ++ connection_->ScheduleFlush(); + } + + void WaylandKeyboard::DispatchKey(unsigned int key, +diff --git a/ui/ozone/platform/wayland/host/wayland_popup.cc b/ui/ozone/platform/wayland/host/wayland_popup.cc +index f1e886f8675fb..28903c031e6ce 100644 +--- a/ui/ozone/platform/wayland/host/wayland_popup.cc ++++ b/ui/ozone/platform/wayland/host/wayland_popup.cc +@@ -132,7 +132,7 @@ void WaylandPopup::Show(bool inactive) { + return; + } + +- connection()->Flush(); ++ connection()->ScheduleFlush(); + WaylandWindow::Show(inactive); + } + +@@ -158,7 +158,7 @@ void WaylandPopup::Hide() { + decorated_via_aura_popup_ = false; + } + +- connection()->Flush(); ++ connection()->ScheduleFlush(); + } + + bool WaylandPopup::IsVisible() const { +@@ -256,14 +256,14 @@ void WaylandPopup::ShowTooltip(const std::u16string& text, + if (zaura_surface && + zaura_surface->ShowTooltip(text, position, zaura_shell_trigger, + show_delay, hide_delay)) { +- connection()->Flush(); ++ connection()->ScheduleFlush(); + } + } + + void WaylandPopup::HideTooltip() { + auto* zaura_surface = GetZAuraSurface(); + if (zaura_surface && zaura_surface->HideTooltip()) { +- connection()->Flush(); ++ connection()->ScheduleFlush(); + } + } + +diff --git a/ui/ozone/platform/wayland/host/wayland_seat.cc b/ui/ozone/platform/wayland/host/wayland_seat.cc +index 3b05da49eb6b8..5f70725a9a9dd 100644 +--- a/ui/ozone/platform/wayland/host/wayland_seat.cc ++++ b/ui/ozone/platform/wayland/host/wayland_seat.cc +@@ -128,7 +128,7 @@ void WaylandSeat::HandleCapabilities(void* data, + + connection_->UpdateInputDevices(); + connection_->UpdateCursor(); +- connection_->Flush(); ++ connection_->ScheduleFlush(); + } + + } // namespace ui +diff --git a/ui/ozone/platform/wayland/host/wayland_shm.cc b/ui/ozone/platform/wayland/host/wayland_shm.cc +index b264ad88962bb..95c19d9962085 100644 +--- a/ui/ozone/platform/wayland/host/wayland_shm.cc ++++ b/ui/ozone/platform/wayland/host/wayland_shm.cc +@@ -62,7 +62,7 @@ wl::Object WaylandShm::CreateBuffer(const base::ScopedFD& fd, + with_alpha_channel ? WL_SHM_FORMAT_ARGB8888 : WL_SHM_FORMAT_XRGB8888; + wl::Object shm_buffer(wl_shm_pool_create_buffer( + pool.get(), 0, size.width(), size.height(), size.width() * 4, format)); +- connection_->Flush(); ++ connection_->ScheduleFlush(); + return shm_buffer; + } + +diff --git a/ui/ozone/platform/wayland/host/wayland_surface.cc b/ui/ozone/platform/wayland/host/wayland_surface.cc +index 47dc846390898..2a04d28b05484 100644 +--- a/ui/ozone/platform/wayland/host/wayland_surface.cc ++++ b/ui/ozone/platform/wayland/host/wayland_surface.cc +@@ -305,7 +305,7 @@ void WaylandSurface::UpdateBufferDamageRegion(const gfx::Rect& damage_px) { + void WaylandSurface::Commit(bool flush) { + wl_surface_commit(surface_.get()); + if (flush) +- connection_->Flush(); ++ connection_->ScheduleFlush(); + } + + void WaylandSurface::set_surface_buffer_scale(float scale) { +diff --git a/ui/ozone/platform/wayland/host/wayland_toplevel_window.cc b/ui/ozone/platform/wayland/host/wayland_toplevel_window.cc +index 898113178a783..1b489b327fa29 100644 +--- a/ui/ozone/platform/wayland/host/wayland_toplevel_window.cc ++++ b/ui/ozone/platform/wayland/host/wayland_toplevel_window.cc +@@ -127,7 +127,7 @@ void WaylandToplevelWindow::DispatchHostWindowDragMovement( + else + shell_toplevel_->SurfaceResize(connection(), hittest); + +- connection()->Flush(); ++ connection()->ScheduleFlush(); + #if !BUILDFLAG(IS_CHROMEOS_LACROS) + // TODO(crbug.com/1454893): Revisit to resolve the correct impl. + connection()->event_source()->ResetPointerFlags(); +@@ -176,7 +176,7 @@ void WaylandToplevelWindow::Hide() { + gtk_surface1_.reset(); + + shell_toplevel_.reset(); +- connection()->Flush(); ++ connection()->ScheduleFlush(); + } + + bool WaylandToplevelWindow::IsVisible() const { +@@ -193,7 +193,7 @@ void WaylandToplevelWindow::SetTitle(const std::u16string& title) { + + if (shell_toplevel_) { + shell_toplevel_->SetTitle(title); +- connection()->Flush(); ++ connection()->ScheduleFlush(); + } + } + +@@ -288,13 +288,13 @@ void WaylandToplevelWindow::Activate() { + // but nothing more happens (until the user moves the mouse over a Lacros + // window in which case events will start and the activation will come + // through). +- connection()->Flush(); ++ connection()->ScheduleFlush(); + } + + void WaylandToplevelWindow::Deactivate() { + if (shell_toplevel_ && shell_toplevel_->SupportsActivation()) { + shell_toplevel_->Deactivate(); +- connection()->Flush(); ++ connection()->ScheduleFlush(); + } + } + +@@ -722,14 +722,14 @@ void WaylandToplevelWindow::ShowTooltip( + if (zaura_surface && + zaura_surface->ShowTooltip(text, position, zaura_shell_trigger, + show_delay, hide_delay)) { +- connection()->Flush(); ++ connection()->ScheduleFlush(); + } + } + + void WaylandToplevelWindow::HideTooltip() { + auto* zaura_surface = GetZAuraSurface(); + if (zaura_surface && zaura_surface->HideTooltip()) { +- connection()->Flush(); ++ connection()->ScheduleFlush(); + } + } + +@@ -1001,7 +1001,7 @@ void WaylandToplevelWindow::TriggerStateChanges() { + } + + delegate()->OnWindowStateChanged(previous_state_, state_); +- connection()->Flush(); ++ connection()->ScheduleFlush(); + } + + void WaylandToplevelWindow::SetWindowState(PlatformWindowState state) { +@@ -1035,7 +1035,7 @@ void WaylandToplevelWindow::SetSizeConstraints() { + shell_toplevel_->SetCanMaximize(delegate()->CanMaximize()); + shell_toplevel_->SetCanFullscreen(delegate()->CanFullscreen()); + +- connection()->Flush(); ++ connection()->ScheduleFlush(); + } + + void WaylandToplevelWindow::SetOrResetRestoredBounds() { +diff --git a/ui/ozone/platform/wayland/host/wayland_window.cc b/ui/ozone/platform/wayland/host/wayland_window.cc +index ad4366edfe4db..9a18c567bcbcc 100644 +--- a/ui/ozone/platform/wayland/host/wayland_window.cc ++++ b/ui/ozone/platform/wayland/host/wayland_window.cc +@@ -686,6 +686,10 @@ std::string WaylandWindow::WindowStates::ToString() const { + return states; + } + ++void WaylandWindow::OnSurfaceContentChanged() { ++ connection_->ScheduleFlush(); ++} ++ + void WaylandWindow::HandleToplevelConfigure(int32_t widht, + int32_t height, + const WindowStates& window_states) { +@@ -832,7 +836,7 @@ bool WaylandWindow::Initialize(PlatformWindowInitProperties properties) { + root_surface_->EnableTrustedDamageIfPossible(); + root_surface_->ApplyPendingState(); + +- connection_->Flush(); ++ connection_->ScheduleFlush(); + + return true; + } +diff --git a/ui/ozone/platform/wayland/host/wayland_window.h b/ui/ozone/platform/wayland/host/wayland_window.h +index d68d4d818f28f..2c5afbb3de99c 100644 +--- a/ui/ozone/platform/wayland/host/wayland_window.h ++++ b/ui/ozone/platform/wayland/host/wayland_window.h +@@ -230,6 +230,8 @@ class WaylandWindow : public PlatformWindow, + // currently bound to. + virtual void HandleSurfaceConfigure(uint32_t serial); + ++ void OnSurfaceContentChanged(); ++ + struct WindowStates { + bool is_maximized = false; + bool is_fullscreen = false; +diff --git a/ui/ozone/platform/wayland/host/wayland_window_drag_controller.cc b/ui/ozone/platform/wayland/host/wayland_window_drag_controller.cc +index e38565635a583..ff201c038efb7 100644 +--- a/ui/ozone/platform/wayland/host/wayland_window_drag_controller.cc ++++ b/ui/ozone/platform/wayland/host/wayland_window_drag_controller.cc +@@ -91,7 +91,7 @@ class WaylandWindowDragController::ExtendedDragSource { + auto* surface = window ? window->root_surface()->surface() : nullptr; + zcr_extended_drag_source_v1_drag(source_.get(), surface, offset.x(), + offset.y()); +- connection_->Flush(); ++ connection_->ScheduleFlush(); + } + + private: +diff --git a/ui/ozone/platform/wayland/host/wayland_window_factory.cc b/ui/ozone/platform/wayland/host/wayland_window_factory.cc +index 6f66c6654819c..e2bc045e4b3fb 100644 +--- a/ui/ozone/platform/wayland/host/wayland_window_factory.cc ++++ b/ui/ozone/platform/wayland/host/wayland_window_factory.cc +@@ -12,6 +12,8 @@ + #include "ui/ozone/platform/wayland/host/wayland_window.h" + #include "ui/platform_window/platform_window_init_properties.h" + ++#include "ui/ozone/platform/wayland/host/wayland_extensions.h" ++ + namespace ui { + + // static +@@ -29,6 +31,12 @@ std::unique_ptr WaylandWindow::Create( + // toplevel window instead. + if (auto* parent = connection->window_manager()->GetWindow( + properties.parent_widget)) { ++ if (connection->extensions()) { ++ window = connection->extensions()->CreateWaylandWindow(delegate, ++ connection); ++ if (window) ++ break; ++ } + window = std::make_unique(delegate, connection, parent); + } else { + DLOG(WARNING) << "Failed to determine parent for menu/popup window."; +@@ -40,6 +48,12 @@ std::unique_ptr WaylandWindow::Create( + case PlatformWindowType::kDrag: + // TODO(crbug.com/1399419): Figure out what kind of surface we need to + // create for kBubble and kDrag windows. ++ if (connection->extensions()) { ++ window = ++ connection->extensions()->CreateWaylandWindow(delegate, connection); ++ if (window) ++ break; ++ } + window = std::make_unique(delegate, connection); + break; + default: +diff --git a/ui/ozone/platform/wayland/host/wayland_zwp_linux_dmabuf.cc b/ui/ozone/platform/wayland/host/wayland_zwp_linux_dmabuf.cc +index 33935db68eadd..15f600ed7a126 100644 +--- a/ui/ozone/platform/wayland/host/wayland_zwp_linux_dmabuf.cc ++++ b/ui/ozone/platform/wayland/host/wayland_zwp_linux_dmabuf.cc +@@ -104,7 +104,7 @@ void WaylandZwpLinuxDmabuf::CreateBuffer(const base::ScopedFD& fd, + // created buffer and notify the client about it via the |callback|. + pending_params_.emplace(std::move(params), std::move(callback)); + } +- connection_->Flush(); ++ connection_->ScheduleFlush(); + } + + bool WaylandZwpLinuxDmabuf::CanCreateBufferImmed() const { +@@ -147,7 +147,7 @@ void WaylandZwpLinuxDmabuf::NotifyRequestCreateBufferDone( + DCHECK(it != pending_params_.end()); + std::move(it->second).Run(wl::Object(new_buffer)); + pending_params_.erase(it); +- connection_->Flush(); ++ connection_->ScheduleFlush(); + } + + // static +diff --git a/ui/ozone/platform/wayland/host/xdg_foreign_wrapper.cc b/ui/ozone/platform/wayland/host/xdg_foreign_wrapper.cc +index 293c09a7e35f2..d36db127ec057 100644 +--- a/ui/ozone/platform/wayland/host/xdg_foreign_wrapper.cc ++++ b/ui/ozone/platform/wayland/host/xdg_foreign_wrapper.cc +@@ -158,7 +158,7 @@ void XdgForeignWrapperImpl:: + &kXdgExportedListener, this); + + exported_surfaces_.emplace_back(std::move(exported_surface)); +- connection_->Flush(); ++ connection_->ScheduleFlush(); + } + + template <> +@@ -174,7 +174,7 @@ void XdgForeignWrapperImpl:: + &kXdgExportedListener, this); + + exported_surfaces_.emplace_back(std::move(exported_surface)); +- connection_->Flush(); ++ connection_->ScheduleFlush(); + } + + // static +diff --git a/ui/ozone/platform/wayland/host/xdg_popup_wrapper_impl.cc b/ui/ozone/platform/wayland/host/xdg_popup_wrapper_impl.cc +index 64c8f2663ae60..b0d8f27aebbf9 100644 +--- a/ui/ozone/platform/wayland/host/xdg_popup_wrapper_impl.cc ++++ b/ui/ozone/platform/wayland/host/xdg_popup_wrapper_impl.cc +@@ -239,7 +239,7 @@ bool XDGPopupWrapperImpl::SetBounds(const gfx::Rect& new_bounds) { + xdg_popup_reposition(xdg_popup_.get(), positioner.get(), + ++next_reposition_token_); + +- connection_->Flush(); ++ connection_->ScheduleFlush(); + return true; + } + +diff --git a/ui/ozone/platform/wayland/host/xdg_surface_wrapper_impl.cc b/ui/ozone/platform/wayland/host/xdg_surface_wrapper_impl.cc +index c4dd8c8e78ce4..67702ecc8fa4f 100644 +--- a/ui/ozone/platform/wayland/host/xdg_surface_wrapper_impl.cc ++++ b/ui/ozone/platform/wayland/host/xdg_surface_wrapper_impl.cc +@@ -39,7 +39,7 @@ bool XDGSurfaceWrapperImpl::Initialize() { + }; + xdg_surface_add_listener(xdg_surface_.get(), &kXdgSurfaceListener, this); + +- connection_->Flush(); ++ connection_->ScheduleFlush(); + return true; + } + +diff --git a/ui/ozone/platform/wayland/host/xdg_toplevel_wrapper_impl.cc b/ui/ozone/platform/wayland/host/xdg_toplevel_wrapper_impl.cc +index 0673c59185348..b9462c60a2eee 100644 +--- a/ui/ozone/platform/wayland/host/xdg_toplevel_wrapper_impl.cc ++++ b/ui/ozone/platform/wayland/host/xdg_toplevel_wrapper_impl.cc +@@ -720,7 +720,7 @@ void XDGToplevelWrapperImpl::ShowSnapPreview( + + void XDGToplevelWrapperImpl::AckRotateFocus(uint32_t serial, uint32_t handled) { + zaura_toplevel_ack_rotate_focus(aura_toplevel_.get(), serial, handled); +- connection_->Flush(); ++ connection_->ScheduleFlush(); + } + + XDGToplevelWrapperImpl* XDGToplevelWrapperImpl::AsXDGToplevelWrapper() { +diff --git a/ui/ozone/platform/wayland/host/zwp_primary_selection_device.cc b/ui/ozone/platform/wayland/host/zwp_primary_selection_device.cc +index 9057d1bea0116..97c1624e200ac 100644 +--- a/ui/ozone/platform/wayland/host/zwp_primary_selection_device.cc ++++ b/ui/ozone/platform/wayland/host/zwp_primary_selection_device.cc +@@ -32,7 +32,7 @@ void ZwpPrimarySelectionDevice::SetSelectionSource( + auto* data_source = source ? source->data_source() : nullptr; + zwp_primary_selection_device_v1_set_selection(data_device_.get(), data_source, + serial); +- connection()->Flush(); ++ connection()->ScheduleFlush(); + } + + // static +diff --git a/ui/ozone/platform/wayland/host/zwp_primary_selection_device_manager.cc b/ui/ozone/platform/wayland/host/zwp_primary_selection_device_manager.cc +index 9d5d79635b66d..2ca82ce6031ba 100644 +--- a/ui/ozone/platform/wayland/host/zwp_primary_selection_device_manager.cc ++++ b/ui/ozone/platform/wayland/host/zwp_primary_selection_device_manager.cc +@@ -66,7 +66,7 @@ ZwpPrimarySelectionDevice* ZwpPrimarySelectionDeviceManager::GetDevice() { + connection_, + zwp_primary_selection_device_manager_v1_get_device( + device_manager_.get(), connection_->seat()->wl_object())); +- connection_->Flush(); ++ connection_->ScheduleFlush(); + } + DCHECK(device_); + return device_.get(); +@@ -77,7 +77,7 @@ ZwpPrimarySelectionDeviceManager::CreateSource( + ZwpPrimarySelectionSource::Delegate* delegate) { + auto* data_source = zwp_primary_selection_device_manager_v1_create_source( + device_manager_.get()); +- connection_->Flush(); ++ connection_->ScheduleFlush(); + return std::make_unique(data_source, connection_, + delegate); + } +diff --git a/ui/platform_window/agl/platform_window_agl.h b/ui/platform_window/agl/platform_window_agl.h +new file mode 100644 +index 0000000000000..4bc915d663e72 +--- /dev/null ++++ b/ui/platform_window/agl/platform_window_agl.h +@@ -0,0 +1,36 @@ ++// Copyright 2021 LG Electronics, Inc. ++// ++// Licensed under the Apache License, Version 2.0 (the "License"); ++// you may not use this file except in compliance with the License. ++// You may obtain a copy of the License at ++// ++// http://www.apache.org/licenses/LICENSE-2.0 ++// ++// Unless required by applicable law or agreed to in writing, software ++// distributed under the License is distributed on an "AS IS" BASIS, ++// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++// See the License for the specific language governing permissions and ++// limitations under the License. ++// ++// SPDX-License-Identifier: Apache-2.0 ++ ++#ifndef UI_PLATFORM_WINDOW_AGL_PLATFORM_WINDOW_AGL_H_ ++#define UI_PLATFORM_WINDOW_AGL_PLATFORM_WINDOW_AGL_H_ ++ ++#include ++ ++namespace ui { ++ ++// AGL additions for platform window. ++class PlatformWindowAgl { ++ public: ++ virtual void SetAglActivateApp(const std::string& app) {} ++ virtual void SetAglAppId(const std::string& title) {} ++ virtual void SetAglReady() {} ++ virtual void SetAglBackground() {} ++ virtual void SetAglPanel(uint32_t edge) {} ++}; ++ ++} // namespace ui ++ ++#endif // UI_PLATFORM_WINDOW_AGL_PLATFORM_WINDOW_AGL_H_ +diff --git a/ui/platform_window/platform_window.h b/ui/platform_window/platform_window.h +index 845da9467d6a4..a9b28388ec649 100644 +--- a/ui/platform_window/platform_window.h ++++ b/ui/platform_window/platform_window.h +@@ -9,6 +9,7 @@ + #include + #include + ++#include "agl/platform_window_agl.h" + #include "base/component_export.h" + #include "ui/base/class_property.h" + #include "ui/base/ui_base_types.h" +@@ -32,7 +33,8 @@ class PlatformCursor; + + // Generic PlatformWindow interface. + class COMPONENT_EXPORT(PLATFORM_WINDOW) PlatformWindow +- : public PropertyHandler { ++ : public PropertyHandler, ++ public PlatformWindowAgl { + public: + PlatformWindow(); + ~PlatformWindow() override; +-- +2.42.1 + diff --git a/recipes-wam/cef/files/chromium/0003-Remove-the-GN-settings-done-for-clang-that-conflict-.patch b/recipes-wam/cef/files/chromium/0003-Remove-the-GN-settings-done-for-clang-that-conflict-.patch deleted file mode 100644 index 68c37f25..00000000 --- a/recipes-wam/cef/files/chromium/0003-Remove-the-GN-settings-done-for-clang-that-conflict-.patch +++ /dev/null @@ -1,116 +0,0 @@ -From 22de50ac2371aed1e04e4cb248beabb7f8ad3ebe Mon Sep 17 00:00:00 2001 -From: Roger Zanoni -Date: Thu, 27 Apr 2023 16:16:28 +0200 -Subject: [PATCH 3/9] Remove the GN settings done for clang that conflict with - OE - -clang cross compiler that is build with meta-clang has lot of these -settings built-in and specifying them here confuses the compiler - ---target option and -no-canonical-prefixes options result in clang - -finding the headers in target sysroot - -Upstream-Status: Inappropriate [OE-Specific] - -Signed-off-by: Khem Raj -Rebased-by: Maksim Sisov -Rebased-by: Randy MacLeod -Rebased-by: Roger Zanoni ---- - build/config/compiler/BUILD.gn | 37 ---------------------------------- - 1 file changed, 37 deletions(-) - -diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn -index 531b326c498d0..244a6757613d5 100644 ---- a/build/config/compiler/BUILD.gn -+++ b/build/config/compiler/BUILD.gn -@@ -924,11 +924,6 @@ config("compiler_cpu_abi") { - ] - } - } else if (current_cpu == "arm") { -- if (is_clang && !is_android && !is_nacl && -- !(is_chromeos_lacros && is_chromeos_device)) { -- cflags += [ "--target=arm-linux-gnueabihf" ] -- ldflags += [ "--target=arm-linux-gnueabihf" ] -- } - if (!is_nacl) { - cflags += [ - "-march=$arm_arch", -@@ -939,11 +934,6 @@ config("compiler_cpu_abi") { - cflags += [ "-mtune=$arm_tune" ] - } - } else if (current_cpu == "arm64") { -- if (is_clang && !is_android && !is_nacl && !is_fuchsia && -- !(is_chromeos_lacros && is_chromeos_device)) { -- cflags += [ "--target=aarch64-linux-gnu" ] -- ldflags += [ "--target=aarch64-linux-gnu" ] -- } - if (is_android) { - # Outline atomics crash on Exynos 9810. http://crbug.com/1272795 - cflags += [ "-mno-outline-atomics" ] -@@ -955,9 +945,6 @@ config("compiler_cpu_abi") { - if (is_android) { - cflags += [ "--target=mipsel-linux-android" ] - ldflags += [ "--target=mipsel-linux-android" ] -- } else { -- cflags += [ "--target=mipsel-linux-gnu" ] -- ldflags += [ "--target=mipsel-linux-gnu" ] - } - } else { - cflags += [ "-EL" ] -@@ -1037,8 +1024,6 @@ config("compiler_cpu_abi") { - ldflags += [ "-Wl,--hash-style=sysv" ] - if (custom_toolchain == "") { - if (is_clang) { -- cflags += [ "--target=mips-linux-gnu" ] -- ldflags += [ "--target=mips-linux-gnu" ] - } else { - cflags += [ "-EB" ] - ldflags += [ "-EB" ] -@@ -1086,9 +1071,6 @@ config("compiler_cpu_abi") { - if (is_android) { - cflags += [ "--target=mips64el-linux-android" ] - ldflags += [ "--target=mips64el-linux-android" ] -- } else { -- cflags += [ "--target=mips64el-linux-gnuabi64" ] -- ldflags += [ "--target=mips64el-linux-gnuabi64" ] - } - } else { - cflags += [ -@@ -1146,8 +1128,6 @@ config("compiler_cpu_abi") { - ldflags += [ "-Wl,--hash-style=sysv" ] - if (custom_toolchain == "") { - if (is_clang) { -- cflags += [ "--target=mips64-linux-gnuabi64" ] -- ldflags += [ "--target=mips64-linux-gnuabi64" ] - } else { - cflags += [ - "-EB", -@@ -1309,23 +1289,6 @@ config("compiler_deterministic") { - } - } - } -- -- # Tells the compiler not to use absolute paths when passing the default -- # paths to the tools it invokes. We don't want this because we don't -- # really need it and it can mess up the goma cache entries. -- if (is_clang && (!is_nacl || is_nacl_saigo)) { -- cflags += [ "-no-canonical-prefixes" ] -- -- # Same for links: Let the compiler driver invoke the linker -- # with a relative path and pass relative paths to built-in -- # libraries. Not needed on Windows because we call the linker -- # directly there, not through the compiler driver. -- # We don't link on goma, so this change is just for cleaner -- # internal linker invocations, for people who work on the build. -- if (!is_win) { -- ldflags += [ "-no-canonical-prefixes" ] -- } -- } - } - - config("clang_revision") { --- -2.39.2 - diff --git a/recipes-wam/cef/files/chromium/0003-agl-Only-bind-to-agl_shell-if-it-s-the-browser-proce.patch b/recipes-wam/cef/files/chromium/0003-agl-Only-bind-to-agl_shell-if-it-s-the-browser-proce.patch new file mode 100644 index 00000000..4de7779f --- /dev/null +++ b/recipes-wam/cef/files/chromium/0003-agl-Only-bind-to-agl_shell-if-it-s-the-browser-proce.patch @@ -0,0 +1,41 @@ +From ab07780e04f15b511967cd609b70fb97abcea96f Mon Sep 17 00:00:00 2001 +From: Roger Zanoni +Date: Sat, 27 May 2023 15:55:17 +0200 +Subject: [PATCH 03/33] [agl] Only bind to agl_shell if it's the browser + process + +Signed-off-by: Roger Zanoni +--- + .../extensions/agl/host/wayland_extensions_agl_impl.cc | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.cc b/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.cc +index 87376cbb8a9d3..075b3010ea8a1 100644 +--- a/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.cc ++++ b/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.cc +@@ -20,6 +20,7 @@ + + #include "base/command_line.h" + #include "base/logging.h" ++#include "content/public/common/content_switches.h" + #include "ui/base/ui_base_switches.h" + #include "ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.h" + #include "ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.h" +@@ -45,8 +46,12 @@ bool WaylandExtensionsAglImpl::Bind(wl_registry* registry, + uint32_t name, + const char* interface, + uint32_t version) { +- bool should_use_agl_shell = base::CommandLine::ForCurrentProcess()->HasSwitch( +- switches::kAglShellAppId); ++ bool has_agl_shell_switch = base::CommandLine::ForCurrentProcess()->HasSwitch( ++ switches::kAglShellAppId); ++ bool is_browser_process = !base::CommandLine::ForCurrentProcess()->HasSwitch( ++ switches::kProcessType); ++ bool should_use_agl_shell = has_agl_shell_switch && is_browser_process; ++ + bool can_bind = wl::CanBind(interface, version, kMinAglShellExtensionVersion, + kMaxAglShellExtensionVersion); + bool is_agl_shell_interface = (strcmp(interface, "agl_shell") == 0); +-- +2.42.1 + diff --git a/recipes-wam/cef/files/chromium/0004-Don-t-use-DRI-for-renesas.patch b/recipes-wam/cef/files/chromium/0004-Don-t-use-DRI-for-renesas.patch deleted file mode 100644 index 332e1f2d..00000000 --- a/recipes-wam/cef/files/chromium/0004-Don-t-use-DRI-for-renesas.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 60b8b1379f2eb154a3c58c00dabbf0f9f0bd5445 Mon Sep 17 00:00:00 2001 -From: Roger Zanoni -Date: Thu, 4 May 2023 10:42:06 +0200 -Subject: [PATCH 4/9] Don't use DRI for renesas - -This adds the use_dri flag that defauls to true and -can be disabled if we are building CEF using ozone + wayland - -Signed-off-by: Roger Zanoni ---- - content/gpu/BUILD.gn | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -diff --git a/content/gpu/BUILD.gn b/content/gpu/BUILD.gn -index 9f5f303b2f220..f7639030ac30c 100644 ---- a/content/gpu/BUILD.gn -+++ b/content/gpu/BUILD.gn -@@ -8,6 +8,10 @@ import("//build/config/ui.gni") - import("//gpu/vulkan/features.gni") - import("//media/media_options.gni") - -+declare_args() { -+ use_dri = true -+} -+ - # See //content/BUILD.gn for how this works. - group("gpu") { - visibility = [ "//content/*" ] # This is an internal content API. -@@ -137,8 +141,8 @@ target(link_target_type, "gpu_sources") { - } - - # Use DRI on desktop Linux builds. -- if (current_cpu != "s390x" && current_cpu != "ppc64" && is_linux && -- !is_castos) { -+ if (use_dri && current_cpu != "s390x" && current_cpu != "ppc64" && -+ is_linux && !is_castos) { - configs += [ "//build/config/linux/dri" ] - } - } --- -2.39.2 - diff --git a/recipes-wam/cef/files/chromium/0004-agl-Add-a-method-to-check-if-the-agl-window-is-confi.patch b/recipes-wam/cef/files/chromium/0004-agl-Add-a-method-to-check-if-the-agl-window-is-confi.patch new file mode 100644 index 00000000..398023ca --- /dev/null +++ b/recipes-wam/cef/files/chromium/0004-agl-Add-a-method-to-check-if-the-agl-window-is-confi.patch @@ -0,0 +1,69 @@ +From 76cb42f0773ecff97710d7d5ea20cd16b8781d51 Mon Sep 17 00:00:00 2001 +From: Roger Zanoni +Date: Fri, 30 Jun 2023 10:25:10 +0200 +Subject: [PATCH 04/33] [agl] Add a method to check if the agl window is + configured + +This will be used on cef side to know the time when the window can be +displayed. + +Signed-off-by: Roger Zanoni +--- + ui/aura/agl/window_tree_host_agl.h | 1 + + ui/aura/agl/window_tree_host_platform_agl.cc | 4 ++++ + ui/aura/agl/window_tree_host_platform_agl.h | 1 + + ui/platform_window/agl/platform_window_agl.h | 1 + + 4 files changed, 7 insertions(+) + +diff --git a/ui/aura/agl/window_tree_host_agl.h b/ui/aura/agl/window_tree_host_agl.h +index 858a078d939d0..b9aa451c8332e 100644 +--- a/ui/aura/agl/window_tree_host_agl.h ++++ b/ui/aura/agl/window_tree_host_agl.h +@@ -35,6 +35,7 @@ class AURA_EXPORT WindowTreeHostAgl { + virtual void SetAglReady() {} + virtual void SetAglBackground() {} + virtual void SetAglPanel(uint32_t edge) {} ++ virtual bool IsSurfaceConfigured() const { return false; } + }; + + } // namespace aura +diff --git a/ui/aura/agl/window_tree_host_platform_agl.cc b/ui/aura/agl/window_tree_host_platform_agl.cc +index e34595fe0ed9c..67190e1da6973 100644 +--- a/ui/aura/agl/window_tree_host_platform_agl.cc ++++ b/ui/aura/agl/window_tree_host_platform_agl.cc +@@ -47,4 +47,8 @@ void WindowTreeHostPlatformAgl::SetAglPanel(uint32_t edge) { + window_tree_host_platform_->platform_window()->SetAglPanel(edge); + } + ++bool WindowTreeHostPlatformAgl::IsSurfaceConfigured() const { ++ return window_tree_host_platform_->platform_window()->IsSurfaceConfigured(); ++} ++ + } // namespace aura +diff --git a/ui/aura/agl/window_tree_host_platform_agl.h b/ui/aura/agl/window_tree_host_platform_agl.h +index 181eefae346f7..e5a29fa1bfca3 100644 +--- a/ui/aura/agl/window_tree_host_platform_agl.h ++++ b/ui/aura/agl/window_tree_host_platform_agl.h +@@ -41,6 +41,7 @@ class AURA_EXPORT WindowTreeHostPlatformAgl : public aura::WindowTreeHost { + void SetAglReady() override; + void SetAglBackground() override; + void SetAglPanel(uint32_t edge) override; ++ bool IsSurfaceConfigured() const override; + + private: + aura::WindowTreeHostPlatform* window_tree_host_platform_; +diff --git a/ui/platform_window/agl/platform_window_agl.h b/ui/platform_window/agl/platform_window_agl.h +index 4bc915d663e72..cab1f42272772 100644 +--- a/ui/platform_window/agl/platform_window_agl.h ++++ b/ui/platform_window/agl/platform_window_agl.h +@@ -29,6 +29,7 @@ class PlatformWindowAgl { + virtual void SetAglReady() {} + virtual void SetAglBackground() {} + virtual void SetAglPanel(uint32_t edge) {} ++ virtual bool IsSurfaceConfigured() { return false; } + }; + + } // namespace ui +-- +2.42.1 + diff --git a/recipes-wam/cef/files/chromium/0005-Add-the-essential-parts-of-wayland-extensions-and-ag.patch b/recipes-wam/cef/files/chromium/0005-Add-the-essential-parts-of-wayland-extensions-and-ag.patch deleted file mode 100644 index fea8c04a..00000000 --- a/recipes-wam/cef/files/chromium/0005-Add-the-essential-parts-of-wayland-extensions-and-ag.patch +++ /dev/null @@ -1,912 +0,0 @@ -From 7e927a21ecaa70c14873d5f06667dfc3bdaa4d25 Mon Sep 17 00:00:00 2001 -From: Roger Zanoni -Date: Mon, 15 May 2023 20:32:06 +0200 -Subject: [PATCH 5/9] Add the essential parts of wayland extensions and - agl_shell - ---- - ui/base/ui_base_switches.cc | 2 + - ui/base/ui_base_switches.h | 3 + - ui/ozone/platform/wayland/BUILD.gn | 7 + - .../platform/wayland/extensions/agl/BUILD.gn | 40 ++++ - .../agl/common/wayland_object_agl.cc | 26 +++ - .../agl/common/wayland_object_agl.h | 34 ++++ - .../extensions/agl/host/agl_shell_wrapper.cc | 113 +++++++++++ - .../extensions/agl/host/agl_shell_wrapper.h | 62 ++++++ - .../agl/host/wayland_extensions_agl.h | 37 ++++ - .../agl/host/wayland_extensions_agl_impl.cc | 93 +++++++++ - .../agl/host/wayland_extensions_agl_impl.h | 54 ++++++ - .../extensions/agl/protocol/agl-shell.xml | 179 ++++++++++++++++++ - .../wayland/host/wayland_connection.cc | 12 +- - .../wayland/host/wayland_connection.h | 6 + - .../wayland/host/wayland_extensions.h | 56 ++++++ - 15 files changed, 722 insertions(+), 2 deletions(-) - create mode 100644 ui/ozone/platform/wayland/extensions/agl/BUILD.gn - create mode 100644 ui/ozone/platform/wayland/extensions/agl/common/wayland_object_agl.cc - create mode 100644 ui/ozone/platform/wayland/extensions/agl/common/wayland_object_agl.h - create mode 100644 ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.cc - create mode 100644 ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.h - create mode 100644 ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl.h - create mode 100644 ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.cc - create mode 100644 ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.h - create mode 100644 ui/ozone/platform/wayland/extensions/agl/protocol/agl-shell.xml - create mode 100644 ui/ozone/platform/wayland/host/wayland_extensions.h - -diff --git a/ui/base/ui_base_switches.cc b/ui/base/ui_base_switches.cc -index f8556679a79d8..e72ae83737c04 100644 ---- a/ui/base/ui_base_switches.cc -+++ b/ui/base/ui_base_switches.cc -@@ -100,4 +100,6 @@ const char kUIDisablePartialSwap[] = "ui-disable-partial-swap"; - // Enables the ozone x11 clipboard for linux-chromeos. - const char kUseSystemClipboard[] = "use-system-clipboard"; - -+const char kAglShellAppId[] = "agl-shell-appid"; -+ - } // namespace switches -diff --git a/ui/base/ui_base_switches.h b/ui/base/ui_base_switches.h -index d35e544f2bc2f..019ba0e5151e5 100644 ---- a/ui/base/ui_base_switches.h -+++ b/ui/base/ui_base_switches.h -@@ -45,6 +45,9 @@ COMPONENT_EXPORT(UI_BASE) extern const char kTopChromeTouchUiEnabled[]; - COMPONENT_EXPORT(UI_BASE) extern const char kUIDisablePartialSwap[]; - COMPONENT_EXPORT(UI_BASE) extern const char kUseSystemClipboard[]; - -+// Agl related -+COMPONENT_EXPORT(UI_BASE) extern const char kAglShellAppId[]; -+ - // Test related. - COMPONENT_EXPORT(UI_BASE) extern const char kDisallowNonExactResourceReuse[]; - COMPONENT_EXPORT(UI_BASE) extern const char kMangleLocalizedStrings[]; -diff --git a/ui/ozone/platform/wayland/BUILD.gn b/ui/ozone/platform/wayland/BUILD.gn -index e0f0d7dea3747..1a2f889dc8947 100644 ---- a/ui/ozone/platform/wayland/BUILD.gn -+++ b/ui/ozone/platform/wayland/BUILD.gn -@@ -407,6 +407,13 @@ source_set("wayland") { - ] - } - -+ sources += [ -+ "host/wayland_extensions.h", -+ "host/wayland_extensions_stub.cc", -+ ] -+ -+ deps += [ "extensions/agl" ] -+ - configs += [ "//third_party/khronos:khronos_headers" ] - } - -diff --git a/ui/ozone/platform/wayland/extensions/agl/BUILD.gn b/ui/ozone/platform/wayland/extensions/agl/BUILD.gn -new file mode 100644 -index 0000000000000..ce289bc5dbbca ---- /dev/null -+++ b/ui/ozone/platform/wayland/extensions/agl/BUILD.gn -@@ -0,0 +1,40 @@ -+# Copyright 2021 LG Electronics, Inc. -+# -+# Licensed under the Apache License, Version 2.0 (the "License"); -+# you may not use this file except in compliance with the License. -+# You may obtain a copy of the License at -+# -+# http://www.apache.org/licenses/LICENSE-2.0 -+# -+# Unless required by applicable law or agreed to in writing, software -+# distributed under the License is distributed on an "AS IS" BASIS, -+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -+# See the License for the specific language governing permissions and -+# limitations under the License. -+# -+# SPDX-License-Identifier: Apache-2.0 -+ -+import("//third_party/wayland/wayland_protocol.gni") -+ -+visibility = [ "//ui/ozone/*" ] -+ -+wayland_protocol("agl_shell_protocol") { -+ sources = [ "protocol/agl-shell.xml" ] -+} -+ -+source_set("agl") { -+ sources = [ -+ "common/wayland_object_agl.cc", -+ "common/wayland_object_agl.h", -+ "host/agl_shell_wrapper.cc", -+ "host/agl_shell_wrapper.h", -+ "host/wayland_extensions_agl.h", -+ "host/wayland_extensions_agl_impl.cc", -+ "host/wayland_extensions_agl_impl.h", -+ ] -+ -+ deps = [ -+ ":agl_shell_protocol", -+ "//ui/ozone/platform/wayland/mojom", -+ ] -+} -diff --git a/ui/ozone/platform/wayland/extensions/agl/common/wayland_object_agl.cc b/ui/ozone/platform/wayland/extensions/agl/common/wayland_object_agl.cc -new file mode 100644 -index 0000000000000..9f3300766df2c ---- /dev/null -+++ b/ui/ozone/platform/wayland/extensions/agl/common/wayland_object_agl.cc -@@ -0,0 +1,26 @@ -+// Copyright 2021 LG Electronics, Inc. -+// -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// http://www.apache.org/licenses/LICENSE-2.0 -+// -+// Unless required by applicable law or agreed to in writing, software -+// distributed under the License is distributed on an "AS IS" BASIS, -+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -+// See the License for the specific language governing permissions and -+// limitations under the License. -+// -+// SPDX-License-Identifier: Apache-2.0 -+ -+#include "ui/ozone/platform/wayland/extensions/agl/common/wayland_object_agl.h" -+ -+#include -+ -+namespace wl { -+ -+const wl_interface* ObjectTraits::interface = &agl_shell_interface; -+void (*ObjectTraits::deleter)(agl_shell*) = &agl_shell_destroy; -+ -+} // namespace wl -\ No newline at end of file -diff --git a/ui/ozone/platform/wayland/extensions/agl/common/wayland_object_agl.h b/ui/ozone/platform/wayland/extensions/agl/common/wayland_object_agl.h -new file mode 100644 -index 0000000000000..e91ac0da8d2fc ---- /dev/null -+++ b/ui/ozone/platform/wayland/extensions/agl/common/wayland_object_agl.h -@@ -0,0 +1,34 @@ -+// Copyright 2021 LG Electronics, Inc. -+// -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// http://www.apache.org/licenses/LICENSE-2.0 -+// -+// Unless required by applicable law or agreed to in writing, software -+// distributed under the License is distributed on an "AS IS" BASIS, -+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -+// See the License for the specific language governing permissions and -+// limitations under the License. -+// -+// SPDX-License-Identifier: Apache-2.0 -+ -+#ifndef UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_COMMON_WAYLAND_OBJECT_AGL_H_ -+#define UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_COMMON_WAYLAND_OBJECT_AGL_H_ -+ -+#include "ui/ozone/platform/wayland/common/wayland_object.h" -+ -+struct agl_shell; -+ -+namespace wl { -+ -+template <> -+struct ObjectTraits { -+ static const wl_interface* interface; -+ static void (*deleter)(agl_shell*); -+}; -+ -+} // namespace wl -+ -+#endif // UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_COMMON_WAYLAND_OBJECT_AGL_H_ -\ No newline at end of file -diff --git a/ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.cc b/ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.cc -new file mode 100644 -index 0000000000000..c74fa5d9cd221 ---- /dev/null -+++ b/ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.cc -@@ -0,0 +1,113 @@ -+// Copyright 2021 LG Electronics, Inc. -+// -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// http://www.apache.org/licenses/LICENSE-2.0 -+// -+// Unless required by applicable law or agreed to in writing, software -+// distributed under the License is distributed on an "AS IS" BASIS, -+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -+// See the License for the specific language governing permissions and -+// limitations under the License. -+// -+// SPDX-License-Identifier: Apache-2.0 -+ -+#include "ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.h" -+ -+#include "agl_shell_wrapper.h" -+#include "base/logging.h" -+#include "ui/base/ui_base_switches.h" -+#include "ui/ozone/platform/wayland/host/wayland_connection.h" -+#include "ui/ozone/platform/wayland/host/wayland_output_manager.h" -+#include "ui/ozone/platform/wayland/host/wayland_window.h" -+ -+namespace ui { -+ -+static const struct agl_shell_listener shell_listener = { -+ &AglShellWrapper::AglShellBoundOk, -+ &AglShellWrapper::AglShellBoundFail, -+#ifdef AGL_SHELL_APP_STATE_SINCE_VERSION -+ &AglShellWrapper::AglAppState, -+#endif -+}; -+ -+AglShellWrapper::AglShellWrapper(agl_shell* agl_shell, -+ WaylandConnection* wayland_connection) -+ : agl_shell_(agl_shell), connection_(wayland_connection) { -+ if (wl::get_version_of_object(agl_shell) >= AGL_SHELL_BOUND_OK_SINCE_VERSION) -+ agl_shell_add_listener(agl_shell, &shell_listener, this); -+} -+ -+AglShellWrapper::~AglShellWrapper() = default; -+ -+void AglShellWrapper::SetAglActivateApp(const std::string& app_id) { -+ wl_output* output = -+ connection_->wayland_output_manager()->GetPrimaryOutput()->get_output(); -+ agl_shell_activate_app(agl_shell_.get(), app_id.c_str(), output); -+} -+ -+void AglShellWrapper::SetAglPanel(WaylandWindow* window, uint32_t edge) { -+ wl_surface* surface = window->root_surface()->surface(); -+ wl_output* output = -+ connection_->wayland_output_manager()->GetPrimaryOutput()->get_output(); -+ -+ agl_shell_set_panel(agl_shell_.get(), surface, output, edge); -+} -+ -+void AglShellWrapper::SetAglBackground(WaylandWindow* window) { -+ wl_surface* surface = window->root_surface()->surface(); -+ wl_output* output = -+ connection_->wayland_output_manager()->GetPrimaryOutput()->get_output(); -+ -+ agl_shell_set_background(agl_shell_.get(), surface, output); -+} -+ -+void AglShellWrapper::SetAglReady() { -+ agl_shell_ready(agl_shell_.get()); -+} -+ -+// static -+void AglShellWrapper::AglShellBoundOk(void* data, struct agl_shell*) { -+ AglShellWrapper* wrapper = static_cast(data); -+ wrapper->wait_for_bound_ = false; -+ wrapper->bound_ok_ = true; -+ LOG(INFO) << "Bound to agl_shell (bound_ok)"; -+} -+ -+// static -+void AglShellWrapper::AglShellBoundFail(void* data, struct agl_shell*) { -+ AglShellWrapper* wrapper = static_cast(data); -+ wrapper->wait_for_bound_ = false; -+ wrapper->bound_ok_ = false; -+ LOG(INFO) << "Failed to bind to agl_shell (bound_fail)"; -+} -+ -+#ifdef AGL_SHELL_APP_STATE_SINCE_VERSION -+// static -+void AglShellWrapper::AglAppState(void* data, -+ struct agl_shell*, -+ const char* app_id, -+ uint32_t state) { -+ AglShellWrapper* wrapper = static_cast(data); -+ -+ LOG(INFO) << "State for app " << app_id << " changed to " << state; -+ -+ if (state == AGL_SHELL_APP_STATE_STARTED) { -+ wrapper->SetAglActivateApp(app_id); -+ LOG(INFO) << "Activating app " << app_id; -+ } -+} -+#endif -+ -+bool AglShellWrapper::WaitUntilBoundOk() { -+ int ret = 0; -+ while (ret != -1 && wait_for_bound_) { -+ ret = wl_display_dispatch(connection_->display()); -+ } -+ -+ return bound_ok_; -+} -+ -+} // namespace ui -diff --git a/ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.h b/ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.h -new file mode 100644 -index 0000000000000..2ab765883057e ---- /dev/null -+++ b/ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.h -@@ -0,0 +1,62 @@ -+// Copyright 2021 LG Electronics, Inc. -+// -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// http://www.apache.org/licenses/LICENSE-2.0 -+// -+// Unless required by applicable law or agreed to in writing, software -+// distributed under the License is distributed on an "AS IS" BASIS, -+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -+// See the License for the specific language governing permissions and -+// limitations under the License. -+// -+// SPDX-License-Identifier: Apache-2.0 -+ -+#ifndef UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_HOST_AGL_SHELL_WRAPPER_H_ -+#define UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_HOST_AGL_SHELL_WRAPPER_H_ -+ -+#include -+ -+#include -+ -+#include "ui/ozone/platform/wayland/extensions/agl/common/wayland_object_agl.h" -+ -+namespace ui { -+ -+class WaylandConnection; -+class WaylandWindow; -+ -+class AglShellWrapper { -+ public: -+ AglShellWrapper(agl_shell* agl_shell, WaylandConnection* wayland_connection); -+ AglShellWrapper(const AglShellWrapper&) = delete; -+ AglShellWrapper& operator=(const AglShellWrapper&) = delete; -+ ~AglShellWrapper(); -+ -+ void SetAglActivateApp(const std::string& app_id); -+ void SetAglPanel(WaylandWindow* window, uint32_t edge); -+ void SetAglBackground(WaylandWindow* window); -+ void SetAglReady(); -+ bool WaitUntilBoundOk(); -+ -+ static void AglShellBoundOk(void* data, struct agl_shell*); -+ static void AglShellBoundFail(void* data, struct agl_shell*); -+#ifdef AGL_SHELL_APP_STATE_SINCE_VERSION -+ static void AglAppState(void* data, -+ struct agl_shell*, -+ const char* app_id, -+ uint32_t state); -+#endif -+ -+ private: -+ wl::Object agl_shell_; -+ WaylandConnection* connection_; -+ bool wait_for_bound_ = true; -+ bool bound_ok_ = false; -+}; -+ -+} // namespace ui -+ -+#endif // UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_HOST_AGL_SHELL_WRAPPER_H_ -diff --git a/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl.h b/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl.h -new file mode 100644 -index 0000000000000..df42fc00c84da ---- /dev/null -+++ b/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl.h -@@ -0,0 +1,37 @@ -+// Copyright 2021 LG Electronics, Inc. -+// -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// http://www.apache.org/licenses/LICENSE-2.0 -+// -+// Unless required by applicable law or agreed to in writing, software -+// distributed under the License is distributed on an "AS IS" BASIS, -+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -+// See the License for the specific language governing permissions and -+// limitations under the License. -+// -+// SPDX-License-Identifier: Apache-2.0 -+ -+#ifndef UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_HOST_WAYLAND_EXTENSIONS_AGL_H_ -+#define UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_HOST_WAYLAND_EXTENSIONS_AGL_H_ -+ -+namespace ui { -+ -+class AglShellWrapper; -+ -+// AGL extensions implementation for webOS/Lite -+class WaylandExtensionsAgl { -+ public: -+ WaylandExtensionsAgl() = default; -+ WaylandExtensionsAgl(const WaylandExtensionsAgl&) = delete; -+ WaylandExtensionsAgl& operator=(const WaylandExtensionsAgl&) = delete; -+ virtual ~WaylandExtensionsAgl() = default; -+ -+ virtual AglShellWrapper* GetAglShell() = 0; -+}; -+ -+} // namespace ui -+ -+#endif // UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_HOST_WAYLAND_EXTENSIONS_AGL_H_ -\ No newline at end of file -diff --git a/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.cc b/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.cc -new file mode 100644 -index 0000000000000..26a5f0550c302 ---- /dev/null -+++ b/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.cc -@@ -0,0 +1,93 @@ -+// Copyright 2021 LG Electronics, Inc. -+// -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// http://www.apache.org/licenses/LICENSE-2.0 -+// -+// Unless required by applicable law or agreed to in writing, software -+// distributed under the License is distributed on an "AS IS" BASIS, -+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -+// See the License for the specific language governing permissions and -+// limitations under the License. -+// -+// SPDX-License-Identifier: Apache-2.0 -+ -+#include "ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.h" -+ -+#include -+ -+#include "base/command_line.h" -+#include "base/logging.h" -+#include "ui/base/ui_base_switches.h" -+#include "ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.h" -+#include "ui/ozone/platform/wayland/extensions/agl/common/wayland_object_agl.h" -+#include "ui/ozone/platform/wayland/host/wayland_connection.h" -+ -+namespace ui { -+ -+namespace { -+ -+constexpr uint32_t kMinAglShellExtensionVersion = 1; -+constexpr uint32_t kMaxAglShellExtensionVersion = 3; -+ -+} // namespace -+ -+WaylandExtensionsAglImpl::WaylandExtensionsAglImpl( -+ WaylandConnection* connection) -+ : connection_(connection) {} -+ -+WaylandExtensionsAglImpl::~WaylandExtensionsAglImpl() = default; -+ -+bool WaylandExtensionsAglImpl::Bind(wl_registry* registry, -+ uint32_t name, -+ const char* interface, -+ uint32_t version) { -+ bool should_use_agl_shell = base::CommandLine::ForCurrentProcess()->HasSwitch( -+ switches::kAglShellAppId); -+ bool can_bind = wl::CanBind(interface, version, kMinAglShellExtensionVersion, -+ kMaxAglShellExtensionVersion); -+ bool is_agl_shell_interface = (strcmp(interface, "agl_shell") == 0); -+ -+ if (!is_agl_shell_interface) { -+ return false; -+ } -+ -+ LOG(INFO) << "should_use_agl_shell: " << should_use_agl_shell << -+ " can_bind: " << can_bind; -+ -+ if (should_use_agl_shell && !agl_shell_ && -+ is_agl_shell_interface && can_bind) { -+ wl::Object aglshell = wl::Bind( -+ registry, name, std::min(version, kMaxAglShellExtensionVersion)); -+ if (!aglshell) { -+ LOG(ERROR) << "Failed to bind to agl_shell global"; -+ return false; -+ } -+ agl_shell_ = -+ std::make_unique(aglshell.release(), connection_); -+ -+ LOG(INFO) << "Waiting until bound..."; -+ return agl_shell_->WaitUntilBoundOk(); -+ } else { -+ LOG(INFO) << "Cant bind."; -+ } -+ -+ return false; -+} -+ -+bool WaylandExtensionsAglImpl::HasShellObject() const { -+ return !!agl_shell_; -+} -+ -+AglShellWrapper* WaylandExtensionsAglImpl::GetAglShell() { -+ return agl_shell_.get(); -+} -+ -+std::unique_ptr CreateWaylandExtensions( -+ WaylandConnection* connection) { -+ return std::make_unique(connection); -+} -+ -+} // namespace ui -diff --git a/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.h b/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.h -new file mode 100644 -index 0000000000000..f6cbabe99ed0b ---- /dev/null -+++ b/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.h -@@ -0,0 +1,54 @@ -+// Copyright 2021 LG Electronics, Inc. -+// -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// http://www.apache.org/licenses/LICENSE-2.0 -+// -+// Unless required by applicable law or agreed to in writing, software -+// distributed under the License is distributed on an "AS IS" BASIS, -+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -+// See the License for the specific language governing permissions and -+// limitations under the License. -+// -+// SPDX-License-Identifier: Apache-2.0 -+ -+#ifndef UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_HOST_WAYLAND_EXTENSIONS_AGL_IMPL_H_ -+#define UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_HOST_WAYLAND_EXTENSIONS_AGL_IMPL_H_ -+ -+#include "ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl.h" -+#include "ui/ozone/platform/wayland/host/wayland_extensions.h" -+ -+namespace ui { -+ -+class AglShellWrapper; -+ -+// AGL extension implementation for webOS/Lite -+class WaylandExtensionsAglImpl : public WaylandExtensions, -+ public WaylandExtensionsAgl { -+ public: -+ explicit WaylandExtensionsAglImpl(WaylandConnection* connection); -+ WaylandExtensionsAglImpl(const WaylandExtensionsAglImpl&) = delete; -+ WaylandExtensionsAglImpl& operator=(const WaylandExtensionsAglImpl&) = delete; -+ ~WaylandExtensionsAglImpl() override; -+ -+ // WaylandExtensions overrides -+ bool Bind(wl_registry* registry, -+ uint32_t name, -+ const char* interface, -+ uint32_t version) override; -+ -+ bool HasShellObject() const override; -+ -+ // WaylandExtensionsAgl overrides -+ AglShellWrapper* GetAglShell() override; -+ -+ private: -+ std::unique_ptr agl_shell_; -+ WaylandConnection* connection_; -+}; -+ -+} // namespace ui -+ -+#endif // UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_HOST_WAYLAND_EXTENSIONS_AGL_IMPL_H_ -diff --git a/ui/ozone/platform/wayland/extensions/agl/protocol/agl-shell.xml b/ui/ozone/platform/wayland/extensions/agl/protocol/agl-shell.xml -new file mode 100644 -index 0000000000000..ad5553d61f189 ---- /dev/null -+++ b/ui/ozone/platform/wayland/extensions/agl/protocol/agl-shell.xml -@@ -0,0 +1,179 @@ -+ -+ -+ -+ Copyright © 2019, 2022 Collabora, Ltd. -+ -+ Permission is hereby granted, free of charge, to any person obtaining a -+ copy of this software and associated documentation files (the "Software"), -+ to deal in the Software without restriction, including without limitation -+ the rights to use, copy, modify, merge, publish, distribute, sublicense, -+ and/or sell copies of the Software, and to permit persons to whom the -+ Software is furnished to do so, subject to the following conditions: -+ -+ The above copyright notice and this permission notice (including the next -+ paragraph) shall be included in all copies or substantial portions of the -+ Software. -+ -+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -+ THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -+ DEALINGS IN THE SOFTWARE. -+ -+ -+ -+ Starting with version 2 of the protocol, the client is required to wait -+ for the 'bound_ok' or 'bound_fail' events in order to proceed further. -+ -+ In case the client gets a 'bound_fail' event then it should consider that -+ there's another client already bound to the agl_shell protocol. -+ A client that receives a 'bound_ok' event should consider that there's -+ no other client already bound to the interface and can proceed further. -+ -+ If the client uses an older version of the protocol it will receive -+ automatically an error and the compositor will terminate the connection, -+ if there's another client already bound the interface. -+ -+ If the client receives the 'bound_fail' event and attempts to use the -+ interface further it will receive an error and the compositor will -+ terminate the connection. After the 'bound_fail' event was received the -+ client should call the destructor, which has been added with version 2 -+ of the protocol. The client is free to try at a later point in time to -+ see if it will receive the 'bound_ok' event, but there's no explicit way -+ of finding out when that event will be delivered. -+ It is assumed that it can infer that information through other -+ means/other channels. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Tell the server that this client is ready to be shown. The server -+ will delay presentation during start-up until all shell clients are -+ ready to be shown, and will display a black screen instead. -+ This gives the client an opportunity to set up and configure several -+ surfaces into a coherent interface. -+ -+ The client that binds to this interface must send this request, otherwise -+ they may stall the compositor unnecessarily. -+ -+ If this request is called after the compositor has already finished -+ start-up, no operation is performed. -+ -+ -+ -+ -+ -+ Set the surface to act as the background of an output. After this -+ request, the server will immediately send a configure event with -+ the dimensions the client should use to cover the entire output. -+ -+ The surface must have a "desktop" surface role, as supported by -+ libweston-desktop. -+ -+ Only a single surface may be the background for any output. If a -+ background surface already exists, a protocol error is raised. -+ -+ -+ -+ -+ -+ -+ -+ Set the surface to act as a panel of an output. The 'edge' argument -+ says what edge of the output the surface will be anchored to. -+ After this request, the server will send a configure event with the -+ corresponding width/height that the client should use, and 0 for the -+ other dimension. E.g. if the edge is 'top', the width will be the -+ output's width, and the height will be 0. -+ -+ The surface must have a "desktop" surface role, as supported by -+ libweston-desktop. -+ -+ The compositor will take the panel's window geometry into account when -+ positioning other windows, so the panels are not covered. -+ -+ XXX: What happens if e.g. both top and left are used at the same time? -+ Who gets to have the corner? -+ -+ Only a single surface may be the panel for an output's edge. If a -+ surface already exists on an edge, a protocol error is raised. -+ -+ -+ -+ -+ -+ -+ -+ -+ Ask the compositor to make a toplevel to become the current/focused -+ window for window management purposes. -+ -+ See xdg_toplevel.set_app_id from the xdg-shell protocol for a -+ description of app_id. -+ -+ If multiple toplevels have the same app_id, the result is unspecified. -+ -+ XXX: Do we need feedback to say it didn't work? (e.g. client does -+ not exist) -+ -+ -+ -+ -+ -+ -+ -+ Informs the client that it was able to bind the agl_shell -+ interface succesfully. Clients are required to wait for this -+ event before continuing further. -+ -+ -+ -+ -+ -+ Informs the client that binding to the agl_shell interface was -+ unsuccesfull. Clients are required to wait for this event for -+ continuing further. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Informs the client that an application has changed its state to another, -+ specified by the app_state enum. Client can use this event to track -+ current application state. For instance to know when the application has -+ started, or when terminated/stopped. -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/ui/ozone/platform/wayland/host/wayland_connection.cc b/ui/ozone/platform/wayland/host/wayland_connection.cc -index 6d44128e56458..93427c52e1284 100644 ---- a/ui/ozone/platform/wayland/host/wayland_connection.cc -+++ b/ui/ozone/platform/wayland/host/wayland_connection.cc -@@ -64,6 +64,8 @@ - #include "ui/ozone/platform/wayland/host/zwp_primary_selection_device_manager.h" - #include "ui/platform_window/common/platform_window_defaults.h" - -+#include "ui/ozone/platform/wayland/host/wayland_extensions.h" -+ - #if defined(USE_LIBWAYLAND_STUBS) - #include - -@@ -238,6 +240,10 @@ bool WaylandConnection::Initialize() { - return false; - } - -+ if (!extensions_) { -+ extensions_ = CreateWaylandExtensions(this); -+ } -+ - // Now that the connection with the display server has been properly - // estabilished, initialize the event source and input objects. - DCHECK(!event_source_); -@@ -264,7 +270,7 @@ bool WaylandConnection::Initialize() { - LOG(ERROR) << "No wl_shm object"; - return false; - } -- if (!shell_v6_ && !shell_) { -+ if (!shell_v6_ && !shell_ && !(extensions_ && extensions_->HasShellObject())) { - LOG(ERROR) << "No Wayland shell found"; - return false; - } -@@ -434,7 +440,9 @@ void WaylandConnection::Global(void* data, - auto* connection = static_cast(data); - - auto factory_it = connection->global_object_factories_.find(interface); -- if (factory_it != connection->global_object_factories_.end()) { -+ if (connection->extensions_->Bind(registry, name, interface, version)) { -+ DVLOG(1) << "Successfully bound to " << interface; -+ } else if (factory_it != connection->global_object_factories_.end()) { - (*factory_it->second)(connection, registry, name, interface, version); - } else if (!connection->compositor_ && - strcmp(interface, "wl_compositor") == 0) { -diff --git a/ui/ozone/platform/wayland/host/wayland_connection.h b/ui/ozone/platform/wayland/host/wayland_connection.h -index d33959ad4066f..dfd1d060c73f2 100644 ---- a/ui/ozone/platform/wayland/host/wayland_connection.h -+++ b/ui/ozone/platform/wayland/host/wayland_connection.h -@@ -45,6 +45,7 @@ class WaylandBufferManagerHost; - class WaylandCursor; - class WaylandCursorBufferListener; - class WaylandEventSource; -+class WaylandExtensions; - class WaylandOutputManager; - class WaylandSeat; - class WaylandZAuraShell; -@@ -185,6 +186,8 @@ class WaylandConnection { - - WaylandZAuraShell* zaura_shell() const { return zaura_shell_.get(); } - -+ WaylandExtensions* extensions() { return extensions_.get(); } -+ - WaylandZcrColorManager* zcr_color_manager() const { - return zcr_color_manager_.get(); - } -@@ -424,6 +427,9 @@ class WaylandConnection { - std::unique_ptr overlay_prioritizer_; - std::unique_ptr surface_augmenter_; - -+ std::unique_ptr extensions_; -+ -+ - // Clipboard-related objects. |clipboard_| must be declared after all - // DeviceManager instances it depends on, otherwise tests may crash with - // UAFs while attempting to access already destroyed manager pointers. -diff --git a/ui/ozone/platform/wayland/host/wayland_extensions.h b/ui/ozone/platform/wayland/host/wayland_extensions.h -new file mode 100644 -index 0000000000000..3bd2fd7a211ae ---- /dev/null -+++ b/ui/ozone/platform/wayland/host/wayland_extensions.h -@@ -0,0 +1,56 @@ -+// Copyright 2019 LG Electronics, Inc. -+// -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// http://www.apache.org/licenses/LICENSE-2.0 -+// -+// Unless required by applicable law or agreed to in writing, software -+// distributed under the License is distributed on an "AS IS" BASIS, -+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -+// See the License for the specific language governing permissions and -+// limitations under the License. -+// -+// SPDX-License-Identifier: Apache-2.0 -+ -+#ifndef UI_OZONE_PLATFORM_WAYLAND_HOST_WAYLAND_EXTENSIONS_H_ -+#define UI_OZONE_PLATFORM_WAYLAND_HOST_WAYLAND_EXTENSIONS_H_ -+ -+#include -+ -+#include "ui/ozone/platform/wayland/common/wayland_object.h" -+ -+namespace ui { -+ -+class ShellToplevelWrapper; -+class ShellPopupWrapper; -+class WaylandConnection; -+ -+// Wayland extensions abstract interface to support extending of the Wayland -+// protocol. Inherit it to provide your own Wayland extensions implementation. -+class WaylandExtensions { -+ public: -+ WaylandExtensions() = default; -+ WaylandExtensions(const WaylandExtensions&) = delete; -+ WaylandExtensions& operator=(const WaylandExtensions&) = delete; -+ virtual ~WaylandExtensions() = default; -+ -+ // Binds to the extensions interface(s). Can encapsulate binding of several -+ // interfaces, defined by |interface|. -+ virtual bool Bind(wl_registry* registry, -+ uint32_t name, -+ const char* interface, -+ uint32_t version) = 0; -+ -+ // Checks whether the extensions have bound shell object(s). -+ virtual bool HasShellObject() const = 0; -+}; -+ -+// Creates Wayland extensions. -+std::unique_ptr CreateWaylandExtensions( -+ WaylandConnection* connection); -+ -+} // namespace ui -+ -+#endif // UI_OZONE_PLATFORM_WAYLAND_HOST_WAYLAND_EXTENSIONS_H_ --- -2.39.2 - diff --git a/recipes-wam/cef/files/chromium/0005-agl-Start-using-agl-shell-version-4.patch b/recipes-wam/cef/files/chromium/0005-agl-Start-using-agl-shell-version-4.patch new file mode 100644 index 00000000..8b5a3812 --- /dev/null +++ b/recipes-wam/cef/files/chromium/0005-agl-Start-using-agl-shell-version-4.patch @@ -0,0 +1,348 @@ +From 98de96755da14f4cabf2447ce88a01cd3cdca770 Mon Sep 17 00:00:00 2001 +From: Roger Zanoni +Date: Sun, 2 Jul 2023 11:11:07 +0200 +Subject: [PATCH 05/33] [agl] Start using agl-shell version 4 + +Signed-off-by: Roger Zanoni +--- + ui/aura/agl/window_tree_host_agl.h | 1 + + ui/aura/agl/window_tree_host_platform_agl.cc | 4 + + ui/aura/agl/window_tree_host_platform_agl.h | 1 + + .../extensions/agl/host/agl_shell_wrapper.cc | 9 + + .../extensions/agl/host/agl_shell_wrapper.h | 1 + + .../agl/host/wayland_extensions_agl_impl.cc | 2 +- + .../extensions/agl/host/wayland_window_agl.cc | 10 + + .../extensions/agl/host/wayland_window_agl.h | 1 + + .../extensions/agl/protocol/agl-shell.xml | 185 +++++++++++++++++- + ui/platform_window/agl/platform_window_agl.h | 1 + + 10 files changed, 213 insertions(+), 2 deletions(-) + +diff --git a/ui/aura/agl/window_tree_host_agl.h b/ui/aura/agl/window_tree_host_agl.h +index b9aa451c8332e..c5213f75e623e 100644 +--- a/ui/aura/agl/window_tree_host_agl.h ++++ b/ui/aura/agl/window_tree_host_agl.h +@@ -36,6 +36,7 @@ class AURA_EXPORT WindowTreeHostAgl { + virtual void SetAglBackground() {} + virtual void SetAglPanel(uint32_t edge) {} + virtual bool IsSurfaceConfigured() const { return false; } ++ virtual void SetupActivationArea(uint32_t x, uint32_t y, uint32_t width, uint32_t height) {} + }; + + } // namespace aura +diff --git a/ui/aura/agl/window_tree_host_platform_agl.cc b/ui/aura/agl/window_tree_host_platform_agl.cc +index 67190e1da6973..b9bae3f3b9bdc 100644 +--- a/ui/aura/agl/window_tree_host_platform_agl.cc ++++ b/ui/aura/agl/window_tree_host_platform_agl.cc +@@ -51,4 +51,8 @@ bool WindowTreeHostPlatformAgl::IsSurfaceConfigured() const { + return window_tree_host_platform_->platform_window()->IsSurfaceConfigured(); + } + ++void WindowTreeHostPlatformAgl::SetupActivationArea(uint32_t x, uint32_t y, uint32_t width, uint32_t height) { ++ window_tree_host_platform_->platform_window()->SetupActivationArea(x, y, width, height); ++} ++ + } // namespace aura +diff --git a/ui/aura/agl/window_tree_host_platform_agl.h b/ui/aura/agl/window_tree_host_platform_agl.h +index e5a29fa1bfca3..30e160736e327 100644 +--- a/ui/aura/agl/window_tree_host_platform_agl.h ++++ b/ui/aura/agl/window_tree_host_platform_agl.h +@@ -42,6 +42,7 @@ class AURA_EXPORT WindowTreeHostPlatformAgl : public aura::WindowTreeHost { + void SetAglBackground() override; + void SetAglPanel(uint32_t edge) override; + bool IsSurfaceConfigured() const override; ++ void SetupActivationArea(uint32_t x, uint32_t y, uint32_t width, uint32_t height) override; + + private: + aura::WindowTreeHostPlatform* window_tree_host_platform_; +diff --git a/ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.cc b/ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.cc +index c74fa5d9cd221..0d5d79c4738df 100644 +--- a/ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.cc ++++ b/ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.cc +@@ -110,4 +110,13 @@ bool AglShellWrapper::WaitUntilBoundOk() { + return bound_ok_; + } + ++void AglShellWrapper::SetupActivationArea(uint32_t x, uint32_t y, uint32_t width, uint32_t height) { ++#ifdef AGL_SHELL_SET_ACTIVATE_REGION_SINCE_VERSION ++ wl_output* output = ++ connection_->wayland_output_manager()->GetPrimaryOutput()->get_output(); ++ agl_shell_set_activate_region(agl_shell_.get(), output, x, y, ++ width, height); ++#endif ++} ++ + } // namespace ui +diff --git a/ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.h b/ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.h +index 2ab765883057e..1c2074e1b4306 100644 +--- a/ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.h ++++ b/ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.h +@@ -39,6 +39,7 @@ class AglShellWrapper { + void SetAglPanel(WaylandWindow* window, uint32_t edge); + void SetAglBackground(WaylandWindow* window); + void SetAglReady(); ++ void SetupActivationArea(uint32_t x, uint32_t y, uint32_t width, uint32_t height); + bool WaitUntilBoundOk(); + + static void AglShellBoundOk(void* data, struct agl_shell*); +diff --git a/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.cc b/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.cc +index 075b3010ea8a1..8f9d938cdd1f6 100644 +--- a/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.cc ++++ b/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.cc +@@ -32,7 +32,7 @@ namespace ui { + namespace { + + constexpr uint32_t kMinAglShellExtensionVersion = 1; +-constexpr uint32_t kMaxAglShellExtensionVersion = 3; ++constexpr uint32_t kMaxAglShellExtensionVersion = 4; + + } // namespace + +diff --git a/ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.cc b/ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.cc +index 97b21ae537658..f92406d455de1 100644 +--- a/ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.cc ++++ b/ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.cc +@@ -83,4 +83,14 @@ void WaylandWindowAgl::SetAglPanel(uint32_t edge) { + connection()->ScheduleFlush(); + } + ++void WaylandWindowAgl::SetupActivationArea(uint32_t x, uint32_t y, uint32_t width, uint32_t height) { ++ if (!agl_extensions_->GetAglShell()) { ++ LOG(ERROR) << "Agl shell wrapper is not created"; ++ return; ++ } ++ ++ agl_extensions_->GetAglShell()->SetupActivationArea(x, y, width, height); ++ connection()->ScheduleFlush(); ++} ++ + } // namespace ui +diff --git a/ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.h b/ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.h +index b2a922604c001..d21d2d9387215 100644 +--- a/ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.h ++++ b/ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.h +@@ -39,6 +39,7 @@ class WaylandWindowAgl : public WaylandToplevelWindow { + void SetAglReady() override; + void SetAglBackground() override; + void SetAglPanel(uint32_t edge) override; ++ void SetupActivationArea(uint32_t x, uint32_t y, uint32_t width, uint32_t height) override; + + private: + WaylandExtensionsAgl* agl_extensions_; +diff --git a/ui/ozone/platform/wayland/extensions/agl/protocol/agl-shell.xml b/ui/ozone/platform/wayland/extensions/agl/protocol/agl-shell.xml +index ad5553d61f189..e010a80808c69 100644 +--- a/ui/ozone/platform/wayland/extensions/agl/protocol/agl-shell.xml ++++ b/ui/ozone/platform/wayland/extensions/agl/protocol/agl-shell.xml +@@ -22,7 +22,7 @@ + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. + +- ++ + + Starting with version 2 of the protocol, the client is required to wait + for the 'bound_ok' or 'bound_fail' events in order to proceed further. +@@ -174,6 +174,189 @@ + + + ++ ++ ++ A hint for the compositor to use a custom area, rather than ++ inferring the activation area. If any panels are used ++ the compositor computes the activation area by subtracting the ++ panels geometry area. If no panels are used then the entire output ++ is being used. This request changes that as to hint the compositor ++ to use the supplied rectangle and ignore any potential panels ++ that might been set-up previously. + ++ In order for this request to take effect it will need to happen ++ before the 'ready' request in order for the compositor to make use of it. ++ Note that any 'set_panel' request be will not be honored, if this request ++ has been called. ++ ++ The x and y coordinates use the top-left corner as the origin. The ++ rectangle area shouldn't exceed the output area, while an area smaller ++ than the output, would basically result in showing up the background ++ surface. ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Ask the compositor to hide the toplevel window for window ++ management purposes. Depending on the window role, this request ++ will either display the previously active window (or the background ++ in case there's no previously active surface) or temporarily (or ++ until a 'activate_app' is called upon) hide the surface. ++ ++ All the surfaces are identifiable by using the app_id, and no actions ++ are taken in case the app_id is not/was not present. ++ ++ See xdg_toplevel.set_app_id from the xdg-shell protocol for a ++ description of app_id. ++ ++ ++ ++ ++ ++ ++ Makes the application identified by app_id as floating. If the ++ application's window is already mapped, in a maximized, normal state, ++ it would transition to the float state. ++ ++ For applications that want to modify their own state, this request ++ must be done before the initial surface commit in order to take effect. ++ ++ If the application is already in floating state, this request wouldn't ++ do anything. ++ ++ There's no persistence of this request, once the application terminated ++ you'll to issue this request again for that particular app_id. ++ ++ The x, and y values would be initial position of the window where the ++ window surface will be placed. ++ ++ See xdg_toplevel.set_app_id from the xdg-shell protocol for a ++ description of app_id. ++ ++ ++ ++ ++ ++ ++ ++ ++ Returns the application identified by app_id as it was in the normal state. ++ This is useful to come back from other states to the maximized state, the ++ normal state applications are started. ++ ++ ++ ++ ++ ++ ++ Makes the application identified by app_id as fullscreen. If the ++ application's window is already mapped, in a maximized, normal state, ++ it would transition to the fullscreen state. ++ ++ For applications that want to modify their own state, this request ++ must be done before the initial surface commit in order to take effect. ++ ++ If the application is already in fullscreen state, this request wouldn't ++ do anything. ++ ++ There's no persistence of this request, once the application terminated ++ you'll to issue this request again for that particular app_id. ++ ++ See xdg_toplevel.set_app_id from the xdg-shell protocol for a ++ description of app_id. ++ ++ ++ ++ ++ ++ ++ This would allow the compositor to place an application on a particular ++ output, if that output is indeed available. This can happen before ++ application is started which would make the application start on that ++ particular output. If the application is already started it would ++ move the application to that output. ++ ++ There's no persistence of this request, once the application terminated ++ you'll need to issue this request again for that particular app_id. ++ ++ See xdg_toplevel.set_app_id from the xdg-shell protocol for a ++ description of app_id. ++ ++ ++ ++ ++ ++ ++ ++ Clients can use this event to be notified when an application ++ wants to be displayed on a certain output. This event is sent in ++ response to the set_app_output request. ++ ++ See xdg_toplevel.set_app_id from the xdg-shell protocol for a ++ description of app_id. ++ ++ ++ ++ ++ ++ ++ ++ ++ This interface allows another client bind to the agl_shell interface, ++ while there's another shell client already present. ++ ++ The client should first bind to this interface and then inform the ++ compositor with the 'doas_shell_client' request and it wants to bind to ++ the agl_shell interface. The client is still expected, if using a new ++ version of the agl_shell interface, to wait for the 'bound_ok' and ++ 'bound_fail' events before issueing any other requests/events. ++ ++ Note that this interface has its limitations, and the compositor would ++ still refuse the act for 'set_panel' or 'set_background' requests ++ of the agl_shell interface if there's already a client that used them. ++ ++ Any other requests or events should be delievered and handled as it would ++ a client bound to the agl_shell interface. ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Call the destructor once you're ready with agl_shell_ext interface. ++ This would reset the state and would make any requests made ++ on the agl_shell interface be terminated. The client would need ++ to bind again the agl_shell_ext and issue a 'doas_shell_client' ++ request. ++ ++ ++ ++ ++ ++ Prior to binding to agl_shell interface, this request would inform ++ the compositor that it wants to gain access the agl_shell interface. ++ The client is expected to wait for 'doas_shell_client_done' event and ++ check for a successful status before going further with binding to ++ the agl_shell interface. ++ ++ ++ ++ ++ ++ The client should check the status event to verify that the ++ compositor was able to handle the request. ++ ++ ++ + + +diff --git a/ui/platform_window/agl/platform_window_agl.h b/ui/platform_window/agl/platform_window_agl.h +index cab1f42272772..b1a6150fff950 100644 +--- a/ui/platform_window/agl/platform_window_agl.h ++++ b/ui/platform_window/agl/platform_window_agl.h +@@ -30,6 +30,7 @@ class PlatformWindowAgl { + virtual void SetAglBackground() {} + virtual void SetAglPanel(uint32_t edge) {} + virtual bool IsSurfaceConfigured() { return false; } ++ virtual void SetupActivationArea(uint32_t x, uint32_t y, uint32_t width, uint32_t height) {} + }; + + } // namespace ui +-- +2.42.1 + diff --git a/recipes-wam/cef/files/chromium/0006-Add-webos-agl-waylandwindow-window-tree-host-essenti.patch b/recipes-wam/cef/files/chromium/0006-Add-webos-agl-waylandwindow-window-tree-host-essenti.patch deleted file mode 100644 index 5ea8b83e..00000000 --- a/recipes-wam/cef/files/chromium/0006-Add-webos-agl-waylandwindow-window-tree-host-essenti.patch +++ /dev/null @@ -1,1379 +0,0 @@ -From a99977eb329ca0e114ad13ce31acc6ed38bb6a7b Mon Sep 17 00:00:00 2001 -From: Roger Zanoni -Date: Wed, 17 May 2023 21:25:53 +0200 -Subject: [PATCH 6/9] Add webos/agl waylandwindow/window tree host essential - parts - ---- - ui/aura/BUILD.gn | 7 ++ - ui/aura/agl/window_tree_host_agl.h | 42 +++++++++ - ui/aura/agl/window_tree_host_platform_agl.cc | 50 +++++++++++ - ui/aura/agl/window_tree_host_platform_agl.h | 51 +++++++++++ - ui/aura/window_tree_host.h | 5 +- - ui/aura/window_tree_host_platform.cc | 4 +- - ui/aura/window_tree_host_platform.h | 4 +- - ui/ozone/platform/wayland/BUILD.gn | 1 - - .../platform/wayland/extensions/agl/BUILD.gn | 2 + - .../agl/host/wayland_extensions_agl.h | 10 ++- - .../agl/host/wayland_extensions_agl_impl.cc | 11 ++- - .../agl/host/wayland_extensions_agl_impl.h | 9 ++ - .../extensions/agl/host/wayland_window_agl.cc | 86 +++++++++++++++++++ - .../extensions/agl/host/wayland_window_agl.h | 49 +++++++++++ - .../wayland/gpu/gl_surface_wayland.cc | 10 ++- - .../host/gtk_primary_selection_device.cc | 2 +- - .../gtk_primary_selection_device_manager.cc | 4 +- - .../wayland/host/proxy/wayland_proxy_impl.cc | 2 +- - .../wayland/host/wayland_connection.cc | 23 ++++- - .../wayland/host/wayland_connection.h | 9 +- - .../platform/wayland/host/wayland_cursor.cc | 4 +- - .../wayland/host/wayland_data_device.cc | 10 +-- - .../wayland/host/wayland_data_device_base.cc | 2 +- - .../host/wayland_data_drag_controller.cc | 2 +- - .../wayland/host/wayland_data_source.cc | 6 +- - ui/ozone/platform/wayland/host/wayland_drm.cc | 6 +- - .../wayland/host/wayland_extensions.h | 6 ++ - .../platform/wayland/host/wayland_keyboard.cc | 4 +- - .../platform/wayland/host/wayland_popup.cc | 4 +- - ui/ozone/platform/wayland/host/wayland_shm.cc | 2 +- - .../platform/wayland/host/wayland_surface.cc | 2 +- - .../wayland/host/wayland_toplevel_window.cc | 14 +-- - .../platform/wayland/host/wayland_window.cc | 14 +-- - .../platform/wayland/host/wayland_window.h | 2 + - .../host/wayland_window_drag_controller.cc | 2 +- - .../wayland/host/wayland_window_factory.cc | 15 ++++ - .../wayland/host/wayland_zwp_linux_dmabuf.cc | 4 +- - .../wayland/host/xdg_foreign_wrapper.cc | 4 +- - .../wayland/host/xdg_popup_wrapper_impl.cc | 2 +- - .../wayland/host/xdg_surface_wrapper_impl.cc | 2 +- - .../host/zwp_primary_selection_device.cc | 2 +- - .../zwp_primary_selection_device_manager.cc | 4 +- - .../host/zxdg_surface_v6_wrapper_impl.cc | 2 +- - ui/platform_window/agl/platform_window_agl.h | 36 ++++++++ - ui/platform_window/platform_window.h | 4 +- - 45 files changed, 471 insertions(+), 65 deletions(-) - create mode 100644 ui/aura/agl/window_tree_host_agl.h - create mode 100644 ui/aura/agl/window_tree_host_platform_agl.cc - create mode 100644 ui/aura/agl/window_tree_host_platform_agl.h - create mode 100644 ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.cc - create mode 100644 ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.h - create mode 100644 ui/platform_window/agl/platform_window_agl.h - -diff --git a/ui/aura/BUILD.gn b/ui/aura/BUILD.gn -index 1beb9003b2fad..f3d3e359a9704 100644 ---- a/ui/aura/BUILD.gn -+++ b/ui/aura/BUILD.gn -@@ -99,6 +99,13 @@ component("aura") { - "window_tree_host_platform.cc", - ] - -+ public += [ -+ "agl/window_tree_host_agl.h", -+ "agl/window_tree_host_platform_agl.h" -+ ] -+ -+ sources += [ "agl/window_tree_host_platform_agl.cc" ] -+ - friend = [ ":*" ] - - defines = [ "AURA_IMPLEMENTATION" ] -diff --git a/ui/aura/agl/window_tree_host_agl.h b/ui/aura/agl/window_tree_host_agl.h -new file mode 100644 -index 0000000000000..858a078d939d0 ---- /dev/null -+++ b/ui/aura/agl/window_tree_host_agl.h -@@ -0,0 +1,42 @@ -+// Copyright 2021 LG Electronics, Inc. -+// -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// http://www.apache.org/licenses/LICENSE-2.0 -+// -+// Unless required by applicable law or agreed to in writing, software -+// distributed under the License is distributed on an "AS IS" BASIS, -+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -+// See the License for the specific language governing permissions and -+// limitations under the License. -+// -+// SPDX-License-Identifier: Apache-2.0 -+ -+#ifndef UI_AURA_AGL_WINDOW_TREE_HOST_AGL_H_ -+#define UI_AURA_AGL_WINDOW_TREE_HOST_AGL_H_ -+ -+#include -+ -+#include "ui/aura/aura_export.h" -+ -+namespace aura { -+ -+class AURA_EXPORT WindowTreeHostAgl { -+ public: -+ WindowTreeHostAgl() = default; -+ WindowTreeHostAgl(const WindowTreeHostAgl&) = delete; -+ WindowTreeHostAgl& operator=(const WindowTreeHostAgl&) = delete; -+ ~WindowTreeHostAgl() = default; -+ -+ virtual void SetAglActivateApp(const std::string& app) {} -+ virtual void SetAglAppId(const std::string& title) {} -+ virtual void SetAglReady() {} -+ virtual void SetAglBackground() {} -+ virtual void SetAglPanel(uint32_t edge) {} -+}; -+ -+} // namespace aura -+ -+#endif // UI_AURA_AGL_WINDOW_TREE_HOST_AGL_H_ -diff --git a/ui/aura/agl/window_tree_host_platform_agl.cc b/ui/aura/agl/window_tree_host_platform_agl.cc -new file mode 100644 -index 0000000000000..e34595fe0ed9c ---- /dev/null -+++ b/ui/aura/agl/window_tree_host_platform_agl.cc -@@ -0,0 +1,50 @@ -+// Copyright 2021 LG Electronics, Inc. -+// -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// http://www.apache.org/licenses/LICENSE-2.0 -+// -+// Unless required by applicable law or agreed to in writing, software -+// distributed under the License is distributed on an "AS IS" BASIS, -+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -+// See the License for the specific language governing permissions and -+// limitations under the License. -+// -+// SPDX-License-Identifier: Apache-2.0 -+ -+#include "ui/aura/agl/window_tree_host_platform_agl.h" -+ -+#include "ui/aura/window_tree_host_platform.h" -+#include "ui/platform_window/platform_window.h" -+ -+namespace aura { -+ -+WindowTreeHostPlatformAgl::WindowTreeHostPlatformAgl( -+ std::unique_ptr window, -+ aura::WindowTreeHostPlatform* window_tree_host_platform) -+ : aura::WindowTreeHost(std::move(window)), -+ window_tree_host_platform_(window_tree_host_platform) {} -+ -+void WindowTreeHostPlatformAgl::SetAglActivateApp(const std::string& app) { -+ window_tree_host_platform_->platform_window()->SetAglActivateApp(app); -+} -+ -+void WindowTreeHostPlatformAgl::SetAglAppId(const std::string& title) { -+ window_tree_host_platform_->platform_window()->SetAglAppId(title); -+} -+ -+void WindowTreeHostPlatformAgl::SetAglReady() { -+ window_tree_host_platform_->platform_window()->SetAglReady(); -+} -+ -+void WindowTreeHostPlatformAgl::SetAglBackground() { -+ window_tree_host_platform_->platform_window()->SetAglBackground(); -+} -+ -+void WindowTreeHostPlatformAgl::SetAglPanel(uint32_t edge) { -+ window_tree_host_platform_->platform_window()->SetAglPanel(edge); -+} -+ -+} // namespace aura -diff --git a/ui/aura/agl/window_tree_host_platform_agl.h b/ui/aura/agl/window_tree_host_platform_agl.h -new file mode 100644 -index 0000000000000..181eefae346f7 ---- /dev/null -+++ b/ui/aura/agl/window_tree_host_platform_agl.h -@@ -0,0 +1,51 @@ -+// Copyright 2021 LG Electronics, Inc. -+// -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// http://www.apache.org/licenses/LICENSE-2.0 -+// -+// Unless required by applicable law or agreed to in writing, software -+// distributed under the License is distributed on an "AS IS" BASIS, -+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -+// See the License for the specific language governing permissions and -+// limitations under the License. -+// -+// SPDX-License-Identifier: Apache-2.0 -+ -+#ifndef UI_AURA_AGL_WINDOW_TREE_HOST_PLATFORM_AGL_H_ -+#define UI_AURA_AGL_WINDOW_TREE_HOST_PLATFORM_AGL_H_ -+ -+#include -+ -+#include "ui/aura/aura_export.h" -+#include "ui/aura/window_tree_host.h" -+ -+namespace aura { -+ -+class Window; -+class WindowTreeHostPlatform; -+ -+class AURA_EXPORT WindowTreeHostPlatformAgl : public aura::WindowTreeHost { -+ public: -+ explicit WindowTreeHostPlatformAgl( -+ std::unique_ptr window, -+ aura::WindowTreeHostPlatform* window_tree_host_platform); -+ WindowTreeHostPlatformAgl(const WindowTreeHostPlatformAgl&) = delete; -+ WindowTreeHostPlatformAgl& operator=(const WindowTreeHostPlatformAgl&) = delete; -+ ~WindowTreeHostPlatformAgl() override = default; -+ -+ void SetAglActivateApp(const std::string& app) override; -+ void SetAglAppId(const std::string& title) override; -+ void SetAglReady() override; -+ void SetAglBackground() override; -+ void SetAglPanel(uint32_t edge) override; -+ -+ private: -+ aura::WindowTreeHostPlatform* window_tree_host_platform_; -+}; -+ -+} // namespace aura -+ -+#endif // UI_AURA_AGL_WINDOW_TREE_HOST_PLATFORM_AGL_H_ -diff --git a/ui/aura/window_tree_host.h b/ui/aura/window_tree_host.h -index 0bdb86be66ba3..b7696e6373284 100644 ---- a/ui/aura/window_tree_host.h -+++ b/ui/aura/window_tree_host.h -@@ -30,6 +30,8 @@ - #include "ui/gfx/native_widget_types.h" - #include "ui/gfx/overlay_transform.h" - -+#include "ui/aura/agl/window_tree_host_agl.h" -+ - namespace gfx { - class Point; - class Rect; -@@ -66,7 +68,8 @@ class WindowTreeHostObserver; - class AURA_EXPORT WindowTreeHost : public ui::ImeKeyEventDispatcher, - public ui::EventSource, - public display::DisplayObserver, -- public ui::CompositorObserver { -+ public ui::CompositorObserver, -+ public WindowTreeHostAgl { - public: - // VideoCaptureLock ensures state necessary for capturing video remains in - // effect. For example, this may force keeping the compositor visible when -diff --git a/ui/aura/window_tree_host_platform.cc b/ui/aura/window_tree_host_platform.cc -index 4c31e785d7692..cecd1f4fc03fd 100644 ---- a/ui/aura/window_tree_host_platform.cc -+++ b/ui/aura/window_tree_host_platform.cc -@@ -51,7 +51,7 @@ std::unique_ptr WindowTreeHost::Create( - WindowTreeHostPlatform::WindowTreeHostPlatform( - ui::PlatformWindowInitProperties properties, - std::unique_ptr window) -- : WindowTreeHost(std::move(window)) { -+ : WindowTreeHostPlatformAgl(std::move(window), this) { - size_in_pixels_ = properties.bounds.size(); - CreateCompositor(false, false, properties.enable_compositing_based_throttling, - properties.compositor_memory_limit_mb); -@@ -59,7 +59,7 @@ WindowTreeHostPlatform::WindowTreeHostPlatform( - } - - WindowTreeHostPlatform::WindowTreeHostPlatform(std::unique_ptr window) -- : WindowTreeHost(std::move(window)), -+ : WindowTreeHostPlatformAgl(std::move(window), this), - widget_(gfx::kNullAcceleratedWidget), - current_cursor_(ui::mojom::CursorType::kNull) {} - -diff --git a/ui/aura/window_tree_host_platform.h b/ui/aura/window_tree_host_platform.h -index 3a9232743bda3..6c1e3a424afd4 100644 ---- a/ui/aura/window_tree_host_platform.h -+++ b/ui/aura/window_tree_host_platform.h -@@ -15,6 +15,8 @@ - #include "ui/gfx/native_widget_types.h" - #include "ui/platform_window/platform_window_delegate.h" - -+#include "ui/aura/agl/window_tree_host_platform_agl.h" -+ - namespace ui { - enum class DomCode; - class PlatformWindow; -@@ -26,7 +28,7 @@ namespace aura { - - // The unified WindowTreeHost implementation for platforms - // that implement PlatformWindow. --class AURA_EXPORT WindowTreeHostPlatform : public WindowTreeHost, -+class AURA_EXPORT WindowTreeHostPlatform : public WindowTreeHostPlatformAgl, - public ui::PlatformWindowDelegate { - public: - explicit WindowTreeHostPlatform(ui::PlatformWindowInitProperties properties, -diff --git a/ui/ozone/platform/wayland/BUILD.gn b/ui/ozone/platform/wayland/BUILD.gn -index 1a2f889dc8947..86ff8269af9e0 100644 ---- a/ui/ozone/platform/wayland/BUILD.gn -+++ b/ui/ozone/platform/wayland/BUILD.gn -@@ -409,7 +409,6 @@ source_set("wayland") { - - sources += [ - "host/wayland_extensions.h", -- "host/wayland_extensions_stub.cc", - ] - - deps += [ "extensions/agl" ] -diff --git a/ui/ozone/platform/wayland/extensions/agl/BUILD.gn b/ui/ozone/platform/wayland/extensions/agl/BUILD.gn -index ce289bc5dbbca..01c590e53df58 100644 ---- a/ui/ozone/platform/wayland/extensions/agl/BUILD.gn -+++ b/ui/ozone/platform/wayland/extensions/agl/BUILD.gn -@@ -31,6 +31,8 @@ source_set("agl") { - "host/wayland_extensions_agl.h", - "host/wayland_extensions_agl_impl.cc", - "host/wayland_extensions_agl_impl.h", -+ "host/wayland_window_agl.cc", -+ "host/wayland_window_agl.h", - ] - - deps = [ -diff --git a/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl.h b/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl.h -index df42fc00c84da..295154dfb437d 100644 ---- a/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl.h -+++ b/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl.h -@@ -20,6 +20,9 @@ - namespace ui { - - class AglShellWrapper; -+class PlatformWindowDelegate; -+class WaylandConnection; -+class WaylandWindow; - - // AGL extensions implementation for webOS/Lite - class WaylandExtensionsAgl { -@@ -29,9 +32,14 @@ class WaylandExtensionsAgl { - WaylandExtensionsAgl& operator=(const WaylandExtensionsAgl&) = delete; - virtual ~WaylandExtensionsAgl() = default; - -+ virtual std::unique_ptr CreateWaylandWindow( -+ PlatformWindowDelegate* delegate, -+ WaylandConnection* connection) = 0; -+ -+ - virtual AglShellWrapper* GetAglShell() = 0; - }; - - } // namespace ui - --#endif // UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_HOST_WAYLAND_EXTENSIONS_AGL_H_ -\ No newline at end of file -+#endif // UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_HOST_WAYLAND_EXTENSIONS_AGL_H_ -diff --git a/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.cc b/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.cc -index 26a5f0550c302..87376cbb8a9d3 100644 ---- a/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.cc -+++ b/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.cc -@@ -22,6 +22,7 @@ - #include "base/logging.h" - #include "ui/base/ui_base_switches.h" - #include "ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.h" -+#include "ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.h" - #include "ui/ozone/platform/wayland/extensions/agl/common/wayland_object_agl.h" - #include "ui/ozone/platform/wayland/host/wayland_connection.h" - -@@ -68,8 +69,8 @@ bool WaylandExtensionsAglImpl::Bind(wl_registry* registry, - agl_shell_ = - std::make_unique(aglshell.release(), connection_); - -- LOG(INFO) << "Waiting until bound..."; -- return agl_shell_->WaitUntilBoundOk(); -+ //LOG(INFO) << "Waiting until bound..."; -+ //return agl_shell_->WaitUntilBoundOk(); - } else { - LOG(INFO) << "Cant bind."; - } -@@ -85,6 +86,12 @@ AglShellWrapper* WaylandExtensionsAglImpl::GetAglShell() { - return agl_shell_.get(); - } - -+std::unique_ptr WaylandExtensionsAglImpl::CreateWaylandWindow( -+ PlatformWindowDelegate* delegate, -+ WaylandConnection* connection) { -+ return std::make_unique(delegate, connection, this); -+} -+ - std::unique_ptr CreateWaylandExtensions( - WaylandConnection* connection) { - return std::make_unique(connection); -diff --git a/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.h b/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.h -index f6cbabe99ed0b..3218589f1a09a 100644 ---- a/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.h -+++ b/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.h -@@ -17,12 +17,17 @@ - #ifndef UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_HOST_WAYLAND_EXTENSIONS_AGL_IMPL_H_ - #define UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_HOST_WAYLAND_EXTENSIONS_AGL_IMPL_H_ - -+#include -+ - #include "ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl.h" - #include "ui/ozone/platform/wayland/host/wayland_extensions.h" - - namespace ui { - - class AglShellWrapper; -+class PlatformWindowDelegate; -+class WaylandConnection; -+class WaylandWindow; - - // AGL extension implementation for webOS/Lite - class WaylandExtensionsAglImpl : public WaylandExtensions, -@@ -44,6 +49,10 @@ class WaylandExtensionsAglImpl : public WaylandExtensions, - // WaylandExtensionsAgl overrides - AglShellWrapper* GetAglShell() override; - -+ std::unique_ptr CreateWaylandWindow( -+ PlatformWindowDelegate* delegate, -+ WaylandConnection* connection) override; -+ - private: - std::unique_ptr agl_shell_; - WaylandConnection* connection_; -diff --git a/ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.cc b/ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.cc -new file mode 100644 -index 0000000000000..97b21ae537658 ---- /dev/null -+++ b/ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.cc -@@ -0,0 +1,86 @@ -+// Copyright 2021 LG Electronics, Inc. -+// -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// http://www.apache.org/licenses/LICENSE-2.0 -+// -+// Unless required by applicable law or agreed to in writing, software -+// distributed under the License is distributed on an "AS IS" BASIS, -+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -+// See the License for the specific language governing permissions and -+// limitations under the License. -+// -+// SPDX-License-Identifier: Apache-2.0 -+ -+#include "ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.h" -+ -+#include "base/logging.h" -+#include "ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.h" -+#include "ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl.h" -+#include "ui/ozone/platform/wayland/host/shell_surface_wrapper.h" -+#include "ui/ozone/platform/wayland/host/shell_toplevel_wrapper.h" -+#include "ui/ozone/platform/wayland/host/wayland_connection.h" -+ -+namespace ui { -+ -+WaylandWindowAgl::WaylandWindowAgl(PlatformWindowDelegate* delegate, -+ WaylandConnection* connection, -+ WaylandExtensionsAgl* agl_extensions) -+ : WaylandToplevelWindow(delegate, connection), -+ agl_extensions_(agl_extensions) {} -+ -+WaylandWindowAgl::~WaylandWindowAgl() = default; -+ -+void WaylandWindowAgl::SetAglActivateApp(const std::string& app) { -+ if (!agl_extensions_->GetAglShell()) { -+ LOG(ERROR) << "Agl shell wrapper is not created"; -+ return; -+ } -+ -+ agl_extensions_->GetAglShell()->SetAglActivateApp(app); -+ connection()->ScheduleFlush(); -+} -+ -+void WaylandWindowAgl::SetAglAppId(const std::string& title) { -+ if (!shell_toplevel()) { -+ LOG(ERROR) << "Shell toplevel is not created"; -+ return; -+ } -+ -+ shell_toplevel()->SetAppId(title); -+ connection()->ScheduleFlush(); -+} -+ -+void WaylandWindowAgl::SetAglReady() { -+ if (!agl_extensions_->GetAglShell()) { -+ LOG(ERROR) << "Agl shell wrapper is not created"; -+ return; -+ } -+ -+ agl_extensions_->GetAglShell()->SetAglReady(); -+ connection()->ScheduleFlush(); -+} -+ -+void WaylandWindowAgl::SetAglBackground() { -+ if (!agl_extensions_->GetAglShell()) { -+ LOG(ERROR) << "Agl shell wrapper is not created"; -+ return; -+ } -+ -+ agl_extensions_->GetAglShell()->SetAglBackground(this); -+ connection()->ScheduleFlush(); -+} -+ -+void WaylandWindowAgl::SetAglPanel(uint32_t edge) { -+ if (!agl_extensions_->GetAglShell()) { -+ LOG(ERROR) << "Agl shell wrapper is not created"; -+ return; -+ } -+ -+ agl_extensions_->GetAglShell()->SetAglPanel(this, edge); -+ connection()->ScheduleFlush(); -+} -+ -+} // namespace ui -diff --git a/ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.h b/ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.h -new file mode 100644 -index 0000000000000..b2a922604c001 ---- /dev/null -+++ b/ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.h -@@ -0,0 +1,49 @@ -+// Copyright 2021 LG Electronics, Inc. -+// -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// http://www.apache.org/licenses/LICENSE-2.0 -+// -+// Unless required by applicable law or agreed to in writing, software -+// distributed under the License is distributed on an "AS IS" BASIS, -+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -+// See the License for the specific language governing permissions and -+// limitations under the License. -+// -+// SPDX-License-Identifier: Apache-2.0 -+// -+ -+#ifndef UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_HOST_WAYLAND_WINDOW_AGL_H_ -+#define UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_HOST_WAYLAND_WINDOW_AGL_H_ -+ -+#include "ui/ozone/platform/wayland/host/wayland_toplevel_window.h" -+ -+namespace ui { -+ -+class WaylandExtensionsAgl; -+ -+class WaylandWindowAgl : public WaylandToplevelWindow { -+ public: -+ explicit WaylandWindowAgl(PlatformWindowDelegate* delegate, -+ WaylandConnection* connection, -+ WaylandExtensionsAgl* agl_extensions); -+ WaylandWindowAgl(const WaylandWindowAgl&) = delete; -+ WaylandWindowAgl& operator=(const WaylandWindowAgl&) = delete; -+ ~WaylandWindowAgl() override; -+ -+ // Overrides PlatformWindowAgl -+ void SetAglActivateApp(const std::string& app) override; -+ void SetAglAppId(const std::string& title) override; -+ void SetAglReady() override; -+ void SetAglBackground() override; -+ void SetAglPanel(uint32_t edge) override; -+ -+ private: -+ WaylandExtensionsAgl* agl_extensions_; -+}; -+ -+} // namespace ui -+ -+#endif // UI_OZONE_PLATFORM_WAYLAND_EXTENSIONS_AGL_HOST_WAYLAND_WINDOW_AGL_H_ -diff --git a/ui/ozone/platform/wayland/gpu/gl_surface_wayland.cc b/ui/ozone/platform/wayland/gpu/gl_surface_wayland.cc -index 1cef91bb39912..26ad374718005 100644 ---- a/ui/ozone/platform/wayland/gpu/gl_surface_wayland.cc -+++ b/ui/ozone/platform/wayland/gpu/gl_surface_wayland.cc -@@ -89,8 +89,14 @@ gfx::SwapResult GLSurfaceWayland::SwapBuffers(PresentationCallback callback, - return scoped_swap_buffers.result(); - } - window_->root_surface()->set_surface_buffer_scale(scale_factor_); -- return gl::NativeViewGLSurfaceEGL::SwapBuffers(std::move(callback), -- std::move(data)); -+ gfx::SwapResult result = gl::NativeViewGLSurfaceEGL::SwapBuffers(std::move(callback), -+ std::move(data)); -+ -+ if (window_) { -+ window_->OnSurfaceContentChanged(); -+ } -+ -+ return result; - } - - gfx::SwapResult GLSurfaceWayland::PostSubBuffer(int x, -diff --git a/ui/ozone/platform/wayland/host/gtk_primary_selection_device.cc b/ui/ozone/platform/wayland/host/gtk_primary_selection_device.cc -index 43445ea2442b4..94f0739599142 100644 ---- a/ui/ozone/platform/wayland/host/gtk_primary_selection_device.cc -+++ b/ui/ozone/platform/wayland/host/gtk_primary_selection_device.cc -@@ -31,7 +31,7 @@ void GtkPrimarySelectionDevice::SetSelectionSource( - auto* data_source = source ? source->data_source() : nullptr; - gtk_primary_selection_device_set_selection(data_device_.get(), data_source, - serial); -- connection()->Flush(); -+ connection()->ScheduleFlush(); - } - - // static -diff --git a/ui/ozone/platform/wayland/host/gtk_primary_selection_device_manager.cc b/ui/ozone/platform/wayland/host/gtk_primary_selection_device_manager.cc -index 2c39409808128..1e07ae6009776 100644 ---- a/ui/ozone/platform/wayland/host/gtk_primary_selection_device_manager.cc -+++ b/ui/ozone/platform/wayland/host/gtk_primary_selection_device_manager.cc -@@ -66,7 +66,7 @@ GtkPrimarySelectionDevice* GtkPrimarySelectionDeviceManager::GetDevice() { - connection_, - gtk_primary_selection_device_manager_get_device( - device_manager_.get(), connection_->seat()->wl_object())); -- connection_->Flush(); -+ connection_->ScheduleFlush(); - } - DCHECK(device_); - return device_.get(); -@@ -77,7 +77,7 @@ GtkPrimarySelectionDeviceManager::CreateSource( - GtkPrimarySelectionSource::Delegate* delegate) { - auto* data_source = - gtk_primary_selection_device_manager_create_source(device_manager_.get()); -- connection_->Flush(); -+ connection_->ScheduleFlush(); - return std::make_unique(data_source, connection_, - delegate); - } -diff --git a/ui/ozone/platform/wayland/host/proxy/wayland_proxy_impl.cc b/ui/ozone/platform/wayland/host/proxy/wayland_proxy_impl.cc -index dee90b1aaaf72..caad70e0ab1cb 100644 ---- a/ui/ozone/platform/wayland/host/proxy/wayland_proxy_impl.cc -+++ b/ui/ozone/platform/wayland/host/proxy/wayland_proxy_impl.cc -@@ -75,7 +75,7 @@ void WaylandProxyImpl::DestroyShmForWlBuffer(wl_buffer* buffer) { - } - - void WaylandProxyImpl::FlushForTesting() { -- connection_->Flush(); -+ connection_->ScheduleFlush(); - } - - ui::PlatformWindowType WaylandProxyImpl::GetWindowType( -diff --git a/ui/ozone/platform/wayland/host/wayland_connection.cc b/ui/ozone/platform/wayland/host/wayland_connection.cc -index 93427c52e1284..e2d45a6f5dc67 100644 ---- a/ui/ozone/platform/wayland/host/wayland_connection.cc -+++ b/ui/ozone/platform/wayland/host/wayland_connection.cc -@@ -285,6 +285,20 @@ bool WaylandConnection::Initialize() { - return true; - } - -+void WaylandConnection::ScheduleFlush() { -+ // When we are in tests, the message loop is set later when the -+ // initialization of the OzonePlatform complete. Thus, just -+ // flush directly. This doesn't happen in normal run. -+ if (!base::CurrentUIThread::IsSet()) { -+ Flush(); -+ } else if (!scheduled_flush_) { -+ base::ThreadTaskRunnerHandle::Get()->PostTask( -+ FROM_HERE, -+ base::BindOnce(&WaylandConnection::Flush, base::Unretained(this))); -+ scheduled_flush_ = true; -+ } -+} -+ - void WaylandConnection::RoundTripQueue() { - if (roundtrip_closure_for_testing_) { - roundtrip_closure_for_testing_.Run(); -@@ -354,6 +368,7 @@ void WaylandConnection::RegisterGlobalObjectFactory( - - void WaylandConnection::Flush() { - wl_display_flush(display_.get()); -+ scheduled_flush_ = false; - } - - void WaylandConnection::UpdateInputDevices() { -@@ -441,7 +456,7 @@ void WaylandConnection::Global(void* data, - - auto factory_it = connection->global_object_factories_.find(interface); - if (connection->extensions_->Bind(registry, name, interface, version)) { -- DVLOG(1) << "Successfully bound to " << interface; -+ LOG(INFO) << "Successfully bound to " << interface; - } else if (factory_it != connection->global_object_factories_.end()) { - (*factory_it->second)(connection, registry, name, interface, version); - } else if (!connection->compositor_ && -@@ -609,7 +624,7 @@ void WaylandConnection::Global(void* data, - - connection->available_globals_.emplace_back(interface, version); - -- connection->Flush(); -+ connection->ScheduleFlush(); - } - - base::TimeTicks WaylandConnection::ConvertPresentationTime(uint32_t tv_sec_hi, -@@ -674,14 +689,14 @@ void WaylandConnection::PingV6(void* data, - uint32_t serial) { - WaylandConnection* connection = static_cast(data); - zxdg_shell_v6_pong(shell_v6, serial); -- connection->Flush(); -+ connection->ScheduleFlush(); - } - - // static - void WaylandConnection::Ping(void* data, xdg_wm_base* shell, uint32_t serial) { - WaylandConnection* connection = static_cast(data); - xdg_wm_base_pong(shell, serial); -- connection->Flush(); -+ connection->ScheduleFlush(); - } - - // static -diff --git a/ui/ozone/platform/wayland/host/wayland_connection.h b/ui/ozone/platform/wayland/host/wayland_connection.h -index dfd1d060c73f2..d2d7a866d3af8 100644 ---- a/ui/ozone/platform/wayland/host/wayland_connection.h -+++ b/ui/ozone/platform/wayland/host/wayland_connection.h -@@ -94,8 +94,8 @@ class WaylandConnection { - - bool Initialize(); - -- // Immediately flushes the Wayland display. -- void Flush(); -+ // Schedules a flush of the Wayland connection. -+ void ScheduleFlush(); - - // Calls wl_display_roundtrip_queue. Might be required during initialization - // of some objects that should block until they are initialized. -@@ -340,6 +340,9 @@ class WaylandConnection { - friend class ZwpIdleInhibitManager; - friend class ZwpPrimarySelectionDeviceManager; - -+ // Immediately flushes the Wayland display. -+ void Flush(); -+ - void RegisterGlobalObjectFactory(const char* interface_name, - wl::GlobalObjectFactory factory); - -@@ -467,6 +470,8 @@ class WaylandConnection { - // sizes. - bool surface_submission_in_pixel_coordinates_ = false; - -+ bool scheduled_flush_ = false; -+ - wl::SerialTracker serial_tracker_; - - // Global Wayland interfaces available in the current session, with their -diff --git a/ui/ozone/platform/wayland/host/wayland_cursor.cc b/ui/ozone/platform/wayland/host/wayland_cursor.cc -index 891ca2e5e1f3c..48ac8b8925ddd 100644 ---- a/ui/ozone/platform/wayland/host/wayland_cursor.cc -+++ b/ui/ozone/platform/wayland/host/wayland_cursor.cc -@@ -109,7 +109,7 @@ void WaylandCursor::HideCursor() { - wl_surface_attach(pointer_surface_.get(), nullptr, 0, 0); - wl_surface_commit(pointer_surface_.get()); - -- connection_->Flush(); -+ connection_->ScheduleFlush(); - - if (listener_) - listener_->OnCursorBufferAttached(nullptr); -@@ -160,7 +160,7 @@ void WaylandCursor::AttachAndCommit(wl_buffer* buffer, - wl_surface_attach(pointer_surface_.get(), buffer, 0, 0); - wl_surface_commit(pointer_surface_.get()); - -- connection_->Flush(); -+ connection_->ScheduleFlush(); - } - - } // namespace ui -diff --git a/ui/ozone/platform/wayland/host/wayland_data_device.cc b/ui/ozone/platform/wayland/host/wayland_data_device.cc -index a1d691b6315ac..ccc7bfb0305a8 100644 ---- a/ui/ozone/platform/wayland/host/wayland_data_device.cc -+++ b/ui/ozone/platform/wayland/host/wayland_data_device.cc -@@ -46,7 +46,7 @@ void WaylandDataDevice::StartDrag(const WaylandDataSource& data_source, - origin_window.root_surface()->surface(), - icon_surface, serial); - drag_delegate_->DrawIcon(); -- connection()->Flush(); -+ connection()->ScheduleFlush(); - } - - void WaylandDataDevice::ResetDragDelegate() { -@@ -78,7 +78,7 @@ void WaylandDataDevice::SetSelectionSource(WaylandDataSource* source, - uint32_t serial) { - auto* data_source = source ? source->data_source() : nullptr; - wl_data_device_set_selection(data_device_.get(), data_source, serial); -- connection()->Flush(); -+ connection()->ScheduleFlush(); - } - - void WaylandDataDevice::ReadDragDataFromFD(base::ScopedFD fd, -@@ -140,7 +140,7 @@ void WaylandDataDevice::OnEnter(void* data, - gfx::PointF(wl_fixed_to_double(x), wl_fixed_to_double(y)), window); - self->drag_delegate_->OnDragEnter(window, point, serial); - -- self->connection()->Flush(); -+ self->connection()->ScheduleFlush(); - } - - void WaylandDataDevice::OnMotion(void* data, -@@ -161,7 +161,7 @@ void WaylandDataDevice::OnDrop(void* data, wl_data_device* data_device) { - auto* self = static_cast(data); - if (self->drag_delegate_) { - self->drag_delegate_->OnDragDrop(); -- self->connection()->Flush(); -+ self->connection()->ScheduleFlush(); - } - - // There are buggy Exo versions, which send 'drop' event (even for -@@ -178,7 +178,7 @@ void WaylandDataDevice::OnLeave(void* data, wl_data_device* data_device) { - auto* self = static_cast(data); - if (self->drag_delegate_) { - self->drag_delegate_->OnDragLeave(); -- self->connection()->Flush(); -+ self->connection()->ScheduleFlush(); - } - self->ResetDragDelegateIfNeeded(); - } -diff --git a/ui/ozone/platform/wayland/host/wayland_data_device_base.cc b/ui/ozone/platform/wayland/host/wayland_data_device_base.cc -index 4287f72617708..d0c077c2e69ea 100644 ---- a/ui/ozone/platform/wayland/host/wayland_data_device_base.cc -+++ b/ui/ozone/platform/wayland/host/wayland_data_device_base.cc -@@ -72,7 +72,7 @@ void WaylandDataDeviceBase::RegisterDeferredReadCallback() { - - wl_callback_add_listener(deferred_read_callback_.get(), &kListener, this); - -- connection_->Flush(); -+ connection_->ScheduleFlush(); - } - - void WaylandDataDeviceBase::RegisterDeferredReadClosure( -diff --git a/ui/ozone/platform/wayland/host/wayland_data_drag_controller.cc b/ui/ozone/platform/wayland/host/wayland_data_drag_controller.cc -index f2123ec8bac3f..11750a3f55da2 100644 ---- a/ui/ozone/platform/wayland/host/wayland_data_drag_controller.cc -+++ b/ui/ozone/platform/wayland/host/wayland_data_drag_controller.cc -@@ -217,7 +217,7 @@ void WaylandDataDragController::OnDragSurfaceFrame(void* data, - DCHECK(self); - self->DrawIconInternal(); - self->icon_frame_callback_.reset(); -- self->connection_->Flush(); -+ self->connection_->ScheduleFlush(); - } - - void WaylandDataDragController::DrawIconInternal() { -diff --git a/ui/ozone/platform/wayland/host/wayland_data_source.cc b/ui/ozone/platform/wayland/host/wayland_data_source.cc -index de1e110f73b11..e24f31b1a8f52 100644 ---- a/ui/ozone/platform/wayland/host/wayland_data_source.cc -+++ b/ui/ozone/platform/wayland/host/wayland_data_source.cc -@@ -119,7 +119,7 @@ void DataSource::Offer( - const std::vector& mime_types) { - for (auto& mime_type : mime_types) - wl_data_source_offer(data_source_.get(), mime_type.c_str()); -- connection_->Flush(); -+ connection_->ScheduleFlush(); - } - - template -@@ -154,7 +154,7 @@ void DataSource::Offer( - const std::vector& mime_types) { - for (const auto& mime_type : mime_types) - gtk_primary_selection_source_offer(data_source_.get(), mime_type.c_str()); -- connection_->Flush(); -+ connection_->ScheduleFlush(); - } - - template <> -@@ -173,7 +173,7 @@ void DataSource::Offer( - for (const auto& mime_type : mime_types) - zwp_primary_selection_source_v1_offer(data_source_.get(), - mime_type.c_str()); -- connection_->Flush(); -+ connection_->ScheduleFlush(); - } - - template class DataSource; -diff --git a/ui/ozone/platform/wayland/host/wayland_drm.cc b/ui/ozone/platform/wayland/host/wayland_drm.cc -index 7edc0da798b9b..280350d9286c0 100644 ---- a/ui/ozone/platform/wayland/host/wayland_drm.cc -+++ b/ui/ozone/platform/wayland/host/wayland_drm.cc -@@ -57,7 +57,7 @@ WaylandDrm::WaylandDrm(wl_drm* drm, WaylandConnection* connection) - &Capabilities, - }; - wl_drm_add_listener(wl_drm_.get(), &kDrmListener, this); -- connection_->Flush(); -+ connection_->ScheduleFlush(); - - // A roundtrip after binding guarantees that the client has received all - // supported formats and capabilities of the device. -@@ -91,7 +91,7 @@ void WaylandDrm::CreateBuffer(const base::ScopedFD& fd, - wl::Object buffer(wl_drm_create_prime_buffer( - wl_drm_.get(), fd.get(), size.width(), size.height(), format, offset[0], - stride[0], offset[1], stride[1], offset[2], stride[2])); -- connection_->Flush(); -+ connection_->ScheduleFlush(); - - std::move(callback).Run(std::move(buffer)); - } -@@ -145,7 +145,7 @@ void WaylandDrm::Authenticate(const char* drm_device_path) { - } - - wl_drm_authenticate(wl_drm_.get(), magic); -- connection_->Flush(); -+ connection_->ScheduleFlush(); - - // Do the roundtrip to make sure the server processes this request and - // authenticates us. -diff --git a/ui/ozone/platform/wayland/host/wayland_extensions.h b/ui/ozone/platform/wayland/host/wayland_extensions.h -index 3bd2fd7a211ae..f6ed47507d217 100644 ---- a/ui/ozone/platform/wayland/host/wayland_extensions.h -+++ b/ui/ozone/platform/wayland/host/wayland_extensions.h -@@ -25,7 +25,9 @@ namespace ui { - - class ShellToplevelWrapper; - class ShellPopupWrapper; -+class PlatformWindowDelegate; - class WaylandConnection; -+class WaylandWindow; - - // Wayland extensions abstract interface to support extending of the Wayland - // protocol. Inherit it to provide your own Wayland extensions implementation. -@@ -45,6 +47,10 @@ class WaylandExtensions { - - // Checks whether the extensions have bound shell object(s). - virtual bool HasShellObject() const = 0; -+ -+ virtual std::unique_ptr CreateWaylandWindow( -+ PlatformWindowDelegate* delegate, -+ WaylandConnection* connection) = 0; - }; - - // Creates Wayland extensions. -diff --git a/ui/ozone/platform/wayland/host/wayland_keyboard.cc b/ui/ozone/platform/wayland/host/wayland_keyboard.cc -index c6e64f1e55da3..473a702bf8987 100644 ---- a/ui/ozone/platform/wayland/host/wayland_keyboard.cc -+++ b/ui/ozone/platform/wayland/host/wayland_keyboard.cc -@@ -54,7 +54,7 @@ class WaylandKeyboard::ZCRExtendedKeyboard { - - void AckKey(uint32_t serial, bool handled) { - zcr_extended_keyboard_v1_ack_key(obj_.get(), serial, handled); -- keyboard_->connection_->Flush(); -+ keyboard_->connection_->ScheduleFlush(); - } - - // Returns true if connected object will send zcr_extended_keyboard::peek_key. -@@ -247,7 +247,7 @@ void WaylandKeyboard::FlushInput(base::OnceClosure closure) { - // get spurious repeats. - sync_callback_.reset(wl_display_sync(connection_->display_wrapper())); - wl_callback_add_listener(sync_callback_.get(), &callback_listener_, this); -- connection_->Flush(); -+ connection_->ScheduleFlush(); - } - - void WaylandKeyboard::DispatchKey(unsigned int key, -diff --git a/ui/ozone/platform/wayland/host/wayland_popup.cc b/ui/ozone/platform/wayland/host/wayland_popup.cc -index 84e429457462e..cb13557093dc2 100644 ---- a/ui/ozone/platform/wayland/host/wayland_popup.cc -+++ b/ui/ozone/platform/wayland/host/wayland_popup.cc -@@ -124,7 +124,7 @@ void WaylandPopup::Show(bool inactive) { - return; - } - -- connection()->Flush(); -+ connection()->ScheduleFlush(); - WaylandWindow::Show(inactive); - } - -@@ -147,7 +147,7 @@ void WaylandPopup::Hide() { - decorated_via_aura_popup_ = false; - } - -- connection()->Flush(); -+ connection()->ScheduleFlush(); - } - - bool WaylandPopup::IsVisible() const { -diff --git a/ui/ozone/platform/wayland/host/wayland_shm.cc b/ui/ozone/platform/wayland/host/wayland_shm.cc -index 80d27227b9ab3..2b6c4f31ca0d8 100644 ---- a/ui/ozone/platform/wayland/host/wayland_shm.cc -+++ b/ui/ozone/platform/wayland/host/wayland_shm.cc -@@ -62,7 +62,7 @@ wl::Object WaylandShm::CreateBuffer(const base::ScopedFD& fd, - with_alpha_channel ? WL_SHM_FORMAT_ARGB8888 : WL_SHM_FORMAT_XRGB8888; - wl::Object shm_buffer(wl_shm_pool_create_buffer( - pool.get(), 0, size.width(), size.height(), size.width() * 4, format)); -- connection_->Flush(); -+ connection_->ScheduleFlush(); - return shm_buffer; - } - -diff --git a/ui/ozone/platform/wayland/host/wayland_surface.cc b/ui/ozone/platform/wayland/host/wayland_surface.cc -index cd178f9aaee00..ffe5062402b33 100644 ---- a/ui/ozone/platform/wayland/host/wayland_surface.cc -+++ b/ui/ozone/platform/wayland/host/wayland_surface.cc -@@ -267,7 +267,7 @@ void WaylandSurface::UpdateBufferDamageRegion(const gfx::Rect& damage_px) { - void WaylandSurface::Commit(bool flush) { - wl_surface_commit(surface_.get()); - if (flush) -- connection_->Flush(); -+ connection_->ScheduleFlush(); - } - - void WaylandSurface::set_surface_buffer_scale(float scale) { -diff --git a/ui/ozone/platform/wayland/host/wayland_toplevel_window.cc b/ui/ozone/platform/wayland/host/wayland_toplevel_window.cc -index e39daa898c9a5..68aebd357fdc2 100644 ---- a/ui/ozone/platform/wayland/host/wayland_toplevel_window.cc -+++ b/ui/ozone/platform/wayland/host/wayland_toplevel_window.cc -@@ -131,7 +131,7 @@ void WaylandToplevelWindow::DispatchHostWindowDragMovement( - else - shell_toplevel_->SurfaceResize(connection(), hittest); - -- connection()->Flush(); -+ connection()->ScheduleFlush(); - } - - void WaylandToplevelWindow::Show(bool inactive) { -@@ -166,7 +166,7 @@ void WaylandToplevelWindow::Hide() { - aura_surface_.reset(); - } - shell_toplevel_.reset(); -- connection()->Flush(); -+ connection()->ScheduleFlush(); - } - - bool WaylandToplevelWindow::IsVisible() const { -@@ -183,7 +183,7 @@ void WaylandToplevelWindow::SetTitle(const std::u16string& title) { - - if (shell_toplevel_) { - shell_toplevel_->SetTitle(title); -- connection()->Flush(); -+ connection()->ScheduleFlush(); - } - } - -@@ -262,13 +262,13 @@ void WaylandToplevelWindow::Activate() { - // but nothing more happens (until the user moves the mouse over a Lacros - // window in which case events will start and the activation will come - // through). -- connection()->Flush(); -+ connection()->ScheduleFlush(); - } - - void WaylandToplevelWindow::Deactivate() { - if (shell_toplevel_ && shell_toplevel_->SupportsActivation()) { - shell_toplevel_->Deactivate(); -- connection()->Flush(); -+ connection()->ScheduleFlush(); - } - } - -@@ -877,7 +877,7 @@ void WaylandToplevelWindow::TriggerStateChanges() { - - delegate()->OnWindowStateChanged(previous_state_, state_); - -- connection()->Flush(); -+ connection()->ScheduleFlush(); - } - - void WaylandToplevelWindow::SetWindowState(PlatformWindowState state) { -@@ -908,7 +908,7 @@ void WaylandToplevelWindow::SetSizeConstraints() { - if (max_size_dip.has_value()) - shell_toplevel_->SetMaxSize(max_size_dip->width(), max_size_dip->height()); - -- connection()->Flush(); -+ connection()->ScheduleFlush(); - } - - void WaylandToplevelWindow::SetOrResetRestoredBounds() { -diff --git a/ui/ozone/platform/wayland/host/wayland_window.cc b/ui/ozone/platform/wayland/host/wayland_window.cc -index f8b8c36a745e5..e415efde8ccd8 100644 ---- a/ui/ozone/platform/wayland/host/wayland_window.cc -+++ b/ui/ozone/platform/wayland/host/wayland_window.cc -@@ -430,7 +430,7 @@ void WaylandWindow::SetDecorationInsets(const gfx::Insets* insets_px) { - else - frame_insets_px_ = absl::nullopt; - UpdateDecorations(); -- connection_->Flush(); -+ connection_->ScheduleFlush(); - } - - void WaylandWindow::SetWindowIcons(const gfx::ImageSkia& window_icon, -@@ -522,6 +522,10 @@ void WaylandWindow::HandleSurfaceConfigure(uint32_t serial) { - << "Only shell surfaces must receive HandleSurfaceConfigure calls."; - } - -+void WaylandWindow::OnSurfaceContentChanged() { -+ connection_->ScheduleFlush(); -+} -+ - void WaylandWindow::HandleToplevelConfigure(int32_t widht, - int32_t height, - const WindowStates& window_states) { -@@ -551,7 +555,7 @@ void WaylandWindow::UpdateVisualSize(const gfx::Size& size_px) { - - if (apply_pending_state_on_update_visual_size_for_testing_) { - root_surface_->ApplyPendingState(); -- connection_->Flush(); -+ connection_->ScheduleFlush(); - } - } - -@@ -661,7 +665,7 @@ bool WaylandWindow::Initialize(PlatformWindowInitProperties properties) { - std::vector region{gfx::Rect{size_px_}}; - root_surface_->set_opaque_region(®ion); - root_surface_->ApplyPendingState(); -- connection_->Flush(); -+ connection_->ScheduleFlush(); - - return true; - } -@@ -957,7 +961,7 @@ void WaylandWindow::ProcessPendingBoundsDip(uint32_t serial) { - // window has been applied. - SetWindowGeometry(pending_bounds_dip_); - AckConfigure(serial); -- connection()->Flush(); -+ connection()->ScheduleFlush(); - } else if (!pending_configures_.empty() && - pending_bounds_dip_.size() == - pending_configures_.back().bounds_dip.size()) { -@@ -1051,7 +1055,7 @@ bool WaylandWindow::ProcessVisualSizeUpdate(const gfx::Size& size_px) { - auto serial = result->serial; - SetWindowGeometry(result->bounds_dip); - AckConfigure(serial); -- connection()->Flush(); -+ connection()->ScheduleFlush(); - pending_configures_.erase(pending_configures_.begin(), ++result); - return true; - } -diff --git a/ui/ozone/platform/wayland/host/wayland_window.h b/ui/ozone/platform/wayland/host/wayland_window.h -index f0f75d4481cd2..dae1ddcd2933f 100644 ---- a/ui/ozone/platform/wayland/host/wayland_window.h -+++ b/ui/ozone/platform/wayland/host/wayland_window.h -@@ -218,6 +218,8 @@ class WaylandWindow : public PlatformWindow, - // currently bound to. - virtual void HandleSurfaceConfigure(uint32_t serial); - -+ void OnSurfaceContentChanged(); -+ - struct WindowStates { - bool is_maximized = false; - bool is_fullscreen = false; -diff --git a/ui/ozone/platform/wayland/host/wayland_window_drag_controller.cc b/ui/ozone/platform/wayland/host/wayland_window_drag_controller.cc -index 6f45f47a71c25..a269ec9b368a4 100644 ---- a/ui/ozone/platform/wayland/host/wayland_window_drag_controller.cc -+++ b/ui/ozone/platform/wayland/host/wayland_window_drag_controller.cc -@@ -84,7 +84,7 @@ class WaylandWindowDragController::ExtendedDragSource { - auto* surface = window ? window->root_surface()->surface() : nullptr; - zcr_extended_drag_source_v1_drag(source_.get(), surface, offset.x(), - offset.y()); -- connection_.Flush(); -+ connection_.ScheduleFlush(); - } - - private: -diff --git a/ui/ozone/platform/wayland/host/wayland_window_factory.cc b/ui/ozone/platform/wayland/host/wayland_window_factory.cc -index 4857125bb5f34..b2f73218681b9 100644 ---- a/ui/ozone/platform/wayland/host/wayland_window_factory.cc -+++ b/ui/ozone/platform/wayland/host/wayland_window_factory.cc -@@ -13,6 +13,8 @@ - #include "ui/ozone/platform/wayland/host/wayland_window.h" - #include "ui/platform_window/platform_window_init_properties.h" - -+#include "ui/ozone/platform/wayland/host/wayland_extensions.h" -+ - namespace ui { - - namespace { -@@ -41,6 +43,13 @@ std::unique_ptr WaylandWindow::Create( - // toplevel window instead. - if (auto* parent = - GetParentWindow(connection, properties.parent_widget)) { -+ -+ if (connection->extensions()) { -+ window = connection->extensions()->CreateWaylandWindow(delegate, -+ connection); -+ if (window) -+ break; -+ } - window = std::make_unique(delegate, connection, parent); - } else { - DLOG(WARNING) << "Failed to determine for menu/popup window."; -@@ -52,6 +61,12 @@ std::unique_ptr WaylandWindow::Create( - case PlatformWindowType::kDrag: - // TODO(msisov): Figure out what kind of surface we need to create for - // bubble and drag windows. -+ if (connection->extensions()) { -+ window = -+ connection->extensions()->CreateWaylandWindow(delegate, connection); -+ if (window) -+ break; -+ } - window = std::make_unique(delegate, connection); - break; - default: -diff --git a/ui/ozone/platform/wayland/host/wayland_zwp_linux_dmabuf.cc b/ui/ozone/platform/wayland/host/wayland_zwp_linux_dmabuf.cc -index 3db8cb5e5dba9..5d6293e016842 100644 ---- a/ui/ozone/platform/wayland/host/wayland_zwp_linux_dmabuf.cc -+++ b/ui/ozone/platform/wayland/host/wayland_zwp_linux_dmabuf.cc -@@ -104,7 +104,7 @@ void WaylandZwpLinuxDmabuf::CreateBuffer(const base::ScopedFD& fd, - // created buffer and notify the client about it via the |callback|. - pending_params_.emplace(std::move(params), std::move(callback)); - } -- connection_->Flush(); -+ connection_->ScheduleFlush(); - } - - bool WaylandZwpLinuxDmabuf::CanCreateBufferImmed() const { -@@ -150,7 +150,7 @@ void WaylandZwpLinuxDmabuf::NotifyRequestCreateBufferDone( - - pending_params_.erase(it); - -- connection_->Flush(); -+ connection_->ScheduleFlush(); - } - - // static -diff --git a/ui/ozone/platform/wayland/host/xdg_foreign_wrapper.cc b/ui/ozone/platform/wayland/host/xdg_foreign_wrapper.cc -index 8b8591fabe015..9b3c6e5136d5d 100644 ---- a/ui/ozone/platform/wayland/host/xdg_foreign_wrapper.cc -+++ b/ui/ozone/platform/wayland/host/xdg_foreign_wrapper.cc -@@ -162,7 +162,7 @@ void XdgForeignWrapperImpl:: - zxdg_exported_v1_add_listener(exported_surface.exported.get(), - &kExportedListener, this); - exported_surfaces_.emplace_back(std::move(exported_surface)); -- connection_->Flush(); -+ connection_->ScheduleFlush(); - } - - template <> -@@ -176,7 +176,7 @@ void XdgForeignWrapperImpl:: - zxdg_exported_v2_add_listener(exported_surface.exported.get(), - &kExportedListener, this); - exported_surfaces_.emplace_back(std::move(exported_surface)); -- connection_->Flush(); -+ connection_->ScheduleFlush(); - } - - // static -diff --git a/ui/ozone/platform/wayland/host/xdg_popup_wrapper_impl.cc b/ui/ozone/platform/wayland/host/xdg_popup_wrapper_impl.cc -index 23b7ad8fbf3cc..2e1f8fc129bf7 100644 ---- a/ui/ozone/platform/wayland/host/xdg_popup_wrapper_impl.cc -+++ b/ui/ozone/platform/wayland/host/xdg_popup_wrapper_impl.cc -@@ -230,7 +230,7 @@ bool XDGPopupWrapperImpl::SetBounds(const gfx::Rect& new_bounds) { - xdg_popup_reposition(xdg_popup_.get(), positioner.get(), - ++next_reposition_token_); - -- connection_->Flush(); -+ connection_->ScheduleFlush(); - return true; - } - -diff --git a/ui/ozone/platform/wayland/host/xdg_surface_wrapper_impl.cc b/ui/ozone/platform/wayland/host/xdg_surface_wrapper_impl.cc -index 048071b4b7b76..692f562e203f0 100644 ---- a/ui/ozone/platform/wayland/host/xdg_surface_wrapper_impl.cc -+++ b/ui/ozone/platform/wayland/host/xdg_surface_wrapper_impl.cc -@@ -40,7 +40,7 @@ bool XDGSurfaceWrapperImpl::Initialize() { - } - - xdg_surface_add_listener(xdg_surface_.get(), &xdg_surface_listener, this); -- connection_->Flush(); -+ connection_->ScheduleFlush(); - return true; - } - -diff --git a/ui/ozone/platform/wayland/host/zwp_primary_selection_device.cc b/ui/ozone/platform/wayland/host/zwp_primary_selection_device.cc -index d02c76db80aa2..9e7e0a916d66d 100644 ---- a/ui/ozone/platform/wayland/host/zwp_primary_selection_device.cc -+++ b/ui/ozone/platform/wayland/host/zwp_primary_selection_device.cc -@@ -31,7 +31,7 @@ void ZwpPrimarySelectionDevice::SetSelectionSource( - auto* data_source = source ? source->data_source() : nullptr; - zwp_primary_selection_device_v1_set_selection(data_device_.get(), data_source, - serial); -- connection()->Flush(); -+ connection()->ScheduleFlush(); - } - - // static -diff --git a/ui/ozone/platform/wayland/host/zwp_primary_selection_device_manager.cc b/ui/ozone/platform/wayland/host/zwp_primary_selection_device_manager.cc -index 9d5d79635b66d..2ca82ce6031ba 100644 ---- a/ui/ozone/platform/wayland/host/zwp_primary_selection_device_manager.cc -+++ b/ui/ozone/platform/wayland/host/zwp_primary_selection_device_manager.cc -@@ -66,7 +66,7 @@ ZwpPrimarySelectionDevice* ZwpPrimarySelectionDeviceManager::GetDevice() { - connection_, - zwp_primary_selection_device_manager_v1_get_device( - device_manager_.get(), connection_->seat()->wl_object())); -- connection_->Flush(); -+ connection_->ScheduleFlush(); - } - DCHECK(device_); - return device_.get(); -@@ -77,7 +77,7 @@ ZwpPrimarySelectionDeviceManager::CreateSource( - ZwpPrimarySelectionSource::Delegate* delegate) { - auto* data_source = zwp_primary_selection_device_manager_v1_create_source( - device_manager_.get()); -- connection_->Flush(); -+ connection_->ScheduleFlush(); - return std::make_unique(data_source, connection_, - delegate); - } -diff --git a/ui/ozone/platform/wayland/host/zxdg_surface_v6_wrapper_impl.cc b/ui/ozone/platform/wayland/host/zxdg_surface_v6_wrapper_impl.cc -index e900f9d37e8ad..5c4c538800f65 100644 ---- a/ui/ozone/platform/wayland/host/zxdg_surface_v6_wrapper_impl.cc -+++ b/ui/ozone/platform/wayland/host/zxdg_surface_v6_wrapper_impl.cc -@@ -43,7 +43,7 @@ bool ZXDGSurfaceV6WrapperImpl::Initialize() { - - zxdg_surface_v6_add_listener(zxdg_surface_v6_.get(), - &zxdg_surface_v6_listener, this); -- connection_->Flush(); -+ connection_->ScheduleFlush(); - return true; - } - -diff --git a/ui/platform_window/agl/platform_window_agl.h b/ui/platform_window/agl/platform_window_agl.h -new file mode 100644 -index 0000000000000..4bc915d663e72 ---- /dev/null -+++ b/ui/platform_window/agl/platform_window_agl.h -@@ -0,0 +1,36 @@ -+// Copyright 2021 LG Electronics, Inc. -+// -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// http://www.apache.org/licenses/LICENSE-2.0 -+// -+// Unless required by applicable law or agreed to in writing, software -+// distributed under the License is distributed on an "AS IS" BASIS, -+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -+// See the License for the specific language governing permissions and -+// limitations under the License. -+// -+// SPDX-License-Identifier: Apache-2.0 -+ -+#ifndef UI_PLATFORM_WINDOW_AGL_PLATFORM_WINDOW_AGL_H_ -+#define UI_PLATFORM_WINDOW_AGL_PLATFORM_WINDOW_AGL_H_ -+ -+#include -+ -+namespace ui { -+ -+// AGL additions for platform window. -+class PlatformWindowAgl { -+ public: -+ virtual void SetAglActivateApp(const std::string& app) {} -+ virtual void SetAglAppId(const std::string& title) {} -+ virtual void SetAglReady() {} -+ virtual void SetAglBackground() {} -+ virtual void SetAglPanel(uint32_t edge) {} -+}; -+ -+} // namespace ui -+ -+#endif // UI_PLATFORM_WINDOW_AGL_PLATFORM_WINDOW_AGL_H_ -diff --git a/ui/platform_window/platform_window.h b/ui/platform_window/platform_window.h -index a7bd3ef17a728..80f67671b88cf 100644 ---- a/ui/platform_window/platform_window.h -+++ b/ui/platform_window/platform_window.h -@@ -9,6 +9,7 @@ - #include - #include - -+#include "agl/platform_window_agl.h" - #include "base/component_export.h" - #include "ui/base/class_property.h" - #include "ui/base/ui_base_types.h" -@@ -32,7 +33,8 @@ class PlatformCursor; - - // Generic PlatformWindow interface. - class COMPONENT_EXPORT(PLATFORM_WINDOW) PlatformWindow -- : public PropertyHandler { -+ : public PropertyHandler, -+ public PlatformWindowAgl { - public: - PlatformWindow(); - ~PlatformWindow() override; --- -2.39.2 - diff --git a/recipes-wam/cef/files/chromium/0006-agl-Don-t-use-DRI-for-renesas.patch b/recipes-wam/cef/files/chromium/0006-agl-Don-t-use-DRI-for-renesas.patch new file mode 100644 index 00000000..1914661e --- /dev/null +++ b/recipes-wam/cef/files/chromium/0006-agl-Don-t-use-DRI-for-renesas.patch @@ -0,0 +1,72 @@ +From e7b779035f0d7ff1ba5bf59ea2f314f364493928 Mon Sep 17 00:00:00 2001 +From: Roger Zanoni +Date: Thu, 4 May 2023 10:42:06 +0200 +Subject: [PATCH 06/33] [agl] Don't use DRI for renesas + +This adds the use_dri flag that defauls to true and +can be disabled if we are building CEF using ozone + wayland + +Upstream-Status: Inappropriate, specific to the renesas boards supported +by AGL. +Signed-off-by: Roger Zanoni +--- + content/gpu/BUILD.gn | 4 ++-- + media/gpu/sandbox/BUILD.gn | 5 +++-- + media/media_options.gni | 3 +++ + 3 files changed, 8 insertions(+), 4 deletions(-) + +diff --git a/content/gpu/BUILD.gn b/content/gpu/BUILD.gn +index 93559f6092c7a..cef8415be7ab1 100644 +--- a/content/gpu/BUILD.gn ++++ b/content/gpu/BUILD.gn +@@ -139,8 +139,8 @@ target(link_target_type, "gpu_sources") { + } + + # Use DRI on desktop Linux builds. +- if (current_cpu != "s390x" && current_cpu != "ppc64" && is_linux && +- !is_castos) { ++ if (use_dri && current_cpu != "s390x" && current_cpu != "ppc64" && ++ is_linux && !is_castos) { + configs += [ "//build/config/linux/dri" ] + } + } +diff --git a/media/gpu/sandbox/BUILD.gn b/media/gpu/sandbox/BUILD.gn +index cfcb7fa80ef89..6ba37d06b29c8 100644 +--- a/media/gpu/sandbox/BUILD.gn ++++ b/media/gpu/sandbox/BUILD.gn +@@ -4,6 +4,7 @@ + + import("//build/config/chromeos/ui_mode.gni") + import("//media/gpu/args.gni") ++import("//media/media_options.gni") + + source_set("sandbox") { + sources = [] +@@ -30,8 +31,8 @@ source_set("sandbox") { + if (use_v4l2_codec) { + deps += [ "//media/gpu/v4l2" ] + } +- if (current_cpu != "s390x" && current_cpu != "ppc64" && is_linux && +- !is_castos) { ++ if (use_dri && (current_cpu != "s390x" && current_cpu != "ppc64" && is_linux && ++ !is_castos)) { + # For DRI_DRIVER_DIR. + configs += [ "//build/config/linux/dri" ] + } +diff --git a/media/media_options.gni b/media/media_options.gni +index 61d5046d0cb0e..4898c9034d448 100644 +--- a/media/media_options.gni ++++ b/media/media_options.gni +@@ -117,6 +117,9 @@ declare_args() { + # Enable inclusion of VVC/H.266 parser/demuxer, and also enable VVC/H.266 decoding + # with hardware acceleration provided by platform. Disabled by default for all builds. + enable_platform_vvc = false ++ ++ # used to disable dri on renesas boards ++ use_dri = true + } + + # Use another declare_args() to allow dependence on args defined above. +-- +2.42.1 + diff --git a/recipes-wam/cef/files/chromium/0007-Only-bind-to-agl_shell-if-it-s-the-browser-process.patch b/recipes-wam/cef/files/chromium/0007-Only-bind-to-agl_shell-if-it-s-the-browser-process.patch deleted file mode 100644 index 8961b464..00000000 --- a/recipes-wam/cef/files/chromium/0007-Only-bind-to-agl_shell-if-it-s-the-browser-process.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 1b60d7d98be14175b5175ee6ba4c19da03d8188e Mon Sep 17 00:00:00 2001 -From: Roger Zanoni -Date: Sat, 27 May 2023 15:55:17 +0200 -Subject: [PATCH 7/9] Only bind to agl_shell if it's the browser process - ---- - .../extensions/agl/host/wayland_extensions_agl_impl.cc | 9 +++++++-- - 1 file changed, 7 insertions(+), 2 deletions(-) - -diff --git a/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.cc b/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.cc -index 87376cbb8a9d3..075b3010ea8a1 100644 ---- a/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.cc -+++ b/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.cc -@@ -20,6 +20,7 @@ - - #include "base/command_line.h" - #include "base/logging.h" -+#include "content/public/common/content_switches.h" - #include "ui/base/ui_base_switches.h" - #include "ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.h" - #include "ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.h" -@@ -45,8 +46,12 @@ bool WaylandExtensionsAglImpl::Bind(wl_registry* registry, - uint32_t name, - const char* interface, - uint32_t version) { -- bool should_use_agl_shell = base::CommandLine::ForCurrentProcess()->HasSwitch( -- switches::kAglShellAppId); -+ bool has_agl_shell_switch = base::CommandLine::ForCurrentProcess()->HasSwitch( -+ switches::kAglShellAppId); -+ bool is_browser_process = !base::CommandLine::ForCurrentProcess()->HasSwitch( -+ switches::kProcessType); -+ bool should_use_agl_shell = has_agl_shell_switch && is_browser_process; -+ - bool can_bind = wl::CanBind(interface, version, kMinAglShellExtensionVersion, - kMaxAglShellExtensionVersion); - bool is_agl_shell_interface = (strcmp(interface, "agl_shell") == 0); --- -2.39.2 - diff --git a/recipes-wam/cef/files/chromium/0007-meta-browser-Remove-the-GN-settings-done-for-clang-t.patch b/recipes-wam/cef/files/chromium/0007-meta-browser-Remove-the-GN-settings-done-for-clang-t.patch new file mode 100644 index 00000000..75d37ab1 --- /dev/null +++ b/recipes-wam/cef/files/chromium/0007-meta-browser-Remove-the-GN-settings-done-for-clang-t.patch @@ -0,0 +1,117 @@ +From 89705cfc3a4e677dd97db36c3dc9b0aa97515760 Mon Sep 17 00:00:00 2001 +From: Roger Zanoni +Date: Thu, 27 Apr 2023 16:16:28 +0200 +Subject: [PATCH 07/33] [meta-browser] Remove the GN settings done for clang + that conflict with OE + +clang cross compiler that is build with meta-clang has lot of these +settings built-in and specifying them here confuses the compiler + +--target option and -no-canonical-prefixes options result in clang + +finding the headers in target sysroot + +Upstream-Status: Inappropriate [OE-Specific] + +Signed-off-by: Khem Raj +Rebased-by: Maksim Sisov +Rebased-by: Randy MacLeod +Rebased-by: Roger Zanoni +--- + build/config/compiler/BUILD.gn | 38 ---------------------------------- + 1 file changed, 38 deletions(-) + +diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn +index 06812fb9c2188..db763b998c4fb 100644 +--- a/build/config/compiler/BUILD.gn ++++ b/build/config/compiler/BUILD.gn +@@ -1112,11 +1112,6 @@ config("compiler_cpu_abi") { + ] + } + } else if (current_cpu == "arm") { +- if (is_clang && !is_android && !is_nacl && +- !(is_chromeos_lacros && is_chromeos_device)) { +- cflags += [ "--target=arm-linux-gnueabihf" ] +- ldflags += [ "--target=arm-linux-gnueabihf" ] +- } + if (!is_nacl) { + cflags += [ + "-march=$arm_arch", +@@ -1126,12 +1121,6 @@ config("compiler_cpu_abi") { + if (arm_tune != "") { + cflags += [ "-mtune=$arm_tune" ] + } +- } else if (current_cpu == "arm64") { +- if (is_clang && !is_android && !is_nacl && !is_fuchsia && +- !(is_chromeos_lacros && is_chromeos_device)) { +- cflags += [ "--target=aarch64-linux-gnu" ] +- ldflags += [ "--target=aarch64-linux-gnu" ] +- } + } else if (current_cpu == "mipsel" && !is_nacl) { + ldflags += [ "-Wl,--hash-style=sysv" ] + if (custom_toolchain == "") { +@@ -1139,9 +1128,6 @@ config("compiler_cpu_abi") { + if (is_android) { + cflags += [ "--target=mipsel-linux-android" ] + ldflags += [ "--target=mipsel-linux-android" ] +- } else { +- cflags += [ "--target=mipsel-linux-gnu" ] +- ldflags += [ "--target=mipsel-linux-gnu" ] + } + } else { + cflags += [ "-EL" ] +@@ -1221,8 +1207,6 @@ config("compiler_cpu_abi") { + ldflags += [ "-Wl,--hash-style=sysv" ] + if (custom_toolchain == "") { + if (is_clang) { +- cflags += [ "--target=mips-linux-gnu" ] +- ldflags += [ "--target=mips-linux-gnu" ] + } else { + cflags += [ "-EB" ] + ldflags += [ "-EB" ] +@@ -1270,9 +1254,6 @@ config("compiler_cpu_abi") { + if (is_android) { + cflags += [ "--target=mips64el-linux-android" ] + ldflags += [ "--target=mips64el-linux-android" ] +- } else { +- cflags += [ "--target=mips64el-linux-gnuabi64" ] +- ldflags += [ "--target=mips64el-linux-gnuabi64" ] + } + } else { + cflags += [ +@@ -1330,8 +1311,6 @@ config("compiler_cpu_abi") { + ldflags += [ "-Wl,--hash-style=sysv" ] + if (custom_toolchain == "") { + if (is_clang) { +- cflags += [ "--target=mips64-linux-gnuabi64" ] +- ldflags += [ "--target=mips64-linux-gnuabi64" ] + } else { + cflags += [ + "-EB", +@@ -1494,23 +1473,6 @@ config("compiler_deterministic") { + } + } + } +- +- # Tells the compiler not to use absolute paths when passing the default +- # paths to the tools it invokes. We don't want this because we don't +- # really need it and it can mess up the goma cache entries. +- if (is_clang && (!is_nacl || is_nacl_saigo)) { +- cflags += [ "-no-canonical-prefixes" ] +- +- # Same for links: Let the compiler driver invoke the linker +- # with a relative path and pass relative paths to built-in +- # libraries. Not needed on Windows because we call the linker +- # directly there, not through the compiler driver. +- # We don't link on goma, so this change is just for cleaner +- # internal linker invocations, for people who work on the build. +- if (!is_win) { +- ldflags += [ "-no-canonical-prefixes" ] +- } +- } + } + + config("clang_revision") { +-- +2.42.1 + diff --git a/recipes-wam/cef/files/chromium/0008-Add-a-method-to-check-if-the-agl-window-is-configure.patch b/recipes-wam/cef/files/chromium/0008-Add-a-method-to-check-if-the-agl-window-is-configure.patch deleted file mode 100644 index bae799d7..00000000 --- a/recipes-wam/cef/files/chromium/0008-Add-a-method-to-check-if-the-agl-window-is-configure.patch +++ /dev/null @@ -1,64 +0,0 @@ -From d76f1575fd5abd31d488f7456700af0ead9712f0 Mon Sep 17 00:00:00 2001 -From: Roger Zanoni -Date: Fri, 30 Jun 2023 10:25:10 +0200 -Subject: [PATCH 8/9] Add a method to check if the agl window is configured - ---- - ui/aura/agl/window_tree_host_agl.h | 1 + - ui/aura/agl/window_tree_host_platform_agl.cc | 4 ++++ - ui/aura/agl/window_tree_host_platform_agl.h | 1 + - ui/platform_window/agl/platform_window_agl.h | 1 + - 4 files changed, 7 insertions(+) - -diff --git a/ui/aura/agl/window_tree_host_agl.h b/ui/aura/agl/window_tree_host_agl.h -index 858a078d939d0..b9aa451c8332e 100644 ---- a/ui/aura/agl/window_tree_host_agl.h -+++ b/ui/aura/agl/window_tree_host_agl.h -@@ -35,6 +35,7 @@ class AURA_EXPORT WindowTreeHostAgl { - virtual void SetAglReady() {} - virtual void SetAglBackground() {} - virtual void SetAglPanel(uint32_t edge) {} -+ virtual bool IsSurfaceConfigured() const { return false; } - }; - - } // namespace aura -diff --git a/ui/aura/agl/window_tree_host_platform_agl.cc b/ui/aura/agl/window_tree_host_platform_agl.cc -index e34595fe0ed9c..67190e1da6973 100644 ---- a/ui/aura/agl/window_tree_host_platform_agl.cc -+++ b/ui/aura/agl/window_tree_host_platform_agl.cc -@@ -47,4 +47,8 @@ void WindowTreeHostPlatformAgl::SetAglPanel(uint32_t edge) { - window_tree_host_platform_->platform_window()->SetAglPanel(edge); - } - -+bool WindowTreeHostPlatformAgl::IsSurfaceConfigured() const { -+ return window_tree_host_platform_->platform_window()->IsSurfaceConfigured(); -+} -+ - } // namespace aura -diff --git a/ui/aura/agl/window_tree_host_platform_agl.h b/ui/aura/agl/window_tree_host_platform_agl.h -index 181eefae346f7..e5a29fa1bfca3 100644 ---- a/ui/aura/agl/window_tree_host_platform_agl.h -+++ b/ui/aura/agl/window_tree_host_platform_agl.h -@@ -41,6 +41,7 @@ class AURA_EXPORT WindowTreeHostPlatformAgl : public aura::WindowTreeHost { - void SetAglReady() override; - void SetAglBackground() override; - void SetAglPanel(uint32_t edge) override; -+ bool IsSurfaceConfigured() const override; - - private: - aura::WindowTreeHostPlatform* window_tree_host_platform_; -diff --git a/ui/platform_window/agl/platform_window_agl.h b/ui/platform_window/agl/platform_window_agl.h -index 4bc915d663e72..cab1f42272772 100644 ---- a/ui/platform_window/agl/platform_window_agl.h -+++ b/ui/platform_window/agl/platform_window_agl.h -@@ -29,6 +29,7 @@ class PlatformWindowAgl { - virtual void SetAglReady() {} - virtual void SetAglBackground() {} - virtual void SetAglPanel(uint32_t edge) {} -+ virtual bool IsSurfaceConfigured() { return false; } - }; - - } // namespace ui --- -2.39.2 - diff --git a/recipes-wam/cef/files/chromium/0008-meta-browser-Pass-no-static-libstdc-to-gen.py.patch b/recipes-wam/cef/files/chromium/0008-meta-browser-Pass-no-static-libstdc-to-gen.py.patch new file mode 100644 index 00000000..a31d4242 --- /dev/null +++ b/recipes-wam/cef/files/chromium/0008-meta-browser-Pass-no-static-libstdc-to-gen.py.patch @@ -0,0 +1,31 @@ +From f4d754e203e4968f4c9f68f00321fa0f1c942139 Mon Sep 17 00:00:00 2001 +From: Maksim Sisov +Date: Thu, 19 Dec 2019 15:47:53 +0200 +Subject: [PATCH 08/33] [meta-browser] Pass no-static-libstdc++ to gen.py + +Upstream-Status: Inappropriate + +GN requires libstdc++.a to be installed on host systems by default, +which is often not very common, for no particular reason. + +Signed-off-by: Raphael Kubo da Costa +Signed-off-by: Maksim Sisov +--- + tools/gn/bootstrap/bootstrap.py | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/tools/gn/bootstrap/bootstrap.py b/tools/gn/bootstrap/bootstrap.py +index caf736b28946d..c5d7c428ed68a 100755 +--- a/tools/gn/bootstrap/bootstrap.py ++++ b/tools/gn/bootstrap/bootstrap.py +@@ -113,6 +113,7 @@ def main(argv): + cmd = [ + sys.executable, + os.path.join(GN_ROOT, 'build', 'gen.py'), ++ '--no-static-libstdc++', + '--no-last-commit-position', + '--out-path=' + gn_build_dir, + ] +-- +2.42.1 + diff --git a/recipes-wam/cef/files/chromium/0009-Start-using-agl-shell-version-4.patch b/recipes-wam/cef/files/chromium/0009-Start-using-agl-shell-version-4.patch deleted file mode 100644 index 1cf91430..00000000 --- a/recipes-wam/cef/files/chromium/0009-Start-using-agl-shell-version-4.patch +++ /dev/null @@ -1,347 +0,0 @@ -From 87e8811a2fc95b57f958e2bdfe5f3e434ecbff1e Mon Sep 17 00:00:00 2001 -From: Roger Zanoni -Date: Sun, 2 Jul 2023 11:11:07 +0200 -Subject: [PATCH 9/9] Start using agl-shell version 4 - ---- - ui/aura/agl/window_tree_host_agl.h | 1 + - ui/aura/agl/window_tree_host_platform_agl.cc | 4 + - ui/aura/agl/window_tree_host_platform_agl.h | 1 + - .../extensions/agl/host/agl_shell_wrapper.cc | 9 + - .../extensions/agl/host/agl_shell_wrapper.h | 1 + - .../agl/host/wayland_extensions_agl_impl.cc | 2 +- - .../extensions/agl/host/wayland_window_agl.cc | 10 + - .../extensions/agl/host/wayland_window_agl.h | 1 + - .../extensions/agl/protocol/agl-shell.xml | 185 +++++++++++++++++- - ui/platform_window/agl/platform_window_agl.h | 1 + - 10 files changed, 213 insertions(+), 2 deletions(-) - -diff --git a/ui/aura/agl/window_tree_host_agl.h b/ui/aura/agl/window_tree_host_agl.h -index b9aa451c8332e..c5213f75e623e 100644 ---- a/ui/aura/agl/window_tree_host_agl.h -+++ b/ui/aura/agl/window_tree_host_agl.h -@@ -36,6 +36,7 @@ class AURA_EXPORT WindowTreeHostAgl { - virtual void SetAglBackground() {} - virtual void SetAglPanel(uint32_t edge) {} - virtual bool IsSurfaceConfigured() const { return false; } -+ virtual void SetupActivationArea(uint32_t x, uint32_t y, uint32_t width, uint32_t height) {} - }; - - } // namespace aura -diff --git a/ui/aura/agl/window_tree_host_platform_agl.cc b/ui/aura/agl/window_tree_host_platform_agl.cc -index 67190e1da6973..b9bae3f3b9bdc 100644 ---- a/ui/aura/agl/window_tree_host_platform_agl.cc -+++ b/ui/aura/agl/window_tree_host_platform_agl.cc -@@ -51,4 +51,8 @@ bool WindowTreeHostPlatformAgl::IsSurfaceConfigured() const { - return window_tree_host_platform_->platform_window()->IsSurfaceConfigured(); - } - -+void WindowTreeHostPlatformAgl::SetupActivationArea(uint32_t x, uint32_t y, uint32_t width, uint32_t height) { -+ window_tree_host_platform_->platform_window()->SetupActivationArea(x, y, width, height); -+} -+ - } // namespace aura -diff --git a/ui/aura/agl/window_tree_host_platform_agl.h b/ui/aura/agl/window_tree_host_platform_agl.h -index e5a29fa1bfca3..30e160736e327 100644 ---- a/ui/aura/agl/window_tree_host_platform_agl.h -+++ b/ui/aura/agl/window_tree_host_platform_agl.h -@@ -42,6 +42,7 @@ class AURA_EXPORT WindowTreeHostPlatformAgl : public aura::WindowTreeHost { - void SetAglBackground() override; - void SetAglPanel(uint32_t edge) override; - bool IsSurfaceConfigured() const override; -+ void SetupActivationArea(uint32_t x, uint32_t y, uint32_t width, uint32_t height) override; - - private: - aura::WindowTreeHostPlatform* window_tree_host_platform_; -diff --git a/ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.cc b/ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.cc -index c74fa5d9cd221..0d5d79c4738df 100644 ---- a/ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.cc -+++ b/ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.cc -@@ -110,4 +110,13 @@ bool AglShellWrapper::WaitUntilBoundOk() { - return bound_ok_; - } - -+void AglShellWrapper::SetupActivationArea(uint32_t x, uint32_t y, uint32_t width, uint32_t height) { -+#ifdef AGL_SHELL_SET_ACTIVATE_REGION_SINCE_VERSION -+ wl_output* output = -+ connection_->wayland_output_manager()->GetPrimaryOutput()->get_output(); -+ agl_shell_set_activate_region(agl_shell_.get(), output, x, y, -+ width, height); -+#endif -+} -+ - } // namespace ui -diff --git a/ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.h b/ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.h -index 2ab765883057e..1c2074e1b4306 100644 ---- a/ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.h -+++ b/ui/ozone/platform/wayland/extensions/agl/host/agl_shell_wrapper.h -@@ -39,6 +39,7 @@ class AglShellWrapper { - void SetAglPanel(WaylandWindow* window, uint32_t edge); - void SetAglBackground(WaylandWindow* window); - void SetAglReady(); -+ void SetupActivationArea(uint32_t x, uint32_t y, uint32_t width, uint32_t height); - bool WaitUntilBoundOk(); - - static void AglShellBoundOk(void* data, struct agl_shell*); -diff --git a/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.cc b/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.cc -index 075b3010ea8a1..8f9d938cdd1f6 100644 ---- a/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.cc -+++ b/ui/ozone/platform/wayland/extensions/agl/host/wayland_extensions_agl_impl.cc -@@ -32,7 +32,7 @@ namespace ui { - namespace { - - constexpr uint32_t kMinAglShellExtensionVersion = 1; --constexpr uint32_t kMaxAglShellExtensionVersion = 3; -+constexpr uint32_t kMaxAglShellExtensionVersion = 4; - - } // namespace - -diff --git a/ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.cc b/ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.cc -index 97b21ae537658..f92406d455de1 100644 ---- a/ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.cc -+++ b/ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.cc -@@ -83,4 +83,14 @@ void WaylandWindowAgl::SetAglPanel(uint32_t edge) { - connection()->ScheduleFlush(); - } - -+void WaylandWindowAgl::SetupActivationArea(uint32_t x, uint32_t y, uint32_t width, uint32_t height) { -+ if (!agl_extensions_->GetAglShell()) { -+ LOG(ERROR) << "Agl shell wrapper is not created"; -+ return; -+ } -+ -+ agl_extensions_->GetAglShell()->SetupActivationArea(x, y, width, height); -+ connection()->ScheduleFlush(); -+} -+ - } // namespace ui -diff --git a/ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.h b/ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.h -index b2a922604c001..d21d2d9387215 100644 ---- a/ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.h -+++ b/ui/ozone/platform/wayland/extensions/agl/host/wayland_window_agl.h -@@ -39,6 +39,7 @@ class WaylandWindowAgl : public WaylandToplevelWindow { - void SetAglReady() override; - void SetAglBackground() override; - void SetAglPanel(uint32_t edge) override; -+ void SetupActivationArea(uint32_t x, uint32_t y, uint32_t width, uint32_t height) override; - - private: - WaylandExtensionsAgl* agl_extensions_; -diff --git a/ui/ozone/platform/wayland/extensions/agl/protocol/agl-shell.xml b/ui/ozone/platform/wayland/extensions/agl/protocol/agl-shell.xml -index ad5553d61f189..e010a80808c69 100644 ---- a/ui/ozone/platform/wayland/extensions/agl/protocol/agl-shell.xml -+++ b/ui/ozone/platform/wayland/extensions/agl/protocol/agl-shell.xml -@@ -22,7 +22,7 @@ - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - -- -+ - - Starting with version 2 of the protocol, the client is required to wait - for the 'bound_ok' or 'bound_fail' events in order to proceed further. -@@ -174,6 +174,189 @@ - - - -+ -+ -+ A hint for the compositor to use a custom area, rather than -+ inferring the activation area. If any panels are used -+ the compositor computes the activation area by subtracting the -+ panels geometry area. If no panels are used then the entire output -+ is being used. This request changes that as to hint the compositor -+ to use the supplied rectangle and ignore any potential panels -+ that might been set-up previously. - -+ In order for this request to take effect it will need to happen -+ before the 'ready' request in order for the compositor to make use of it. -+ Note that any 'set_panel' request be will not be honored, if this request -+ has been called. -+ -+ The x and y coordinates use the top-left corner as the origin. The -+ rectangle area shouldn't exceed the output area, while an area smaller -+ than the output, would basically result in showing up the background -+ surface. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Ask the compositor to hide the toplevel window for window -+ management purposes. Depending on the window role, this request -+ will either display the previously active window (or the background -+ in case there's no previously active surface) or temporarily (or -+ until a 'activate_app' is called upon) hide the surface. -+ -+ All the surfaces are identifiable by using the app_id, and no actions -+ are taken in case the app_id is not/was not present. -+ -+ See xdg_toplevel.set_app_id from the xdg-shell protocol for a -+ description of app_id. -+ -+ -+ -+ -+ -+ -+ Makes the application identified by app_id as floating. If the -+ application's window is already mapped, in a maximized, normal state, -+ it would transition to the float state. -+ -+ For applications that want to modify their own state, this request -+ must be done before the initial surface commit in order to take effect. -+ -+ If the application is already in floating state, this request wouldn't -+ do anything. -+ -+ There's no persistence of this request, once the application terminated -+ you'll to issue this request again for that particular app_id. -+ -+ The x, and y values would be initial position of the window where the -+ window surface will be placed. -+ -+ See xdg_toplevel.set_app_id from the xdg-shell protocol for a -+ description of app_id. -+ -+ -+ -+ -+ -+ -+ -+ -+ Returns the application identified by app_id as it was in the normal state. -+ This is useful to come back from other states to the maximized state, the -+ normal state applications are started. -+ -+ -+ -+ -+ -+ -+ Makes the application identified by app_id as fullscreen. If the -+ application's window is already mapped, in a maximized, normal state, -+ it would transition to the fullscreen state. -+ -+ For applications that want to modify their own state, this request -+ must be done before the initial surface commit in order to take effect. -+ -+ If the application is already in fullscreen state, this request wouldn't -+ do anything. -+ -+ There's no persistence of this request, once the application terminated -+ you'll to issue this request again for that particular app_id. -+ -+ See xdg_toplevel.set_app_id from the xdg-shell protocol for a -+ description of app_id. -+ -+ -+ -+ -+ -+ -+ This would allow the compositor to place an application on a particular -+ output, if that output is indeed available. This can happen before -+ application is started which would make the application start on that -+ particular output. If the application is already started it would -+ move the application to that output. -+ -+ There's no persistence of this request, once the application terminated -+ you'll need to issue this request again for that particular app_id. -+ -+ See xdg_toplevel.set_app_id from the xdg-shell protocol for a -+ description of app_id. -+ -+ -+ -+ -+ -+ -+ -+ Clients can use this event to be notified when an application -+ wants to be displayed on a certain output. This event is sent in -+ response to the set_app_output request. -+ -+ See xdg_toplevel.set_app_id from the xdg-shell protocol for a -+ description of app_id. -+ -+ -+ -+ -+ -+ -+ -+ -+ This interface allows another client bind to the agl_shell interface, -+ while there's another shell client already present. -+ -+ The client should first bind to this interface and then inform the -+ compositor with the 'doas_shell_client' request and it wants to bind to -+ the agl_shell interface. The client is still expected, if using a new -+ version of the agl_shell interface, to wait for the 'bound_ok' and -+ 'bound_fail' events before issueing any other requests/events. -+ -+ Note that this interface has its limitations, and the compositor would -+ still refuse the act for 'set_panel' or 'set_background' requests -+ of the agl_shell interface if there's already a client that used them. -+ -+ Any other requests or events should be delievered and handled as it would -+ a client bound to the agl_shell interface. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Call the destructor once you're ready with agl_shell_ext interface. -+ This would reset the state and would make any requests made -+ on the agl_shell interface be terminated. The client would need -+ to bind again the agl_shell_ext and issue a 'doas_shell_client' -+ request. -+ -+ -+ -+ -+ -+ Prior to binding to agl_shell interface, this request would inform -+ the compositor that it wants to gain access the agl_shell interface. -+ The client is expected to wait for 'doas_shell_client_done' event and -+ check for a successful status before going further with binding to -+ the agl_shell interface. -+ -+ -+ -+ -+ -+ The client should check the status event to verify that the -+ compositor was able to handle the request. -+ -+ -+ - - -diff --git a/ui/platform_window/agl/platform_window_agl.h b/ui/platform_window/agl/platform_window_agl.h -index cab1f42272772..b1a6150fff950 100644 ---- a/ui/platform_window/agl/platform_window_agl.h -+++ b/ui/platform_window/agl/platform_window_agl.h -@@ -30,6 +30,7 @@ class PlatformWindowAgl { - virtual void SetAglBackground() {} - virtual void SetAglPanel(uint32_t edge) {} - virtual bool IsSurfaceConfigured() { return false; } -+ virtual void SetupActivationArea(uint32_t x, uint32_t y, uint32_t width, uint32_t height) {} - }; - - } // namespace ui --- -2.39.2 - diff --git a/recipes-wam/cef/files/chromium/0009-meta-browser-IWYU-Add-includes-for-size_t-and-int64_.patch b/recipes-wam/cef/files/chromium/0009-meta-browser-IWYU-Add-includes-for-size_t-and-int64_.patch new file mode 100644 index 00000000..8e46c2c5 --- /dev/null +++ b/recipes-wam/cef/files/chromium/0009-meta-browser-IWYU-Add-includes-for-size_t-and-int64_.patch @@ -0,0 +1,42 @@ +From 585854fa48a040fe31caa42e675f78c783be0098 Mon Sep 17 00:00:00 2001 +From: Ivan Murashov +Date: Wed, 6 Sep 2023 19:40:47 +0000 +Subject: [PATCH 09/33] [meta-browser] IWYU: Add includes for size_t and + int64_t usage into sensor_reading.h + +Otherwise build fails when building with use_custom_libcxx=false. +The errors example: +services/device/public/cpp/generic_sensor/sensor_reading.h:17:40: +error: use of undeclared identifier 'int64_t' +services/device/public/cpp/generic_sensor/sensor_reading.h:35:5: +error: unknown type name 'int64_t' +services/device/public/cpp/generic_sensor/sensor_reading.h:58:20: +error: unknown type name 'size_t'; did you mean 'std::size_t'? + +Bug: 957519 +Change-Id: Iec9bb821eb6284cf38d93c1cec90846e2f615fab +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4838935 +Reviewed-by: Reilly Grant +Commit-Queue: Ivan Murashov +Cr-Commit-Position: refs/heads/main@{#1193203} +--- + services/device/public/cpp/generic_sensor/sensor_reading.h | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/services/device/public/cpp/generic_sensor/sensor_reading.h b/services/device/public/cpp/generic_sensor/sensor_reading.h +index 7df8278649a23..c653bec632cc6 100644 +--- a/services/device/public/cpp/generic_sensor/sensor_reading.h ++++ b/services/device/public/cpp/generic_sensor/sensor_reading.h +@@ -5,6 +5,9 @@ + #ifndef SERVICES_DEVICE_PUBLIC_CPP_GENERIC_SENSOR_SENSOR_READING_H_ + #define SERVICES_DEVICE_PUBLIC_CPP_GENERIC_SENSOR_SENSOR_READING_H_ + ++#include ++#include ++ + #include + + namespace device { +-- +2.42.1 + diff --git a/recipes-wam/cef/files/chromium/0010-meta-browser-BUILD-do-not-specify-march-on-arm.patch b/recipes-wam/cef/files/chromium/0010-meta-browser-BUILD-do-not-specify-march-on-arm.patch new file mode 100644 index 00000000..5936248e --- /dev/null +++ b/recipes-wam/cef/files/chromium/0010-meta-browser-BUILD-do-not-specify-march-on-arm.patch @@ -0,0 +1,43 @@ +From 5d216a0f4d6312531bc03ce8c878dc251b67c589 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Tue, 22 Jan 2019 00:17:41 -0800 +Subject: [PATCH 10/33] [meta-browser] BUILD: do not specify march on arm + +Do not try to set the guessed values for march/mtune/float-abi +OE config machinary has computed these values already and fed it +via compiler cmdline to chromium build + +I think upstream should check for the values on compiler cmdline +before overriding these + +Upstream-Status: Inappropriate [OE-Specific] + +Signed-off-by: Khem Raj +--- + build/config/compiler/BUILD.gn | 10 ---------- + 1 file changed, 10 deletions(-) + +diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn +index db763b998c4fb..6d87a2b03fa04 100644 +--- a/build/config/compiler/BUILD.gn ++++ b/build/config/compiler/BUILD.gn +@@ -1111,16 +1111,6 @@ config("compiler_cpu_abi") { + "-msse3", + ] + } +- } else if (current_cpu == "arm") { +- if (!is_nacl) { +- cflags += [ +- "-march=$arm_arch", +- "-mfloat-abi=$arm_float_abi", +- ] +- } +- if (arm_tune != "") { +- cflags += [ "-mtune=$arm_tune" ] +- } + } else if (current_cpu == "mipsel" && !is_nacl) { + ldflags += [ "-Wl,--hash-style=sysv" ] + if (custom_toolchain == "") { +-- +2.42.1 + diff --git a/recipes-wam/cef/files/chromium/0011-meta-browser-Avoid-parenthesized-initialization-of-a.patch b/recipes-wam/cef/files/chromium/0011-meta-browser-Avoid-parenthesized-initialization-of-a.patch new file mode 100644 index 00000000..dbdda920 --- /dev/null +++ b/recipes-wam/cef/files/chromium/0011-meta-browser-Avoid-parenthesized-initialization-of-a.patch @@ -0,0 +1,164 @@ +From 03e9492ef563af17682683b6db5761d1c2ece8cc Mon Sep 17 00:00:00 2001 +From: Max Ihlenfeldt +Date: Thu, 3 Aug 2023 13:31:15 +0000 +Subject: [PATCH 11/33] [meta-browser] Avoid parenthesized initialization of + aggregates + +clang < 16 doesn't support C++20's "Parenthesized initialization of +aggregates" [1]. To fix build errors with older clang versions, we need +to either explicitly define a constructor that does the initialization, +or initialize the aggregate using curly braces. + +[1] https://clang.llvm.org/cxx_status.html + +Upstream-Status: Inappropriate [specific to older versions of clang] +Signed-off-by: Max Ihlenfeldt +--- + .../browser/content_settings/one_time_permission_provider.h | 1 + + chrome/browser/ui/omnibox/chrome_omnibox_client.cc | 4 ++-- + chrome/test/chromedriver/chrome/client_hints.h | 1 + + .../display_embedder/skia_output_surface_impl_on_gpu.cc | 2 +- + net/dns/host_resolver_cache.cc | 2 +- + .../blink/renderer/modules/canvas/canvas2d/canvas_style.cc | 4 ++-- + .../blink/renderer/platform/fonts/palette_interpolation.cc | 2 +- + ui/base/wayland/color_manager_util.h | 5 +++++ + 8 files changed, 14 insertions(+), 7 deletions(-) + +diff --git a/chrome/browser/content_settings/one_time_permission_provider.h b/chrome/browser/content_settings/one_time_permission_provider.h +index 839bec7daff97..2a000003507cf 100644 +--- a/chrome/browser/content_settings/one_time_permission_provider.h ++++ b/chrome/browser/content_settings/one_time_permission_provider.h +@@ -92,6 +92,7 @@ class OneTimePermissionProvider + ContentSettingsType type; + ContentSettingsPattern primary_pattern; + ContentSettingsPattern secondary_pattern; ++ ContentSettingEntry(ContentSettingsType t, ContentSettingsPattern p, ContentSettingsPattern s) : type(t), primary_pattern(p), secondary_pattern(s) {} + }; + + void DeleteEntriesAndNotify( +diff --git a/chrome/browser/ui/omnibox/chrome_omnibox_client.cc b/chrome/browser/ui/omnibox/chrome_omnibox_client.cc +index 7ee2e0645e6c8..e036eeea4a5f9 100644 +--- a/chrome/browser/ui/omnibox/chrome_omnibox_client.cc ++++ b/chrome/browser/ui/omnibox/chrome_omnibox_client.cc +@@ -474,10 +474,10 @@ void ChromeOmniboxClient::OnAutocompleteAccept( + alternative_nav_match); + + // Store the details necessary to open the omnibox match via browser commands. +- location_bar_->set_navigation_params(LocationBar::NavigationParams( ++ location_bar_->set_navigation_params(LocationBar::NavigationParams { + destination_url, disposition, transition, match_selection_timestamp, + destination_url_entered_without_scheme, +- destination_url_entered_with_http_scheme)); ++ destination_url_entered_with_http_scheme}); + + if (browser_) { + auto navigation = chrome::OpenCurrentURL(browser_); +diff --git a/chrome/test/chromedriver/chrome/client_hints.h b/chrome/test/chromedriver/chrome/client_hints.h +index 8c13bd3321c5e..42dc1acf75ec5 100644 +--- a/chrome/test/chromedriver/chrome/client_hints.h ++++ b/chrome/test/chromedriver/chrome/client_hints.h +@@ -19,6 +19,7 @@ struct BrandVersion { + // * "major version" for "brands", + // * "full version" for "fullVersionList". + std::string version; ++ BrandVersion(std::string b, std::string v) : brand(b), version(v) {} + }; + + // User-Agent Client Hints +diff --git a/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc b/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc +index 9e04843c454e3..e4981a96bbb06 100644 +--- a/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc ++++ b/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc +@@ -1521,7 +1521,7 @@ void SkiaOutputSurfaceImplOnGpu::CopyOutputNV12( + + // Issue readbacks from the surfaces: + for (size_t i = 0; i < CopyOutputResult::kNV12MaxPlanes; ++i) { +- SkISize size(plane_surfaces[i]->width(), plane_surfaces[i]->height()); ++ SkISize size {plane_surfaces[i]->width(), plane_surfaces[i]->height()}; + SkImageInfo dst_info = SkImageInfo::Make( + size, (i == 0) ? kAlpha_8_SkColorType : kR8G8_unorm_SkColorType, + kUnpremul_SkAlphaType); +diff --git a/net/dns/host_resolver_cache.cc b/net/dns/host_resolver_cache.cc +index e54ed00c913ba..7d1165e7fcacf 100644 +--- a/net/dns/host_resolver_cache.cc ++++ b/net/dns/host_resolver_cache.cc +@@ -161,7 +161,7 @@ void HostResolverCache::Set( + + std::string domain_name = result->domain_name(); + entries_.emplace( +- Key(std::move(domain_name), network_anonymization_key), ++ Key {std::move(domain_name), network_anonymization_key}, + Entry(std::move(result), source, secure, staleness_generation_)); + + if (entries_.size() > max_entries_) { +diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_style.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_style.cc +index 883d769ca4b24..3dcd0d73468fc 100644 +--- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_style.cc ++++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_style.cc +@@ -83,12 +83,12 @@ void CanvasStyle::ApplyToFlags(cc::PaintFlags& flags, + case kGradient: + GetCanvasGradient()->GetGradient()->ApplyToFlags(flags, SkMatrix::I(), + ImageDrawOptions()); +- flags.setColor(SkColor4f(0.0f, 0.0f, 0.0f, global_alpha)); ++ flags.setColor(SkColor4f {0.0f, 0.0f, 0.0f, global_alpha}); + break; + case kImagePattern: + GetCanvasPattern()->GetPattern()->ApplyToFlags( + flags, AffineTransformToSkMatrix(GetCanvasPattern()->GetTransform())); +- flags.setColor(SkColor4f(0.0f, 0.0f, 0.0f, global_alpha)); ++ flags.setColor(SkColor4f {0.0f, 0.0f, 0.0f, global_alpha}); + break; + default: + NOTREACHED(); +diff --git a/third_party/blink/renderer/platform/fonts/palette_interpolation.cc b/third_party/blink/renderer/platform/fonts/palette_interpolation.cc +index 1ce08e956a7aa..d6521525a52f6 100644 +--- a/third_party/blink/renderer/platform/fonts/palette_interpolation.cc ++++ b/third_party/blink/renderer/platform/fonts/palette_interpolation.cc +@@ -31,7 +31,7 @@ Vector PaletteInterpolation::MixColorRecords( + color_interpolation_space, hue_interpolation_method, start_color, + end_color, percentage, alpha_multiplier); + +- FontPalette::FontPaletteOverride result_color_record(i, result_color); ++ FontPalette::FontPaletteOverride result_color_record {static_cast(i), result_color}; + result_color_records.push_back(result_color_record); + } + return result_color_records; +diff --git a/ui/base/wayland/color_manager_util.h b/ui/base/wayland/color_manager_util.h +index fa1dd422c0e60..c54ace574e52e 100644 +--- a/ui/base/wayland/color_manager_util.h ++++ b/ui/base/wayland/color_manager_util.h +@@ -23,26 +23,31 @@ constexpr uint32_t kDefaultSinceVersion = 1; + struct TransferFnVersion { + skcms_TransferFunction transfer_fn; + uint32_t version; ++ TransferFnVersion(skcms_TransferFunction t, uint32_t v) : transfer_fn(t), version(v) {} + }; + + struct TransferVersion { + gfx::ColorSpace::TransferID transfer; + uint32_t version; ++ TransferVersion(gfx::ColorSpace::TransferID t, uint32_t v) : transfer(t), version(v) {} + }; + + struct PrimaryVersion { + gfx::ColorSpace::PrimaryID primary; + uint32_t version; ++ PrimaryVersion(gfx::ColorSpace::PrimaryID p, uint32_t v) : primary(p), version(v) {} + }; + + struct MatrixVersion { + gfx::ColorSpace::MatrixID matrix; + uint32_t version; ++ MatrixVersion(gfx::ColorSpace::MatrixID m, uint32_t v) : matrix(m), version(v) {} + }; + + struct RangeVersion { + gfx::ColorSpace::RangeID range; + uint32_t version; ++ RangeVersion(gfx::ColorSpace::RangeID r, uint32_t v) : range(r), version(v) {} + }; + + // A map from the zcr_color_manager_v1 chromaticity_names enum values +-- +2.42.1 + diff --git a/recipes-wam/cef/files/chromium/0012-meta-browser-Fix-constexpr-variable-cannot-have-non-.patch b/recipes-wam/cef/files/chromium/0012-meta-browser-Fix-constexpr-variable-cannot-have-non-.patch new file mode 100644 index 00000000..3a91c1dd --- /dev/null +++ b/recipes-wam/cef/files/chromium/0012-meta-browser-Fix-constexpr-variable-cannot-have-non-.patch @@ -0,0 +1,78 @@ +From dcc972ec3451eaf88c2289a6f4852b24e901f26d Mon Sep 17 00:00:00 2001 +From: Max Ihlenfeldt +Date: Thu, 31 Aug 2023 10:27:47 +0000 +Subject: [PATCH 12/33] [meta-browser] Fix "constexpr variable cannot have + non-literal type" errors + +Something about Chromium's `base::flat_map` / +`base::internal::flat_tree` isn't considered a literal type by older +clang versions, meaning they can't be used in constexpr expressions. We +need to change them to be const instead. + +Upstream-Status: Inappropriate [specific to older versions of clang] +Signed-off-by: Max Ihlenfeldt +--- + ui/base/wayland/color_manager_util.h | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/ui/base/wayland/color_manager_util.h b/ui/base/wayland/color_manager_util.h +index c54ace574e52e..e25abe8e5d722 100644 +--- a/ui/base/wayland/color_manager_util.h ++++ b/ui/base/wayland/color_manager_util.h +@@ -53,7 +53,7 @@ struct RangeVersion { + // A map from the zcr_color_manager_v1 chromaticity_names enum values + // representing well-known chromaticities, to their equivalent PrimaryIDs. + // See components/exo/wayland/protocol/chrome-color-management.xml +-constexpr auto kChromaticityMap = base::MakeFixedFlatMap< ++const auto kChromaticityMap = base::MakeFixedFlatMap< + zcr_color_manager_v1_chromaticity_names, + PrimaryVersion>( + {{ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_BT601_525_LINE, +@@ -108,7 +108,7 @@ constexpr auto kChromaticityMap = base::MakeFixedFlatMap< + // A map from the zcr_color_manager_v1 eotf_names enum values + // representing well-known EOTFs, to their equivalent TransferIDs. + // See components/exo/wayland/protocol/chrome-color-management.xml +-constexpr auto kEotfMap = base::MakeFixedFlatMap< ++const auto kEotfMap = base::MakeFixedFlatMap< + zcr_color_manager_v1_eotf_names, + TransferVersion>({ + {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_LINEAR, +@@ -176,7 +176,7 @@ constexpr auto kEotfMap = base::MakeFixedFlatMap< + // A map from the SDR zcr_color_manager_v1 eotf_names enum values + // representing well-known EOTFs, to their equivalent transfer functions. + // See components/exo/wayland/protocol/chrome-color-management.xml +-constexpr auto kTransferMap = ++const auto kTransferMap = + base::MakeFixedFlatMap({ + {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_LINEAR, + TransferFnVersion(SkNamedTransferFn::kLinear, kDefaultSinceVersion)}, +@@ -196,7 +196,7 @@ constexpr auto kTransferMap = + // A map from the HDR zcr_color_manager_v1 eotf_names enum values + // representing well-known EOTFs, to their equivalent transfer functions. + // See components/exo/wayland/protocol/chrome-color-management.xml +-constexpr auto kHDRTransferMap = ++const auto kHDRTransferMap = + base::MakeFixedFlatMap( + {{ZCR_COLOR_MANAGER_V1_EOTF_NAMES_LINEAR, + TransferFnVersion(SkNamedTransferFn::kLinear, kDefaultSinceVersion)}, +@@ -214,7 +214,7 @@ constexpr auto kHDRTransferMap = + + // A map from zcr_color_manager_v1 matrix_names enum values to + // gfx::ColorSpace::MatrixIDs. +-constexpr auto kMatrixMap = ++const auto kMatrixMap = + base::MakeFixedFlatMap( + {{ZCR_COLOR_MANAGER_V1_MATRIX_NAMES_RGB, + MatrixVersion(gfx::ColorSpace::MatrixID::RGB, kDefaultSinceVersion)}, +@@ -251,7 +251,7 @@ constexpr auto kMatrixMap = + + // A map from zcr_color_manager_v1 range_names enum values to + // gfx::ColorSpace::RangeIDs. +-constexpr auto kRangeMap = ++const auto kRangeMap = + base::MakeFixedFlatMap( + {{ZCR_COLOR_MANAGER_V1_RANGE_NAMES_LIMITED, + RangeVersion(gfx::ColorSpace::RangeID::LIMITED, +-- +2.42.1 + diff --git a/recipes-wam/cef/files/chromium/0013-meta-browser-Add-missing-typename-s.patch b/recipes-wam/cef/files/chromium/0013-meta-browser-Add-missing-typename-s.patch new file mode 100644 index 00000000..8740b81a --- /dev/null +++ b/recipes-wam/cef/files/chromium/0013-meta-browser-Add-missing-typename-s.patch @@ -0,0 +1,105 @@ +From 210019ce23ea273a13c77fedb3e674a47c67214a Mon Sep 17 00:00:00 2001 +From: Max Ihlenfeldt +Date: Mon, 12 Jun 2023 16:52:44 +0000 +Subject: [PATCH 13/33] [meta-browser] Add missing "typename"s + +This adds some `typename`s in locations where they are needed in older +versions of clang (probably < 16). + +Upstream-Status: Inappropriate [specific to older versions of clang] +Signed-off-by: Max Ihlenfeldt +--- + .../download/bubble/download_bubble_update_service.cc | 6 +++--- + components/optimization_guide/core/tflite_model_executor.h | 2 +- + .../browser/web_ui_browser_interface_broker_registry.h | 6 +++--- + .../core/html/parser/html_document_parser_fastpath.cc | 2 +- + .../renderer/core/paint/object_paint_properties_sparse.h | 4 ++-- + 5 files changed, 10 insertions(+), 10 deletions(-) + +diff --git a/chrome/browser/download/bubble/download_bubble_update_service.cc b/chrome/browser/download/bubble/download_bubble_update_service.cc +index 93ec91e38b9b3..acd25f25d1579 100644 +--- a/chrome/browser/download/bubble/download_bubble_update_service.cc ++++ b/chrome/browser/download/bubble/download_bubble_update_service.cc +@@ -91,7 +91,7 @@ ItemSortKey GetSortKey(const Item& item) { + // Helper to get an iterator to the last element in the cache. The cache + // must not be empty. + template +-SortedItems::const_iterator GetLastIter(const SortedItems& cache) { ++typename SortedItems::const_iterator GetLastIter(const SortedItems& cache) { + CHECK(!cache.empty()); + auto it = cache.end(); + return std::prev(it); +@@ -967,9 +967,9 @@ bool DownloadBubbleUpdateService::CacheManager::RemoveItemFromCacheImpl( + } + + template +-SortedItems::iterator ++typename SortedItems::iterator + DownloadBubbleUpdateService::CacheManager::RemoveItemFromCacheByIter( +- SortedItems::iterator iter, ++ typename SortedItems::iterator iter, + SortedItems& cache, + IterMap& iter_map) { + CHECK(iter != cache.end()); +diff --git a/components/optimization_guide/core/tflite_model_executor.h b/components/optimization_guide/core/tflite_model_executor.h +index bbb5208aae904..027ae8e101634 100644 +--- a/components/optimization_guide/core/tflite_model_executor.h ++++ b/components/optimization_guide/core/tflite_model_executor.h +@@ -240,7 +240,7 @@ class TFLiteModelExecutor : public ModelExecutor { + void SendForBatchExecution( + BatchExecutionCallback callback_on_complete, + base::TimeTicks start_time, +- ModelExecutor::ConstRefInputVector inputs) ++ typename ModelExecutor::ConstRefInputVector inputs) + override { + DCHECK(execution_task_runner_->RunsTasksInCurrentSequence()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); +diff --git a/content/public/browser/web_ui_browser_interface_broker_registry.h b/content/public/browser/web_ui_browser_interface_broker_registry.h +index 0a419be66b325..7253c9680f722 100644 +--- a/content/public/browser/web_ui_browser_interface_broker_registry.h ++++ b/content/public/browser/web_ui_browser_interface_broker_registry.h +@@ -127,10 +127,10 @@ class CONTENT_EXPORT WebUIBrowserInterfaceBrokerRegistry { + // + // TODO(crbug.com/1407936): Point to WebUIJsBridge documentation. + template +- JsBridgeTraits::BinderInitializer& ForWebUIWithJsBridge() { ++ typename JsBridgeTraits::BinderInitializer& ForWebUIWithJsBridge() { + using Traits = JsBridgeTraits; +- using Interface = Traits::Interface; +- using JsBridgeBinderInitializer = Traits::BinderInitializer; ++ using Interface = typename Traits::Interface; ++ using JsBridgeBinderInitializer = typename Traits::BinderInitializer; + + // WebUIController::GetType() requires an instantiated WebUIController + // (because it's a virtual method and can't be static). Here we only have +diff --git a/third_party/blink/renderer/core/html/parser/html_document_parser_fastpath.cc b/third_party/blink/renderer/core/html/parser/html_document_parser_fastpath.cc +index 4b5b6701a591b..59e1262a06e37 100644 +--- a/third_party/blink/renderer/core/html/parser/html_document_parser_fastpath.cc ++++ b/third_party/blink/renderer/core/html/parser/html_document_parser_fastpath.cc +@@ -169,7 +169,7 @@ class HTMLFastPathParser { + using Span = base::span; + using USpan = base::span; + // 32 matches that used by HTMLToken::Attribute. +- typedef std::conditional, ++ typedef typename std::conditional, + UCharLiteralBuffer<32>, + LCharLiteralBuffer<32>>::type LiteralBufferType; + typedef UCharLiteralBuffer<32> UCharLiteralBufferType; +diff --git a/third_party/blink/renderer/core/paint/object_paint_properties_sparse.h b/third_party/blink/renderer/core/paint/object_paint_properties_sparse.h +index 9adc6dfac54db..be94e55af7cf6 100644 +--- a/third_party/blink/renderer/core/paint/object_paint_properties_sparse.h ++++ b/third_party/blink/renderer/core/paint/object_paint_properties_sparse.h +@@ -272,8 +272,8 @@ class CORE_EXPORT ObjectPaintPropertiesSparse : public ObjectPaintProperties { + NodeList& nodes, + NodeId node_id, + const ParentType& parent, +- NodeType::State&& state, +- const NodeType::AnimationState& animation_state = ++ typename NodeType::State&& state, ++ const typename NodeType::AnimationState& animation_state = + NodeType::AnimationState()) { + // First, check if we need to add a new node. + if (!nodes.HasField(node_id)) { +-- +2.42.1 + diff --git a/recipes-wam/cef/files/chromium/0014-meta-browser-Avoid-std-ranges-find_if.patch b/recipes-wam/cef/files/chromium/0014-meta-browser-Avoid-std-ranges-find_if.patch new file mode 100644 index 00000000..2bd12fae --- /dev/null +++ b/recipes-wam/cef/files/chromium/0014-meta-browser-Avoid-std-ranges-find_if.patch @@ -0,0 +1,70 @@ +From a577e7a76e6002e50b5ab27514b7f49d4070499c Mon Sep 17 00:00:00 2001 +From: Max Ihlenfeldt +Date: Wed, 30 Aug 2023 16:06:19 +0000 +Subject: [PATCH 14/33] [meta-browser] Avoid std::ranges::find_if() + +std::ranges::find_if() was introduced in C++20, and older versions of +clang don't support it. We can instead use Chromium's `base::ranges` +library, which is supported. + +Upstream-Status: Inappropriate [specific to older versions of clang] +Signed-off-by: Max Ihlenfeldt +--- + .../password_manager/core/browser/ui/passwords_grouper.cc | 3 ++- + components/webauthn/core/browser/passkey_sync_bridge.cc | 5 +++-- + 2 files changed, 5 insertions(+), 3 deletions(-) + +diff --git a/components/password_manager/core/browser/ui/passwords_grouper.cc b/components/password_manager/core/browser/ui/passwords_grouper.cc +index 1b016e0eb9561..d259c6accf246 100644 +--- a/components/password_manager/core/browser/ui/passwords_grouper.cc ++++ b/components/password_manager/core/browser/ui/passwords_grouper.cc +@@ -8,6 +8,7 @@ + #include "base/containers/flat_set.h" + #include "base/strings/escape.h" + #include "base/strings/string_util.h" ++#include "base/ranges/algorithm.h" + #include "components/password_manager/core/browser/affiliation/affiliation_service.h" + #include "components/password_manager/core/browser/affiliation/affiliation_utils.h" + #include "components/password_manager/core/browser/passkey_credential.h" +@@ -277,7 +278,7 @@ absl::optional PasswordsGrouper::GetPasskeyFor( + const std::vector& passkeys = + map_group_id_to_credentials_[group_id_iterator->second].passkeys; + const auto passkey_it = +- std::ranges::find_if(passkeys, [&credential](const auto& passkey) { ++ base::ranges::find_if(passkeys, [&credential](const auto& passkey) { + return credential.passkey_credential_id == passkey.credential_id(); + }); + if (passkey_it == passkeys.end()) { +diff --git a/components/webauthn/core/browser/passkey_sync_bridge.cc b/components/webauthn/core/browser/passkey_sync_bridge.cc +index 93129fed756aa..794c696fcff04 100644 +--- a/components/webauthn/core/browser/passkey_sync_bridge.cc ++++ b/components/webauthn/core/browser/passkey_sync_bridge.cc +@@ -16,6 +16,7 @@ + #include "base/containers/span.h" + #include "base/feature_list.h" + #include "base/functional/callback_helpers.h" ++#include "base/ranges/algorithm.h" + #include "base/strings/string_number_conversions.h" + #include "base/trace_event/trace_event.h" + #include "components/sync/base/features.h" +@@ -258,7 +259,7 @@ PasskeySyncBridge::GetPasskeysForRelyingPartyId( + bool PasskeySyncBridge::DeletePasskey(const std::string& credential_id) { + // Find the credential with the given |credential_id|. + const auto passkey_it = +- std::ranges::find_if(data_, [&credential_id](const auto& passkey) { ++ base::ranges::find_if(data_, [&credential_id](const auto& passkey) { + return passkey.second.credential_id() == credential_id; + }); + if (passkey_it == data_.end()) { +@@ -309,7 +310,7 @@ bool PasskeySyncBridge::UpdatePasskey(const std::string& credential_id, + PasskeyChange change) { + // Find the credential with the given |credential_id|. + const auto passkey_it = +- std::ranges::find_if(data_, [&credential_id](const auto& passkey) { ++ base::ranges::find_if(data_, [&credential_id](const auto& passkey) { + return passkey.second.credential_id() == credential_id; + }); + if (passkey_it == data_.end()) { +-- +2.42.1 + diff --git a/recipes-wam/cef/files/chromium/0015-meta-browser-Avoid-capturing-structured-bindings.patch b/recipes-wam/cef/files/chromium/0015-meta-browser-Avoid-capturing-structured-bindings.patch new file mode 100644 index 00000000..7b612b84 --- /dev/null +++ b/recipes-wam/cef/files/chromium/0015-meta-browser-Avoid-capturing-structured-bindings.patch @@ -0,0 +1,56 @@ +From a1c05a94dc5b999bf22f1beedf3e3a9468775775 Mon Sep 17 00:00:00 2001 +From: Max Ihlenfeldt +Date: Tue, 13 Jun 2023 15:48:12 +0000 +Subject: [PATCH 15/33] [meta-browser] Avoid capturing structured bindings + +Similar to https://crrev.com/c/4526976, this patch removes some uses of +structured bindings that lead to compile errors when using older +versions of clang (observed with clang 15). + +Upstream-Status: Inappropriate [specific to older versions of clang] +Signed-off-by: Max Ihlenfeldt +--- + .../service_worker/service_worker_context_wrapper.cc | 3 ++- + media/base/cdm_promise_adapter.cc | 8 ++++---- + 2 files changed, 6 insertions(+), 5 deletions(-) + +diff --git a/content/browser/service_worker/service_worker_context_wrapper.cc b/content/browser/service_worker/service_worker_context_wrapper.cc +index 3267cdb340819..de88ef7e565cb 100644 +--- a/content/browser/service_worker/service_worker_context_wrapper.cc ++++ b/content/browser/service_worker/service_worker_context_wrapper.cc +@@ -1412,9 +1412,10 @@ void ServiceWorkerContextWrapper::MaybeProcessPendingWarmUpRequest() { + auto [document_url, key, callback] = std::move(*request); + + DCHECK(document_url.is_valid()); ++ auto document_url_spec = document_url.spec(); + TRACE_EVENT1("ServiceWorker", + "ServiceWorkerContextWrapper::MaybeProcessPendingWarmUpRequest", +- "document_url", document_url.spec()); ++ "document_url", document_url_spec); + + context_core_->registry()->FindRegistrationForClientUrl( + ServiceWorkerRegistry::Purpose::kNotForNavigation, +diff --git a/media/base/cdm_promise_adapter.cc b/media/base/cdm_promise_adapter.cc +index f013809a62e25..144809b9696c3 100644 +--- a/media/base/cdm_promise_adapter.cc ++++ b/media/base/cdm_promise_adapter.cc +@@ -94,12 +94,12 @@ void CdmPromiseAdapter::RejectPromise(uint32_t promise_id, + void CdmPromiseAdapter::Clear(ClearReason reason) { + // Reject all outstanding promises. + DCHECK(thread_checker_.CalledOnValidThread()); +- for (auto& [promise_id, promise] : promises_) { ++ for (auto& promise : promises_) { + TRACE_EVENT_NESTABLE_ASYNC_END1( +- "media", "CdmPromise", TRACE_ID_WITH_SCOPE("CdmPromise", promise_id), ++ "media", "CdmPromise", TRACE_ID_WITH_SCOPE("CdmPromise", promise.first), + "status", "cleared"); +- promise->reject(CdmPromise::Exception::INVALID_STATE_ERROR, +- ToSystemCode(reason), "Operation aborted."); ++ promise.second->reject(CdmPromise::Exception::INVALID_STATE_ERROR, ++ ToSystemCode(reason), "Operation aborted."); + } + promises_.clear(); + } +-- +2.42.1 + diff --git a/recipes-wam/cef/files/chromium/0016-meta-browser-Delete-compiler-options-not-available-i.patch b/recipes-wam/cef/files/chromium/0016-meta-browser-Delete-compiler-options-not-available-i.patch new file mode 100644 index 00000000..0956f5f3 --- /dev/null +++ b/recipes-wam/cef/files/chromium/0016-meta-browser-Delete-compiler-options-not-available-i.patch @@ -0,0 +1,32 @@ +From 267609878c7f7472990ee5b480a9ab1c54dad8b2 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Wed, 4 Dec 2019 19:06:54 -0800 +Subject: [PATCH 16/33] [meta-browser] Delete compiler options not available in + release versions of clang _yet_ + +Upstream-Status: Inappropriate [ clang/master already supports them ] +Signed-off-by: Khem Raj +Signed-off-by: Randy MacLeod +--- + build/config/compiler/BUILD.gn | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn +index 6d87a2b03fa04..5762f0b4e6b0a 100644 +--- a/build/config/compiler/BUILD.gn ++++ b/build/config/compiler/BUILD.gn +@@ -1725,6 +1725,11 @@ config("default_warnings") { + cflags += [ + "-Wenum-compare-conditional", + ++ # Disable unknown warnings, since system clang may not have ++ # backported newer warning yet unlike internal clang that ++ # chromium uses. ++ "-Wno-unknown-warning-option", ++ + # Ignore warnings about MSVC optimization pragmas. + # TODO(thakis): Only for no_chromium_code? http://crbug.com/912662 + "-Wno-ignored-pragma-optimize", +-- +2.42.1 + diff --git a/recipes-wam/cef/files/chromium/0017-meta-browser-Don-t-pass-disable-auto-upgrade-debug-i.patch b/recipes-wam/cef/files/chromium/0017-meta-browser-Don-t-pass-disable-auto-upgrade-debug-i.patch new file mode 100644 index 00000000..48f722e8 --- /dev/null +++ b/recipes-wam/cef/files/chromium/0017-meta-browser-Don-t-pass-disable-auto-upgrade-debug-i.patch @@ -0,0 +1,39 @@ +From a8243956b0fd410bf16143b3e781144ad8964244 Mon Sep 17 00:00:00 2001 +From: Max Ihlenfeldt +Date: Tue, 13 Jun 2023 14:36:23 +0000 +Subject: [PATCH 17/33] [meta-browser] Don't pass + disable-auto-upgrade-debug-info to linker + +The version of aarch64-oe-linux-ld.lld we use on dunfell, kirkstone, and +mickledore doesn't support this flag. Thus, we mustn't pass it if we +want to avoid an "Unknown command line argument" linker error that stops +the build. + +Upstream-Status: Inappropriate +Signed-off-by: Max Ihlenfeldt +--- + build/config/compiler/BUILD.gn | 8 -------- + 1 file changed, 8 deletions(-) + +diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn +index 5762f0b4e6b0a..c73b7ca6325d8 100644 +--- a/build/config/compiler/BUILD.gn ++++ b/build/config/compiler/BUILD.gn +@@ -767,14 +767,6 @@ config("compiler") { + } + + ldflags += [ "-Wl,-mllvm,-import-instr-limit=$import_instr_limit" ] +- +- if (!is_chromeos) { +- # TODO(https://crbug.com/972449): turn on for ChromeOS when that +- # toolchain has this flag. +- # We only use one version of LLVM within a build so there's no need to +- # upgrade debug info, which can be expensive since it runs the verifier. +- ldflags += [ "-Wl,-mllvm,-disable-auto-upgrade-debug-info" ] +- } + } + + # TODO(https://crbug.com/1211155): investigate why this isn't effective on +-- +2.42.1 + diff --git a/recipes-wam/cef/files/chromium/0018-meta-browser-Fix-undefined-symbol-PaintOpWriter-Seri.patch b/recipes-wam/cef/files/chromium/0018-meta-browser-Fix-undefined-symbol-PaintOpWriter-Seri.patch new file mode 100644 index 00000000..2c953d3b --- /dev/null +++ b/recipes-wam/cef/files/chromium/0018-meta-browser-Fix-undefined-symbol-PaintOpWriter-Seri.patch @@ -0,0 +1,49 @@ +From 1b8ee706e8bb16a9b6c59c832d33b56915d1f410 Mon Sep 17 00:00:00 2001 +From: Max Ihlenfeldt +Date: Tue, 5 Sep 2023 09:51:38 +0000 +Subject: [PATCH 18/33] [meta-browser] Fix "undefined symbol: + PaintOpWriter::SerializedSize()" + +For some reason, clang 14 (currently used on dunfell and kirkstone) +seems to fail to correctly generate a needed instantiation of +`cc::PaintOpWriter::SerializedSize()`, and thus the final linking +step fails with an "undefined symbol" error. + +We can fix this by explicitly providing a specialization, which does the +same thing as the generic implementation. + +Upstream-Status: Inappropriate [specific to older versions of clang] +Signed-off-by: Max Ihlenfeldt +--- + cc/paint/paint_op_writer.h | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/cc/paint/paint_op_writer.h b/cc/paint/paint_op_writer.h +index 70153c0aa64ac..f47eb934c1eb1 100644 +--- a/cc/paint/paint_op_writer.h ++++ b/cc/paint/paint_op_writer.h +@@ -122,6 +122,9 @@ class CC_PAINT_EXPORT PaintOpWriter { + static size_t SerializedSize(const PaintRecord& record); + static size_t SerializedSize(const SkHighContrastConfig& config); + ++ template<> ++ constexpr size_t SerializedSize(); ++ + // Serialization of raw/smart pointers is not supported by default. + template + static inline size_t SerializedSize(const T* p); +@@ -385,6 +388,11 @@ constexpr size_t PaintOpWriter::SerializedSize() { + SerializedSizeSimple(); // fBaseImageType + } + ++template<> ++constexpr size_t PaintOpWriter::SerializedSize() { ++ return SerializedSizeSimple(); ++} ++ + template + constexpr size_t PaintOpWriter::SerializedSize() { + static_assert(std::is_arithmetic_v || std::is_enum_v); +-- +2.42.1 + diff --git a/recipes-wam/cef/files/chromium/0019-upstream-Initialize-ServerCvc-with-designated-initia.patch b/recipes-wam/cef/files/chromium/0019-upstream-Initialize-ServerCvc-with-designated-initia.patch new file mode 100644 index 00000000..aba25502 --- /dev/null +++ b/recipes-wam/cef/files/chromium/0019-upstream-Initialize-ServerCvc-with-designated-initia.patch @@ -0,0 +1,45 @@ +From 41653aae0a0de782bcfb8396a01aa1d3c98d3149 Mon Sep 17 00:00:00 2001 +From: Chisoon Jeong +Date: Tue, 12 Sep 2023 08:35:43 +0000 +Subject: [PATCH 19/33] [upstream] Initialize ServerCvc with designated + initializers. + +Replace ServerCvc initialization using aggregates from a parenthesized +list of values, which is not a c++20 feature allowed for Chromium at +the moment, with designated initializers. + +Change-Id: Ifdeb78d0ebc804016c655683ad1369dd543d4204 +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4855865 +Reviewed-by: Florian Leimgruber +Reviewed-by: Dominic Battre +Commit-Queue: Dominic Battre +Cr-Commit-Position: refs/heads/main@{#1195267} +--- + .../core/browser/webdata/autofill_sync_bridge_util.cc | 10 ++++++---- + 1 file changed, 6 insertions(+), 4 deletions(-) + +diff --git a/components/autofill/core/browser/webdata/autofill_sync_bridge_util.cc b/components/autofill/core/browser/webdata/autofill_sync_bridge_util.cc +index 634443fb4fe22..f67b90114f762 100644 +--- a/components/autofill/core/browser/webdata/autofill_sync_bridge_util.cc ++++ b/components/autofill/core/browser/webdata/autofill_sync_bridge_util.cc +@@ -553,11 +553,13 @@ ServerCvc AutofillWalletCvcStructDataFromWalletCredentialSpecifics( + base::StringToInt64(wallet_credential_specifics.instrument_id(), + &instrument_id); + +- return ServerCvc( +- instrument_id, base::UTF8ToUTF16(wallet_credential_specifics.cvc()), +- base::Time::UnixEpoch() + ++ return ServerCvc{ ++ .instrument_id = instrument_id, ++ .cvc = base::UTF8ToUTF16(wallet_credential_specifics.cvc()), ++ .last_updated_timestamp = ++ base::Time::UnixEpoch() + + base::Milliseconds(wallet_credential_specifics +- .last_updated_time_unix_epoch_millis())); ++ .last_updated_time_unix_epoch_millis())}; + } + + VirtualCardUsageData VirtualCardUsageDataFromUsageSpecifics( +-- +2.42.1 + diff --git a/recipes-wam/cef/files/chromium/0020-M118-fix-Don-t-look-for-depot_tools-in-chrommium-s-t.patch b/recipes-wam/cef/files/chromium/0020-M118-fix-Don-t-look-for-depot_tools-in-chrommium-s-t.patch new file mode 100644 index 00000000..a8c01ab0 --- /dev/null +++ b/recipes-wam/cef/files/chromium/0020-M118-fix-Don-t-look-for-depot_tools-in-chrommium-s-t.patch @@ -0,0 +1,37 @@ +From 814421a53454a9d35cd9d0799f68eaae8b7cf440 Mon Sep 17 00:00:00 2001 +From: Roger Zanoni +Date: Fri, 7 Apr 2023 16:28:51 +0200 +Subject: [PATCH 20/33] [M118-fix] Don't look for depot_tools in chrommium's + third_party folder + +This caused an issue at the configure step before we starte using +tarballs, we need to check if it still needed. + +Upstream-Status: Inappropriate +Signed-off-by: Roger Zanoni +--- + build/find_depot_tools.py | 8 -------- + 1 file changed, 8 deletions(-) + +diff --git a/build/find_depot_tools.py b/build/find_depot_tools.py +index f891a414837a5..592bba699c00d 100755 +--- a/build/find_depot_tools.py ++++ b/build/find_depot_tools.py +@@ -27,14 +27,6 @@ def IsRealDepotTools(path): + + def add_depot_tools_to_path(): + """Search for depot_tools and add it to sys.path.""" +- # First, check if we have a DEPS'd in "depot_tools". +- deps_depot_tools = os.path.join(SRC, 'third_party', 'depot_tools') +- if IsRealDepotTools(deps_depot_tools): +- # Put the pinned version at the start of the sys.path, in case there +- # are other non-pinned versions already on the sys.path. +- sys.path.insert(0, deps_depot_tools) +- return deps_depot_tools +- + # Then look if depot_tools is already in PYTHONPATH. + for i in sys.path: + if i.rstrip(os.sep).endswith('depot_tools') and IsRealDepotTools(i): +-- +2.42.1 + diff --git a/recipes-wam/cef/files/chromium/0021-M118-fix-Add-multiple-missing-includes.patch b/recipes-wam/cef/files/chromium/0021-M118-fix-Add-multiple-missing-includes.patch new file mode 100644 index 00000000..df307082 --- /dev/null +++ b/recipes-wam/cef/files/chromium/0021-M118-fix-Add-multiple-missing-includes.patch @@ -0,0 +1,69 @@ +From 99b897cb41f70222477ed55128b38ea78edc78ff Mon Sep 17 00:00:00 2001 +From: Roger Zanoni +Date: Tue, 31 Oct 2023 10:29:32 -0300 +Subject: [PATCH 21/33] [M118-fix] Add multiple missing includes + +Fix build issues related to missing includes. + +Upstream-Status: Apparently the issue only happens on older versions of +clang, but it's worth checking if it's applicable. +Signed-off-by: Roger Zanoni +--- + chrome/browser/ui/views/dark_mode_manager_linux.h | 1 + + net/cert/pki/general_names.h | 1 + + net/filter/zstd_source_stream.cc | 1 + + ui/events/gesture_detection/motion_event_generic.h | 2 ++ + 4 files changed, 5 insertions(+) + +diff --git a/chrome/browser/ui/views/dark_mode_manager_linux.h b/chrome/browser/ui/views/dark_mode_manager_linux.h +index f9bcd034d141d..e98db21ef1767 100644 +--- a/chrome/browser/ui/views/dark_mode_manager_linux.h ++++ b/chrome/browser/ui/views/dark_mode_manager_linux.h +@@ -6,6 +6,7 @@ + #define CHROME_BROWSER_UI_VIEWS_DARK_MODE_MANAGER_LINUX_H_ + + #include ++#include + + #include "base/gtest_prod_util.h" + #include "base/memory/scoped_refptr.h" +diff --git a/net/cert/pki/general_names.h b/net/cert/pki/general_names.h +index e35e410a2fba7..7704837970178 100644 +--- a/net/cert/pki/general_names.h ++++ b/net/cert/pki/general_names.h +@@ -6,6 +6,7 @@ + #define NET_CERT_PKI_GENERAL_NAMES_H_ + + #include ++#include + #include + + #include "net/base/net_export.h" +diff --git a/net/filter/zstd_source_stream.cc b/net/filter/zstd_source_stream.cc +index bd337d14366bb..551729ac542b7 100644 +--- a/net/filter/zstd_source_stream.cc ++++ b/net/filter/zstd_source_stream.cc +@@ -5,6 +5,7 @@ + #include "net/filter/zstd_source_stream.h" + + #include ++#include + #include + + #define ZSTD_STATIC_LINKING_ONLY +diff --git a/ui/events/gesture_detection/motion_event_generic.h b/ui/events/gesture_detection/motion_event_generic.h +index 5460f7f8adf46..e508335d47ae9 100644 +--- a/ui/events/gesture_detection/motion_event_generic.h ++++ b/ui/events/gesture_detection/motion_event_generic.h +@@ -5,6 +5,8 @@ + #ifndef UI_EVENTS_GESTURE_DETECTION_MOTION_EVENT_GENERIC_H_ + #define UI_EVENTS_GESTURE_DETECTION_MOTION_EVENT_GENERIC_H_ + ++#include ++ + #include + #include + +-- +2.42.1 + diff --git a/recipes-wam/cef/files/chromium/0022-M118-fix-Fix-aggregate-initialization-in-trace_log.patch b/recipes-wam/cef/files/chromium/0022-M118-fix-Fix-aggregate-initialization-in-trace_log.patch new file mode 100644 index 00000000..39e5c605 --- /dev/null +++ b/recipes-wam/cef/files/chromium/0022-M118-fix-Fix-aggregate-initialization-in-trace_log.patch @@ -0,0 +1,34 @@ +From a46e381a9007ab552d4551711611cd9d231a9f17 Mon Sep 17 00:00:00 2001 +From: Roger Zanoni +Date: Wed, 25 Oct 2023 15:59:23 -0300 +Subject: [PATCH 22/33] [M118-fix] Fix aggregate initialization in trace_log + +clang 14 doesn't parenthesized initialization of aggregates, so we are +explicitly defining the needed constructor. + +Upstream-Status: Inappropriate +Signed-off-by: Roger Zanoni +--- + base/trace_event/trace_log.h | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/base/trace_event/trace_log.h b/base/trace_event/trace_log.h +index 2778526e87b78..3b7e0f0306cf5 100644 +--- a/base/trace_event/trace_log.h ++++ b/base/trace_event/trace_log.h +@@ -420,6 +420,12 @@ class BASE_EXPORT TraceLog : + + #if BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY) + struct TrackEventSession { ++ TrackEventSession(uint32_t internal_instance_index, ++ perfetto::DataSourceConfig config, ++ perfetto::BackendType backend_type = perfetto::kUnspecifiedBackend) ++ : internal_instance_index{internal_instance_index} ++ , config{config} ++ , backend_type{backend_type} {} + uint32_t internal_instance_index; + perfetto::DataSourceConfig config; + perfetto::BackendType backend_type = perfetto::kUnspecifiedBackend; +-- +2.42.1 + diff --git a/recipes-wam/cef/files/chromium/0023-M118-fix-Add-missing-typename-keyword-in-multiple-st.patch b/recipes-wam/cef/files/chromium/0023-M118-fix-Add-missing-typename-keyword-in-multiple-st.patch new file mode 100644 index 00000000..ea0b2c59 --- /dev/null +++ b/recipes-wam/cef/files/chromium/0023-M118-fix-Add-missing-typename-keyword-in-multiple-st.patch @@ -0,0 +1,140 @@ +From a1077aa6d029f729143727ab8d25f85121f871a3 Mon Sep 17 00:00:00 2001 +From: Roger Zanoni +Date: Thu, 26 Oct 2023 07:43:26 -0300 +Subject: [PATCH 23/33] [M118-fix] Add missing 'typename' keyword in multiple + statements + +Add the typename keywork where it's needed as this causes build issues +in clang 14. + +Upstream-Status: Inappropriate +Signed-off-by: Roger Zanoni +--- + .../optimization_guide/core/tflite_model_executor.h | 8 ++++---- + components/supervised_user/core/browser/proto_fetcher.cc | 6 +++--- + components/supervised_user/core/browser/proto_fetcher.h | 4 ++-- + ui/base/interaction/interactive_test_internal.h | 6 +++--- + 4 files changed, 12 insertions(+), 12 deletions(-) + +diff --git a/components/optimization_guide/core/tflite_model_executor.h b/components/optimization_guide/core/tflite_model_executor.h +index 027ae8e101634..a256a85322e54 100644 +--- a/components/optimization_guide/core/tflite_model_executor.h ++++ b/components/optimization_guide/core/tflite_model_executor.h +@@ -262,7 +262,7 @@ class TFLiteModelExecutor : public ModelExecutor { + // Starts the synchronous execution of the model. Returns model outputs. + // Model needs to be loaded. Synchronous calls do not load or unload model. + std::vector> SendForBatchExecutionSync( +- ModelExecutor::ConstRefInputVector inputs) ++ typename ModelExecutor::ConstRefInputVector inputs) + override { + DCHECK(execution_task_runner_->RunsTasksInCurrentSequence()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); +@@ -417,7 +417,7 @@ class TFLiteModelExecutor : public ModelExecutor { + // executes it on the model execution thread. + void LoadModelFileAndBatchExecute( + BatchExecutionCallback callback_on_complete, +- ModelExecutor::ConstRefInputVector inputs) { ++ typename ModelExecutor::ConstRefInputVector inputs) { + DCHECK(execution_task_runner_->RunsTasksInCurrentSequence()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + +@@ -434,7 +434,7 @@ class TFLiteModelExecutor : public ModelExecutor { + + // Batch executes the loaded model for inputs. + void BatchExecuteLoadedModel( +- ModelExecutor::ConstRefInputVector inputs, ++ typename ModelExecutor::ConstRefInputVector inputs, + std::vector>* outputs) { + DCHECK(execution_task_runner_->RunsTasksInCurrentSequence()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); +@@ -494,7 +494,7 @@ class TFLiteModelExecutor : public ModelExecutor { + // Unloads the model if needed. + void BatchExecuteLoadedModelAndRunCallback( + BatchExecutionCallback callback_on_complete, +- ModelExecutor::ConstRefInputVector inputs, ++ typename ModelExecutor::ConstRefInputVector inputs, + ExecutionStatus execution_status) { + DCHECK(execution_task_runner_->RunsTasksInCurrentSequence()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); +diff --git a/components/supervised_user/core/browser/proto_fetcher.cc b/components/supervised_user/core/browser/proto_fetcher.cc +index 9c8e7b5cb88f4..92a614d75b579 100644 +--- a/components/supervised_user/core/browser/proto_fetcher.cc ++++ b/components/supervised_user/core/browser/proto_fetcher.cc +@@ -399,7 +399,7 @@ class RetryingFetcherImpl final : public DeferredFetcherImpl { + RetryingFetcherImpl(const RetryingFetcherImpl&) = delete; + RetryingFetcherImpl& operator=(const RetryingFetcherImpl&) = delete; + +- void Start(ProtoFetcher::Callback callback) override { ++ void Start(typename ProtoFetcher::Callback callback) override { + callback_ = std::move(callback); + Retry(); + } +@@ -435,7 +435,7 @@ class RetryingFetcherImpl final : public DeferredFetcherImpl { + } + + // Client callback. +- ProtoFetcher::Callback callback_; ++ typename ProtoFetcher::Callback callback_; + + // Retry controls. + base::OneShotTimer timer_; +@@ -578,7 +578,7 @@ ParallelFetchManager::ParallelFetchManager( + template + void ParallelFetchManager::Fetch( + const Request& request, +- Fetcher::Callback callback) { ++ typename Fetcher::Callback callback) { + CHECK(callback) << "Use base::DoNothing() instead of empty callback."; + KeyType key = requests_in_flight_.Add(MakeFetcher(request)); + requests_in_flight_.Lookup(key)->Start( +diff --git a/components/supervised_user/core/browser/proto_fetcher.h b/components/supervised_user/core/browser/proto_fetcher.h +index 8266c99d78a7a..9c41978aea68e 100644 +--- a/components/supervised_user/core/browser/proto_fetcher.h ++++ b/components/supervised_user/core/browser/proto_fetcher.h +@@ -165,10 +165,10 @@ class ParallelFetchManager { + + // Starts the fetch. Underlying fetcher is stored internally, and will be + // cleaned up after finish or when this manager is destroyed. +- void Fetch(const Request& request, Fetcher::Callback callback); ++ void Fetch(const Request& request, typename Fetcher::Callback callback); + + private: +- using KeyType = base::IDMap>::KeyType; ++ using KeyType = typename base::IDMap>::KeyType; + + // Remove fetcher under key from requests_in_flight_. + void Remove(KeyType key); +diff --git a/ui/base/interaction/interactive_test_internal.h b/ui/base/interaction/interactive_test_internal.h +index 080152fa265cd..a3c9b22f79487 100644 +--- a/ui/base/interaction/interactive_test_internal.h ++++ b/ui/base/interaction/interactive_test_internal.h +@@ -108,7 +108,7 @@ class InteractiveTestPrivate { + + // Adds `state_observer` and associates it with an element with identifier + // `id` and context `context`. +- template ++ template + void AddStateObserver(ElementIdentifier id, + ElementContext context, + std::unique_ptr state_observer); +@@ -457,7 +457,7 @@ struct ArgsExtractor { + }; + + template +-using ReturnTypeOf = MaybeBindTypeHelper::ReturnType; ++using ReturnTypeOf = typename MaybeBindTypeHelper::ReturnType; + + template + using NthArgumentOf = std::tuple_element_t< +@@ -556,7 +556,7 @@ struct MatcherTypeHelper { + }; + + template +-using MatcherTypeFor = MatcherTypeHelper>::ActualType; ++using MatcherTypeFor = typename MatcherTypeHelper>::ActualType; + + template + class IsMatcherHelper { +-- +2.42.1 + diff --git a/recipes-wam/cef/files/chromium/0024-M118-fix-Fix-comparison-in-HostResolverCache.patch b/recipes-wam/cef/files/chromium/0024-M118-fix-Fix-comparison-in-HostResolverCache.patch new file mode 100644 index 00000000..ab487339 --- /dev/null +++ b/recipes-wam/cef/files/chromium/0024-M118-fix-Fix-comparison-in-HostResolverCache.patch @@ -0,0 +1,34 @@ +From 590fdfc0339a2d82f30927b7c4e35b5e24d2dcc8 Mon Sep 17 00:00:00 2001 +From: Roger Zanoni +Date: Mon, 30 Oct 2023 08:14:34 -0300 +Subject: [PATCH 24/33] [M118-fix] Fix comparison in HostResolverCache + +Fixes the string_view/basic_strinc comparison: + +error: invalid operands to binary expression +('tuple<...basic_string_view &, ...>' and 'tuple &, ...') + return std::tie(lhs.domain_name, *lhs.network_anonymization_key) < + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ + +Upstream-Status: Inappropriate +Signed-off-by: Roger Zanoni +--- + net/dns/host_resolver_cache.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/net/dns/host_resolver_cache.h b/net/dns/host_resolver_cache.h +index 934e0682c9864..2bb147de0ff19 100644 +--- a/net/dns/host_resolver_cache.h ++++ b/net/dns/host_resolver_cache.h +@@ -120,7 +120,7 @@ class NET_EXPORT HostResolverCache final { + struct Key { + ~Key(); + +- std::string domain_name; ++ base::StringPiece domain_name; + NetworkAnonymizationKey network_anonymization_key; + }; + +-- +2.42.1 + diff --git a/recipes-wam/cef/files/chromium/0025-M118-fix-Avoid-using-std-ranges-any_of-find_if-none_.patch b/recipes-wam/cef/files/chromium/0025-M118-fix-Avoid-using-std-ranges-any_of-find_if-none_.patch new file mode 100644 index 00000000..fff1423e --- /dev/null +++ b/recipes-wam/cef/files/chromium/0025-M118-fix-Avoid-using-std-ranges-any_of-find_if-none_.patch @@ -0,0 +1,92 @@ +From ded11a971e690a00075c4f337fa09469b69b69a5 Mon Sep 17 00:00:00 2001 +From: Roger Zanoni +Date: Mon, 30 Oct 2023 15:03:04 -0300 +Subject: [PATCH 25/33] [M118-fix] Avoid using + std::ranges::any_of/find_if/none_of/all_of + +Those functions are available only in newer c++ standards(C++20). +Chromium defines those functions in base::ranges. + +Upstream-Status: Inappropriate +Signed-off-by: Roger Zanoni +--- + chrome/browser/ui/webauthn/sheet_models.cc | 2 +- + .../browser/webauthn/authenticator_request_dialog_model.cc | 2 +- + .../webauthn/chrome_authenticator_request_delegate.cc | 4 ++-- + device/fido/get_assertion_request_handler.cc | 5 +++-- + 4 files changed, 7 insertions(+), 6 deletions(-) + +diff --git a/chrome/browser/ui/webauthn/sheet_models.cc b/chrome/browser/ui/webauthn/sheet_models.cc +index e72087c22dc84..1d1999fdc49c3 100644 +--- a/chrome/browser/ui/webauthn/sheet_models.cc ++++ b/chrome/browser/ui/webauthn/sheet_models.cc +@@ -1499,7 +1499,7 @@ AuthenticatorMultiSourcePickerSheetModel:: + using ICloudKeychainMech = + AuthenticatorRequestDialogModel::Mechanism::ICloudKeychain; + bool has_local_passkeys = +- std::ranges::any_of(dialog_model->mechanisms(), [](const auto& mech) { ++ base::ranges::any_of(dialog_model->mechanisms(), [](const auto& mech) { + return absl::holds_alternative(mech.type) && + absl::get(mech.type).value().source != + device::AuthenticatorType::kPhone; +diff --git a/chrome/browser/webauthn/authenticator_request_dialog_model.cc b/chrome/browser/webauthn/authenticator_request_dialog_model.cc +index 7695aa00f44a8..fa983ddf1a166 100644 +--- a/chrome/browser/webauthn/authenticator_request_dialog_model.cc ++++ b/chrome/browser/webauthn/authenticator_request_dialog_model.cc +@@ -495,7 +495,7 @@ void AuthenticatorRequestDialogModel:: + // extra step. Jump to Windows instead. + if (base::FeatureList::IsEnabled(device::kWebAuthnNewPasskeyUI) && + transport_availability_.has_win_native_api_authenticator && +- std::ranges::all_of(mechanisms_, [](const auto& mech) { ++ base::ranges::all_of(mechanisms_, [](const auto& mech) { + return absl::holds_alternative(mech.type) || + (absl::holds_alternative(mech.type) && + absl::get(mech.type).value().source == +diff --git a/chrome/browser/webauthn/chrome_authenticator_request_delegate.cc b/chrome/browser/webauthn/chrome_authenticator_request_delegate.cc +index 15773fad86902..6ddd5cba1d6f3 100644 +--- a/chrome/browser/webauthn/chrome_authenticator_request_delegate.cc ++++ b/chrome/browser/webauthn/chrome_authenticator_request_delegate.cc +@@ -886,8 +886,8 @@ void ChromeAuthenticatorRequestDelegate::OnTransportAvailabilityEnumerated( + if (data.has_platform_authenticator_credential == + device::FidoRequestHandlerBase::RecognizedCredential:: + kHasRecognizedCredential && +- std::ranges::none_of(data.recognized_credentials, +- IsCredentialFromPlatformAuthenticator)) { ++ base::ranges::none_of(data.recognized_credentials, ++ IsCredentialFromPlatformAuthenticator)) { + data.has_platform_authenticator_credential = device:: + FidoRequestHandlerBase::RecognizedCredential::kNoRecognizedCredential; + } +diff --git a/device/fido/get_assertion_request_handler.cc b/device/fido/get_assertion_request_handler.cc +index 507cc2b46ddb6..80b6da1799c33 100644 +--- a/device/fido/get_assertion_request_handler.cc ++++ b/device/fido/get_assertion_request_handler.cc +@@ -15,6 +15,7 @@ + #include "base/functional/bind.h" + #include "base/json/json_writer.h" + #include "base/metrics/histogram_functions.h" ++#include "base/ranges/algorithm.h" + #include "base/stl_util.h" + #include "base/strings/string_number_conversions.h" + #include "base/timer/elapsed_timer.h" +@@ -370,7 +371,7 @@ bool AllowListOnlyHybridOrInternal(const CtapGetAssertionRequest& request) { + + bool AllowListIncludedTransport(const CtapGetAssertionRequest& request, + FidoTransportProtocol transport) { +- return std::ranges::any_of( ++ return base::ranges::any_of( + request.allow_list, + [transport](const PublicKeyCredentialDescriptor& cred) { + return cred.transports.empty() || +@@ -441,7 +442,7 @@ void GetAssertionRequestHandler::PreselectAccount( + PublicKeyCredentialDescriptor credential) { + DCHECK(!preselected_credential_); + DCHECK(request_.allow_list.empty() || +- std::ranges::any_of( ++ base::ranges::any_of( + request_.allow_list, + [&credential](const PublicKeyCredentialDescriptor& desc) { + return desc.id == credential.id; +-- +2.42.1 + diff --git a/recipes-wam/cef/files/chromium/0026-M118-fix-Add-deleted-constructors-operators.patch b/recipes-wam/cef/files/chromium/0026-M118-fix-Add-deleted-constructors-operators.patch new file mode 100644 index 00000000..06106360 --- /dev/null +++ b/recipes-wam/cef/files/chromium/0026-M118-fix-Add-deleted-constructors-operators.patch @@ -0,0 +1,339 @@ +From 19a3339965f79f8ae8ab650850461cbd0a782bff Mon Sep 17 00:00:00 2001 +From: Roger Zanoni +Date: Mon, 30 Oct 2023 15:28:20 -0300 +Subject: [PATCH 26/33] [M118-fix] Add deleted constructors/operators + +Apparently the rules for deleting the implicitly-defined move +constructor/operators is different in clang 14 and this causes build +issues where the constructors or operators are needed. + +So we explicitly declare all the needed constructors defined as deleted +by the compiler. + +Upstream-Status: Inappropriate, only affects older versions of clang +Signed-off-by: Roger Zanoni +--- + .../profile_management_navigation_throttle.cc | 22 +++++++++++++ + .../core/browser/profile_token_quality.cc | 12 +++---- + .../core/browser/profile_token_quality.h | 15 +++++++++ + .../public/common/download_save_item_data.h | 5 +++ + .../fenced_frame/fenced_frame_reporter.h | 25 +++++++++++++++ + .../header_direct_from_seller_signals.cc | 4 ++- + .../webid/idp_network_request_manager.h | 31 +++++++++++++++++++ + .../renderer/platform/fonts/font_palette.h | 1 + + .../gesture_detection/motion_event_generic.cc | 27 ++++++++++++++++ + .../gesture_detection/motion_event_generic.h | 6 ++-- + 10 files changed, 139 insertions(+), 9 deletions(-) + +diff --git a/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc b/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc +index aecaaf76762ee..3b02142d3e722 100644 +--- a/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc ++++ b/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc +@@ -5,6 +5,7 @@ + #include "chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.h" + + #include ++#include + + #include "base/command_line.h" + #include "base/containers/contains.h" +@@ -47,6 +48,27 @@ constexpr char kGoogleServiceLoginUrl[] = + // Utility struct used to store SAML attributes related to third-party profile + // management. + struct SAMLProfileAttributes { ++ SAMLProfileAttributes() {} ++ SAMLProfileAttributes(std::string n, std::string d, std::string t) ++ : name{n}, domain{d}, token{t} {} ++ SAMLProfileAttributes(const SAMLProfileAttributes& o) ++ : SAMLProfileAttributes(o.name, ++ o.domain, ++ o.token) {} ++ SAMLProfileAttributes(SAMLProfileAttributes&& o) ++ : name{std::move(o.name)} ++ , domain{std::move(o.domain)} ++ , token{std::move(o.token)} {} ++ SAMLProfileAttributes& operator=(const SAMLProfileAttributes& o) { ++ return *this = SAMLProfileAttributes(o); ++ } ++ SAMLProfileAttributes& operator=(SAMLProfileAttributes&& o) { ++ name = std::move(o.name); ++ domain = std::move(o.domain); ++ token = std::move(o.token); ++ return *this; ++ } ++ + std::string name; + std::string domain; + std::string token; +diff --git a/components/autofill/core/browser/profile_token_quality.cc b/components/autofill/core/browser/profile_token_quality.cc +index ff5f175372f39..e1c18eccb84b3 100644 +--- a/components/autofill/core/browser/profile_token_quality.cc ++++ b/components/autofill/core/browser/profile_token_quality.cc +@@ -241,10 +241,10 @@ bool ProfileTokenQuality::AddObservationsForFilledForm( + } + possible_observations.emplace_back( + stored_type, +- Observation{.type = base::to_underlying(GetObservationTypeFromField( ++ Observation(base::to_underlying(GetObservationTypeFromField( + field, form_data.fields[i].value, other_profiles, + pdm.app_locale())), +- .form_hash = hash}); ++ hash)); + } + return AddSubsetOfObservations(std::move(possible_observations)) > 0; + } +@@ -387,10 +387,10 @@ void ProfileTokenQuality::LoadSerializedObservationsForStoredType( + for (size_t i = 0; i + 1 < serialized_data.size(); i += 2) { + AddObservation( + type, +- Observation{ +- .type = std::min(serialized_data[i], +- base::to_underlying(ObservationType::kMaxValue)), +- .form_hash = FormSignatureHash(serialized_data[i + 1])}); ++ Observation( ++ std::min(serialized_data[i], ++ base::to_underlying(ObservationType::kMaxValue)), ++ FormSignatureHash(serialized_data[i + 1]))); + } + } + +diff --git a/components/autofill/core/browser/profile_token_quality.h b/components/autofill/core/browser/profile_token_quality.h +index 9dc16a1f98a13..2f726f04ab8d3 100644 +--- a/components/autofill/core/browser/profile_token_quality.h ++++ b/components/autofill/core/browser/profile_token_quality.h +@@ -211,6 +211,21 @@ class ProfileTokenQuality { + // For this reason, it is preferred to store the `ObservationType`s as their + // underlying type in the data model as well. + // Getters expose unknown values as `kUnknown`. ++ Observation(std::underlying_type_t t, ++ FormSignatureHash h) : type{t}, form_hash{h} {} ++ Observation(const Observation &o) ++ : Observation(o.type, o.form_hash) {} ++ Observation(Observation &&o) : type{std::move(o.type)}, ++ form_hash{std::move(o.form_hash)} {} ++ Observation& operator=(const Observation& o) { ++ return *this = Observation(o); ++ } ++ Observation& operator=(Observation&& o) noexcept { ++ type = std::move(o.type); ++ form_hash = std::move(o.form_hash); ++ return *this; ++ } ++ + std::underlying_type_t type; + FormSignatureHash form_hash = FormSignatureHash(0); + }; +diff --git a/components/download/public/common/download_save_item_data.h b/components/download/public/common/download_save_item_data.h +index 754aec2f64f6d..d49c3cd545b06 100644 +--- a/components/download/public/common/download_save_item_data.h ++++ b/components/download/public/common/download_save_item_data.h +@@ -20,6 +20,11 @@ class COMPONENTS_DOWNLOAD_EXPORT DownloadSaveItemData + : public base::SupportsUserData::Data { + public: + struct ItemInfo { ++ ItemInfo(base::FilePath f, GURL u, GURL r) ++ : file_path{f} ++ , url{u} ++ , referrer_url{r} {} ++ + // The final path where this file of the package will be saved. + base::FilePath file_path; + // The url this file was downloaded from. +diff --git a/content/browser/fenced_frame/fenced_frame_reporter.h b/content/browser/fenced_frame/fenced_frame_reporter.h +index 19ebadf3e14f7..8d2ee62847ced 100644 +--- a/content/browser/fenced_frame/fenced_frame_reporter.h ++++ b/content/browser/fenced_frame/fenced_frame_reporter.h +@@ -8,6 +8,7 @@ + #include + #include + #include ++#include + #include + + #include "base/containers/flat_map.h" +@@ -40,6 +41,21 @@ class RenderFrameHostImpl; + // `type` is the key for the `ReportingUrlMap`, and `data` is sent with the + // request as a POST. + struct DestinationEnumEvent { ++ DestinationEnumEvent(std::string t, std::string d) ++ : type{std::move(t)} ++ , data{std::move(d)} {} ++ DestinationEnumEvent(const DestinationEnumEvent& o) ++ : DestinationEnumEvent(o.type, o.data) {} ++ DestinationEnumEvent(DestinationEnumEvent&& o) ++ : type{std::move(o.type)} ++ , data{std::move(o.data)} {} ++ DestinationEnumEvent& operator=(const DestinationEnumEvent& o) { ++ return *this = DestinationEnumEvent(o); ++ } ++ DestinationEnumEvent& operator=(DestinationEnumEvent&& o) { ++ std::swap(type, o.type); ++ std::swap(data, o.data); ++ } + std::string type; + std::string data; + }; +@@ -48,6 +64,15 @@ struct DestinationEnumEvent { + // `url` is the custom destination url, and the request is sent as a GET. + // Macros are substituted using the `ReportingMacros`. + struct DestinationURLEvent { ++ DestinationURLEvent(const GURL& u) : url{u} {} ++ DestinationURLEvent(const DestinationURLEvent& u) : url{u.url} {} ++ DestinationURLEvent(DestinationURLEvent&& u) : url{std::move(u.url)} {} ++ DestinationURLEvent& operator=(const DestinationURLEvent& o) { ++ return *this =DestinationURLEvent(o); ++ } ++ DestinationURLEvent& operator=(DestinationURLEvent&& o) { ++ std::swap(url, o.url); ++ } + GURL url; + }; + +diff --git a/content/browser/interest_group/header_direct_from_seller_signals.cc b/content/browser/interest_group/header_direct_from_seller_signals.cc +index fe59d11edf449..facbec80a203a 100644 +--- a/content/browser/interest_group/header_direct_from_seller_signals.cc ++++ b/content/browser/interest_group/header_direct_from_seller_signals.cc +@@ -16,6 +16,7 @@ + #include "base/strings/stringprintf.h" + #include "base/values.h" + #include "services/data_decoder/public/cpp/data_decoder.h" ++#include "third_party/abseil-cpp/absl/types/optional.h" + #include "url/gurl.h" + #include "url/origin.h" + #include "url/url_constants.h" +@@ -187,7 +188,8 @@ void OnJsonDecoded(std::unique_ptr> responses, + + } // namespace + +-HeaderDirectFromSellerSignals::HeaderDirectFromSellerSignals() = default; ++HeaderDirectFromSellerSignals::HeaderDirectFromSellerSignals() : seller_signals_{absl::nullopt} ++ , auction_signals_{absl::nullopt} {} + + HeaderDirectFromSellerSignals::~HeaderDirectFromSellerSignals() = default; + +diff --git a/content/browser/webid/idp_network_request_manager.h b/content/browser/webid/idp_network_request_manager.h +index 6a652e0a22b44..307e0f4a68f48 100644 +--- a/content/browser/webid/idp_network_request_manager.h ++++ b/content/browser/webid/idp_network_request_manager.h +@@ -75,6 +75,24 @@ class CONTENT_EXPORT IdpNetworkRequestManager { + kInvalidContentTypeError, + }; + struct FetchStatus { ++ FetchStatus(ParseStatus p, int r) ++ : parse_status{p} ++ , response_code{r} {} ++ FetchStatus(const FetchStatus& o) ++ : FetchStatus(o.parse_status, ++ o.response_code) {} ++ FetchStatus(FetchStatus&& o) ++ : parse_status{std::move(o.parse_status)} ++ , response_code{std::move(o.response_code)} {} ++ FetchStatus& operator=(const FetchStatus& o) { ++ return *this = FetchStatus(o); ++ } ++ FetchStatus& operator=(FetchStatus&& o) { ++ std::swap(parse_status, o.parse_status); ++ std::swap(response_code, o.response_code); ++ return *this; ++ } ++ + ParseStatus parse_status; + // The HTTP response code, if one was received, otherwise the net error. It + // is possible to distinguish which it is since HTTP response codes are +@@ -117,6 +135,19 @@ class CONTENT_EXPORT IdpNetworkRequestManager { + }; + + struct IdentityCredentialTokenError { ++ IdentityCredentialTokenError(int c, GURL u) : code{c}, url{u} {} ++ IdentityCredentialTokenError(const IdentityCredentialTokenError &o) ++ : IdentityCredentialTokenError(o.code, o.url) {} ++ IdentityCredentialTokenError(IdentityCredentialTokenError &&o) ++ : code{std::move(o.code)}, url{std::move(o.url)} {} ++ IdentityCredentialTokenError& operator=(const IdentityCredentialTokenError& o) { ++ return *this = IdentityCredentialTokenError(o); ++ } ++ IdentityCredentialTokenError& operator=(IdentityCredentialTokenError&& o) { ++ std::swap(code, o.code); ++ std::swap(url, o.url); ++ return *this; ++ } + int code; + GURL url; + }; +diff --git a/third_party/blink/renderer/platform/fonts/font_palette.h b/third_party/blink/renderer/platform/fonts/font_palette.h +index 01dac9c908e9e..9a1a167acf213 100644 +--- a/third_party/blink/renderer/platform/fonts/font_palette.h ++++ b/third_party/blink/renderer/platform/fonts/font_palette.h +@@ -60,6 +60,7 @@ class PLATFORM_EXPORT FontPalette : public RefCounted { + }; + + struct NonNormalizedPercentages { ++ NonNormalizedPercentages(double s, double e) : start{s}, end{e} {} + double start; + double end; + bool operator==(const NonNormalizedPercentages& other) const { +diff --git a/ui/events/gesture_detection/motion_event_generic.cc b/ui/events/gesture_detection/motion_event_generic.cc +index 77c5edaa17ee4..a312c6d4de0cf 100644 +--- a/ui/events/gesture_detection/motion_event_generic.cc ++++ b/ui/events/gesture_detection/motion_event_generic.cc +@@ -348,6 +348,33 @@ MotionEventGeneric& MotionEventGeneric::operator=( + return *this; + } + ++MotionEventGeneric& MotionEventGeneric::operator=( ++ MotionEventGeneric&& other) { ++ action_ = std::move(other.action_); ++ event_time_ = std::move(other.event_time_); ++ unique_event_id_ = std::move(other.unique_event_id_); ++ action_index_ = std::move(other.action_index_); ++ button_state_ = std::move(other.button_state_); ++ flags_ = std::move(other.flags_); ++ pointers_ = std::move(other.pointers_); ++ const size_t history_size = std::move(other.GetHistorySize()); ++ for (size_t h = 0; h < history_size; ++h) ++ PushHistoricalEvent(other.historical_events_[h]->Clone()); ++} ++ ++MotionEventGeneric::MotionEventGeneric(MotionEventGeneric&& other) { ++ action_ = std::move(other.action_); ++ event_time_ = std::move(other.event_time_); ++ unique_event_id_ = std::move(other.unique_event_id_); ++ action_index_ = std::move(other.action_index_); ++ button_state_ = std::move(other.button_state_); ++ flags_ = std::move(other.flags_); ++ pointers_ = std::move(other.pointers_); ++ const size_t history_size = std::move(other.GetHistorySize()); ++ for (size_t h = 0; h < history_size; ++h) ++ PushHistoricalEvent(other.historical_events_[h]->Clone()); ++} ++ + void MotionEventGeneric::PopPointer() { + DCHECK_GT(pointers_.size(), 0U); + pointers_.pop_back(); +diff --git a/ui/events/gesture_detection/motion_event_generic.h b/ui/events/gesture_detection/motion_event_generic.h +index e508335d47ae9..ed87c6254412c 100644 +--- a/ui/events/gesture_detection/motion_event_generic.h ++++ b/ui/events/gesture_detection/motion_event_generic.h +@@ -55,6 +55,9 @@ class GESTURE_DETECTION_EXPORT MotionEventGeneric : public MotionEvent { + base::TimeTicks event_time, + const PointerProperties& pointer); + MotionEventGeneric(const MotionEventGeneric& other); ++ MotionEventGeneric(MotionEventGeneric&& other); ++ MotionEventGeneric& operator=(const MotionEventGeneric& other); ++ MotionEventGeneric& operator=(MotionEventGeneric&& other); + + ~MotionEventGeneric() override; + +@@ -124,8 +127,7 @@ class GESTURE_DETECTION_EXPORT MotionEventGeneric : public MotionEvent { + protected: + MotionEventGeneric(); + MotionEventGeneric(const MotionEvent& event, bool with_history); +- MotionEventGeneric& operator=(const MotionEventGeneric& other); +- ++ + void PopPointer(); + + private: +-- +2.42.1 + diff --git a/recipes-wam/cef/files/chromium/0027-M118-fix-Initialize-percentages-member-on-blink-Font.patch b/recipes-wam/cef/files/chromium/0027-M118-fix-Initialize-percentages-member-on-blink-Font.patch new file mode 100644 index 00000000..9d7e30eb --- /dev/null +++ b/recipes-wam/cef/files/chromium/0027-M118-fix-Initialize-percentages-member-on-blink-Font.patch @@ -0,0 +1,52 @@ +From c206c886eabc8f03289802276f826baedf0e4e54 Mon Sep 17 00:00:00 2001 +From: Roger Zanoni +Date: Mon, 30 Oct 2023 21:20:48 -0300 +Subject: [PATCH 27/33] [M118-fix] Initialize percentages member on + blink::FontPalette + +Fixes the build issue: + +error: constructor for 'blink::FontPalette' must explicitly +initialize the member 'percentages_' + +Upstream-Status: Inappropriate +Signed-off-by: Roger Zanoni +--- + .../blink/renderer/platform/fonts/font_palette.h | 11 ++++++++--- + 1 file changed, 8 insertions(+), 3 deletions(-) + +diff --git a/third_party/blink/renderer/platform/fonts/font_palette.h b/third_party/blink/renderer/platform/fonts/font_palette.h +index 9a1a167acf213..8c9a9c02439b5 100644 +--- a/third_party/blink/renderer/platform/fonts/font_palette.h ++++ b/third_party/blink/renderer/platform/fonts/font_palette.h +@@ -202,11 +202,14 @@ class PLATFORM_EXPORT FontPalette : public RefCounted { + + private: + explicit FontPalette(KeywordPaletteName palette_name) +- : palette_keyword_(palette_name), base_palette_({kNoBasePalette, 0}) {} ++ : palette_keyword_(palette_name), ++ base_palette_({kNoBasePalette, 0}), ++ percentages_{0.0, 0.0} {} + explicit FontPalette(AtomicString palette_values_name) + : palette_keyword_(kCustomPalette), + palette_values_name_(palette_values_name), +- base_palette_({kNoBasePalette, 0}) {} ++ base_palette_({kNoBasePalette, 0}), ++ percentages_{0.0, 0.0} {} + FontPalette( + scoped_refptr start, + scoped_refptr end, +@@ -224,7 +227,9 @@ class PLATFORM_EXPORT FontPalette : public RefCounted { + color_interpolation_space_(color_interpoaltion_space), + hue_interpolation_method_(hue_interpolation_method) {} + FontPalette() +- : palette_keyword_(kNormalPalette), base_palette_({kNoBasePalette, 0}) {} ++ : palette_keyword_(kNormalPalette), ++ base_palette_({kNoBasePalette, 0}), ++ percentages_{0.0, 0.0} {} + + KeywordPaletteName palette_keyword_; + AtomicString palette_values_name_; +-- +2.42.1 + diff --git a/recipes-wam/cef/files/chromium/0028-M118-fix-Don-t-delete-ZstdSourceStream-copy-move-cto.patch b/recipes-wam/cef/files/chromium/0028-M118-fix-Don-t-delete-ZstdSourceStream-copy-move-cto.patch new file mode 100644 index 00000000..d387b67c --- /dev/null +++ b/recipes-wam/cef/files/chromium/0028-M118-fix-Don-t-delete-ZstdSourceStream-copy-move-cto.patch @@ -0,0 +1,32 @@ +From f45fd7f3cd85c0d421c37202d0f4dff2f7925162 Mon Sep 17 00:00:00 2001 +From: Roger Zanoni +Date: Fri, 3 Nov 2023 15:53:09 -0300 +Subject: [PATCH 28/33] [M118-fix] Don't delete ZstdSourceStream copy/move + ctors + +std::unique_ptr requires the deleted ZstdSourceStream deleted +constructors and it causes a build issue. + +Upstream-Status: Inappropriate +Signed-off-by: Roger Zanoni +--- + net/filter/zstd_source_stream.cc | 3 --- + 1 file changed, 3 deletions(-) + +diff --git a/net/filter/zstd_source_stream.cc b/net/filter/zstd_source_stream.cc +index 551729ac542b7..81d4565608e7a 100644 +--- a/net/filter/zstd_source_stream.cc ++++ b/net/filter/zstd_source_stream.cc +@@ -64,9 +64,6 @@ class ZstdSourceStream : public FilterSourceStream { + } + } + +- ZstdSourceStream(const ZstdSourceStream&) = delete; +- ZstdSourceStream& operator=(const ZstdSourceStream&) = delete; +- + ~ZstdSourceStream() override { + if (ZSTD_isError(decoding_result_)) { + ZSTD_ErrorCode error_code = ZSTD_getErrorCode(decoding_result_); +-- +2.42.1 + diff --git a/recipes-wam/cef/files/chromium/0029-M118-fix-Fix-issue-with-structured-bindinds-captured.patch b/recipes-wam/cef/files/chromium/0029-M118-fix-Fix-issue-with-structured-bindinds-captured.patch new file mode 100644 index 00000000..fec15dd8 --- /dev/null +++ b/recipes-wam/cef/files/chromium/0029-M118-fix-Fix-issue-with-structured-bindinds-captured.patch @@ -0,0 +1,68 @@ +From f7581fa1a0c25d2b76407bb04fd77031f5108411 Mon Sep 17 00:00:00 2001 +From: Roger Zanoni +Date: Fri, 3 Nov 2023 21:08:22 -0300 +Subject: [PATCH 29/33] [M118-fix] Fix issue with structured bindinds captured + by nested lambdas + +In clang <=14 the build fails doesn't when lambdas capture +aliases created in structured bindinds, so we do a few init-captures to +fix that. + +Upstream-Status: Inappropriate +Signed-off-by: Roger Zanoni +--- + .../core/layout/ng/grid/ng_grid_layout_algorithm.cc | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc +index 64c7a7481dd15..71eb55954e253 100644 +--- a/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc ++++ b/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc +@@ -3494,7 +3494,7 @@ void NGGridLayoutAlgorithm::PlaceGridItems( + To(result->PhysicalFragment()); + NGBoxFragment fragment(container_writing_direction, physical_fragment); + +- auto BaselineOffset = [&](GridTrackSizingDirection track_direction, ++ auto BaselineOffset = [&, &layout_data = layout_data](GridTrackSizingDirection track_direction, + LayoutUnit size) -> LayoutUnit { + if (!grid_item.IsBaselineAligned(track_direction)) { + return LayoutUnit(); +@@ -3700,7 +3700,7 @@ void NGGridLayoutAlgorithm::PlaceGridItemsForFragmentation( + if (BreakToken()) + child_break_tokens = BreakToken()->ChildBreakTokens(); + +- auto PlaceItems = [&]() { ++ auto PlaceItems = [&, &grid_items = grid_items, &layout_data = layout_data]() { + // Reset our state. + result_and_offsets.clear(); + out_of_fragmentainer_space_item_placement.clear(); +@@ -3933,7 +3933,7 @@ void NGGridLayoutAlgorithm::PlaceGridItemsForFragmentation( + + // Adjust by |delta| the pre-computed item-offset for all grid items with a + // row begin index greater or equal than |row_index|. +- auto AdjustItemOffsets = [&](wtf_size_t row_index, LayoutUnit delta) { ++ auto AdjustItemOffsets = [&, &grid_items = grid_items](wtf_size_t row_index, LayoutUnit delta) { + auto current_item = grid_items.begin(); + + for (auto& item_placement_data : *grid_items_placement_data) { +@@ -3944,7 +3944,7 @@ void NGGridLayoutAlgorithm::PlaceGridItemsForFragmentation( + + // Adjust our grid break-token data to accommodate the larger item in the row. + // Returns true if this function adjusted the break-token data in any way. +- auto ExpandRow = [&]() -> bool { ++ auto ExpandRow = [&, &layout_data = layout_data]() -> bool { + if (max_row_expansion == 0) + return false; + +@@ -3963,7 +3963,7 @@ void NGGridLayoutAlgorithm::PlaceGridItemsForFragmentation( + // Shifts the row where we wish to take a breakpoint (indicated by + // |breakpoint_row_set_index|) into the next fragmentainer. + // Returns true if this function adjusted the break-token data in any way. +- auto ShiftBreakpointIntoNextFragmentainer = [&]() -> bool { ++ auto ShiftBreakpointIntoNextFragmentainer = [&, &layout_data = layout_data]() -> bool { + if (breakpoint_row_set_index == kNotFound) + return false; + +-- +2.42.1 + diff --git a/recipes-wam/cef/files/chromium/0030-M118-fix-Only-default-arm_use_neon-to-true-if-its-va.patch b/recipes-wam/cef/files/chromium/0030-M118-fix-Only-default-arm_use_neon-to-true-if-its-va.patch new file mode 100644 index 00000000..08a2db60 --- /dev/null +++ b/recipes-wam/cef/files/chromium/0030-M118-fix-Only-default-arm_use_neon-to-true-if-its-va.patch @@ -0,0 +1,107 @@ +From 55fe851951b11c30e010b5f3df618addf606e3d4 Mon Sep 17 00:00:00 2001 +From: Roger Zanoni +Date: Wed, 8 Nov 2023 14:35:21 -0300 +Subject: [PATCH 30/33] [M118-fix] Only default arm_use_neon to true if its + value wasn't already set + +arm_use_neon was always being set causing the build to fail. + +Upstream-Status: Needs checking +Signed-off-by: Roger Zanoni +--- + build/config/arm.gni | 58 +++++++++++++++++++++----------------------- + 1 file changed, 27 insertions(+), 31 deletions(-) + +diff --git a/build/config/arm.gni b/build/config/arm.gni +index 5b404c1ca94f0..575871c287c80 100644 +--- a/build/config/arm.gni ++++ b/build/config/arm.gni +@@ -9,36 +9,39 @@ import("//build/config/v8_target_cpu.gni") + # ARM code is being compiled. But they can also be relevant in the + # other contexts when the code will change its behavior based on the + # cpu it wants to generate code for. +-if (current_cpu == "arm" || v8_current_cpu == "arm") { +- declare_args() { +- # Version of the ARM processor when compiling on ARM. Ignored on non-ARM +- # platforms. +- arm_version = 7 ++declare_args() { ++ # Version of the ARM processor when compiling on ARM. Ignored on non-ARM ++ # platforms. ++ arm_version = 7 + +- # The ARM architecture. This will be a string like "armv6" or "armv7-a". +- # An empty string means to use the default for the arm_version. +- arm_arch = "" ++ # The ARM architecture. This will be a string like "armv6" or "armv7-a". ++ # An empty string means to use the default for the arm_version. ++ arm_arch = "" + +- # The ARM floating point hardware. This will be a string like "neon" or +- # "vfpv3". An empty string means to use the default for the arm_version. +- arm_fpu = "" ++ # The ARM floating point hardware. This will be a string like "neon" or ++ # "vfpv3". An empty string means to use the default for the arm_version. ++ arm_fpu = "" + +- # The ARM variant-specific tuning mode. This will be a string like "armv6" +- # or "cortex-a15". An empty string means to use the default for the +- # arm_version. +- arm_tune = "" ++ # The ARM variant-specific tuning mode. This will be a string like "armv6" ++ # or "cortex-a15". An empty string means to use the default for the ++ # arm_version. ++ arm_tune = "" + +- # Whether to use the neon FPU instruction set or not. +- arm_use_neon = "" ++ # Whether to use the neon FPU instruction set or not. ++ arm_use_neon = "" + +- # Whether to enable optional NEON code paths. +- arm_optionally_use_neon = false ++ # Whether to enable optional NEON code paths. ++ arm_optionally_use_neon = false + +- # Thumb is a reduced instruction set available on some ARM processors that +- # has increased code density. +- arm_use_thumb = true +- } ++ # Thumb is a reduced instruction set available on some ARM processors that ++ # has increased code density. ++ arm_use_thumb = true + ++ arm_control_flow_integrity = "none" ++ arm_float_abi = "" ++} ++ ++if (current_cpu == "arm" || v8_current_cpu == "arm") { + # For lacros build, we use ARM v8 by default. + if (is_chromeos_lacros && arm_arch == "") { + # TODO(crbug.com/1467681) Enable i8mm and dotprod instructions for ffmpeg +@@ -49,13 +52,6 @@ if (current_cpu == "arm" || v8_current_cpu == "arm") { + + if (current_os == "android" || target_os == "android") { + arm_float_abi = "softfp" +- } else { +- declare_args() { +- # The ARM floating point mode. This is either the string "hard", "soft", +- # or "softfp". An empty string means to use the default one for the +- # arm_version. +- arm_float_abi = "" +- } + } + assert(arm_float_abi == "" || arm_float_abi == "hard" || + arm_float_abi == "soft" || arm_float_abi == "softfp") +@@ -126,7 +122,7 @@ if (current_cpu == "arm" || v8_current_cpu == "arm") { + } + } + } +-} else if (current_cpu == "arm64" || v8_current_cpu == "arm64") { ++} else if (arm_use_neon == "" && (current_cpu == "arm64" || v8_current_cpu == "arm64")) { + # arm64 supports only "hard". + arm_float_abi = "hard" + arm_use_neon = true +-- +2.42.1 + diff --git a/recipes-wam/cef/files/chromium/0031-M118-fix-Add-a-way-to-set-different-lib-paths-host-a.patch b/recipes-wam/cef/files/chromium/0031-M118-fix-Add-a-way-to-set-different-lib-paths-host-a.patch new file mode 100644 index 00000000..fa4dfe60 --- /dev/null +++ b/recipes-wam/cef/files/chromium/0031-M118-fix-Add-a-way-to-set-different-lib-paths-host-a.patch @@ -0,0 +1,135 @@ +From e1bc5ea870e17afee145009194e6f2092dd1d3ff Mon Sep 17 00:00:00 2001 +From: Roger Zanoni +Date: Sun, 12 Nov 2023 19:41:07 -0300 +Subject: [PATCH 31/33] [M118-fix] Add a way to set different lib paths host + and target + +meta-clang on AGL defines a simplified path structure for clang's +runtime libraries and a different lib naming convention. + +Upstream-Status: Inappropriate +Signed-off-by: Roger Zanoni +--- + build/config/clang/BUILD.gn | 80 +++++++++++------------------------- + build/config/clang/clang.gni | 3 ++ + 2 files changed, 27 insertions(+), 56 deletions(-) + +diff --git a/build/config/clang/BUILD.gn b/build/config/clang/BUILD.gn +index fe044e29e428b..33edce7aed9a2 100644 +--- a/build/config/clang/BUILD.gn ++++ b/build/config/clang/BUILD.gn +@@ -3,6 +3,7 @@ + # found in the LICENSE file. + + import("//build/config/rust.gni") ++import("//v8/gni/snapshot_toolchain.gni") + import("clang.gni") + + if (is_ios) { +@@ -95,66 +96,33 @@ template("clang_lib") { + } + } else { + config(target_name) { +- _dir = "" ++ if (current_toolchain == host_toolchain || ++ current_toolchain == v8_snapshot_toolchain) { ++ _base_path = "$clang_base_path" ++ _cpu = host_cpu ++ } else { ++ _base_path = "$clang_base_path_target" ++ _cpu = target_cpu ++ } ++ ++ if (_cpu == "x64") { ++ _suffix = "-x86_64" ++ } else if (_cpu == "x86") { ++ _suffix = "-i386" ++ } else if (_cpu == "arm64") { ++ _suffix = "-aarch64" ++ } else if (_cpu == "arm") { ++ _suffix = "-arm" ++ } else { ++ assert(false) # Unhandled cpu type ++ } ++ ++ _dir = "linux" + _libname = invoker.libname + _prefix = "lib" +- _suffix = "" + _ext = "a" +- if (is_win) { +- _dir = "windows" +- _prefix = "" +- _ext = "lib" +- if (current_cpu == "x64") { +- _suffix = "-x86_64" +- } else if (current_cpu == "x86") { +- _suffix = "-i386" +- } else if (current_cpu == "arm64") { +- _suffix = "-aarch64" +- } else { +- assert(false) # Unhandled cpu type +- } +- } else if (is_apple) { +- _dir = "darwin" +- } else if (is_linux || is_chromeos) { +- if (current_cpu == "x64") { +- _dir = "x86_64-unknown-linux-gnu" +- } else if (current_cpu == "x86") { +- _dir = "i386-unknown-linux-gnu" +- } else if (current_cpu == "arm") { +- _dir = "armv7-unknown-linux-gnueabihf" +- } else if (current_cpu == "arm64") { +- _dir = "aarch64-unknown-linux-gnu" +- } else { +- assert(false) # Unhandled cpu type +- } +- } else if (is_fuchsia) { +- if (current_cpu == "x64") { +- _dir = "x86_64-unknown-fuchsia" +- } else if (current_cpu == "arm64") { +- _dir = "aarch64-unknown-fuchsia" +- } else { +- assert(false) # Unhandled cpu type +- } +- } else if (is_android) { +- _dir = "linux" +- if (current_cpu == "x64") { +- _suffix = "-x86_64-android" +- } else if (current_cpu == "x86") { +- _suffix = "-i686-android" +- } else if (current_cpu == "arm") { +- _suffix = "-arm-android" +- } else if (current_cpu == "arm64") { +- _suffix = "-aarch64-android" +- } else if (current_cpu == "riscv64") { +- _suffix = "-riscv64-android" +- } else { +- assert(false) # Unhandled cpu type +- } +- } else { +- assert(false) # Unhandled target platform +- } + +- _clang_lib_dir = "$clang_base_path/lib/clang/$clang_version/lib" ++ _clang_lib_dir = "$_base_path/lib/clang/$clang_version/lib" + _lib_file = "${_prefix}clang_rt.${_libname}${_suffix}.${_ext}" + libs = [ "$_clang_lib_dir/$_dir/$_lib_file" ] + } +diff --git a/build/config/clang/clang.gni b/build/config/clang/clang.gni +index 1a065b5e348b0..46fb56693b494 100644 +--- a/build/config/clang/clang.gni ++++ b/build/config/clang/clang.gni +@@ -26,6 +26,9 @@ declare_args() { + build_with_chromium && !is_official_build && is_linux && !is_castos + + clang_base_path = default_clang_base_path ++ ++ # used only for linking ++ clang_base_path_target = default_clang_base_path + + # Specifies whether or not bitcode should be embedded during compilation. + # This is used for creating a MLGO corpus from Chromium in the non-ThinLTO case. +-- +2.42.1 + diff --git a/recipes-wam/cef/files/chromium/0032-M118-fix-zlib-Fix-arm-build.patch b/recipes-wam/cef/files/chromium/0032-M118-fix-zlib-Fix-arm-build.patch new file mode 100644 index 00000000..3c2b3a77 --- /dev/null +++ b/recipes-wam/cef/files/chromium/0032-M118-fix-zlib-Fix-arm-build.patch @@ -0,0 +1,48 @@ +From 9ae234968078366877a1f8027423644ae7bbfb89 Mon Sep 17 00:00:00 2001 +From: Roger Zanoni +Date: Mon, 13 Nov 2023 11:07:15 -0300 +Subject: [PATCH 32/33] [M118-fix] zlib: Fix arm build + +Prevent inclusion of cpuid on arm builds. + +error: + +third_party/zlib/cpu_features.c:15: +cpuid.h:14:2: error: this header is for x86 only + +Upstream-Status: Inappropriate +Signed-off-by: Roger Zanoni +--- + third_party/zlib/adler32_simd.c | 2 +- + third_party/zlib/cpu_features.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/third_party/zlib/adler32_simd.c b/third_party/zlib/adler32_simd.c +index 58966eecf0b80..25867ace82bd2 100644 +--- a/third_party/zlib/adler32_simd.c ++++ b/third_party/zlib/adler32_simd.c +@@ -49,7 +49,7 @@ + /* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */ + #define NMAX 5552 + +-#if defined(ADLER32_SIMD_SSSE3) ++#if (__x86_64__ || __i386__) && defined(ADLER32_SIMD_SSSE3) + + #include + +diff --git a/third_party/zlib/cpu_features.c b/third_party/zlib/cpu_features.c +index 64e0428cd2fc2..c26c619970c10 100644 +--- a/third_party/zlib/cpu_features.c ++++ b/third_party/zlib/cpu_features.c +@@ -11,7 +11,7 @@ + #include + #if defined(_MSC_VER) + #include +-#elif defined(ADLER32_SIMD_SSSE3) ++#elif (__x86_64__ || __i386__) && defined(ADLER32_SIMD_SSSE3) + #include + #endif + +-- +2.42.1 + diff --git a/recipes-wam/cef/files/chromium/0033-M118-fix-Fix-skia-linker-issues-for-arm-neon.patch b/recipes-wam/cef/files/chromium/0033-M118-fix-Fix-skia-linker-issues-for-arm-neon.patch new file mode 100644 index 00000000..57f713b2 --- /dev/null +++ b/recipes-wam/cef/files/chromium/0033-M118-fix-Fix-skia-linker-issues-for-arm-neon.patch @@ -0,0 +1,56 @@ +From 0c37732e8443882518b79ce50b9389d1218484ef Mon Sep 17 00:00:00 2001 +From: Roger Zanoni +Date: Mon, 13 Nov 2023 22:10:25 -0300 +Subject: [PATCH 33/33] [M118-fix] Fix skia linker issues for arm neon + +Fixes the following linker issue: + +error: undefined symbol: skia::ConvolveHorizontally_Neon(...) + +Upstream-Status: Inappropriate +Signed-off-by: Roger Zanoni +--- + build/config/arm.gni | 5 +++++ + skia/ext/convolver.cc | 2 +- + 2 files changed, 6 insertions(+), 1 deletion(-) + +diff --git a/build/config/arm.gni b/build/config/arm.gni +index 575871c287c80..ebf56196c2605 100644 +--- a/build/config/arm.gni ++++ b/build/config/arm.gni +@@ -122,10 +122,14 @@ if (current_cpu == "arm" || v8_current_cpu == "arm") { + } + } + } ++ if (arm_use_neon) { ++ defines += [ "USE_NEON" ] ++ } + } else if (arm_use_neon == "" && (current_cpu == "arm64" || v8_current_cpu == "arm64")) { + # arm64 supports only "hard". + arm_float_abi = "hard" + arm_use_neon = true ++ defines += [ "USE_NEON" ] + declare_args() { + # Enables the new Armv8 branch protection features. Valid strings are: + # - "pac": Enables Pointer Authentication Code (PAC, featured in Armv8.3) +@@ -146,3 +150,4 @@ if (current_cpu == "arm" || v8_current_cpu == "arm") { + arm_control_flow_integrity == "pac", + "Invalid branch protection option") + } ++ +diff --git a/skia/ext/convolver.cc b/skia/ext/convolver.cc +index 8b3bd070d168a..a7d99de48d398 100644 +--- a/skia/ext/convolver.cc ++++ b/skia/ext/convolver.cc +@@ -371,7 +371,7 @@ void SetupSIMD(ConvolveProcs *procs) { + procs->extra_horizontal_reads = 3; + procs->convolve_vertically = &ConvolveVertically_mips_dspr2; + procs->convolve_horizontally = &ConvolveHorizontally_mips_dspr2; +-#elif defined SIMD_NEON ++#elif defined USE_NEON && defined SIMD_NEON + procs->extra_horizontal_reads = 3; + procs->convolve_vertically = &ConvolveVertically_Neon; + procs->convolve_4rows_horizontally = &Convolve4RowsHorizontally_Neon; +-- +2.42.1 + -- cgit 1.2.3-korg