Merge "[Service][TV] Refactor for wasm-caching shutdown" into tizen
[platform/framework/web/wrtjs.git] / wrt_app / service / device_api_router.ts
1 import { wrt } from '../browser/wrt';
2
3 export class DeviceAPIRouter {
4   currentApplication: any;
5   funcCurrentApplication: any;
6   funcRequestedAppcontrol: any;
7   funcGetAppInfo: any;
8   funcGetAppcerts: any;
9   funcGetSharedUri: any;
10   funcGetMetadata: any;
11   funcGetPackageInfo: any;
12
13   id: string;
14   serviceId: string;
15   packageId: string;
16   callerAppId: string;
17
18   constructor(id: string, isGlobal: boolean) {
19     this.id = id;
20     let ids = id.split(':');
21     this.serviceId = ids[0];
22     this.callerAppId = ids[1] ?? '';
23     this.packageId = this.serviceId.split('.')[0];
24
25     this.initWebapis();
26     if (isGlobal) {
27       this.refineApplicationApis();
28       this.refinePackageApis();
29       this.refineFilesystemApis()
30       this.initAccessControlManager();
31     }
32   }
33
34   initWebapis() {
35     global.webapis = global.webapis ?? {};
36
37     global.webapis.getCallerAppId = () => {
38       return this.callerAppId;
39     }
40     global.webapis.getServiceId = () => {
41       return this.serviceId;
42     }
43     let app_info = global.tizen.application.getAppInfo(this.serviceId);
44     if (app_info) {
45       this.packageId = app_info.packageId;
46     }
47     global.webapis.getPackageId = () => {
48       return this.packageId;
49     }
50   }
51
52   initAccessControlManager() {
53     const permissions = wrt.getPrivileges(this.id);
54     console.log(`permissions : ${permissions}`);
55     const AccessControlManager = require('./access_control_manager');
56     AccessControlManager.initialize(permissions);
57   }
58
59   getServiceId() {
60     return global.webapis.getServiceId();
61   }
62
63   getPackageId() {
64     return global.webapis.getPackageId();
65   }
66
67   refineApplicationApis() {
68     // tizen.application.getCurrentApplication()
69     this.funcCurrentApplication = global.tizen.application.getCurrentApplication;
70     global.tizen.application.getCurrentApplication = () => {
71       console.log(`Routing - getCurrentApplication() : ${this.getServiceId()}`);
72       if (this.currentApplication)
73         return this.currentApplication;
74       this.currentApplication = this.funcCurrentApplication();
75       // tizen.application.getCurrentApplication().getRequestedAppControl()
76       this.funcRequestedAppcontrol = this.currentApplication.getRequestedAppControl;
77       this.currentApplication.getRequestedAppControl = () => {
78         console.log(`Routing - getRequestedAppControl() : ${this.getServiceId()}`);
79         if (wrt.tv)
80           wrt.tv.setCurrentApplication(this.getServiceId());
81         return this.funcRequestedAppcontrol();
82       }
83       return this.currentApplication;
84     }
85     // tizen.application.getAppInfo()
86     this.funcGetAppInfo = global.tizen.application.getAppInfo;
87     global.tizen.application.getAppInfo = (app_id?: string) => {
88       console.log(`Routing - getAppInfo()`);
89       if (!app_id)
90         app_id = this.getServiceId();
91       return this.funcGetAppInfo(app_id);
92     }
93     // tizen.application.getAppCerts()
94     this.funcGetAppcerts = global.tizen.application.getAppCerts;
95     global.tizen.application.getAppCerts = (app_id?: string) => {
96       console.log(`Routing - getAppCerts()`);
97       if (!app_id)
98         app_id = this.getServiceId();
99       return this.funcGetAppcerts(app_id);
100     }
101     // tizen.application.getAppSharedURI()
102     this.funcGetSharedUri = global.tizen.application.getAppSharedURI;
103     global.tizen.application.getAppSharedURI = (app_id?: string) => {
104       console.log(`Routing - getAppSharedURI()`);
105       if (!app_id)
106         app_id = this.getServiceId();
107       return this.funcGetSharedUri(app_id);
108     }
109     // tizen.application.getAppMetaData()
110     this.funcGetMetadata = global.tizen.application.getAppMetaData;
111     global.tizen.application.getAppMetaData = (app_id?: string) => {
112       console.log(`Routing - getAppMetaData()`);
113       if (!app_id)
114         app_id = this.getServiceId();
115       return this.funcGetMetadata(app_id);
116     }
117   }
118
119   refinePackageApis() {
120     // tizen.package.getPackageInfo()
121     this.funcGetPackageInfo = global.tizen.package.getPackageInfo;
122     global.tizen.package.getPackageInfo = (...args: any[]) => {
123       let package_id = args[0];
124       if (!args.length || args[0] === null)
125         package_id = this.getPackageId();
126       console.log(`Routing - getPackageInfo() : ${package_id}`);
127       return this.funcGetPackageInfo(package_id);
128     }
129   }
130
131   injectVirtualRootResolver(func: Function) {
132     return (...args: any[]) => {
133       console.log(args);
134       args[0] = wrt.resolveVirtualRoot(this.getServiceId(), args[0]);
135       console.log(args[0]);
136       return func.apply(global.tizen.filesystem, args);
137     }
138   }
139
140   refineFilesystemApis() {
141     global.tizen.filesystem.resolve = this.injectVirtualRootResolver(global.tizen.filesystem.resolve);
142     global.tizen.filesystem.listDirectory = this.injectVirtualRootResolver(global.tizen.filesystem.listDirectory);
143     global.tizen.filesystem.createDirectory = this.injectVirtualRootResolver(global.tizen.filesystem.createDirectory);
144     global.tizen.filesystem.createDirectory = this.injectVirtualRootResolver(global.tizen.filesystem.createDirectory);
145     global.tizen.filesystem.deleteDirectory = this.injectVirtualRootResolver(global.tizen.filesystem.deleteDirectory);
146     global.tizen.filesystem.openFile = this.injectVirtualRootResolver(global.tizen.filesystem.openFile);
147     global.tizen.filesystem.deleteFile = this.injectVirtualRootResolver(global.tizen.filesystem.deleteFile);
148     global.tizen.filesystem.moveFile = this.injectVirtualRootResolver(global.tizen.filesystem.moveFile);
149     global.tizen.filesystem.copyFile = this.injectVirtualRootResolver(global.tizen.filesystem.copyFile);
150     global.tizen.filesystem.isFile = this.injectVirtualRootResolver(global.tizen.filesystem.isFile);
151     global.tizen.filesystem.toURI = this.injectVirtualRootResolver(global.tizen.filesystem.toURI);
152     global.tizen.filesystem.isDirectory = this.injectVirtualRootResolver(global.tizen.filesystem.isDirectory);
153     global.tizen.filesystem.pathExists = this.injectVirtualRootResolver(global.tizen.filesystem.pathExists);
154   }
155 }