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>
27 #include <dpl/log/log.h>
28 #include <dpl/assert.h>
30 #include <widget_model.h>
31 #include <i_runnable_widget_object.h>
32 #include <common/view_logic_apps_support.h>
33 #include <common/view_logic_vibration_support.h>
38 namespace ViewModule {
39 class SecurityOriginSupport;
42 class ViewLogic : public ViewModule::IViewModule
48 void createWebView(Ewk_Context* context,
50 void destroyWebView();
53 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 // custom content/scheme handlers
223 void attachToCustomHandlersDao();
224 void detachFromCustomHandlersDao();
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 // JS execute callback
246 static void didRunJavaScriptCallback(
252 static Eina_Bool windowCloseIdlerCallback(void *data);
254 // appcore event callback
255 static int appcoreLowMemoryCallback(void *data);
256 // database usage permission request callback
257 static void databaseUsagePermissionRequestCallback(
261 // file System Permission Request Callback
262 static void fileSystemPermissionRequestCallback(
268 void didRecieveMessageFromInjectedBundle(
271 void didReceiveSynchronousMessage(
277 void rememberBlockedURI(const DPL::String& str);
278 std::string requestUriChanged(const DPL::String& changedURL);
281 void windowClose(void);
283 Ewk_Context* m_ewkContext;
284 std::list<Evas_Object*> m_ewkViewList;
285 Evas_Object* m_currentEwkView;
286 Evas_Object* m_closedEwkView;
287 Evas_Object* m_window;
288 WidgetModel* m_model;
289 std::string m_currentUri;
290 std::string m_blockedUri;
292 std::string m_startUrl;
293 WRT::UserDelegatesPtr m_cbs;
296 bool m_isBackgroundReload;
298 std::unique_ptr<SchemeSupport> m_schemeSupport;
299 std::unique_ptr<ViewModule::AppsSupport> m_appsSupport;
300 std::unique_ptr<ViewModule::VibrationSupport> m_vibrationSupport;
301 std::unique_ptr<ViewModule::SecurityOriginSupport> m_securityOriginSupport;
302 bool m_attachedToCustomHandlerDao;
305 #endif //VIEW_LOGIC_H_