meta-html5-framework/wam: adjust how wam is started 77/21977/1
authorStephane Desneux <stephane.desneux@iot.bzh>
Thu, 25 Jul 2019 16:02:37 +0000 (16:02 +0000)
committerStephane Desneux <stephane.desneux@iot.bzh>
Thu, 25 Jul 2019 16:02:37 +0000 (16:02 +0000)
WebAppMgr has to be launched for each user (but not through
the systemd user session as it would require too much privileges for the user).

For this purpose, we create a systemd service instanciated for each user
by the application framework through afm-user-session@ service.

This patch also distributes the environment and service file near the recipe
instead of having those integration files in the sources (it's easier to follow
AGL evolution without changing the upstream source code)

Also, for the HTML5 demos to work, each app must request the following permissions in
their config.xml:
<param name="urn:AGL:permission::public:display" value="required" />
<param name="urn:AGL:permission::public:audio" value="required" />

Bug-AGL: SPEC-2586

Change-Id: I4286fd9e1d1a1dcff48d3fdbfab2bf8d57f0fa0e
Signed-off-by: Stephane Desneux <stephane.desneux@iot.bzh>
meta-html5-framework/recipes-wam/wam/files/WebAppMgr.env [new file with mode: 0644]
meta-html5-framework/recipes-wam/wam/files/WebAppMgr@.service [new file with mode: 0644]
meta-html5-framework/recipes-wam/wam/wam_git.bb

