aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephane Desneux <stephane.desneux@iot.bzh>2019-07-25 16:02:37 +0000
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>2019-07-25 21:53:52 +0000
commitf5d5e1584e10ae0f1447c3aaeb4da93408300669 (patch)
tree239be4a859f19670f8dda9e7e8abc4736eec9911
parent818ffe2f16a7340413a545996c20a8981c3cd25e (diff)
meta-html5-framework/wam: adjust how wam is started
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>
-rw-r--r--meta-html5-framework/recipes-wam/wam/files/WebAppMgr.env202
-rw-r--r--meta-html5-framework/recipes-wam/wam/files/WebAppMgr@.service36
-rw-r--r--meta-html5-framework/recipes-wam/wam/wam_git.bb25
3 files changed, 249 insertions, 14 deletions
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
index 00000000..c8ddc517
--- /dev/null
+++ b/meta-html5-framework/recipes-wam/wam/files/WebAppMgr.env
@@ -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
index 00000000..09573a76
--- /dev/null
+++ b/meta-html5-framework/recipes-wam/wam/files/WebAppMgr@.service
@@ -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
diff --git a/meta-html5-framework/recipes-wam/wam/wam_git.bb b/meta-html5-framework/recipes-wam/wam/wam_git.bb
index 51447efd..a4012faa 100644
--- a/meta-html5-framework/recipes-wam/wam/wam_git.bb
+++ b/meta-html5-framework/recipes-wam/wam/wam_git.bb
@@ -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"