chromium*, wam: fix systemd launching from systemd 06/27106/5
authorJose Dapena Paz <jdapena@igalia.com>
Fri, 21 Jan 2022 18:18:44 +0000 (19:18 +0100)
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>
Tue, 1 Feb 2022 21:51:01 +0000 (21:51 +0000)
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 <jdapena@igalia.com>
recipes-wam/chromium/chromium84_git.bb
recipes-wam/chromium/files/add-a-delay-to-agl-ready-event.patch [deleted file]
recipes-wam/chromium/files/chromium-quiche-invalid-offsetof.patch [deleted file]
recipes-wam/chromium/files/chromium-skia-no_sanitize.patch [deleted file]
recipes-wam/wam/files/WebAppMgr.service [moved from recipes-wam/wam/files/WebAppMgr@.service with 63% similarity]
recipes-wam/wam/files/trunc-webapp-roles.patch [deleted file]
recipes-wam/wam/files/wam-user-setup.sh [deleted file]
recipes-wam/wam/files/wam-user-setup@.service [deleted file]
recipes-wam/wam/wam_git.bb

index 24613db..aaff50b 100644 (file)
@@ -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 (file)
index 20caccb..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-From d2d09d3e13a3874961971d343553106a1f3d5ac7 Mon Sep 17 00:00:00 2001
-From: Roger Zanoni <rzanoni@igalia.com>
-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 (file)
index 4fdd98d..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-From 4cea86e76af28b28aa72cb7c69ff7cf242b2bd5d Mon Sep 17 00:00:00 2001
-From: Stephan Hartmann <stha09@googlemail.com>
-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 <typename DerivedT>
- 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 (file)
index abfba57..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-From 04765936a0a8dd3ac3f530786fce6b5cea826d3e Mon Sep 17 00:00:00 2001
-From: Roger Zanoni <rzanoni@igalia.com>
-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<float>(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
-
similarity index 63%
rename from recipes-wam/wam/files/WebAppMgr@.service
rename to recipes-wam/wam/files/WebAppMgr.service
index beffd11..5cb536d 100644 (file)
 
 [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 (file)
index 829abe0..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-From f31e93261f34abaa3dcdc4959963f5b5a8983002 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Jan-Simon=20M=C3=B6ller?= <jsmoeller@linuxfoundation.org>
-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?= <jaragunde@igalia.com>
-
-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<int>(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 (executable)
index 515ea82..0000000
+++ /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 (file)
index f481478..0000000
+++ /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
index a7bfde7..18ace85 100644 (file)
@@ -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"