diff --git a/meta-html5-framework/recipes-wam/wam/files/WebAppMgr.env b/meta-html5-framework/recipes-wam/wam/files/WebAppMgr.env
new file mode 100644 (file)
index 0000000..c8ddc51
--- /dev/null
@@ -0,0 +1,202 @@
+##### AGL: not set in WebAppMgr@.service
+#XDG_SESSION_ID="c2"
+
+##### AGL: set by WebAppMgr@.service (depends on user)
+#XDG_RUNTIME_DIR="/run/user/%i"
+
+# Set wam executable file path
+HOOK_SEGV=NO
+WAM_EXE_PATH="/usr/bin/WebAppMgr"
+
+# Set wam name for user-agent
+WAM_NAME="WebAppManager"
+
+# Only allow UTF8 encoding for luna-service messages.
+LS_ENABLE_UTF8=1
+
+# Set effective userid and groupid
+#WAM_UID="wam"
+#WAM_GID="compositor"
+
+# Set location of error page (will follow localization rules based on this path)
+#WAM_ERROR_PAGE="file:///usr/share/localization/wam/loaderror.html"
+
+# suspending javascript execution delay for page visibility
+WAM_SUSPEND_DELAY_IN_MS=250
+
+#if [ -e "etc/wam/make_shm.sh" ] ; then
+#    /etc/wam/make_shm.sh
+#fi
+
+# Set user data directory for WebAppMgr
+##### AGL: set by WebAppMgr@.service (depends on user)
+#WAM_DATA_PATH="/home/%i/wamdata"
+
+# ensure that wam data directories exist
+#mkdir -p ${WAM_DATA_PATH}
+
+# set directories permission
+#chown ${WAM_UID}:${WAM_GID} ${WAM_DATA_PATH}
+
+# setup 50 Mb maximum for ApplicationCache
+WAM_APPCACHE_MAXSIZE=52428800
+
+# setup 10 Mb maximum for ApplicationCache per domain
+WAM_APPCACHE_DOMAINLIMIT=10485760
+
+# setup 50 Mb maximum for DiskCache
+WAM_DISKCACHE_MAXSIZE=52428800
+
+# setup 256 Kb maximum for resource buffer allocation
+WAM_RESOURCE_BUFFER_MAX_ALLOC_SIZE=262144
+
+# setup 1 Mb for resource buffer
+WAM_RESOURCE_BUFFER_SIZE=1048576
+
+# setup 200 seconds for watchdog timeout of render process
+WATCHDOG_RENDER_TIMEOUT=200
+
+# setup nubmer of raster threads to 1
+BLINK_NUM_RASTER_THREADS=2
+
+# use default tile width if not sed by recipe
+#if [ "$BLINK_NUM_RASTER_THREADS" = "WEBOS${BLINK_NUM_RASTER_THREADS#WEBOS}" ]; then
+BLINK_NUM_RASTER_THREADS=1
+#fi
+
+# setup 6 Mb maximum for the program GPU cache
+GPU_PROGRAM_CACHE_SIZE=6144
+
+# disable using enyo system app specfic optimization
+# currently used optimizations : inline caching off
+#USE_SYSTEM_APP_OPTIMIZATION="0"
+
+# Set location of NaCl modules
+#CHROMIUM_PATH="/usr/palm/applications/com.lge.app.chromium"
+#NACL_PLUGIN=${CHROMIUM_PATH}"/libppGoogleNaClPluginChrome.so"
+#NACL_IRT_LIBRARY=${CHROMIUM_PATH}"/nacl_irt_arm.nexe"
+#NACL_HELPER=${CHROMIUM_PATH}"/nacl_helper"
+#NACL_HELPER_BOOTSTRAP=${CHROMIUM_PATH}"/nacl_helper_bootstrap"
+
+# Set location of NPAPI plugins for all Apps including default Apps
+# This is for the flash plugin of Signage, webOS TV doesn't use it.
+#PRIVILEGED_PLUGIN_PATH=""
+
+# Set location of NPAPI plugins for NetCast Apps
+# NetCast Apps should access only the plugins in this path
+#NETCAST_PLUGIN_PATH="/usr/lib/BrowserPlugins"
+
+# Set location of NPAPI plugins for HbbTV app.
+#HBBTV_PLUGIN_PATH="/usr/lib/HbbtvPlugins"
+
+# Set InetTV player stored path
+#INETTV_HTML_PLAYER_PATH="/usr/share/inettv/inettv_player/index.html"
+
+# Set location of extra libraries
+#CDM_LIB_PATH="/usr/lib"
+
+# Set location of all NPAPI plugins
+NPAPI_PLUGIN_PATH=${HBBTV_PLUGIN_PATH}":"${NETCAST_PLUGIN_PATH}":"${PRIVILEGED_PLUGIN_PATH}
+
+#if [ -e "etc/wam/make_shm.sh" ] ; then
+#    /etc/wam/make_shm.sh
+#fi
+
+# setup 8 Mb minimum codecache capacity
+JSC_minGlobalCodeCacheCapacity=8388608
+
+# Enable more explicit logging of timing with regards to rendering
+# export WAM2_ENABLE_DEBUG_RENDER_TIMING=1
+
+# enable Web Inspector and Tellurium if in developer mode
+TELLURIUM_NUB_PATH=/usr/palm/tellurium/telluriumnub.js
+ENABLE_INSPECTOR=1
+
+# Enable cursor by default
+ENABLE_CURSOR_BY_DEFAULT=1
+
+# Enable launch optimization
+ENABLE_LAUNCH_OPTIMIZATION=1
+
+# Set the duration(seconds) passed from last network activity (e.g. FMP Detector)
+# If set to a positive value, adjust a custom timeout for a network stable timer in FMPDetector
+NETWORK_STABLE_TIMEOUT=3
+
+# please keep it in alphabetical order
+#WAM_EXTRA_FLAGS=""
+#WAM_JS_FLAGS=""
+#WAM_COMMON_SWITCHES=" \
+#    --application-cache-domain-limit=$WAM_APPCACHE_DOMAINLIMIT \
+#    --application-cache-size=$WAM_APPCACHE_MAXSIZE \
+#    --browser-subprocess-path=$WAM_EXE_PATH \
+#    --disable-direct-npapi-requests \
+#    --disable-extensions \
+#    --disable-low-res-tiling \
+#    --disable-new-video-renderer \
+#    --disk-cache-size=$WAM_DISKCACHE_MAXSIZE \
+#    --enable-aggressive-release-policy \
+#    --enable-accelerated-plugin-rendering \
+#    --accelerated-plugin-rendering-blacklist=device;drmAgent;sound;service \
+#    --enable-gpu-rasterization \
+#    --disable-gpu-rasterization-for-first-frame \
+#    --enable-key-event-throttling \
+#    --enable-threaded-compositing \
+#    --enable-watchdog \
+#    --hide-selection-handles \
+#    --ignore-gpu-blacklist \
+#    --ignore-netif=p2p \
+#    --in-process-gpu \
+#    --max-unused-resource-memory-usage-percentage=0 \
+#    --network-stable-timeout=$NETWORK_STABLE_TIMEOUT \
+#    --noerrdialogs \
+#    --num-raster-threads=$BLINK_NUM_RASTER_THREADS \
+#    --ozone-platform=wayland \
+#    --remote-debugging-port=9998 \
+#    --resource-buffer-max-allocation-size=$WAM_RESOURCE_BUFFER_MAX_ALLOC_SIZE \
+#    --resource-buffer-size=$WAM_RESOURCE_BUFFER_SIZE \
+#    --touch-events=disabled \
+#    --ui-disable-opaque-shader-program \
+#    --user-agent-suffix=SmartTV \
+#    --user-data-dir=$WAM_DATA_PATH \
+#    --enable-devtools-experiments \
+#    --webos-wam \ "
+
+#WAM_LITE_SWITCHES=" --in-process-zygote "
+
+#export WAM_WEBOS_LITE=NO
+#if [ "${WAM_WEBOS_LITE}" = "YES" ] ; then
+#    export WAM_SWITCHES=${WAM_COMMON_SWITCHES}${WAM_LITE_SWITCHES}
+#    export SKIA_FONT_CACHE_SIZE=1
+#    export SKIA_IMAGE_CACHE_SIZE=40
+#    export SKIA_BACKGROUND_FONT_CACHE_SIZE=0
+#else
+#    export WAM_SWITCHES=${WAM_COMMON_SWITCHES}
+#    export SKIA_FONT_CACHE_SIZE=8
+#    export SKIA_IMAGE_CACHE_SIZE=80
+#    export SKIA_BACKGROUND_FONT_CACHE_SIZE=512
+#fi
+
+#export WAM_EXTRA_SKIA_CACHE_SWITCHES=" \
+#    --skia-font-cache-size-mb=$SKIA_FONT_CACHE_SIZE \
+#    --skia-image-cache-size-mb=$SKIA_IMAGE_CACHE_SIZE \
+#    --skia-background-font-cache-size-kb=$SKIA_BACKGROUND_FONT_CACHE_SIZE \
+#    "
+
+#export WAM_EXTRA_GPU_TUNING_SWITCHES=" \
+#    --gpu-program-cache-size-kb=$GPU_PROGRAM_CACHE_SIZE \
+#    "
+#export WAM_WATCHDOG_RENDER_TIMEOUT_SWITCHES=" \
+#    --watchdog-render-timeout=$WATCHDOG_RENDER_TIMEOUT \
+#    "
+
+#WEBOS_LOAD_ACCESSIBILITY_PLUGIN=1
+
+#WAM_V8_CODE_CACHE_SWITCHES=" --enable-local-resource-code-cache --disallow-code-cache-from-file-uris-with-query-string "
+
+# Load any special configuration from plugins
+#if [ -e "/etc/wam/plugins/conf.sh" ] ; then
+#    . /etc/wam/plugins/conf.sh || true
+#fi
+
+#exec $WAM_EXE_PATH $WAM_SWITCHES $WAM_EXTRA_SKIA_CACHE_SWITCHES $WAM_EXTRA_GPU_TUNING_SWITCHES $WAM_WATCHDOG_RENDER_TIMEOUT_SWITCHES $WAM_EXTRA_FLAGS $WAM_V8_CODE_CACHE_SWITCHES --js-flags="$WAM_JS_FLAGS"
+
diff --git a/meta-html5-framework/recipes-wam/wam/files/WebAppMgr@.service b/meta-html5-framework/recipes-wam/wam/files/WebAppMgr@.service
new file mode 100644 (file)
index 0000000..09573a7
--- /dev/null
@@ -0,0 +1,36 @@
+# @@@LICENSE
+#
+# Copyright (c) 2017-2018 LG Electronics, Inc.
+#
+# Confidential computer software. Valid license from LG required for
+# possession, use or copying. Consistent with FAR 12.211 and 12.212,
+# Commercial Computer Software, Computer Software Documentation, and
+# Technical Data for Commercial Items are licensed to the U.S. Government
+# under vendor's standard commercial license.
+#
+# LICENSE@@@
+
+[Unit]
+Description="WebAppMgr is responsible for running web apps and manage their lifecycle"
+After=afm-service-homescreen-service--0.1--main@%i.service afm-service-windowmanager-service--0.1--main@%i.service
+Wants=afm-service-homescreen-service--0.1--main@%i.service afm-service-windowmanager-service--0.1--main@%i.service
+
+[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 --no-sandbox --in-process-gpu --remote-debugging-port=9998 --user-data-dir="/home/%i/wamdata" --webos-wam
+Restart=on-failure
+RestartSec=50
+
+[Install]
+WantedBy=default.target
index 51447ef..a4012fa 100644 (file)
@@ -18,30 +18,27 @@ PR="r0"
 PROVIDES += "virtual/webruntime"
 RPROVIDES_${PN} += "virtual/webruntime"
 
-SRC_URI = "git://github.com/webosose/${PN}.git;branch=@6.agl.guppy;protocol=https"
+SRC_URI = "\
+    git://github.com/webosose/${PN}.git;branch=@6.agl.guppy;protocol=https \
+    file://WebAppMgr@.service \
+    file://WebAppMgr.env \
+"
 S = "${WORKDIR}/git"
 SRCREV = "8271e13578b92b192cef1d1ac6577bc3699518a4"
 
 do_install_append() {
     install -d ${D}${sysconfdir}/wam
     install -v -m 644 ${S}/files/launch/security_policy.conf ${D}${sysconfdir}/wam/security_policy.conf
-    install -d ${D}${systemd_user_unitdir}
-    install -v -m 644 ${S}/files/launch/WebAppMgr.service ${D}${systemd_user_unitdir}/WebAppMgr.service
+    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 -m 644 ${S}/files/launch/WebAppMgr.env ${D}${sysconfdir}/default/WebAppMgr.env
+    install -v -m 644 ${WORKDIR}/WebAppMgr.env ${D}${sysconfdir}/default/WebAppMgr.env
     ln -snf WebAppMgr ${D}${bindir}/web-runtime
-    install -d ${D}${sysconfdir}/systemd/user/default.target.wants
-    ln -sf ${systemd_user_unitdir}/WebAppMgr.service ${D}${sysconfdir}/systemd/user/default.target.wants
-}
-
-pkg_postinst_${PN}_append() {
-    chsmack -a "*" /usr/bin/WebAppMgr
-    chsmack -a "*" /usr/lib/libWebAppMgr.so.1.0.0
-    chsmack -a "*" /usr/lib/libWebAppMgrCore.so.1.0.0
-    chsmack -a "*" /usr/lib/webappmanager/plugins/libwebappmgr-default-plugin.so
+    install -d ${D}${systemd_system_unitdir}/afm-user-session@.target.wants
+    ln -sf ../WebAppMgr@.service ${D}${systemd_system_unitdir}/afm-user-session@.target.wants/
 }
 
 RDEPENDS_${PN} += "wam-tinyproxy"
-FILES_${PN} += "${sysconfdir}/init ${sysconfdir}/wam ${libdir}/webappmanager/plugins/*.so ${systemd_user_unitdir}"
+FILES_${PN} += "${sysconfdir}/init ${sysconfdir}/wam ${libdir}/webappmanager/plugins/*.so ${systemd_system_unitdir}"
 
 CXXFLAGS_append_agl-devel = " -DAGL_DEVEL"