From: Jose Dapena Paz Date: Fri, 21 Jan 2022 18:18:44 +0000 (+0100) Subject: chromium*, wam: fix systemd launching from systemd X-Git-Tag: 12.92.0~2 X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=commitdiff_plain;h=c0c3c0f73d420aa91f884b62b12442bc876c889d;p=AGL%2Fmeta-agl-demo.git chromium*, wam: fix systemd launching from systemd Instead of providing a SMACK aware system service for WAM per session instance, provide a systemd user service depending on the new services in Marlin. Update the chromium84 and wam heads to include the required changes. We also remove the patches applied from recipe, so they belong to the chromium tree now. chromium84: 3d6fd5dd0b..4a320225eb 4a320225eb [op][agl][wayland] Take into account wayland output transform 13d93f6dae [op][agl][wayland] Do not bind agl_shell by default. ca47b4fd0a [skia][build] fix skia no_sanitize build issues for gcc 3b7541e3cf GCC: supress invalid-offsetof warning 6cd04072fb Add a delay to agl ready event wam: 935be6b..8607609 8607609 [op][agl][wayland] UiSize should be system resolution. fcfeb67 [op][agl] Allow to run web applications in new application framework. Bug-AGL: SPEC-4223 Change-Id: Ie0bc3dd6878920a0ba1bfac4f32814a23e4d41e7 Signed-off-by: Jose Dapena Paz --- diff --git a/recipes-wam/chromium/chromium84_git.bb b/recipes-wam/chromium/chromium84_git.bb index 24613db95..aaff50bdd 100644 --- a/recipes-wam/chromium/chromium84_git.bb +++ b/recipes-wam/chromium/chromium84_git.bb @@ -3,15 +3,12 @@ require chromium.inc SRC_URI = "\ git://github.com/igalia/${PN};branch=marlin;protocol=https;rev=${SRCREV_chromium84};name=chromium84 \ git://github.com/webosose/chromium-v8;branch=@chromium84;destsuffix=git/src/v8;rev=${SRCREV_v8};name=v8;protocol=https \ - file://add-a-delay-to-agl-ready-event.patch \ - file://chromium-quiche-invalid-offsetof.patch \ - file://chromium-skia-no_sanitize.patch \ " # Needed by catapult DEPENDS += "python-six-native python-beautifulsoup4-native python-lxml-native python-html5lib-native python-webencodings-native" -SRCREV_chromium84 = "3d6fd5dd0b836dbda2ea356ee1b25a9149419fef" +SRCREV_chromium84 = "005a9257d3ba9eb363e19f5a8efc6758924dbf9b" SRCREV_v8 = "5c1d89dd2945a10cf7a6a3458050b3177a870b09" BROWSER_APPLICATION = "chromium84-browser" diff --git a/recipes-wam/chromium/files/add-a-delay-to-agl-ready-event.patch b/recipes-wam/chromium/files/add-a-delay-to-agl-ready-event.patch deleted file mode 100644 index 20caccbf6..000000000 --- a/recipes-wam/chromium/files/add-a-delay-to-agl-ready-event.patch +++ /dev/null @@ -1,70 +0,0 @@ -From d2d09d3e13a3874961971d343553106a1f3d5ac7 Mon Sep 17 00:00:00 2001 -From: Roger Zanoni -Date: Thu, 3 Jun 2021 10:53:40 +0200 -Subject: [PATCH] Add a delay to agl ready event - -Delay ready() to ensure that all the window and surfaces setup -is done before notifying the compositor ---- - .../ozone/platform/wayland/host/wayland_window.cc | 14 +++++++++++++- - .../ozone/platform/wayland/host/wayland_window.h | 5 +++++ - 2 files changed, 18 insertions(+), 1 deletion(-) - -diff --git a/src/ui/ozone/platform/wayland/host/wayland_window.cc b/src/ui/ozone/platform/wayland/host/wayland_window.cc -index d2a9b0dae5..27749fd70d 100644 ---- a/src/ui/ozone/platform/wayland/host/wayland_window.cc -+++ b/src/ui/ozone/platform/wayland/host/wayland_window.cc -@@ -299,7 +299,19 @@ WaylandWindow::SetAglReady(void) - if (!connection_->agl_shell_manager) { - return; - } -- connection_->agl_shell_manager->ready(); -+ -+ // Delay activation to ensure that all the setup is done -+ // TODO(rzanoni): find a more deterministic way of doing this -+ set_ready_timer_.Start(FROM_HERE, -+ base::TimeDelta::FromMilliseconds(500), -+ this, -+ &WaylandWindow::SetReadyCallback); -+} -+ -+ -+void WaylandWindow::SetReadyCallback() { -+ connection_->agl_shell_manager->ready(); -+ connection_->ScheduleFlush(); - } - - bool WaylandWindow::CanDispatchEvent(const PlatformEvent& event) { -diff --git a/src/ui/ozone/platform/wayland/host/wayland_window.h b/src/ui/ozone/platform/wayland/host/wayland_window.h -index 2acac98ae9..c10db38d21 100644 ---- a/src/ui/ozone/platform/wayland/host/wayland_window.h -+++ b/src/ui/ozone/platform/wayland/host/wayland_window.h -@@ -15,6 +15,7 @@ - #include "base/containers/flat_set.h" - #include "base/gtest_prod_util.h" - #include "base/memory/ref_counted.h" -+#include "base/timer/timer.h" - #include "ui/events/platform/platform_event_dispatcher.h" - #include "ui/gfx/geometry/rect.h" - #include "ui/gfx/native_widget_types.h" -@@ -232,6 +233,8 @@ class WaylandWindow : public PlatformWindow, public PlatformEventDispatcher { - // Returns a root parent window. - WaylandWindow* GetRootParentWindow(); - -+ void SetReadyCallback(); -+ - // Install a surface listener and start getting wl_output enter/leave events. - void AddSurfaceListener(); - -@@ -311,6 +314,8 @@ class WaylandWindow : public PlatformWindow, public PlatformEventDispatcher { - // The type of the current WaylandWindow object. - ui::PlatformWindowType type_ = ui::PlatformWindowType::kWindow; - -+ base::OneShotTimer set_ready_timer_; -+ - DISALLOW_COPY_AND_ASSIGN(WaylandWindow); - }; - --- -2.32.0 - diff --git a/recipes-wam/chromium/files/chromium-quiche-invalid-offsetof.patch b/recipes-wam/chromium/files/chromium-quiche-invalid-offsetof.patch deleted file mode 100644 index 4fdd98de4..000000000 --- a/recipes-wam/chromium/files/chromium-quiche-invalid-offsetof.patch +++ /dev/null @@ -1,57 +0,0 @@ -From 4cea86e76af28b28aa72cb7c69ff7cf242b2bd5d Mon Sep 17 00:00:00 2001 -From: Stephan Hartmann -Date: Sat, 27 Jun 2020 12:18:05 +0000 -Subject: [PATCH] GCC: supress invalid-offsetof warning - -GCC emits a warning if offsetof is used for non-POD -types. However, GCC supports this and prints only -the warning, because it might be nonportable code. -Disable the warning for GCC with a pragma. ---- - src/net/third_party/quiche/src/quic/core/frames/quic_frame.h | 7 +++++++ - .../quiche/src/quic/core/frames/quic_inlined_frame.h | 7 +++++++ - 2 files changed, 14 insertions(+) - -diff --git a/src/net/third_party/quiche/src/quic/core/frames/quic_frame.h b/src/net/third_party/quiche/src/quic/core/frames/quic_frame.h -index 756b69f..aceba76 100644 ---- a/src/net/third_party/quiche/src/quic/core/frames/quic_frame.h -+++ b/src/net/third_party/quiche/src/quic/core/frames/quic_frame.h -@@ -110,8 +110,15 @@ struct QUIC_EXPORT_PRIVATE QuicFrame { - - static_assert(sizeof(QuicFrame) <= 24, - "Frames larger than 24 bytes should be referenced by pointer."); -+#if defined(__GNUC__) -+#pragma GCC diagnostic push -+#pragma GCC diagnostic ignored "-Winvalid-offsetof" -+#endif - static_assert(offsetof(QuicStreamFrame, type) == offsetof(QuicFrame, type), - "Offset of |type| must match in QuicFrame and QuicStreamFrame"); -+#if defined(__GNUC__) -+#pragma GCC diagnostic pop -+#endif - - // A inline size of 1 is chosen to optimize the typical use case of - // 1-stream-frame in QuicTransmissionInfo.retransmittable_frames. -diff --git a/src/net/third_party/quiche/src/quic/core/frames/quic_inlined_frame.h b/src/net/third_party/quiche/src/quic/core/frames/quic_inlined_frame.h -index 08c4869..804e4bb 100644 ---- a/src/net/third_party/quiche/src/quic/core/frames/quic_inlined_frame.h -+++ b/src/net/third_party/quiche/src/quic/core/frames/quic_inlined_frame.h -@@ -17,8 +17,15 @@ namespace quic { - template - struct QUIC_EXPORT_PRIVATE QuicInlinedFrame { - QuicInlinedFrame(QuicFrameType type) : type(type) { -+#if defined(__GNUC__) -+#pragma GCC diagnostic push -+#pragma GCC diagnostic ignored "-Winvalid-offsetof" -+#endif - static_assert(offsetof(DerivedT, type) == 0, - "type must be the first field."); -+#if defined(__GNUC__) -+#pragma GCC diagnostic pop -+#endif - static_assert(sizeof(DerivedT) <= 24, - "Frames larger than 24 bytes should not be inlined."); - } --- -2.26.2 - diff --git a/recipes-wam/chromium/files/chromium-skia-no_sanitize.patch b/recipes-wam/chromium/files/chromium-skia-no_sanitize.patch deleted file mode 100644 index abfba57ab..000000000 --- a/recipes-wam/chromium/files/chromium-skia-no_sanitize.patch +++ /dev/null @@ -1,63 +0,0 @@ -From 04765936a0a8dd3ac3f530786fce6b5cea826d3e Mon Sep 17 00:00:00 2001 -From: Roger Zanoni -Date: Wed, 24 Feb 2021 13:50:27 +0100 -Subject: [PATCH] [skia][build] fix skia no_sanitize build issues for gcc - -Based on https://src.fedoraproject.org/rpms/chromium/blob/rawhide/f/chromium-skia-no_sanitize.patch - ---- - .../skia/include/private/SkFloatingPoint.h | 24 +++++++++++++++++++ - 1 file changed, 24 insertions(+) - -diff --git a/src/third_party/skia/include/private/SkFloatingPoint.h b/src/third_party/skia/include/private/SkFloatingPoint.h -index 110dda2ae4..8223e9b57d 100644 ---- a/src/third_party/skia/include/private/SkFloatingPoint.h -+++ b/src/third_party/skia/include/private/SkFloatingPoint.h -@@ -159,7 +159,15 @@ static inline int64_t sk_float_saturate2int64(float x) { - // Cast double to float, ignoring any warning about too-large finite values being cast to float. - // Clang thinks this is undefined, but it's actually implementation defined to return either - // the largest float or infinity (one of the two bracketing representable floats). Good enough! -+#if defined(__GNUC__) && __GNUC__ >= 8 -+__attribute__((no_sanitize("float-cast-overflow"))) -+#else -+# if defined(__GNUC__) -+__attribute__((no_sanitize_undefined)) -+# else - [[clang::no_sanitize("float-cast-overflow")]] -+# endif -+#endif - static inline float sk_double_to_float(double x) { - return static_cast(x); - } -@@ -226,12 +234,28 @@ static inline float sk_float_rsqrt(float x) { - // IEEE defines how float divide behaves for non-finite values and zero-denoms, but C does not - // so we have a helper that suppresses the possible undefined-behavior warnings. - -+#if defined(__GNUC__) && __GNUC__ >= 8 -+__attribute__((no_sanitize("float-divide-by-zero"))) -+#else -+# if defined(__GNUC__) -+__attribute__((no_sanitize_undefined)) -+# else - [[clang::no_sanitize("float-divide-by-zero")]] -+# endif -+#endif - static inline float sk_ieee_float_divide(float numer, float denom) { - return numer / denom; - } - -+#if defined(__GNUC__) && __GNUC__ >= 8 -+__attribute__((no_sanitize("float-cast-overflow"))) -+#else -+# if defined(__GNUC__) -+__attribute__((no_sanitize_undefined)) -+# else - [[clang::no_sanitize("float-divide-by-zero")]] -+# endif -+#endif - static inline double sk_ieee_double_divide(double numer, double denom) { - return numer / denom; - } --- -2.30.1 - diff --git a/recipes-wam/wam/files/WebAppMgr@.service b/recipes-wam/wam/files/WebAppMgr.service similarity index 63% rename from recipes-wam/wam/files/WebAppMgr@.service rename to recipes-wam/wam/files/WebAppMgr.service index beffd114c..5cb536d9a 100644 --- a/recipes-wam/wam/files/WebAppMgr@.service +++ b/recipes-wam/wam/files/WebAppMgr.service @@ -12,26 +12,18 @@ [Unit] Description="WebAppMgr is responsible for running web apps and manage their lifecycle" -After=afm-service-homescreen-service--0.1--main@%i.service weston@display.service -Wants=afm-service-homescreen-service--0.1--main@%i.service -BindsTo=weston@display.service +After=homescreen.service launcher.service agl-compositor.service +Requires=agl-compositor.service +Before=agl-session.target [Service] Type=simple -User=%i -Slice=user-%i.slice -SmackProcessLabel=System -SupplementaryGroups=audio display UMask=0077 -CapabilityBoundingSet= OOMScoreAdjust=-1000 EnvironmentFile=-/etc/default/WebAppMgr.env -Environment=XDG_RUNTIME_DIR=/run/user/%i -Environment=DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%i/bus -Environment=WAM_DATA_PATH="/home/%i/wamdata" -ExecStart=/usr/bin/WebAppMgr --enable-features=UseOzonePlatform --ozone-platform=wayland --no-sandbox --use-viz-fmp-with-timeout=0 --in-process-gpu --remote-debugging-port=9998 --user-data-dir="/home/%i/wamdata" --webos-wam +ExecStart=/usr/bin/WebAppMgr --enable-features=UseOzonePlatform --ozone-platform=wayland --no-sandbox --use-viz-fmp-with-timeout=0 --in-process-gpu --remote-debugging-port=9998 --user-data-dir="/home/%u/wamdata" --webos-wam Restart=on-failure RestartSec=50 [Install] -WantedBy=default.target +WantedBy=agl-session.target diff --git a/recipes-wam/wam/files/trunc-webapp-roles.patch b/recipes-wam/wam/files/trunc-webapp-roles.patch deleted file mode 100644 index 829abe07f..000000000 --- a/recipes-wam/wam/files/trunc-webapp-roles.patch +++ /dev/null @@ -1,56 +0,0 @@ -From f31e93261f34abaa3dcdc4959963f5b5a8983002 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Jan-Simon=20M=C3=B6ller?= -Date: Thu, 25 Jun 2020 19:47:24 +0200 -Subject: [PATCH] Set webapp roles that are max 12 characters long. - -From: =?UTF-8?q?Jacobo=20Aragunde=20P=C3=A9rez?= - -This is a workaround for SPEC-3127. To prevent repeated roles as much -as possible, I'm using the appid as a basis instead of "Webapp-" + -host + port, which has many chances to be redundant in the first 12 -chars. - -Bug-AGL: SPEC-3127 - ---- - src/agl/WebRuntimeAGL.cpp | 10 +++------- - 1 file changed, 3 insertions(+), 7 deletions(-) - -diff --git a/src/agl/WebRuntimeAGL.cpp b/src/agl/WebRuntimeAGL.cpp -index aed928b..efd2ee4 100644 ---- a/src/agl/WebRuntimeAGL.cpp -+++ b/src/agl/WebRuntimeAGL.cpp -@@ -274,7 +274,6 @@ int WebAppLauncherRuntime::run(int argc, const char** argv) { - - m_id = getAppId(args); - m_url = getAppUrl(args); -- m_role = "WebApp"; - - setup_signals(); - -@@ -326,15 +325,9 @@ bool WebAppLauncherRuntime::init() { - if (n != std::string::npos) { - std::string sport = authority.substr(n+1); - m_host = authority.substr(0, n); -- m_role.push_back('-'); -- m_role.append(m_host); -- m_role.push_back('-'); -- m_role.append(sport); - m_port = stringTo(sport); - } else { - m_host = authority; -- m_role.push_back('-'); -- m_role.append(m_host); - } - } - -@@ -375,6 +368,9 @@ bool WebAppLauncherRuntime::init() { - m_role = "homescreen"; - else if (m_id.rfind("webapps-homescreen", 0) == 0) - m_role = "homescreen"; -+ else { -+ m_role = m_id.substr(0,12); -+ } - - LOG_DEBUG("id=[%s], name=[%s], role=[%s], url=[%s], host=[%s], port=%d, token=[%s], width=[%s], height[%s], surface_type[%d], panel_type[%d]", - m_id.c_str(), m_name.c_str(), m_role.c_str(), m_url.c_str(), diff --git a/recipes-wam/wam/files/wam-user-setup.sh b/recipes-wam/wam/files/wam-user-setup.sh deleted file mode 100755 index 515ea82ec..000000000 --- a/recipes-wam/wam/files/wam-user-setup.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/sh - -uid="$1" -bdir=/run/user -udir="$bdir/$uid" -hdir="/home/$uid" - -dodir() { - local x smackset="$1" - shift - for x; do - test -e "$x" || mkdir -m 700 "$x" - chmod 700 "$x" - chown "$uid:$uid" "$x" - chsmack $smackset "$x" - done -} - -dodir '-t -a User::Home' "$hdir/wamdata" - -# Initialize lockfile, without this apps will be blocked by SMACK -touch "$udir/wamsocket.lock" -chmod 660 "$udir/wamsocket.lock" -chown "$uid:$uid" "$udir/wamsocket.lock" -chsmack -a User::App-Shared "$udir/wamsocket.lock" diff --git a/recipes-wam/wam/files/wam-user-setup@.service b/recipes-wam/wam/files/wam-user-setup@.service deleted file mode 100644 index f4814787d..000000000 --- a/recipes-wam/wam/files/wam-user-setup@.service +++ /dev/null @@ -1,10 +0,0 @@ -[Unit] -Description=Set up WAM for user %i -Requires=afm-user-setup@i.service -After=user-runtime-dir@%i.service afm-user-setup@i.service -Before=user@%i.service - -[Service] -Type=oneshot -StartLimitInterval=0 -ExecStart=-/usr/libexec/wam/wam-user-setup.sh %i diff --git a/recipes-wam/wam/wam_git.bb b/recipes-wam/wam/wam_git.bb index a7bfde7e0..18ace85ee 100644 --- a/recipes-wam/wam/wam_git.bb +++ b/recipes-wam/wam/wam_git.bb @@ -26,33 +26,25 @@ SECURITY_STACK_PROTECTOR = "" SRC_URI = "\ git://github.com/igalia/${BPN}.git;branch=marlin;protocol=https \ - file://WebAppMgr@.service \ + file://WebAppMgr.service \ file://WebAppMgr.env \ - file://wam-user-setup.sh \ - file://wam-user-setup@.service \ - file://trunc-webapp-roles.patch \ " S = "${WORKDIR}/git" -SRCREV = "916ad4cc233eaec1f1b12f21c548a31f2b090104" +SRCREV = "478bc7b00d2704d74814c4685c60d62afca50872" do_install:append() { - install -d ${D}${sysconfdir}/wam + install -v -d ${D}${sysconfdir}/wam install -v -m 644 ${S}/files/launch/security_policy.conf ${D}${sysconfdir}/wam/security_policy.conf - install -d ${D}${systemd_system_unitdir} - install -v -m 644 ${WORKDIR}/WebAppMgr@.service ${D}${systemd_system_unitdir}/WebAppMgr@.service - install -d ${D}${sysconfdir}/default/ + install -v -d ${D}${systemd_user_unitdir} + install -v -m 644 ${WORKDIR}/WebAppMgr.service ${D}${systemd_user_unitdir}/WebAppMgr.service + install -v -d ${D}${sysconfdir}/default/ install -v -m 644 ${WORKDIR}/WebAppMgr.env ${D}${sysconfdir}/default/WebAppMgr.env ln -snf WebAppMgr ${D}${bindir}/web-runtime - install -d ${D}${systemd_system_unitdir}/afm-user-session@.target.wants - ln -sf ../WebAppMgr@.service ${D}${systemd_system_unitdir}/afm-user-session@.target.wants/ - install -d ${D}${libexecdir}/wam/ - install -v -m 755 ${WORKDIR}/wam-user-setup.sh ${D}${libexecdir}/wam/wam-user-setup.sh - install -v -m 644 ${WORKDIR}/wam-user-setup@.service ${D}${systemd_system_unitdir}/wam-user-setup@.service - install -d ${D}${systemd_system_unitdir}/user-runtime-dir@.service.wants/ - ln -sf ../wam-user-setup@.service ${D}${systemd_system_unitdir}/user-runtime-dir@.service.wants/ + install -v -d ${D}${systemd_user_unitdir}/agl-session.target.wants + ln -sf ../WebAppMgr.service ${D}${systemd_user_unitdir}/agl-session.target.wants/ } -FILES:${PN} += "${sysconfdir}/init ${sysconfdir}/wam ${libdir}/webappmanager/plugins/*.so ${systemd_system_unitdir}" +FILES:${PN} += "${sysconfdir}/init ${sysconfdir}/wam ${libdir}/webappmanager/plugins/*.so ${systemd_user_unitdir}" CXXFLAGS:append:agl-devel = " -DAGL_DEVEL"