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);
62 void reloadStartPage();
63 Evas_Object* getCurrentWebview();
64 void fireJavascriptEvent(int event, void* data);
65 void setUserCallbacks(const WRT::UserDelegatesPtr& cbs);
67 // Ewk_Context operations
68 void initializeEwkContext(Ewk_Context* context);
69 void finalizeEwkContext();
72 void initializeSupport();
73 void initializePluginLoading();
76 void ewkClientInit(Evas_Object *wkView);
77 void ewkClientDeinit(Evas_Object *wkView);
78 bool createEwkView(Evas* canvas);
80 void prepareEwkView(Evas_Object *wkView);
81 void removeEwkView(Evas_Object *wkView);
82 void resumeEwkView(Evas_Object *wkView);
83 void suspendEwkView(Evas_Object *wkView);
84 void setEwkViewVisible(Evas_Object *wkView);
85 void setEwkViewInvisible(Evas_Object *wkView);
86 void resumeWebkit(Evas_Object *wkView);
87 void suspendWebkit(Evas_Object *wkView);
89 // message from injected bundle Callback
90 static void contextMessageFromInjectedBundleCallback(
96 // EWK Context Callback
97 static void didStartDownloadCallback(
98 const char* downloadUrl,
101 // WKPageLoaderClient
102 static void loadStartedCallback(
106 static void loadFinishedCallback(
110 static void titleChangedCallback(
114 static void loadProgressCallback(
118 static void loadProgressFinishedCallback(
122 static void processCrashedCallback(
128 static void createWindowCallback(
132 static void closeWindowCallback(
137 // EWK PolicyDecide Callback
138 static void policyNavigationDecideCallback(
142 static void policyNewWindowDecideCallback(
146 static void pageResponseDecideCallback(
151 // EWK ContextMenu Callback
152 static void contextmenuCustomizeCallback(
157 // EWK FormClient Callback
158 static void formSubmitCallback(
163 // EWK Geolocation Callback
164 static void geolocationPermissionRequestCallback(
169 // EWK Notification Callback
170 static void notificationShowCallback(
174 static void notificationCancelCallback(
178 static void notificationPermissionRequestCallback(
183 // EWK Vibration Callback
184 static void vibrationVibrateCallback(uint64_t time, void* data);
185 static void vibrationCancelCallback(void* data);
187 // EWK Orientation Callback
188 static Eina_Bool orientationLockCallback(
194 // EWK Fullscreen API callbacks
195 static void enterFullscreenCallback(
199 static void exitFullscreenCallback(
204 // EWK IME Change/Show/Hide Callback
205 static void imeChangedCallback(
209 static void imeOpenedCallback(
213 static void imeClosedCallback(
218 // EWK Usermedia Callback
219 static void usermediaPermissionRequestCallback(
224 // custom content/scheme handlers
225 static void protocolHandlerRegistrationCallback(void* data,
228 static void protocolHandlerIsRegisteredCallback(void* data,
231 static void protocolHandlerUnregistrationCallback(void* data,
235 static void contentHandlerRegistrationCallback(void* data,
238 static void contentHandlerIsRegisteredCallback(void* data,
241 static void contentHandlerUnregistrationCallback(void* data,
245 // database usage permission request callback
246 static void databaseUsagePermissionRequestCallback(
250 // file System Permission Request Callback
251 static void fileSystemPermissionRequestCallback(
255 static void certificateConfirmRequestCallback(
259 bool askUserForCertificateConfirm();
261 void attachToCustomHandlersDao();
262 void detachFromCustomHandlersDao();
264 // JS execute callback
265 static void didRunJavaScriptCallback(
271 static Eina_Bool windowCloseIdlerCallback(void *data);
273 // appcore event callback
274 static int appcoreLowMemoryCallback(void *data);
277 void didRecieveMessageFromInjectedBundle(
280 void didReceiveSynchronousMessage(
286 void rememberBlockedURI(const DPL::String& str);
287 std::string requestUriChanged(const DPL::String& changedURL);
290 void windowClose(void);
292 Ewk_Context* m_ewkContext;
293 std::list<Evas_Object*> m_ewkViewList;
294 Evas_Object* m_currentEwkView;
295 Evas_Object* m_closedEwkView;
296 Evas_Object* m_window;
297 WidgetModel* m_model;
298 std::string m_currentUri;
299 std::string m_blockedUri;
301 std::string m_startUrl;
302 WRT::UserDelegatesPtr m_cbs;
305 bool m_isBackgroundReload;
306 bool m_isBackgroundSupport;
308 std::unique_ptr<SchemeSupport> m_schemeSupport;
309 std::unique_ptr<ViewModule::AppsSupport> m_appsSupport;
310 std::unique_ptr<ViewModule::VibrationSupport> m_vibrationSupport;
311 std::unique_ptr<ViewModule::SecurityOriginSupport> m_securityOriginSupport;
312 bool m_attachedToCustomHandlerDao;
314 static std::map<const std::string, const Evas_Smart_Cb> m_ewkCallbacksMap;
317 #endif //VIEW_LOGIC_H_