├── .gitignore
├── CMakeLists.txt
├── LICENSE
├── README.md
├── apps
├── .gitignore
├── bareapp
│ ├── appinfo.json
│ ├── icon.png
│ ├── img.jpg
│ └── index.html
├── com.webos.app.sam-native-registered
│ ├── appinfo.json
│ ├── child.sh
│ ├── icon.png
│ └── main.sh
├── com.webos.app.sam-native
│ ├── .main.sh.swp
│ ├── appinfo.json
│ ├── child.sh
│ ├── icon.png
│ └── main.sh
├── com.webos.app.sam-qml
│ ├── appinfo.json
│ ├── icon.png
│ └── main.qml
└── generate.sh
├── doc
└── Doxyfile.in
├── files
├── conf
│ └── sam-conf.json.in
├── schema
│ ├── ApplicationDescription.schema
│ ├── applicationManager.addLaunchPoint.schema
│ ├── applicationManager.addVirtualApp.schema
│ ├── applicationManager.closeByAppId.schema
│ ├── applicationManager.getAppBasePath.schema
│ ├── applicationManager.getAppInfo.schema
│ ├── applicationManager.getAppStatus.schema
│ ├── applicationManager.getForegroundAppInfo.schema
│ ├── applicationManager.getHandlerForExtension.schema
│ ├── applicationManager.getHandlerForMimeType.schema
│ ├── applicationManager.getHandlerForUrl.schema
│ ├── applicationManager.getHandlerForUrlByVerb.schema
│ ├── applicationManager.launch.schema
│ ├── applicationManager.launchVirtualApp.schema
│ ├── applicationManager.listAllHandlersForMime.schema
│ ├── applicationManager.listAllHandlersForMultipleMime.schema
│ ├── applicationManager.listAllHandlersForMultipleUrlPattern.schema
│ ├── applicationManager.listAllHandlersForUrl.schema
│ ├── applicationManager.listAllHandlersForUrlByVerb.schema
│ ├── applicationManager.listAllHandlersForUrlPattern.schema
│ ├── applicationManager.listApps.schema
│ ├── applicationManager.listLaunchPoints.schema
│ ├── applicationManager.lockApp.schema
│ ├── applicationManager.mimeTypeForExtension.schema
│ ├── applicationManager.notifyAlertClosed.schema
│ ├── applicationManager.open.schema
│ ├── applicationManager.registerApp.schema
│ ├── applicationManager.removeLaunchPoint.schema
│ ├── applicationManager.removeVirtualApp.schema
│ ├── applicationManager.running.schema
│ ├── applicationManager.searchApps.schema
│ ├── applicationManager.updateLaunchPoint.schema
│ ├── deletedSystemAppList.schema
│ ├── foregroundAppInfo.schema
│ └── sam-conf.schema
└── sysbus
│ ├── com.webos.sam.api.json
│ ├── com.webos.sam.groups.json
│ ├── com.webos.sam.perm.json
│ ├── com.webos.sam.role.json.in
│ └── com.webos.sam.service.in
├── oss-pkg-info.yaml
└── src
├── Environment.h.in
├── Main.cpp
├── MainDaemon.cpp
├── MainDaemon.h
├── base
├── AppDescription.cpp
├── AppDescription.h
├── AppDescriptionList.cpp
├── AppDescriptionList.h
├── LaunchPoint.cpp
├── LaunchPoint.h
├── LaunchPointList.cpp
├── LaunchPointList.h
├── LunaTask.cpp
├── LunaTask.h
├── LunaTaskList.cpp
├── LunaTaskList.h
├── RunningApp.cpp
├── RunningApp.h
├── RunningAppList.cpp
└── RunningAppList.h
├── bus
├── client
│ ├── AbsLifeHandler.cpp
│ ├── AbsLifeHandler.h
│ ├── AbsLunaClient.cpp
│ ├── AbsLunaClient.h
│ ├── AppInstallService.cpp
│ ├── AppInstallService.h
│ ├── Bootd.cpp
│ ├── Bootd.h
│ ├── Configd.cpp
│ ├── Configd.h
│ ├── DB8.cpp
│ ├── DB8.h
│ ├── LSM.cpp
│ ├── LSM.h
│ ├── MemoryManager.cpp
│ ├── MemoryManager.h
│ ├── NativeContainer.cpp
│ ├── NativeContainer.h
│ ├── Notification.cpp
│ ├── Notification.h
│ ├── SettingService.cpp
│ ├── SettingService.h
│ ├── WAM.cpp
│ └── WAM.h
└── service
│ ├── ApplicationManager.cpp
│ ├── ApplicationManager.h
│ ├── SchemaChecker.cpp
│ ├── SchemaChecker.h
│ └── compat
│ └── ApplicationManagerCompat.h
├── conf
├── .gitignore
├── RuntimeInfo.cpp
├── RuntimeInfo.h
├── SAMConf.cpp
└── SAMConf.h
├── interface
├── IClassName.h
├── IInitializable.h
├── ISerializable.h
└── ISingleton.h
├── manager
├── PolicyManager.cpp
└── PolicyManager.h
└── util
├── File.cpp
├── File.h
├── JValueUtil.cpp
├── JValueUtil.h
├── Logger.cpp
├── Logger.h
├── NativeProcess.cpp
├── NativeProcess.h
├── Time.cpp
└── Time.h
/.gitignore:
--------------------------------------------------------------------------------
1 | BUILD*
2 | build
3 | .vscode
4 | code.sh
5 | *.kdev4
6 | build-sam.stamp
7 | resources
8 | screenlog*
9 | *ipk
10 | sa8155*
--------------------------------------------------------------------------------
/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2012-2024 LG Electronics, Inc.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 | #
15 | # SPDX-License-Identifier: Apache-2.0
16 |
17 | #
18 | # sam/CMakeLists.txt
19 | #
20 |
21 | cmake_minimum_required(VERSION 2.8.7)
22 |
23 | project(sam C CXX)
24 |
25 | include(webOS/webOS)
26 |
27 | webos_modules_init(1 0 0 QUALIFIER RC4)
28 | webos_component(2 0 0)
29 | webos_add_compiler_flags(ALL -Wall -std=gnu++0x)
30 | webos_add_compiler_flags(ALL -DBOOST_SIGNALS_NO_DEPRECATION_WARNING)
31 |
32 | add_definitions(-DLOGGER_ENABLED)
33 |
34 | include(FindPkgConfig)
35 |
36 | pkg_check_modules(GLIB2 REQUIRED glib-2.0)
37 | include_directories(${GLIB2_INCLUDE_DIRS})
38 | webos_add_compiler_flags(ALL ${GLIB2_CFLAGS_OTHER})
39 |
40 | pkg_check_modules(GIO2 REQUIRED gio-2.0)
41 | include_directories(${GIO2_INCLUDE_DIRS})
42 | webos_add_compiler_flags(ALL ${GIO2_CFLAGS_OTHER})
43 |
44 | pkg_check_modules(PBNJSON_C REQUIRED pbnjson_c)
45 | include_directories(${PBNJSON_C_INCLUDE_DIRS})
46 | webos_add_compiler_flags(ALL ${PBNJSON_C_CFLAGS_OTHER})
47 |
48 | pkg_check_modules(PBNJSON_CPP REQUIRED pbnjson_cpp)
49 | include_directories(${PBNJSON_CPP_INCLUDE_DIRS})
50 | webos_add_compiler_flags(ALL ${PBNJSON_CPP_CFLAGS_OTHER})
51 |
52 | pkg_check_modules(PMLOG REQUIRED PmLogLib)
53 | include_directories(${PMLOG_INCLUDE_DIRS})
54 | webos_add_compiler_flags(ALL ${PMLOG_CFLAGS_OTHER})
55 |
56 | pkg_check_modules(LUNASERVICE2 REQUIRED luna-service2)
57 | include_directories(${LUNASERVICE2_INCLUDE_DIRS})
58 | webos_add_compiler_flags(ALL ${LUNASERVICE2_CFLAGS_OTHER})
59 |
60 | pkg_check_modules(LUNASERVICE2CPP REQUIRED luna-service2++)
61 | include_directories(${LUNASERVICE2CPP_INCLUDE_DIRS})
62 | webos_add_compiler_flags(ALL ${LUNASERVICE2CPP_CFLAGS_OTHER})
63 |
64 | find_package(Boost REQUIRED COMPONENTS regex system filesystem)
65 | include_directories(${Boost_INCLUDE_DIRS})
66 | webos_add_compiler_flags(ALL ${Boost_CFLAGS_OTHER})
67 |
68 | find_library(ICU NAMES icuuc)
69 | if(ICU STREQUAL "ICU-NOTFOUND")
70 | message(FATAL_ERROR "Failed to find ICU4C libraries. Please install.")
71 | endif()
72 |
73 | find_library(RT NAMES rt)
74 | if(RT STREQUAL "RT-NOTFOUND")
75 | message(FATAL_ERROR "Failed to find rt libraries. Please link.")
76 | endif()
77 |
78 | # Require that all undefined symbols are satisfied by the libraries from target_link_libraries()
79 | webos_add_linker_options(ALL --no-undefined)
80 |
81 | # Build the sam executable
82 | file(GLOB_RECURSE SOURCES src/*.cpp)
83 |
84 | webos_configure_source_files(cfg ${PROJECT_SOURCE_DIR}/src/Environment.h)
85 |
86 | include_directories(src)
87 | include_directories(${PROJECT_BINARY_DIR}/Configured/src)
88 | add_executable(${CMAKE_PROJECT_NAME} ${SOURCES})
89 |
90 | set(LIBS
91 | ${GLIB2_LDFLAGS}
92 | ${GIO2_LDFLAGS}
93 | ${PBNJSON_C_LDFLAGS}
94 | ${PBNJSON_CPP_LDFLAGS}
95 | ${LUNASERVICE2_LDFLAGS}
96 | ${LUNASERVICE2CPP_LDFLAGS}
97 | ${PMLOG_LDFLAGS}
98 | ${Boost_LIBRARIES}
99 | ${ICU}
100 | ${RT}
101 | )
102 | target_link_libraries(${CMAKE_PROJECT_NAME} ${LIBS})
103 |
104 | webos_build_system_bus_files()
105 |
106 | file(GLOB_RECURSE SCHEMAS files/schema/*.schema)
107 | install(FILES ${SCHEMAS} DESTINATION ${WEBOS_INSTALL_WEBOS_SYSCONFDIR}/schemas/sam)
108 | install(TARGETS ${CMAKE_PROJECT_NAME} DESTINATION ${WEBOS_INSTALL_SBINDIR})
109 |
110 | # sam conf files
111 | configure_file(${CMAKE_CURRENT_SOURCE_DIR}/files/conf/sam-conf.json.in ${CMAKE_CURRENT_BINARY_DIR}/files/conf/sam-conf.json)
112 |
113 | file(GLOB_RECURSE SAM_CONF_FILES ${CMAKE_CURRENT_BINARY_DIR}/files/conf/*)
114 | install(FILES ${SAM_CONF_FILES} DESTINATION ${WEBOS_INSTALL_WEBOS_SYSCONFDIR})
115 |
116 | webos_config_build_doxygen(doc Doxyfile)
117 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Summary
2 | -------
3 | SAM is responsible for systems and application management
4 |
5 | Description
6 | -----------
7 |
8 | SAM is responsible for
9 | * Managing the running of applications
10 | * Managing the installation and removal of applications
11 |
12 | Dependencies
13 | ---------------------
14 |
15 | Below are the tools and libraries required to build SAM:
16 |
17 | * cmake
18 | * gcc
19 | * glib-2.0
20 | * make
21 | * pkg-config
22 | * Boost library (signals and regex)
23 | * libicu-dev
24 | * webosose/cmake-modules-webos
25 | * webosose/pmloglib
26 | * webosose/libpbnjson
27 | * webosose/luna-service2
28 |
29 | ## Building
30 |
31 | Once you have downloaded the source, enter the following to build it (after
32 | changing into the directory under which it was downloaded):
33 |
34 | $ mkdir BUILD
35 | $ cd BUILD
36 | $ cmake ..
37 | $ make
38 |
39 | Copyright and License Information
40 | =================================
41 | Unless otherwise specified, all content, including all source code files and
42 | documentation files in this repository are:
43 |
44 | Copyright (c) 2012-2018 LG Electronics, Inc.
45 |
46 | Licensed under the Apache License, Version 2.0 (the "License");
47 | you may not use this file except in compliance with the License.
48 | You may obtain a copy of the License at
49 |
50 | http://www.apache.org/licenses/LICENSE-2.0
51 |
52 | Unless required by applicable law or agreed to in writing, software
53 | distributed under the License is distributed on an "AS IS" BASIS,
54 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
55 | See the License for the specific language governing permissions and
56 | limitations under the License.
57 |
58 | SPDX-License-Identifier: Apache-2.0
59 |
--------------------------------------------------------------------------------
/apps/.gitignore:
--------------------------------------------------------------------------------
1 | *.ipk
2 |
--------------------------------------------------------------------------------
/apps/bareapp/appinfo.json:
--------------------------------------------------------------------------------
1 | {
2 | "id": "bareapp",
3 | "version": "99.99.99",
4 | "vendor": "LG Electronics, Inc.",
5 | "type": "web",
6 | "main": "index.html",
7 | "title": "Bare App",
8 | "uiRevision": "2",
9 | "miniicon": "icon.png",
10 | "largeIcon": "icon.png",
11 | "icon": "icon.png"
12 | }
13 |
--------------------------------------------------------------------------------
/apps/bareapp/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/webosose/sam/96161d3e50670fb21daccfb12a75c35fe406ce0e/apps/bareapp/icon.png
--------------------------------------------------------------------------------
/apps/bareapp/img.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/webosose/sam/96161d3e50670fb21daccfb12a75c35fe406ce0e/apps/bareapp/img.jpg
--------------------------------------------------------------------------------
/apps/bareapp/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Bare App
6 |
7 |
8 |
9 |
10 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/apps/com.webos.app.sam-native-registered/appinfo.json:
--------------------------------------------------------------------------------
1 | {
2 | "id": "com.webos.app.sam-native-registered",
3 | "title": "SAM Native Registered",
4 | "vendor": "LGE",
5 | "type": "native",
6 | "version": "1.0.0",
7 | "main": "main.sh",
8 | "icon": "icon.png",
9 | "iconColor":"#289CE4",
10 | "uiRevision": 2
11 | }
12 |
--------------------------------------------------------------------------------
/apps/com.webos.app.sam-native-registered/child.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | sleep 100
3 |
--------------------------------------------------------------------------------
/apps/com.webos.app.sam-native-registered/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/webosose/sam/96161d3e50670fb21daccfb12a75c35fe406ce0e/apps/com.webos.app.sam-native-registered/icon.png
--------------------------------------------------------------------------------
/apps/com.webos.app.sam-native-registered/main.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | echo ''
3 | echo '== Step 1 : Export Grobal variables =='
4 | export
5 | sleep 2
6 |
7 | echo ''
8 | echo '== Step 2 : Fork Child Process =='
9 | . ./child.sh &
10 | . ./invalid.sh &
11 | sleep 2
12 |
13 | echo ''
14 | echo '== Step 3 : Check Resister Native App =='
15 | luna-send -a com.webos.app.sam-native-registered -f -n 2 luna://com.webos.service.applicationmanager/registerApp '{}'
16 | sleep 100
17 |
--------------------------------------------------------------------------------
/apps/com.webos.app.sam-native/.main.sh.swp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/webosose/sam/96161d3e50670fb21daccfb12a75c35fe406ce0e/apps/com.webos.app.sam-native/.main.sh.swp
--------------------------------------------------------------------------------
/apps/com.webos.app.sam-native/appinfo.json:
--------------------------------------------------------------------------------
1 | {
2 | "id": "com.webos.app.sam-native",
3 | "title": "SAM Native",
4 | "vendor": "LGE",
5 | "type": "native",
6 | "version": "1.0.0",
7 | "main": "main.sh",
8 | "icon": "icon.png",
9 | "iconColor":"#289CE4",
10 | "uiRevision": 2
11 | }
12 |
--------------------------------------------------------------------------------
/apps/com.webos.app.sam-native/child.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | sleep 100
3 |
--------------------------------------------------------------------------------
/apps/com.webos.app.sam-native/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/webosose/sam/96161d3e50670fb21daccfb12a75c35fe406ce0e/apps/com.webos.app.sam-native/icon.png
--------------------------------------------------------------------------------
/apps/com.webos.app.sam-native/main.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | echo ''
3 | echo '== Step 1 : Print Grobal variables =='
4 | export
5 | sleep 2
6 |
7 | echo '== Step 2 : Sleep 100 =='
8 | sleep 100
9 |
--------------------------------------------------------------------------------
/apps/com.webos.app.sam-qml/appinfo.json:
--------------------------------------------------------------------------------
1 | {
2 | "id": "com.webos.app.sam-qml",
3 | "title": "SAM QML",
4 | "vendor": "LGE",
5 | "type": "qml",
6 | "version": "1.0.0",
7 | "main": "main.qml",
8 | "icon": "icon.png",
9 | "iconColor":"#289CE4"
10 | }
11 |
--------------------------------------------------------------------------------
/apps/com.webos.app.sam-qml/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/webosose/sam/96161d3e50670fb21daccfb12a75c35fe406ce0e/apps/com.webos.app.sam-qml/icon.png
--------------------------------------------------------------------------------
/apps/com.webos.app.sam-qml/main.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.4
2 | import Eos.Window 0.1
3 | import QtQuick.Window 2.2
4 |
5 | WebOSWindow {
6 | id: root
7 | title: "Bare Eos Window"
8 | displayAffinity: params["displayAffinity"]
9 | width: 1920
10 | height: 1080
11 | visible: true
12 | color: "yellow"
13 | }
14 |
--------------------------------------------------------------------------------
/apps/generate.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | ares-package com.webos.app.sam-native
3 | ares-package com.webos.app.sam-native-registered
4 | ares-package com.webos.app.sam-qml
5 | ares-package bareapp
6 |
--------------------------------------------------------------------------------
/files/conf/sam-conf.json.in:
--------------------------------------------------------------------------------
1 | {
2 | "ApplicationPaths": [
3 | {
4 | "typeByDir": "system_builtin",
5 | "path": "@WEBOS_INSTALL_MNTDIR@/otycabi/usr/palm/applications"
6 | },
7 | {
8 | "typeByDir": "system_builtin",
9 | "path": "@WEBOS_INSTALL_MNTDIR@/otncabi/usr/palm/applications"
10 | },
11 | {
12 | "typeByDir": "system_builtin",
13 | "path": "@WEBOS_INSTALL_WEBOS_APPLICATIONSDIR@"
14 | },
15 | {
16 | "typeByDir": "system_updatable",
17 | "path": "@WEBOS_INSTALL_MEDIADIR@/system/apps/usr/palm/applications"
18 | },
19 | {
20 | "typeByDir": "store",
21 | "path": "@WEBOS_INSTALL_INSTALLEDAPPSDIR@"
22 | },
23 | {
24 | "typeByDir": "dev",
25 | "path": "@WEBOS_INSTALL_MEDIADIR@/developer/apps/usr/palm/applications"
26 | }
27 | ],
28 |
29 | "DevModePath": "@WEBOS_INSTALL_SYSMGR_LOCALSTATEDIR@/preferences/devmode_enabled",
30 | "JailModePath": "@WEBOS_INSTALL_SYSMGR_LOCALSTATEDIR@/preferences/jailer_disabled",
31 | "JailerPath": "@WEBOS_INSTALL_BINDIR@/jailer",
32 | "QmlRunnerPath": "@WEBOS_INSTALL_BINDIR@/qml-runner",
33 | "AppShellRunnerPath": "@WEBOS_INSTALL_BINDIR@/app-shell/run_app_shell",
34 | "BrowserShellRunnerPath" :"@WEBOS_INSTALL_BINDIR@/browser-shell/run_browser_shell",
35 |
36 | "FullscreenWindowType": [
37 | "_WEBOS_WINDOW_TYPE_CARD",
38 | "_WEBOS_WINDOW_TYPE_RESTRICTED"
39 | ],
40 |
41 | "NoJailApps" : [
42 | "com.webos.app.voiceagent",
43 | "com.webos.app.voiceview",
44 | "com.webos.app.multiview",
45 | "com.webos.app.livemenu",
46 | "com.webos.app.factorywin",
47 | "com.webos.app.fingergesture",
48 | "com.webos.app.livetv",
49 | "com.webos.app.inputcommon",
50 | "com.webos.app.externalinput.component",
51 | "com.webos.app.hdmi1",
52 | "com.webos.app.hdmi2",
53 | "com.webos.app.hdmi3",
54 | "com.webos.app.hdmi4",
55 | "com.webos.app.tvhotkey",
56 | "com.webos.app.voice",
57 | "com.webos.app.searchanddiscovery",
58 | "com.webos.app.externalinput.av1",
59 | "com.webos.app.externalinput.av2",
60 | "com.webos.app.externalinput.scart",
61 | "com.webos.app.livezoom-inhdmi1",
62 | "com.webos.app.livezoom-inhdmi2",
63 | "com.webos.app.livezoom-inhdmi3",
64 | "com.webos.app.livezoom-inhdmi4",
65 | "com.webos.app.livezoom-intv",
66 | "com.webos.app.livezoom-inphotovideo",
67 | "com.webos.app.twinzoom-inhdmi1",
68 | "com.webos.app.twinzoom-inhdmi2",
69 | "com.webos.app.twinzoom-inhdmi3",
70 | "com.webos.app.twinzoom-inhdmi4",
71 | "com.webos.app.twinzoom-intv",
72 | "com.webos.app.dvrpopup",
73 | "com.webos.app.smhl",
74 | "com.webos.app.tips",
75 | "com.webos.app.livezoom-inrecordings",
76 | "com.webos.app.externalinput.rgb",
77 | "com.webos.app.ism"
78 | ],
79 |
80 | "keepAliveApps":[
81 | "com.webos.app.home"
82 | ],
83 |
84 | "HostAppsForAlias":[
85 | "com.webos.app.webapphost"
86 | ],
87 |
88 | "ReservedResource": {
89 | "mime": [
90 | "application/vnd.lge.appstore"
91 | ]
92 | },
93 |
94 | "LaunchPointDBKind": {
95 | "id":"com.webos.applicationManager.launchpoints:2",
96 | "owner":"com.webos.applicationManager",
97 | "schema":{
98 | "properties":{
99 | "id":{"type":"string", "description":"unique id of app", "optional":false},
100 | "type":{"type":"string", "description":"type of launchpoint", "optional":false},
101 | "launchPointId":{"type":"string", "description":"unique id of launchpoint", "optional":false},
102 | "title":{"type":"string", "description":"title of app", "optional":true},
103 | "icon":{"type":"string", "description":"path of icon", "optional":true},
104 | "bgImage":{"type":"string", "description":"path of backgroundImage", "optional":true},
105 | "bgImages":{"type":"array", "items":{"type":"string"}, "description":"path for multiple backgroundImages", "optional":true},
106 | "bgColor":{"type":"string", "description":"backgroundColor", "optional":true},
107 | "imageForRecents":{"type":"string","description":"location of bitmap : displayed in the recent apps list","optional":true},
108 | "iconColor":{"type":"string", "description":"indicates color of the icon of the launchpoint", "optional":true},
109 | "largeIcon":{"type":"string", "description":"path of largeIcon", "optional":true},
110 | "favicon":{"type":"string", "description":"path of favicon", "optional":true},
111 | "appDescription":{"type":"string", "description": "A short tagline for the app", "optional":true},
112 | "params":{"type":"object", "description":"parameters", "optional":true},
113 | "userData":{"type":"string", "description": "Additional data that may be used by clients", "optional":true},
114 | "tileSize":{"type":"string", "enum": [ "normal", "large" ], "default": "normal", "description": "Hint for UI tiling size", "optional": true},
115 | "unmovable":{"type":"boolean", "description": "Hint that item should not be editable by user", "optional": true}
116 | }
117 | },
118 |
119 | "indexes":[
120 | {"name":"id", "props":[{"name":"id"}]},
121 | {"name":"type", "props":[{"name":"type"}]},
122 | {"name":"launchPointId", "props":[{"name":"launchPointId"}]},
123 | {"name":"revision", "props":[{"name":"_rev"}]}
124 | ]
125 | },
126 |
127 | "LaunchPointDBPermissions": {
128 | "permissions": [
129 | {
130 | "type" : "db.kind",
131 | "object" : "com.webos.applicationManager.launchpoints:2",
132 | "caller" : "com.webos.applicationManager",
133 | "operations": {
134 | "create" : "allow",
135 | "read" : "allow",
136 | "update" : "allow",
137 | "delete" : "allow"
138 | }
139 | }
140 | ]
141 | }
142 | }
143 |
--------------------------------------------------------------------------------
/files/schema/applicationManager.addLaunchPoint.schema:
--------------------------------------------------------------------------------
1 | {
2 | "id": "applicationManager.addLaunchPoint",
3 | "type": "object",
4 | "properties": {
5 | "id": {
6 | "type": "string",
7 | "description": "ID of application to generate launch point"
8 | },
9 | "title": {
10 | "type": "string",
11 | "description": "Title for the launch point"
12 | },
13 | "icon": {
14 | "type": "string",
15 | "description": "Path to icon"
16 | },
17 | "bgImage": {
18 | "type": "string",
19 | "description": "This field is the location of a bitmap. The bitmap is displayed to the user when the user hovers over the launch point with the system pointer."
20 | },
21 | "bgImages": {
22 | "type": "array",
23 | "items": {
24 | "type": "string"
25 | },
26 | "default" : [],
27 | "description": "Locations of bitmaps that may be displayed to the user when the user hovers over the launch point with the system pointer."
28 | },
29 | "bgColor": {
30 | "type": "string",
31 | "description": "This field is the color to be displayed to the user when the user hovers over the launch point with the system pointer. This is used in the absence of the backgroundImage."
32 | },
33 | "imageForRecents": {
34 | "type": "string",
35 | "description": "This field is the location of a bitmap. The bitmap is displayed in the recent apps list."
36 | },
37 | "iconColor": {
38 | "type": "string",
39 | "description": "indicates color of the icon of the launch point."
40 | },
41 | "largeIcon": {
42 | "type": "string",
43 | "description": "path to largeIcon"
44 | },
45 | "appDescription": {
46 | "type": "string",
47 | "description": "A short tagline for the application"
48 | },
49 | "params": {
50 | "type": "object",
51 | "description": "Parameters to pass to the application"
52 | },
53 | "userData": {
54 | "type": "string",
55 | "description": "Additional data that may be used by clients, such as an identifier for analytics purposes"
56 | },
57 | "tileSize": {
58 | "type": "string",
59 | "enum": [ "normal", "large" ],
60 | "default": "normal",
61 | "description": "Hint for sizing of UI tiles: normal or large, large may be used for a promotional item"
62 | },
63 | "unmovable": {
64 | "type": "boolean",
65 | "default": false,
66 | "description": "Hint that an item should never be moved from it's given position"
67 | },
68 | "supportI18nTitle": {
69 | "type": "boolean",
70 | "default": true,
71 | "description": "Hint that i18n will be supported for title"
72 | }
73 | },
74 | "required": [
75 | "id"
76 | ]
77 | }
78 |
--------------------------------------------------------------------------------
/files/schema/applicationManager.addVirtualApp.schema:
--------------------------------------------------------------------------------
1 | {
2 | "id": "applicationManager.addVirtualApp",
3 | "type": "object",
4 | "properties": {
5 | "id": {
6 | "type": "string",
7 | "description": "virtual application ID to be created."
8 | },
9 | "hostId": {
10 | "type": "string",
11 | "description": "host application id for virtual application."
12 | },
13 | "appInfo": {
14 | "type": "object",
15 | "description": "appInfo for virtual application.",
16 | "default": {}
17 | },
18 | "params": {
19 | "type": "object",
20 | "description": "params to be passed to host application as launch params.",
21 | "default": {}
22 | }
23 | },
24 | "required": [
25 | "id",
26 | "hostId",
27 | "params"
28 | ]
29 | }
30 |
--------------------------------------------------------------------------------
/files/schema/applicationManager.closeByAppId.schema:
--------------------------------------------------------------------------------
1 | {
2 | "id": "applicationManager.closeByAppId",
3 | "type": "object",
4 | "properties": {
5 | "id": {
6 | "type": "string",
7 | "description": "Application ID to be closed."
8 | }
9 | },
10 | "required": [
11 | "id"
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/files/schema/applicationManager.getAppBasePath.schema:
--------------------------------------------------------------------------------
1 | {
2 | "id": "applicationManager.getAppBasePath",
3 | "type": "object",
4 | "properties": {
5 | "appId": {
6 | "type": "string",
7 | "description": "Get application base path for a given application ID."
8 | }
9 | },
10 | "required": [
11 | "appId"
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/files/schema/applicationManager.getAppInfo.schema:
--------------------------------------------------------------------------------
1 | {
2 | "id": "applicationManager.getAppInfo",
3 | "type": "object",
4 | "properties": {
5 | "id": {
6 | "type": "string",
7 | "description": "Get application information for a given application ID."
8 | },
9 | "properties": {
10 | "type": "array",
11 | "description": "Get application information for service-user selected properties."
12 | }
13 | },
14 | "required": [
15 | "id"
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/files/schema/applicationManager.getAppStatus.schema:
--------------------------------------------------------------------------------
1 | {
2 | "id": "applicationManager.getAppStatus",
3 | "type": "object",
4 | "properties": {
5 | "appId": {
6 | "type": "string"
7 | },
8 | "appInfo": {
9 | "type": "boolean",
10 | "default": false
11 | }
12 | },
13 | "required": [
14 | "appId"
15 | ]
16 | }
17 |
--------------------------------------------------------------------------------
/files/schema/applicationManager.getForegroundAppInfo.schema:
--------------------------------------------------------------------------------
1 | {
2 | "id": "applicationManager.getForegroundAppInfo",
3 | "type": "object",
4 | "properties": {
5 | "extraInfo": {
6 | "type": "boolean",
7 | "description": "If set to true, returns all foreground apps as an array. Otherwise, returns only a full screen app (e.g. card type)"
8 | },
9 | "subscribe": {
10 | "type": "boolean"
11 | }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/files/schema/applicationManager.getHandlerForExtension.schema:
--------------------------------------------------------------------------------
1 | {
2 | "id": "applicationManager.getHandlerForExtension",
3 | "type": "object",
4 | "properties": {
5 | "extension": {
6 | "type": "string",
7 | "description": "The extension for getting handler application."
8 | }
9 | },
10 | "required": [
11 | "extension"
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/files/schema/applicationManager.getHandlerForMimeType.schema:
--------------------------------------------------------------------------------
1 | {
2 | "id": "applicationManager.getHandlerForMimeType",
3 | "type": "object",
4 | "properties": {
5 | "mimeType": {
6 | "type": "string",
7 | "description": "The mime type for getting handler application."
8 | }
9 | },
10 | "required": [
11 | "mimeType"
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/files/schema/applicationManager.getHandlerForUrl.schema:
--------------------------------------------------------------------------------
1 | {
2 | "id": "applicationManager.getHandlerForUrl",
3 | "type": "object",
4 | "properties": {
5 | "url": {
6 | "type": "string",
7 | "description": "The url for getting handler application."
8 | }
9 | },
10 | "required": [
11 | "url"
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/files/schema/applicationManager.getHandlerForUrlByVerb.schema:
--------------------------------------------------------------------------------
1 | {
2 | "id": "applicationManager.getHandlerForUrlByVerb",
3 | "type": "object",
4 | "properties": {
5 | "url": {
6 | "type": "string",
7 | "description": "The url for getting handler application by verb."
8 | },
9 | "mime": {
10 | "type": "string",
11 | "description": "The mime for getting handler application by verb."
12 | },
13 | "verb": {
14 | "type": "string",
15 | "description": "The verb for getting handler application."
16 | }
17 | },
18 | "required": [
19 | "verb"
20 | ]
21 | }
22 |
--------------------------------------------------------------------------------
/files/schema/applicationManager.launch.schema:
--------------------------------------------------------------------------------
1 | {
2 | "id": "applicationManager.launch",
3 | "type": "object",
4 | "properties": {
5 | "id": {
6 | "type": "string",
7 | "description": "Application ID to be launched."
8 | },
9 | "launchPointId": {
10 | "type": "string",
11 | "description": "LaunchPoint ID to be launched."
12 | },
13 | "instanceId": {
14 | "type": "string",
15 | "description": "Instance ID to be relaunched."
16 | },
17 | "checkUpdateOnLaunch": {"type" : "boolean"},
18 | "params" : {"type" : "object"},
19 | "target" : {"type" : "string"},
20 | "noSplash" : {"type" : "boolean"},
21 | "spinner" : {"type" : "boolean"},
22 | "launchHidden" : {"type" : "boolean"},
23 | "keepAlive" : {"type" : "boolean"},
24 | "autoInstallation" : {"type" : "boolean"},
25 | "containerBasedApp " : {"type" : "boolean"},
26 | "launchFirstApp" : {"type" : "boolean"},
27 | "preload": {
28 | "type": "string",
29 | "enum": ["full", "semi-full", "partial", "minimal"],
30 | "description": "App will be launched in background if preload is filled in"
31 | }
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/files/schema/applicationManager.launchVirtualApp.schema:
--------------------------------------------------------------------------------
1 | {
2 | "id": "applicationManager.launchVirtualApp",
3 | "type": "object",
4 | "properties": {
5 | "id": {
6 | "type": "string",
7 | "description": "virtual application ID to be launched."
8 | },
9 | "hostId": {
10 | "type": "string",
11 | "description": "Host app id for virtual application."
12 | },
13 | "appInfo": {
14 | "type": "object",
15 | "description": "appInfo for virtual application",
16 | "default": {}
17 | },
18 | "params": {
19 | "type": "object",
20 | "description": "params to be passed to host application as params",
21 | "default": {}
22 | },
23 | "noSplash": {
24 | "type": "boolean"
25 | },
26 | "spinner": {
27 | "type": "boolean"
28 | },
29 | "preload": {
30 | "type": "string",
31 | "enum": ["full", "semi-full", "partial", "minimal"],
32 | "description": "App will be launched in background if preload is filled in"
33 | },
34 | "launchHidden": {
35 | "type": "boolean"
36 | },
37 | "keepAlive": {
38 | "type": "boolean"
39 | }
40 | },
41 | "required": [
42 | "id",
43 | "hostId",
44 | "params"
45 | ]
46 | }
47 |
--------------------------------------------------------------------------------
/files/schema/applicationManager.listAllHandlersForMime.schema:
--------------------------------------------------------------------------------
1 | {
2 | "id": "applicationManager.listAllHandlersForMime",
3 | "type": "object",
4 | "properties": {
5 | "mime": {
6 | "type": "string",
7 | "description": "The mime for getting handler application by verb."
8 | }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/files/schema/applicationManager.listAllHandlersForMultipleMime.schema:
--------------------------------------------------------------------------------
1 | {
2 | "id": "applicationManager.listAllHandlersForMultipleMime",
3 | "type": "object",
4 | "properties": {
5 | "mimes": {
6 | "type": "array",
7 | "description": "The mimes type for getting handler application."
8 | }
9 | },
10 | "required": [
11 | "mimes"
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/files/schema/applicationManager.listAllHandlersForMultipleUrlPattern.schema:
--------------------------------------------------------------------------------
1 | {
2 | "id": "applicationManager.listAllHandlersForMultipleUrlPattern",
3 | "type": "object",
4 | "properties": {
5 | "urls": {
6 | "type": "array",
7 | "description": "The urls for getting handler application."
8 | }
9 | },
10 | "required": [
11 | "urls"
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/files/schema/applicationManager.listAllHandlersForUrl.schema:
--------------------------------------------------------------------------------
1 | {
2 | "id": "applicationManager.listAllHandlersForUrl",
3 | "type": "object",
4 | "properties": {
5 | "url": {
6 | "type": "string",
7 | "description": "The url for getting handler application by verb."
8 | }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/files/schema/applicationManager.listAllHandlersForUrlByVerb.schema:
--------------------------------------------------------------------------------
1 | {
2 | "id": "applicationManager.listAllHandlersForUrlByVerb",
3 | "type": "object",
4 | "properties": {
5 | "url": {
6 | "type": "string",
7 | "description": "The url for getting handler application by verb."
8 | },
9 | "mime": {
10 | "type": "string",
11 | "description": "The mime for getting handler application by verb."
12 | },
13 | "verb": {
14 | "type": "string",
15 | "description": "The verb for getting handler application."
16 | }
17 | },
18 | "required": [
19 | "verb"
20 | ]
21 | }
22 |
--------------------------------------------------------------------------------
/files/schema/applicationManager.listAllHandlersForUrlPattern.schema:
--------------------------------------------------------------------------------
1 | {
2 | "id": "applicationManager.listAllHandlersForUrlPattern",
3 | "type": "object",
4 | "properties": {
5 | "urlPattern": {
6 | "type": "string",
7 | "description": "The mimes type for getting handler application."
8 | }
9 | },
10 | "required": [
11 | "urlPattern"
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/files/schema/applicationManager.listApps.schema:
--------------------------------------------------------------------------------
1 | {
2 | "id": "applicationManager.listApps",
3 | "type": "object",
4 | "properties": {
5 | "properties": {
6 | "type": "array",
7 | "description": "Get application information for service-user selected properties."
8 | },
9 | "subscribe": {
10 | "type": "boolean",
11 | "description": "listApps support subscription to notify when Apps are updated, i.e., an app is installed or removed or edit"
12 | }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/files/schema/applicationManager.listLaunchPoints.schema:
--------------------------------------------------------------------------------
1 | {
2 | "id": "applicationManager.listLaunchPoints",
3 | "type": "object",
4 | "properties": {
5 | "subscribe": {
6 | "type": "boolean",
7 | "description": "listLaunchPoints support subscription to notify when launch points are updated, i.e., an app is installed or removed"
8 | }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/files/schema/applicationManager.lockApp.schema:
--------------------------------------------------------------------------------
1 | {
2 | "id": "applicationManager.lockApp",
3 | "type": "object",
4 | "properties": {
5 | "id": {
6 | "type": "string",
7 | "description": "ID of application to be locked."
8 | },
9 | "lock": {
10 | "type": "boolean",
11 | "description" : "When set the application is not allowed to launch"
12 | }
13 | },
14 | "required": [
15 | "id",
16 | "lock"
17 | ]
18 | }
19 |
--------------------------------------------------------------------------------
/files/schema/applicationManager.mimeTypeForExtension.schema:
--------------------------------------------------------------------------------
1 | {
2 | "id": "applicationManager.mimeTypeForExtension",
3 | "type": "object",
4 | "properties": {
5 | "extension": {
6 | "type": "string",
7 | "description": "The extension of file for getting mime type."
8 | }
9 | },
10 | "required": [
11 | "extension"
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/files/schema/applicationManager.notifyAlertClosed.schema:
--------------------------------------------------------------------------------
1 | {
2 | "id": "applicationManager.notifyAlertClosed",
3 | "type": "object",
4 | "properties": {
5 | "alertId": {
6 | "type": "string",
7 | "description": "The update-popup ID. This is randomly generated by SAM when reqeusting an update-popup."
8 | },
9 | "action": {
10 | "type": "string",
11 | "enum": [ "launch", "update", "cancel" ],
12 | "description" : "The action that the user can choose."
13 | }
14 | },
15 | "required": [
16 | "alertId",
17 | "action"
18 | ]
19 | }
20 |
--------------------------------------------------------------------------------
/files/schema/applicationManager.open.schema:
--------------------------------------------------------------------------------
1 | {
2 | "id": "applicationManager.launch",
3 | "type": "object",
4 | "properties": {
5 | "id": {
6 | "type": "string",
7 | "description": "ID of application to be launched."
8 | },
9 | "target": {
10 | "type": "string",
11 | "description": "A target URL. If id is not specified, this URL is opened in an appropriate application, if there is one."
12 | },
13 | "mime": {
14 | "type": "string",
15 | "description": "Mime type for target."
16 | },
17 | "params" : {
18 | "type": "object",
19 | "description": "Additional launch parameters for the application."
20 | },
21 | "authToken" : {
22 | "type" : "object",
23 | "description": "Authorization token given to download manager when opening a remote file. deviceId is required with this."
24 | },
25 | "deviceId" : {
26 | "type" : "object",
27 | "description": "Device ID given to download manager when opening a remote file. authToken is required with this."
28 | },
29 | "overrideHandlerAppId": {
30 | "type": "string",
31 | "description": "If specified, this appid will be used to open a resource."
32 | },
33 | "fileName": {
34 | "type": "string",
35 | "description": "File name of target."
36 | },
37 | "subcsribe": {
38 | "type": "boolean",
39 | "description": "When true, the message is a subscription request."
40 | },
41 | "noSplash": {
42 | "type": "boolean",
43 | "description": "When true, there will be no splash screen."
44 | },
45 | "launchFirstApp" : {
46 | "type" : "boolean",
47 | "description": "When true, the app is set to first launched app after booting."
48 | }
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/files/schema/applicationManager.registerApp.schema:
--------------------------------------------------------------------------------
1 | {
2 | "id": "applicationManager.registerApp",
3 | "type": "object",
4 | "properties": {
5 | "subscribe": {
6 | "type": "boolean"
7 | }
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/files/schema/applicationManager.removeLaunchPoint.schema:
--------------------------------------------------------------------------------
1 | {
2 | "id": "applicationManager.removeLaunchPoint",
3 | "type": "object",
4 | "properties": {
5 | "launchPointId": {
6 | "type": "string",
7 | "description": "ID of launch point to be removed"
8 | }
9 | },
10 | "required": [
11 | "launchPointId"
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/files/schema/applicationManager.removeVirtualApp.schema:
--------------------------------------------------------------------------------
1 | {
2 | "id": "applicationManager.removeVirtualApp",
3 | "type": "object",
4 | "properties": {
5 | "id": {
6 | "type": "string",
7 | "description": "virtual application ID to be removed"
8 | }
9 | },
10 | "required": [
11 | "id"
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/files/schema/applicationManager.running.schema:
--------------------------------------------------------------------------------
1 | {
2 | "id": "applicationManager.running",
3 | "type": "object",
4 | "properties": {
5 | "subscribe": {
6 | "type": "boolean"
7 | }
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/files/schema/applicationManager.searchApps.schema:
--------------------------------------------------------------------------------
1 | {
2 | "id": "applicationManager.searchApps",
3 | "type": "object",
4 | "properties": {
5 | "keyword": {
6 | "type": "string",
7 | "description": "Keyword to search with"
8 | }
9 | },
10 | "required": [
11 | "keyword"
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/files/schema/applicationManager.updateLaunchPoint.schema:
--------------------------------------------------------------------------------
1 | {
2 | "id": "applicationManager.updateLaunchPoint",
3 | "type": "object",
4 | "properties": {
5 | "launchPointId": {
6 | "type": "string",
7 | "description": "ID of launch point to be updated"
8 | },
9 | "title": {
10 | "type": "string",
11 | "description": "Title for the launch point to be updated"
12 | },
13 | "icon": {
14 | "type": "string",
15 | "description": "Path to icon for the launch point to be updated"
16 | },
17 | "bgImage": {
18 | "type": "string",
19 | "description": "This field is the location of a bitmap. The bitmap is displayed to the user when the user hovers over the launch point with the system pointer."
20 | },
21 | "bgImages": {
22 | "type": "array",
23 | "items": {
24 | "type": "string"
25 | },
26 | "description": "Locations of bitmaps that may be displayed to the user when the user hovers over the launch point with the system pointer."
27 | },
28 | "bgColor": {
29 | "type": "string",
30 | "description": "This field is the color to be displayed to the user when the user hovers over the launch point with the system pointer. This is used in the absence of the backgroundImage."
31 | },
32 | "imageForRecents": {
33 | "type": "string",
34 | "description": "This field is the location of a bitmap. The bitmap is displayed in the recent apps list."
35 | },
36 | "iconColor": {
37 | "type": "string",
38 | "description": "indicates color of the icon of the launch point."
39 | },
40 | "largeIcon": {
41 | "type": "string",
42 | "description": "path to largeIcon"
43 | },
44 | "appDescription": {
45 | "type": "string",
46 | "description": "A short tagline for the application"
47 | },
48 | "params": {
49 | "type": "object",
50 | "description": "Parameters to pass to the application"
51 | },
52 | "userData": {
53 | "type": "string",
54 | "description": "Additional data that may be used by clients, such as an identifier for analytics purposes"
55 | },
56 | "tileSize": {
57 | "type": "string",
58 | "enum": [ "normal", "large" ],
59 | "description": "Hint for sizing of UI tiles: normal or large, large may be used for a promotional item"
60 | },
61 | "unmovable": {
62 | "type": "boolean",
63 | "description": "Hint that an item should never be moved from it's given position"
64 | }
65 | },
66 | "required": [
67 | "launchPointId"
68 | ]
69 | }
70 |
--------------------------------------------------------------------------------
/files/schema/deletedSystemAppList.schema:
--------------------------------------------------------------------------------
1 | {
2 | "id": "deletedSystemAppList",
3 | "type": "object",
4 | "properties": {
5 | "deletedList": {
6 | "type": "array",
7 | "items": {
8 | "type": "string"
9 | },
10 | "description": "deleted preinstalled app IDs"
11 | }
12 | },
13 | "required": [
14 | "deletedList"
15 | ]
16 | }
17 |
--------------------------------------------------------------------------------
/files/schema/foregroundAppInfo.schema:
--------------------------------------------------------------------------------
1 | {
2 | "id": "foregroundAppInfo",
3 | "type": "object",
4 | "properties": {
5 | "appId": {
6 | "type": "string",
7 | "description": "Application ID of application in foreground."
8 | },
9 | "processId": {
10 | "type": "string",
11 | "description": "Process ID of application in foreground."
12 | },
13 | "windowType": {
14 | "type": "string",
15 | "description": "Describe type of window : maximized, maximized, pip, popup, overay"
16 | }
17 | },
18 | "required": [
19 | "appId",
20 | "processId"
21 | ]
22 | }
23 |
--------------------------------------------------------------------------------
/files/schema/sam-conf.schema:
--------------------------------------------------------------------------------
1 | {
2 | "id": "Settings",
3 | "type": "object",
4 | "properties": {
5 | "ApplicationPaths": {
6 | "type": "array",
7 | "items": {
8 | "type": "object",
9 | "properties": {
10 | "typeByDir": {
11 | "type": "string",
12 | "enum": [
13 | "system_builtin",
14 | "system_updatable",
15 | "store",
16 | "dev",
17 | "alias",
18 | "tmp_alias"
19 | ],
20 | "description": "It explains apps are preinstalled, downloaedFromStore or installed in Devmode"
21 | },
22 | "path": {
23 | "type": "string",
24 | "description": "Absolute path the directory"
25 | }
26 | },
27 | "required": ["typeByDir", "path"]
28 | },
29 | "description" : "Application directory paths in sam-conf.json file."
30 | },
31 | "DevModePath": {
32 | "type": "string",
33 | "description": "If this file exists, it indicates it's working on development mode."
34 | },
35 | "JailModePath": {
36 | "type": "string",
37 | "description": "If this file exists, it means Native apps should be launched through Jailer"
38 | },
39 | "JailerPath": {
40 | "type": "string",
41 | "description": "Location of Jailer binary"
42 | },
43 | "QmlRunnerPath": {
44 | "type": "string",
45 | "description": "Location of Qml Runner binary"
46 | },
47 | "AppShellRunnerPath": {
48 | "type": "string",
49 | "description": "Location of AppShell Runner binary"
50 | },
51 | "BrowserShellRunnerPath": {
52 | "type": "string",
53 | "description": "Location of BrowserShell Runner binary"
54 | },
55 | "RespawnedPath": {
56 | "type": "string",
57 | "description": "If this file exists, it means sam already starts"
58 | },
59 | "NoJailApps": {
60 | "type": "array",
61 | "items": {
62 | "type": "string"
63 | },
64 | "description": "This is a white list for jailer. If an app is on this list, it' will be launched out of jail"
65 | },
66 | "SecurityEnabled": {
67 | "type": "boolean",
68 | "description": "If true, SAM checks security policy, such as DRM... etc."
69 | },
70 | "UsePartialKeywordMatchForAppSearch": {
71 | "type": "boolean",
72 | "description": "This field indicates that app searching is available."
73 | },
74 | "KeepAliveApps" : {
75 | "type": "array",
76 | "items": {
77 | "type" : "string"
78 | },
79 | "description": "Applications which are to be kept alive."
80 | },
81 | "BootTimeApps" : {
82 | "type": "array",
83 | "items": {
84 | "type": "string"
85 | },
86 | "description": "TV input apps for parental control bypassing"
87 | },
88 | "ReservedResource": {
89 | "type": "object",
90 | "properties": {
91 | "mime": {
92 | "type": "array",
93 | "items": {
94 | "type": "string"
95 | }
96 | }
97 | },
98 | "description": "3rd-party apps can not have any of the values listed here"
99 | },
100 | "LaunchPointDBKind" : {
101 | "type": "object",
102 | "description": "DBKind of LaunchPoint"
103 | },
104 | "LaunchPointDBPermissions" : {
105 | "type": "object",
106 | "description": "DBPermissions of LaunchPoint"
107 | }
108 | },
109 | "required": [
110 | "ApplicationPaths",
111 | "JailerPath",
112 | "LaunchPointDBKind",
113 | "LaunchPointDBPermissions"
114 | ]
115 | }
116 |
--------------------------------------------------------------------------------
/files/sysbus/com.webos.sam.api.json:
--------------------------------------------------------------------------------
1 | {
2 | "application.operation": [
3 | "com.webos.applicationManager/getAppBasePath",
4 | "com.webos.service.applicationManager/getAppBasePath",
5 | "com.webos.service.applicationmanager/getAppBasePath",
6 | "com.webos.applicationManager/registerNativeApp",
7 | "com.webos.service.applicationManager/registerNativeApp",
8 | "com.webos.service.applicationmanager/registerNativeApp",
9 | "com.webos.applicationManager/registerApp",
10 | "com.webos.service.applicationManager/registerApp",
11 | "com.webos.service.applicationmanager/registerApp",
12 | "com.webos.applicationManager/getAppStatus",
13 | "com.webos.service.applicationManager/getAppStatus",
14 | "com.webos.service.applicationmanager/getAppStatus",
15 | "com.webos.applicationManager/getAppInfo",
16 | "com.webos.service.applicationManager/getAppInfo",
17 | "com.webos.service.applicationmanager/getAppInfo",
18 | "com.webos.applicationManager/getAppLifeEvents",
19 | "com.webos.service.applicationManager/getAppLifeEvents",
20 | "com.webos.service.applicationmanager/getAppLifeEvents",
21 | "com.webos.applicationManager/getAppLifeStatus",
22 | "com.webos.service.applicationManager/getAppLifeStatus",
23 | "com.webos.service.applicationmanager/getAppLifeStatus",
24 | "com.webos.applicationManager/getForegroundAppInfo",
25 | "com.webos.service.applicationManager/getForegroundAppInfo",
26 | "com.webos.service.applicationmanager/getForegroundAppInfo",
27 | "com.webos.applicationManager/listApps",
28 | "com.webos.service.applicationManager/listApps",
29 | "com.webos.service.applicationmanager/listApps",
30 | "com.webos.applicationManager/listLaunchPoints",
31 | "com.webos.service.applicationManager/listLaunchPoints",
32 | "com.webos.service.applicationmanager/listLaunchPoints"
33 | ],
34 | "application.devmode": [
35 | "com.webos.applicationManager/dev/closeByAppId",
36 | "com.webos.service.applicationManager/dev/closeByAppId",
37 | "com.webos.service.applicationmanager/dev/closeByAppId",
38 | "com.webos.applicationManager/dev/listApps",
39 | "com.webos.service.applicationManager/dev/listApps",
40 | "com.webos.service.applicationmanager/dev/listApps",
41 | "com.webos.applicationManager/dev/running",
42 | "com.webos.service.applicationManager/dev/running",
43 | "com.webos.service.applicationmanager/dev/running",
44 | "com.webos.applicationManager/dev/close",
45 | "com.webos.service.applicationManager/dev/close",
46 | "com.webos.service.applicationmanager/dev/close",
47 | "com.webos.applicationManager/dev/managerInfo",
48 | "com.webos.service.applicationmanager/dev/managerInfo",
49 | "com.webos.service.applicationManager/dev/managerInfo"
50 | ],
51 | "application.launcher": [
52 | "com.webos.applicationManager/launch",
53 | "com.webos.service.applicationManager/launch",
54 | "com.webos.service.applicationmanager/launch",
55 | "com.webos.applicationManager/addLaunchPoint",
56 | "com.webos.service.applicationManager/addLaunchPoint",
57 | "com.webos.service.applicationmanager/addLaunchPoint",
58 | "com.webos.applicationManager/close",
59 | "com.webos.service.applicationManager/close",
60 | "com.webos.service.applicationmanager/close",
61 | "com.webos.applicationManager/closeByAppId",
62 | "com.webos.service.applicationManager/closeByAppId",
63 | "com.webos.service.applicationmanager/closeByAppId",
64 | "com.webos.applicationManager/lockApp",
65 | "com.webos.service.applicationManager/lockApp",
66 | "com.webos.service.applicationmanager/lockApp",
67 | "com.webos.applicationManager/pause",
68 | "com.webos.service.applicationManager/pause",
69 | "com.webos.service.applicationmanager/pause",
70 | "com.webos.applicationManager/removeLaunchPoint",
71 | "com.webos.service.applicationManager/removeLaunchPoint",
72 | "com.webos.service.applicationmanager/removeLaunchPoint",
73 | "com.webos.applicationManager/running",
74 | "com.webos.service.applicationManager/running",
75 | "com.webos.service.applicationmanager/running",
76 | "com.webos.applicationManager/updateLaunchPoint",
77 | "com.webos.service.applicationManager/updateLaunchPoint",
78 | "com.webos.service.applicationmanager/updateLaunchPoint"
79 | ]
80 | }
81 |
--------------------------------------------------------------------------------
/files/sysbus/com.webos.sam.groups.json:
--------------------------------------------------------------------------------
1 | {
2 | "allowedNames" : ["com.webos.service.applicationmanager","com.webos.applicationManager","com.webos.service.applicationManager"],
3 | "application.operation": ["dev"],
4 | "application.launcher": ["oem"],
5 | "application.devmode": ["dev"]
6 | }
7 |
--------------------------------------------------------------------------------
/files/sysbus/com.webos.sam.perm.json:
--------------------------------------------------------------------------------
1 | {
2 | "com.webos.applicationManager" : [
3 | "applicationinstall.management",
4 | "applicationinstall.devmode",
5 | "boot.query",
6 | "systemconfig.query",
7 | "database.operation",
8 | "surfacemanager.query",
9 | "memorymanager.management",
10 | "notification.operation",
11 | "settings.query",
12 | "settings.management",
13 | "webapplication.management"
14 | ]
15 | }
16 |
--------------------------------------------------------------------------------
/files/sysbus/com.webos.sam.role.json.in:
--------------------------------------------------------------------------------
1 | {
2 | "exeName":"@WEBOS_INSTALL_SBINDIR@/sam",
3 | "type": "regular",
4 | "trustLevel" : "oem",
5 | "allowedNames": [
6 | "com.webos.service.applicationmanager",
7 | "com.webos.applicationManager",
8 | "com.webos.service.applicationManager",
9 | "com.webos.service.systemmanager"
10 | ],
11 | "permissions": [
12 | {
13 | "service":"com.webos.applicationManager",
14 | "outbound":[
15 | "*",
16 | "com.webos.appInstallService",
17 | "com.webos.booster",
18 | "com.webos.bootManager",
19 | "com.webos.memorymanager",
20 | "com.webos.notification",
21 | "com.webos.service.attachedstoragemanager",
22 | "com.webos.service.bus",
23 | "com.webos.service.config",
24 | "com.webos.service.db",
25 | "com.webos.service.downloadmanager",
26 | "com.webos.service.power2",
27 | "com.webos.service.sdx",
28 | "com.webos.service.sm",
29 | "com.webos.service.tvpower",
30 | "com.palm.webappmanager",
31 | "com.webos.settingsservice",
32 | "com.webos.surfacemanager"
33 | ]
34 | }
35 | ]
36 | }
37 |
--------------------------------------------------------------------------------
/files/sysbus/com.webos.sam.service.in:
--------------------------------------------------------------------------------
1 | [D-BUS Service]
2 | Name=com.webos.service.applicationmanager;com.webos.applicationManager;com.webos.service.applicationManager;com.webos.service.systemmanager
3 | Exec=@WEBOS_INSTALL_SBINDIR@/sam
4 | Type=static
5 |
--------------------------------------------------------------------------------
/oss-pkg-info.yaml:
--------------------------------------------------------------------------------
1 | Open Source Software Package:
2 | - name: webOSOSE
3 | source: https://github.com/webosose
4 | license: Apache-2.0
5 |
--------------------------------------------------------------------------------
/src/Environment.h.in:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2019-2024 LG Electronics, Inc.
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | //
15 | // SPDX-License-Identifier: Apache-2.0
16 |
17 | #ifndef ENVIRONMENT_H_
18 | #define ENVIRONMENT_H_
19 |
20 | static const char* const PATH_RO_SAM_CONF = "@WEBOS_INSTALL_WEBOS_SYSCONFDIR@/sam-conf.json";
21 | static const char* const PATH_RW_SAM_CONF = "@WEBOS_INSTALL_PREFERENCESDIR@/sam-conf.json";
22 | static const char* const PATH_SAM_SCHEMAS = "@WEBOS_INSTALL_WEBOS_SYSCONFDIR@/schemas/sam/";
23 | static const char* const PATH_BLOCKED_LIST = "@WEBOS_INSTALL_SYSMGR_LOCALSTATEDIR@/preferences/blockedList.json";
24 | static const char* const PATH_LOCALE_INFO = "@WEBOS_INSTALL_SYSMGR_LOCALSTATEDIR@/preferences/localeInfo";
25 | static const char* const PATH_RUNTIME_INFO = "/tmp/sam_runtime";
26 | static const char* const PATH_NATIVE_LOG = "/var/log";
27 |
28 | #endif // ENVIRONMENT_H_
29 |
--------------------------------------------------------------------------------
/src/Main.cpp:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2012-2020 LG Electronics, Inc.
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | //
15 | // SPDX-License-Identifier: Apache-2.0
16 |
17 | #include
18 | #include
19 |
20 | #include
21 | #include
22 | #include
23 |
24 | #include "MainDaemon.h"
25 | #include "util/Logger.h"
26 | #include "util/File.h"
27 |
28 | static const char* CLASS_NAME = "Main";
29 |
30 | void signal_handler(int signal, siginfo_t *siginfo, void *context)
31 | {
32 | string buf;
33 | stringstream stream;
34 | string sender_pid, sender_cmdline;
35 | int si_code;
36 |
37 | // abstract sender_pid from struct
38 | stream << siginfo->si_pid;
39 | sender_pid = stream.str();
40 | sender_cmdline = "/proc/" + sender_pid + "/cmdline";
41 | si_code = siginfo->si_code;
42 |
43 | Logger::warning(CLASS_NAME, __FUNCTION__, Logger::format("signal(%d) si_code(%d) sender_pid(%s) sender_cmdline(%s)", signal, si_code, sender_pid.c_str(), sender_cmdline.c_str()));
44 | buf = File::readFile(sender_cmdline.c_str());
45 | if (buf.empty()) {
46 | Logger::warning(CLASS_NAME, __FUNCTION__, Logger::format("signal(%d) si_code(%d) si_pid(%d), si_uid(%d)", signal, si_code, siginfo->si_pid, siginfo->si_uid));
47 | goto Done;
48 | }
49 |
50 | Logger::warning(CLASS_NAME, __FUNCTION__, Logger::format("signal(%d) si_code(%d) sender(%s) si_pid(%d), si_uid(%d)", signal, si_code, buf.c_str(), siginfo->si_pid, siginfo->si_uid));
51 |
52 | Done:
53 | if (signal == SIGHUP || signal == SIGINT || signal == SIGPIPE) {
54 | Logger::warning(CLASS_NAME, __FUNCTION__, "Ignore received signal");
55 | return;
56 | } else {
57 | Logger::warning(CLASS_NAME, __FUNCTION__, "Try to terminate SAM process");
58 | }
59 |
60 | MainDaemon::getInstance().stop();
61 | }
62 |
63 | int main(int argc, char **argv)
64 | {
65 | Logger::info(CLASS_NAME, __FUNCTION__, "Start SAM process");
66 |
67 | // tracking sender if we get some signal
68 | struct sigaction act;
69 | sigemptyset(&act.sa_mask);
70 | act.sa_sigaction = signal_handler;
71 | act.sa_flags = SA_SIGINFO;
72 |
73 | // we will ignore this signal
74 | sigaction(SIGHUP, &act, NULL);
75 | sigaction(SIGINT, &act, NULL);
76 | sigaction(SIGPIPE, &act, NULL);
77 |
78 | // we don't change the default action
79 | sigaction(SIGTERM, &act, NULL);
80 | sigaction(SIGQUIT, &act, NULL);
81 | sigaction(SIGABRT, &act, NULL);
82 | sigaction(SIGFPE, &act, NULL);
83 |
84 | try {
85 | MainDaemon::getInstance().initialize();
86 | MainDaemon::getInstance().start();
87 | MainDaemon::getInstance().finalize();
88 | } catch(...) {
89 | Logger::info(CLASS_NAME, __FUNCTION__, "Failed to start SAM");
90 | }
91 | return EXIT_SUCCESS;
92 | }
93 |
--------------------------------------------------------------------------------
/src/MainDaemon.cpp:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2012-2020 LG Electronics, Inc.
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | //
15 | // SPDX-License-Identifier: Apache-2.0
16 |
17 | #include "MainDaemon.h"
18 |
19 | #include
20 | #include
21 | #include
22 | #include
23 | #include
24 | #include
25 | #include
26 | #include
27 |
28 | #include "base/AppDescriptionList.h"
29 | #include "bus/client/AppInstallService.h"
30 | #include "bus/client/Bootd.h"
31 | #include "bus/client/Configd.h"
32 | #include "bus/client/DB8.h"
33 | #include "bus/client/LSM.h"
34 | #include "bus/client/MemoryManager.h"
35 | #include "bus/client/NativeContainer.h"
36 | #include "bus/client/Notification.h"
37 | #include "bus/client/SettingService.h"
38 | #include "bus/client/WAM.h"
39 | #include "bus/service/ApplicationManager.h"
40 | #include "conf/RuntimeInfo.h"
41 | #include "conf/SAMConf.h"
42 | #include "util/File.h"
43 | #include "util/JValueUtil.h"
44 |
45 |
46 | MainDaemon::MainDaemon()
47 | : m_isCBDGenerated(false),
48 | m_isConfigsReceived(false)
49 | {
50 | setClassName("MainDaemon");
51 | m_mainLoop = g_main_loop_new(NULL, FALSE);
52 | }
53 |
54 | MainDaemon::~MainDaemon()
55 | {
56 | if (m_mainLoop) {
57 | g_main_loop_unref(m_mainLoop);
58 | }
59 | }
60 |
61 | void MainDaemon::initialize()
62 | {
63 | RuntimeInfo::getInstance().initialize();
64 | SAMConf::getInstance().initialize();
65 | AppDescriptionList::getInstance().scanFull();
66 |
67 | if (!ApplicationManager::getInstance().attach(m_mainLoop))
68 | return;
69 |
70 | AppInstallService::getInstance().initialize();
71 | Bootd::getInstance().initialize();
72 | Configd::getInstance().initialize();
73 | DB8::getInstance().initialize();
74 | LSM::getInstance().initialize();
75 | MemoryManager::getInstance().initialize();
76 | NativeContainer::getInstance().initialize();
77 | Notification::getInstance().initialize();
78 | SettingService::getInstance().initialize();
79 | WAM::getInstance().initialize();
80 |
81 | Bootd::getInstance().EventGetBootStatus.connect(boost::bind(&MainDaemon::onGetBootStatus, this, boost::placeholders::_1));
82 | Configd::getInstance().EventGetConfigs.connect(boost::bind(&MainDaemon::onGetConfigs, this, boost::placeholders::_1));
83 | }
84 |
85 | void MainDaemon::finalize()
86 | {
87 | AppInstallService::getInstance().finalize();
88 | Bootd::getInstance().finalize();
89 | Configd::getInstance().finalize();
90 | DB8::getInstance().finalize();
91 | LSM::getInstance().finalize();
92 | MemoryManager::getInstance().finalize();
93 | Notification::getInstance().finalize();
94 | SettingService::getInstance().finalize();
95 | WAM::getInstance().finalize();
96 |
97 | ApplicationManager::getInstance().detach();
98 | }
99 |
100 | void MainDaemon::start()
101 | {
102 | Logger::info(getClassName(), __FUNCTION__, "Start event handler thread");
103 | g_main_loop_run(m_mainLoop);
104 | }
105 |
106 | void MainDaemon::stop()
107 | {
108 | if (m_mainLoop)
109 | g_main_loop_quit(m_mainLoop);
110 | }
111 |
112 | void MainDaemon::onGetBootStatus(const JValue& subscriptionPayload)
113 | {
114 | bool coreBootDone;
115 | if (!JValueUtil::getValue(subscriptionPayload, "signals", "core-boot-done", coreBootDone) && !coreBootDone) {
116 | return;
117 | }
118 | m_isCBDGenerated = true;
119 | checkPreconditions();
120 | }
121 |
122 | void MainDaemon::onGetConfigs(const JValue& responsePayload)
123 | {
124 | JValue sysAssetFallbackPrecedence;
125 | JValue keepAliveApps;
126 | JValue lifeCycle;
127 |
128 | if (JValueUtil::getValue(responsePayload, "configs", "system.sysAssetFallbackPrecedence", sysAssetFallbackPrecedence) && sysAssetFallbackPrecedence.isArray()) {
129 | SAMConf::getInstance().setSysAssetFallbackPrecedence(sysAssetFallbackPrecedence);
130 | }
131 | if (JValueUtil::getValue(responsePayload, "configs", "com.webos.applicationManager.keepAliveApps", keepAliveApps) && keepAliveApps.isArray()) {
132 | SAMConf::getInstance().setKeepAliveApps(keepAliveApps);
133 | }
134 | m_isConfigsReceived = true;
135 | checkPreconditions();
136 | }
137 |
138 | void MainDaemon::checkPreconditions()
139 | {
140 | static bool isFired = false;
141 | if (isFired)
142 | return;
143 |
144 | if (!m_isConfigsReceived) {
145 | Logger::info(getClassName(), __FUNCTION__, "Wait for receiving 'getConfigs' response");
146 | return;
147 | }
148 | if (!m_isCBDGenerated) {
149 | Logger::info(getClassName(), __FUNCTION__, "Wait for receiving 'getBootStatus' response");
150 | return;
151 | }
152 | Logger::info(getClassName(), __FUNCTION__, "All initial components are ready");
153 | isFired = true;
154 |
155 | ApplicationManager::getInstance().enablePosting();
156 | }
157 |
158 |
--------------------------------------------------------------------------------
/src/MainDaemon.h:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2012-2020 LG Electronics, Inc.
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | //
15 | // SPDX-License-Identifier: Apache-2.0
16 |
17 | #ifndef MAIN_DAEMON_H
18 | #define MAIN_DAEMON_H
19 |
20 | #include
21 |
22 | #include "base/LunaTask.h"
23 | #include "interface/ISingleton.h"
24 | #include "interface/IClassName.h"
25 |
26 | class MainDaemon : public ISingleton,
27 | public IClassName {
28 | friend class ISingleton;
29 | public:
30 | virtual ~MainDaemon();
31 |
32 | void initialize();
33 | void finalize();
34 |
35 | void start();
36 | void stop();
37 |
38 | private:
39 | MainDaemon();
40 |
41 | void onGetBootStatus(const JValue& subscriptionPayload);
42 | void onGetConfigs(const JValue& subscriptionPayload);
43 |
44 | void checkPreconditions();
45 |
46 | bool m_isCBDGenerated;
47 | bool m_isConfigsReceived;
48 |
49 | GMainLoop *m_mainLoop;
50 |
51 | };
52 |
53 | #endif
54 |
--------------------------------------------------------------------------------
/src/base/AppDescriptionList.h:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2019-2020 LG Electronics, Inc.
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | //
15 | // SPDX-License-Identifier: Apache-2.0
16 |
17 | #ifndef BASE_APPDESCRIPTIONLIST_H_
18 | #define BASE_APPDESCRIPTIONLIST_H_
19 |
20 | #include
21 | #include