tizen 2.3.1 release
[framework/web/wearable/wrt-commons.git] / modules / widget_dao / include / dpl / wrt-dao-ro / common_dao_types.h
1 /*
2  * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  *    Licensed under the Apache License, Version 2.0 (the "License");
5  *    you may not use this file except in compliance with the License.
6  *    You may obtain a copy of the License at
7  *
8  *        http://www.apache.org/licenses/LICENSE-2.0
9  *
10  *    Unless required by applicable law or agreed to in writing, software
11  *    distributed under the License is distributed on an "AS IS" BASIS,
12  *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  *    See the License for the specific language governing permissions and
14  *    limitations under the License.
15  */
16 /**
17  *
18  * @file    common_dao_types.h
19  * @author  Michal Ciepielski (m.ciepielski@samsung.com)
20  * @version 1.0
21  * @brief   This file contains the declaration of common data types for wrtdb
22  */
23
24 #ifndef WRT_WIDGET_DAO_COMMON_DAO_TYPES_H_
25 #define WRT_WIDGET_DAO_COMMON_DAO_TYPES_H_
26
27 #include <set>
28 #include <string>
29 #include <map>
30 #include <vector>
31 #include <list>
32 #include <memory>
33 #include <dpl/optional_typedefs.h>
34
35 namespace WrtDB {
36 class PluginMetafileData
37 {
38   public:
39     struct Feature
40     {
41         std::string m_name;
42         std::set<std::string> m_deviceCapabilities;
43
44         bool operator< (const Feature& obj) const
45         {
46             return m_name < obj.m_name;
47         }
48     };
49     typedef std::set<Feature> FeatureContainer;
50
51   public:
52
53     PluginMetafileData()
54     {}
55
56     std::string m_libraryName;
57     FeatureContainer m_featureContainer;
58 };
59
60 class PluginObjectsDAO
61 {
62   public:
63     typedef std::set<std::string> Objects;
64     typedef std::shared_ptr<Objects> ObjectsPtr;
65
66   public:
67     explicit PluginObjectsDAO() {}
68
69   protected:
70     ObjectsPtr m_implemented;
71     ObjectsPtr m_dependent;
72 };
73
74 /**
75  * @brief Widget id describes web-runtime global widget identifier.
76  *
77  * Notice that only up to one widget can exist at the same time.
78  * DbWidgetHandle can be translated into corresponding WidgetModel by invoking
79  * FindWidgetModel routine.
80  */
81 typedef int DbWidgetHandle;
82 typedef DPL::String TizenPkgId;
83 typedef DPL::String TizenAppId;
84
85 /**
86  * Value of invalid widget handle
87  */
88 enum {
89     INVALID_WIDGET_HANDLE = -1
90 };
91
92 /**
93  * @brief Structure to hold the information of widget's size
94  */
95 struct DbWidgetSize
96 {
97     DPL::OptionalInt width;
98     DPL::OptionalInt height;
99
100     DbWidgetSize(DPL::OptionalInt w = DPL::OptionalInt::Null,
101                  DPL::OptionalInt h = DPL::OptionalInt::Null) :
102         width(w),
103         height(h)
104     {}
105 };
106
107 inline bool operator ==(const DbWidgetSize &objA, const DbWidgetSize &objB)
108 {
109     if (!objA.height || !objA.width || !objB.width || !objB.height) {
110         return false;
111     } else {
112         return *objA.height == *objB.height && *objA.width == *objB.width;
113     }
114 }
115
116 /**
117  * Widget [G]lobal [U]nique [ID]entifier
118  * Orginated from appstore ID
119  */
120 typedef DPL::OptionalString WidgetGUID;
121
122 struct WidgetAccessInfo
123 {
124     DPL::String strIRI;                /* origin iri */
125     bool bSubDomains;                  /* do we want access to subdomains ? */
126
127     bool operator ==(const WidgetAccessInfo& info) const
128     {
129         return info.strIRI == strIRI &&
130                info.bSubDomains == bSubDomains;
131     }
132 };
133 typedef std::list<WidgetAccessInfo> WidgetAccessInfoList;
134
135 struct WidgetAllowNavigationInfo
136 {
137     DPL::String scheme;
138     DPL::String host;
139 };
140 typedef std::list<WidgetAllowNavigationInfo> WidgetAllowNavigationInfoList;
141
142 struct EncryptedFileInfo
143 {
144     DPL::String fileName;
145     int fileSize;
146
147     bool operator==(const EncryptedFileInfo& info) const
148     {
149         return fileName == info.fileName;
150     }
151
152     bool operator==(const DPL::String& file) const
153     {
154         return fileName == file;
155     }
156
157     bool operator< (const EncryptedFileInfo& info) const
158     {
159         return fileName < info.fileName;
160     }
161 };
162
163 typedef std::list<DPL::String> WindowModeList;
164
165 typedef std::list<DPL::String> PrivilegeList;
166
167 typedef std::set<EncryptedFileInfo> EncryptedFileList;
168
169 /**
170  * @brief Widget feature host information about possible javascript extensions
171  *        that widget may use
172  *
173  * Widget features are declared in configuration file in widget installation
174  * package. Each declared special feature is contained in some wrt-plugin that
175  * declares to implement it. After widget launch wrt searches for proper plugin
176  * libraries and load needed features.
177  *
178  * Widget features can be required or optional. It is possible to start widget
179  * without missing feature. When required feature cannot be loaded widget will
180  * not start.
181  */
182
183 enum {
184     INVALID_PLUGIN_HANDLE = -1
185 };
186 typedef int DbPluginHandle;
187
188 struct DbWidgetFeature
189 {
190     DPL::String name;        /// Feature name
191     bool rejected;           /// Api feature was rejected by ace
192     DbPluginHandle pluginId; /// Plugin id that implement this feature
193
194     DbWidgetFeature() :
195         pluginId(INVALID_PLUGIN_HANDLE)
196     {}
197 };
198
199 inline bool operator < (const DbWidgetFeature &objA,
200                         const DbWidgetFeature &objB)
201 {
202     return objA.name.compare(objB.name) < 0;
203 }
204
205 inline bool operator==(const DbWidgetFeature &featureA,
206                        const DbWidgetFeature &featureB)
207 {
208     return featureA.name == featureB.name &&
209            featureA.pluginId == featureB.pluginId;
210 }
211
212 /**
213  * @brief Default container for features list
214  */
215 typedef std::multiset<DbWidgetFeature> DbWidgetFeatureSet;
216
217 /**
218  * @brief Default container with DbWidgetHandle's
219  */
220 typedef std::list<DbWidgetHandle> DbWidgetHandleList;
221 typedef std::list<TizenAppId> TizenAppIdList;
222 typedef std::list<TizenPkgId> TizenPkgIdList;
223
224 class WidgetDAOReadOnly; //forward declaration
225 typedef std::shared_ptr<WidgetDAOReadOnly> WidgetDAOReadOnlyPtr;
226 /**
227  * @brief Default container with WidgetDAOReadOnly
228  */
229 typedef std::list<WidgetDAOReadOnlyPtr> DbWidgetDAOReadOnlyList;
230
231 /**
232  * @brief Widget specific type
233  *
234  * Widget type describes belowed in WAC, TIZEN WebApp
235  */
236 enum AppType
237 {
238     APP_TYPE_UNKNOWN = 0, // unknown
239     APP_TYPE_TIZENWEBAPP, // Tizen webapp
240     APP_TYPE_TIZENWEBSERVICE // Tizen web service
241 };
242
243 class WidgetType
244 {
245   public:
246     WidgetType() :
247         appType(APP_TYPE_UNKNOWN)
248     {}
249     WidgetType(const AppType type) :
250         appType(type)
251     {}
252     bool operator== (const AppType& other) const
253     {
254         return appType == other;
255     }
256     bool operator!= (const AppType& other) const
257     {
258         return appType != other;
259     }
260     std::string getApptypeToString()
261     {
262         switch (appType) {
263 #define X(x) case x: return #x;
264             X(APP_TYPE_UNKNOWN)
265             X(APP_TYPE_TIZENWEBAPP)
266             X(APP_TYPE_TIZENWEBSERVICE)
267
268 #undef X
269         default:
270             return "UNKNOWN";
271         }
272     }
273
274     AppType appType;
275 };
276
277 /**
278  * @brief Package specific type
279  *
280  * Package type describes belowed in Tizen webapp, C++ service App
281  */
282 enum PkgType
283 {
284     PKG_TYPE_UNKNOWN = 0, // unknown
285     PKG_TYPE_NOMAL_WEB_APP,
286     PKG_TYPE_DIRECTORY_WEB_APP,
287     PKG_TYPE_HOSTED_WEB_APP,    // request from browser
288     PKG_TYPE_HYBRID_WEB_APP // Tizen webapp with C++ service app
289 };
290
291 class PackagingType
292 {
293   public:
294     PackagingType() :
295         pkgType(PKG_TYPE_UNKNOWN)
296     {}
297     PackagingType(const PkgType type) :
298         pkgType(type)
299     {}
300     bool operator== (const PkgType& other) const
301     {
302         return pkgType == other;
303     }
304     bool operator!= (const PkgType& other) const
305     {
306         return pkgType != other;
307     }
308     std::string getPkgtypeToString()
309     {
310         switch (pkgType) {
311 #define X(x) case x: return #x;
312             X(PKG_TYPE_UNKNOWN)
313             X(PKG_TYPE_NOMAL_WEB_APP)
314             X(PKG_TYPE_DIRECTORY_WEB_APP)
315             X(PKG_TYPE_HOSTED_WEB_APP)
316             X(PKG_TYPE_HYBRID_WEB_APP)
317 #undef X
318         default:
319             return "UNKNOWN";
320         }
321     }
322
323     PkgType pkgType;
324 };
325
326 struct WidgetSetting
327 {
328     DPL::String settingName;
329     DPL::String settingValue;
330
331     bool operator ==(const WidgetSetting& info) const
332     {
333         return (info.settingName == settingName &&
334                 info.settingValue == settingValue);
335     }
336     bool operator !=(const WidgetSetting& info) const
337     {
338         return (info.settingName != settingName ||
339                 info.settingValue != settingValue);
340     }
341 };
342
343 typedef std::list<WidgetSetting> WidgetSettings;
344
345 /**
346  * @brief Widget AppControl
347  *
348  * Application control describes details of behaviour
349  * when widget receives aul bundle data.
350  */
351 namespace AppControlPrefix {
352     const char* const PROCESS_PREFIX = "-__CONTROL_PROCESS__";
353 }
354 struct WidgetAppControl
355 {
356     enum class Disposition {
357         UNDEFINE = 0,
358         WINDOW   = 1,
359         INLINE   = 2
360     };
361
362     DPL::String src;       /* start uri */
363     DPL::String operation; /* service name */
364     DPL::String uri;    /* scheme type*/
365     DPL::String mime;      /* mime type */
366     Disposition disposition;
367     unsigned index;
368
369     bool operator== (const WidgetAppControl& other) const
370     {
371         return src == other.src &&
372                operation == other.operation &&
373                uri == other.uri &&
374                mime == other.mime &&
375                disposition == other.disposition;
376     }
377 };
378
379 typedef std::list<WidgetAppControl> WidgetAppControlList;
380
381 enum class WidgetSecurityModelVersion
382 {
383     WIDGET_SECURITY_MODEL_V1 = 0, // WARP
384     WIDGET_SECURITY_MODEL_V2      // CSP, allow-navigation
385 };
386 } // namespace WrtDB
387 #endif /* WRT_WIDGET_DAO_COMMON_DAO_TYPES_H_ */