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 void 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 void 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 resumeWebkit(Evas_Object *wkView);
85 void suspendWebkit(Evas_Object *wkView);
87 // message from injected bundle Callback
88 static void contextMessageFromInjectedBundleCallback(
94 // EWK Context Callback
95 static void didStartDownloadCallback(
96 const char* downloadUrl,
100 static void loadStartedCallback(
104 static void loadFinishedCallback(
108 static void titleChangedCallback(
112 static void loadProgressCallback(
116 static void loadProgressFinishedCallback(
120 static void processCrashedCallback(
126 static void createWindowCallback(
130 static void closeWindowCallback(
135 // EWK PolicyDecide Callback
136 static void policyNavigationDecideCallback(
140 static void policyNewWindowDecideCallback(
144 static void pageResponseDecideCallback(
149 // EWK ContextMenu Callback
150 static void contextmenuCustomizeCallback(
155 // EWK FormClient Callback
156 static void formSubmitCallback(
161 // EWK Geolocation Callback
162 static void geolocationPermissionRequestCallback(
167 // EWK Notification Callback
168 static void notificationShowCallback(
172 static void notificationCancelCallback(
176 static void notificationPermissionRequestCallback(
181 // EWK Vibration Callback
182 static void vibrationVibrateCallback(
186 static void vibrationCancelCallback(
191 // EWK Orientation Callback
192 static Eina_Bool orientationLockCallback(
198 // EWK Fullscreen API callbacks
199 static void enterFullscreenCallback(
203 static void exitFullscreenCallback(
208 // EWK IME Change/Show/Hide Callback
209 static void imeChangedCallback(
213 static void imeOpenedCallback(
217 static void imeClosedCallback(
222 // EWK Usermedia Callback
223 static void usermediaPermissionRequestCallback(
228 // custom content/scheme handlers
229 static void protocolHandlerRegistrationCallback(void* data,
232 static void protocolHandlerIsRegisteredCallback(void* data,
235 static void protocolHandlerUnregistrationCallback(void* data,
239 static void contentHandlerRegistrationCallback(void* data,
242 static void contentHandlerIsRegisteredCallback(void* data,
245 static void contentHandlerUnregistrationCallback(void* data,
249 // database usage permission request callback
250 static void databaseUsagePermissionRequestCallback(
254 // file System Permission Request Callback
255 static void fileSystemPermissionRequestCallback(
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_