• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 Huawei Device Co., Ltd.
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 
16 #ifndef NWEB_NAPI_WEBVIEW_CONTROLLER_H
17 #define NWEB_NAPI_WEBVIEW_CONTROLLER_H
18 
19 #include <condition_variable>
20 #include <mutex>
21 
22 #include "napi/native_api.h"
23 #include "napi/native_common.h"
24 #include "napi/native_node_api.h"
25 #include "uv.h"
26 #include "webview_controller.h"
27 
28 namespace OHOS {
29 namespace NWeb {
30 const std::string WEBVIEW_CONTROLLER_CLASS_NAME = "WebviewController";
31 const std::string WEB_MESSAGE_PORT_CLASS_NAME = "WebMessagePort";
32 const std::string WEB_PORT_MSG_ENUM_NAME = "WebMessageType";
33 const std::string WEB_EXT_MSG_CLASS_NAME = "WebMessageExt";
34 const std::string WEB_HITTESTTYPE_V9_ENUM_NAME = "HitTestTypeV9";
35 const std::string WEB_HITTESTTYPE_ENUM_NAME = "WebHitTestType";
36 const std::string WEB_HISTORY_LIST_CLASS_NAME = "WebHistoryList";
37 const std::string WEB_SECURE_DNS_MODE_ENUM_NAME = "SecureDnsMode";
38 
39 class NapiWebviewController {
40 public:
NapiWebviewController()41     NapiWebviewController() {}
42     ~NapiWebviewController() = default;
43 
44     static napi_value Init(napi_env env, napi_value exports);
45 
46 private:
47     static napi_value JsConstructor(napi_env env, napi_callback_info info);
48 
49     static napi_value InitializeWebEngine(napi_env env, napi_callback_info info);
50 
51     static napi_value SetHttpDns(napi_env env, napi_callback_info info);
52 
53     static napi_value SetWebDebuggingAccess(napi_env env, napi_callback_info info);
54 
55     static napi_value InnerGetWebDebuggingAccess(napi_env env, napi_callback_info info);
56 
57     static napi_value SetWebId(napi_env env, napi_callback_info info);
58 
59     static napi_value InnerJsProxy(napi_env env, napi_callback_info info);
60 
61     static napi_value InnerGetCustomeSchemeCmdLine(napi_env env, napi_callback_info info);
62 
63     static napi_value AccessForward(napi_env env, napi_callback_info info);
64 
65     static napi_value AccessBackward(napi_env env, napi_callback_info info);
66 
67     static napi_value Forward(napi_env env, napi_callback_info info);
68 
69     static napi_value Backward(napi_env env, napi_callback_info info);
70 
71     static napi_value AccessStep(napi_env env, napi_callback_info info);
72 
73     static napi_value ClearHistory(napi_env env, napi_callback_info info);
74 
75     static napi_value OnActive(napi_env env, napi_callback_info info);
76 
77     static napi_value OnInactive(napi_env env, napi_callback_info info);
78 
79     static napi_value Refresh(napi_env env, napi_callback_info info);
80 
81     static napi_value ZoomIn(napi_env env, napi_callback_info info);
82 
83     static napi_value ZoomOut(napi_env env, napi_callback_info info);
84 
85     static napi_value GetWebId(napi_env env, napi_callback_info info);
86 
87     static napi_value GetUserAgent(napi_env env, napi_callback_info info);
88 
89     static napi_value GetCustomUserAgent(napi_env env, napi_callback_info info);
90 
91     static napi_value SetCustomUserAgent(napi_env env, napi_callback_info info);
92 
93     static napi_value GetTitle(napi_env env, napi_callback_info info);
94 
95     static napi_value GetPageHeight(napi_env env, napi_callback_info info);
96 
97     static napi_value BackOrForward(napi_env env, napi_callback_info info);
98 
99     static napi_value StoreWebArchive(napi_env env, napi_callback_info info);
100 
101     static napi_value StoreWebArchiveInternal(napi_env env, napi_callback_info info,
102         const std::string &baseName, bool autoName);
103 
104     static napi_value CreateWebMessagePorts(napi_env env, napi_callback_info info);
105 
106     static napi_value PostMessage(napi_env env, napi_callback_info info);
107 
108     static napi_value GetHitTestValue(napi_env env, napi_callback_info info);
109 
110     static napi_value RequestFocus(napi_env env, napi_callback_info info);
111 
112     static napi_value LoadUrl(napi_env env, napi_callback_info info);
113 
114     static napi_value LoadUrlWithHttpHeaders(napi_env env, napi_callback_info info, const std::string& url,
115         const napi_value* argv, WebviewController* webviewController);
116 
117     static napi_value LoadData(napi_env env, napi_callback_info info);
118 
119     static napi_value GetHitTest(napi_env env, napi_callback_info info);
120 
121     static napi_value ClearMatches(napi_env env, napi_callback_info info);
122 
123     static napi_value SearchNext(napi_env env, napi_callback_info info);
124 
125     static napi_value SearchAllAsync(napi_env env, napi_callback_info info);
126 
127     static napi_value ClearSslCache(napi_env env, napi_callback_info info);
128 
129     static napi_value ClearClientAuthenticationCache(napi_env env, napi_callback_info info);
130 
131     static napi_value Stop(napi_env env, napi_callback_info info);
132 
133     static napi_value Zoom(napi_env env, napi_callback_info info);
134 
135     static napi_value RegisterJavaScriptProxy(napi_env env, napi_callback_info info);
136 
137     static napi_value DeleteJavaScriptRegister(napi_env env, napi_callback_info info);
138 
139     static napi_value RunJavaScript(napi_env env, napi_callback_info info);
140 
141     static napi_value RunJavaScriptExt(napi_env env, napi_callback_info info);
142 
143     static napi_value RunJS(napi_env env, napi_callback_info info, bool extention);
144 
145     static napi_value RunJavaScriptInternal(napi_env env, napi_callback_info info,
146         const std::string &script, bool extention);
147 
148     static napi_value GetUrl(napi_env env, napi_callback_info info);
149 
150     static napi_value GetOriginalUrl(napi_env env, napi_callback_info info);
151 
152     static napi_value SetNetworkAvailable(napi_env env, napi_callback_info info);
153 
154     static napi_value InnerGetWebId(napi_env env, napi_callback_info info);
155 
156     static napi_value HasImage(napi_env env, napi_callback_info info);
157 
158     static napi_value HasImageInternal(napi_env env, napi_callback_info info);
159 
160     static napi_value RemoveCache(napi_env env, napi_callback_info info);
161 
162     static napi_value getBackForwardEntries(napi_env env, napi_callback_info info);
163 
164     static napi_value GetFavicon(napi_env env, napi_callback_info info);
165 
166     static napi_value SerializeWebState(napi_env env, napi_callback_info info);
167 
168     static napi_value RestoreWebState(napi_env env, napi_callback_info info);
169 
170     static napi_value ScrollPageDown(napi_env env, napi_callback_info info);
171 
172     static napi_value ScrollPageUp(napi_env env, napi_callback_info info);
173 
174     static napi_value ScrollTo(napi_env env, napi_callback_info info);
175 
176     static napi_value ScrollBy(napi_env env, napi_callback_info info);
177 
178     static napi_value SlideScroll(napi_env env, napi_callback_info info);
179 
180     static napi_value CustomizeSchemes(napi_env env, napi_callback_info info);
181 
182     static napi_value InnerSetHapPath(napi_env env, napi_callback_info info);
183 
184     static napi_value InnerGetCertificate(napi_env env, napi_callback_info info);
185 
186     static napi_value SetAudioMuted(napi_env env, napi_callback_info info);
187 
188     static napi_value InnerGetThisVar(napi_env env, napi_callback_info info);
189 
190     static napi_value PrefetchPage(napi_env env, napi_callback_info info);
191 
192     static napi_value PrefetchPageWithHttpHeaders(napi_env env, napi_callback_info info, std::string& url,
193         const napi_value* argv, WebviewController* webviewController);
194 
195     static napi_value PrepareForPageLoad(napi_env env, napi_callback_info info);
196 };
197 
198 class NWebValueCallbackImpl : public OHOS::NWeb::NWebValueCallback<std::shared_ptr<NWebMessage>> {
199 public:
NWebValueCallbackImpl(napi_env env,napi_ref callback,bool extention)200     NWebValueCallbackImpl(napi_env env, napi_ref callback, bool extention)
201         : env_(env), callback_(callback), extention_(extention)
202     {}
203     ~NWebValueCallbackImpl();
204     void OnReceiveValue(std::shared_ptr<NWebMessage> result) override;
205 
206 private:
207     napi_env env_;
208     napi_ref callback_;
209     bool extention_;
210     static void UvWebMessageOnReceiveValueCallback(uv_work_t *work, int status);
211 };
212 
213 class NapiWebMessageExt {
214 public:
215     NapiWebMessageExt() = default;
216     ~NapiWebMessageExt() = default;
217 
218     static napi_value JsConstructor(napi_env env, napi_callback_info info);
219     static napi_value GetType(napi_env env, napi_callback_info info);
220     static napi_value GetString(napi_env env, napi_callback_info info);
221     static napi_value GetNumber(napi_env env, napi_callback_info info);
222     static napi_value GetBoolean(napi_env env, napi_callback_info info);
223     static napi_value GetArrayBuffer(napi_env env, napi_callback_info info);
224     static napi_value GetArray(napi_env env, napi_callback_info info);
225     static napi_value GetError(napi_env env, napi_callback_info info);
226     static napi_value SetType(napi_env env, napi_callback_info info);
227     static napi_value SetString(napi_env env, napi_callback_info info);
228     static napi_value SetNumber(napi_env env, napi_callback_info info);
229     static napi_value SetBoolean(napi_env env, napi_callback_info info);
230     static napi_value SetArrayBuffer(napi_env env, napi_callback_info info);
231     static napi_value SetArray(napi_env env, napi_callback_info info);
232     static napi_value SetError(napi_env env, napi_callback_info info);
233 };
234 
235 class NapiWebMessagePort {
236 public:
237     NapiWebMessagePort() = default;
238     ~NapiWebMessagePort() = default;
239 
240     struct WebMsgPortParam {
241         bool extention_;
242         napi_env env_;
243         napi_ref callback_;
244         std::shared_ptr<NWebMessage> msg_;
245         std::mutex mutex_;
246         bool ready_ = false;
247         std::condition_variable condition_;
248     };
249 
250     static napi_value JsConstructor(napi_env env, napi_callback_info info);
251 
252     static napi_value Close(napi_env env, napi_callback_info info);
253 
254     static napi_value PostMessageEvent(napi_env env, napi_callback_info info);
255 
256     static napi_value OnMessageEvent(napi_env env, napi_callback_info info);
257 
258     static napi_value PostMessageEventExt(napi_env env, napi_callback_info info);
259 
260     static napi_value OnMessageEventExt(napi_env env, napi_callback_info info);
261 };
262 
263 class NapiWebHistoryList {
264 public:
265     NapiWebHistoryList() = default;
266     ~NapiWebHistoryList() = default;
267 
268     static napi_value JsConstructor(napi_env env, napi_callback_info info);
269 
270     static napi_value GetItem(napi_env env, napi_callback_info info);
271 
272 private:
273     static napi_value GetFavicon(napi_env env, std::shared_ptr<NWebHistoryItem> item);
274 };
275 } // namespace NWeb
276 } // namespace OHOS
277 
278 #endif // NWEB_NAPI_WEBVIEW_CONTROLLER_H
279