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);
60 void reloadStartPage();
61 Evas_Object* getCurrentWebview();
62 void fireJavascriptEvent(int event, void* data);
63 void setUserCallbacks(const WRT::UserDelegatesPtr& cbs);
65 // Ewk_Context operations
66 void initializeEwkContext(Ewk_Context* context);
67 void finalizeEwkContext();
70 void initializeSupport();
71 void initializePluginLoading();
74 void ewkClientInit(Evas_Object *wkView);
75 void ewkClientDeinit(Evas_Object *wkView);
76 void createEwkView(Evas* canvas);
78 void prepareEwkView(Evas_Object *wkView);
79 void removeEwkView(Evas_Object *wkView);
80 void resumeEwkView(Evas_Object *wkView);
81 void suspendEwkView(Evas_Object *wkView);
82 void resumeWebkit(Evas_Object *wkView);
83 void suspendWebkit(Evas_Object *wkView);
85 // message from injected bundle Callback
86 static void contextMessageFromInjectedBundleCallback(
92 // EWK Context Callback
93 static void didStartDownloadCallback(
94 const char* downloadUrl,
98 static void loadStartedCallback(
102 static void loadFinishedCallback(
106 static void titleChangedCallback(
110 static void loadProgressCallback(
114 static void loadProgressFinishedCallback(
118 static void processCrashedCallback(
124 static void createWindowCallback(
128 static void closeWindowCallback(
133 // EWK PolicyDecide Callback
134 static void policyNavigationDecideCallback(
138 static void policyNewWindowDecideCallback(
142 static void pageResponseDecideCallback(
147 // EWK ContextMenu Callback
148 static void contextmenuCustomizeCallback(
153 // EWK FormClient Callback
154 static void formSubmitCallback(
159 // EWK Geolocation Callback
160 static void geolocationPermissionRequestCallback(
165 // EWK Notification Callback
166 static void notificationShowCallback(
170 static void notificationCancelCallback(
174 static void notificationPermissionRequestCallback(
179 // EWK Vibration Callback
180 static void vibrationVibrateCallback(
184 static void vibrationCancelCallback(
189 // EWK Orientation Callback
190 static Eina_Bool orientationLockCallback(
196 // EWK Fullscreen API callbacks
197 static void enterFullscreenCallback(
201 static void exitFullscreenCallback(
206 // EWK IME Change/Show/Hide Callback
207 static void imeChangedCallback(
211 static void imeOpenedCallback(
215 static void imeClosedCallback(
220 // EWK Usermedia Callback
221 static void usermediaPermissionRequestCallback(
226 // custom content/scheme handlers
227 void attachToCustomHandlersDao();
228 void detachFromCustomHandlersDao();
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 // JS execute callback
250 static void didRunJavaScriptCallback(
256 static Eina_Bool windowCloseIdlerCallback(void *data);
258 // appcore event callback
259 static int appcoreLowMemoryCallback(void *data);
260 // database usage permission request callback
261 static void databaseUsagePermissionRequestCallback(
265 // file System Permission Request Callback
266 static void fileSystemPermissionRequestCallback(
272 void didRecieveMessageFromInjectedBundle(
275 void didReceiveSynchronousMessage(
281 void rememberBlockedURI(const DPL::String& str);
282 std::string requestUriChanged(const DPL::String& changedURL);
285 void windowClose(void);
287 Ewk_Context* m_ewkContext;
288 std::list<Evas_Object*> m_ewkViewList;
289 Evas_Object* m_currentEwkView;
290 Evas_Object* m_closedEwkView;
291 Evas_Object* m_window;
292 WidgetModel* m_model;
293 std::string m_currentUri;
294 std::string m_blockedUri;
296 std::string m_startUrl;
297 WRT::UserDelegatesPtr m_cbs;
300 bool m_isBackgroundReload;
302 std::unique_ptr<SchemeSupport> m_schemeSupport;
303 std::unique_ptr<ViewModule::AppsSupport> m_appsSupport;
304 std::unique_ptr<ViewModule::VibrationSupport> m_vibrationSupport;
305 std::unique_ptr<ViewModule::SecurityOriginSupport> m_securityOriginSupport;
306 bool m_attachedToCustomHandlerDao;
309 #endif //VIEW_LOGIC_H_