2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 * @author Lukasz Wrzosek (l.wrzosek@samsung.com)
19 * @brief Declaration file for view logic for Webkit2
25 #include <i_view_module.h>
29 #include <dpl/log/log.h>
30 #include <dpl/assert.h>
32 #include <widget_model.h>
33 #include <i_runnable_widget_object.h>
34 #include <common/view_logic_apps_support.h>
35 #include <common/view_logic_vibration_support.h>
40 namespace ViewModule {
41 class SecurityOriginSupport;
44 class ViewLogic : public ViewModule::IViewModule
50 bool createWebView(Ewk_Context* context,
52 void destroyWebView();
55 void prepareView(WidgetModel* m, const std::string &startUrl);
58 void changeViewVisibility(bool isVisible);
63 void reloadStartPage();
64 Evas_Object* getCurrentWebview();
65 void fireJavascriptEvent(int event, void* data);
66 void setUserCallbacks(const WRT::UserDelegatesPtr& cbs);
68 // Ewk_Context operations
69 void initializeEwkContext(Ewk_Context* context);
70 void finalizeEwkContext();
73 void initializeSupport();
74 void initializePluginLoading();
77 void ewkClientInit(Evas_Object *wkView);
78 void ewkClientDeinit(Evas_Object *wkView);
79 bool createEwkView(Evas* canvas);
81 void prepareEwkView(Evas_Object *wkView);
82 void removeEwkView(Evas_Object *wkView);
83 void resumeEwkView(Evas_Object *wkView);
84 void suspendEwkView(Evas_Object *wkView);
85 void resumeWebkit(Evas_Object *wkView);
86 void suspendWebkit(Evas_Object *wkView);
88 // message from injected bundle Callback
89 static void contextMessageFromInjectedBundleCallback(
95 // EWK Context Callback
96 static void didStartDownloadCallback(
97 const char* downloadUrl,
100 // WKPageLoaderClient
101 static void loadStartedCallback(
105 static void loadFinishedCallback(
109 static void titleChangedCallback(
113 static void loadProgressCallback(
117 static void loadProgressFinishedCallback(
121 static void processCrashedCallback(
127 static void createWindowCallback(
131 static void closeWindowCallback(
136 // EWK PolicyDecide Callback
137 static void policyNavigationDecideCallback(
141 static void policyNewWindowDecideCallback(
145 static void pageResponseDecideCallback(
150 // EWK ContextMenu Callback
151 static void contextmenuCustomizeCallback(
156 // EWK FormClient Callback
157 static void formSubmitCallback(
162 // EWK Geolocation Callback
163 static void geolocationPermissionRequestCallback(
168 // EWK Notification Callback
169 static void notificationShowCallback(
173 static void notificationCancelCallback(
177 static void notificationPermissionRequestCallback(
182 // EWK Vibration Callback
183 static void vibrationVibrateCallback(uint64_t time, void* data);
184 static void vibrationCancelCallback(void* data);
186 // EWK Orientation Callback
187 static Eina_Bool orientationLockCallback(
193 // EWK Fullscreen API callbacks
194 static void enterFullscreenCallback(
198 static void exitFullscreenCallback(
203 // EWK IME Change/Show/Hide Callback
204 static void imeChangedCallback(
208 static void imeOpenedCallback(
212 static void imeClosedCallback(
217 // EWK Usermedia Callback
218 static void usermediaPermissionRequestCallback(
223 // custom content/scheme handlers
224 static void protocolHandlerRegistrationCallback(void* data,
227 static void protocolHandlerIsRegisteredCallback(void* data,
230 static void protocolHandlerUnregistrationCallback(void* data,
234 static void contentHandlerRegistrationCallback(void* data,
237 static void contentHandlerIsRegisteredCallback(void* data,
240 static void contentHandlerUnregistrationCallback(void* data,
244 // database usage permission request callback
245 static void databaseUsagePermissionRequestCallback(
249 // file System Permission Request Callback
250 static void fileSystemPermissionRequestCallback(
254 static void certificateConfirmRequestCallback(
258 bool askUserForCertificateConfirm();
260 void attachToCustomHandlersDao();
261 void detachFromCustomHandlersDao();
263 // JS execute callback
264 static void didRunJavaScriptCallback(
270 static Eina_Bool windowCloseIdlerCallback(void *data);
272 // appcore event callback
273 static int appcoreLowMemoryCallback(void *data);
276 void didRecieveMessageFromInjectedBundle(
279 void didReceiveSynchronousMessage(
285 void rememberBlockedURI(const DPL::String& str);
286 std::string requestUriChanged(const DPL::String& changedURL);
289 void windowClose(void);
291 Ewk_Context* m_ewkContext;
292 std::list<Evas_Object*> m_ewkViewList;
293 Evas_Object* m_currentEwkView;
294 Evas_Object* m_closedEwkView;
295 Evas_Object* m_window;
296 WidgetModel* m_model;
297 std::string m_currentUri;
298 std::string m_blockedUri;
300 std::string m_startUrl;
301 WRT::UserDelegatesPtr m_cbs;
304 bool m_isBackgroundReload;
306 std::unique_ptr<SchemeSupport> m_schemeSupport;
307 std::unique_ptr<ViewModule::AppsSupport> m_appsSupport;
308 std::unique_ptr<ViewModule::VibrationSupport> m_vibrationSupport;
309 std::unique_ptr<ViewModule::SecurityOriginSupport> m_securityOriginSupport;
310 bool m_attachedToCustomHandlerDao;
312 static std::map<const std::string, const Evas_Smart_Cb> m_ewkCallbacksMap;
315 #endif //VIEW_LOGIC_H_