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>
36 #include <system_settings.h>
41 namespace ViewModule {
42 class SecurityOriginSupport;
43 class CertificateSupport;
46 class ViewLogic : public ViewModule::IViewModule
53 bool createWebView(Ewk_Context* context,
55 void destroyWebView();
56 void prepareView(WidgetModel* m, const std::string &startUrl);
63 void reloadStartPage();
64 Evas_Object* getCurrentWebview();
65 void fireJavascriptEvent(int event, void* data);
66 void setUserCallbacks(const WRT::UserDelegatesPtr& cbs);
67 void checkSyncMessageFromBundle(
71 void checkAsyncMessageFromBundle(
74 void downloadData(const char* url);
75 void activateVibration(bool on, uint64_t time);
79 void initializeSupport();
80 void initializePluginLoading();
81 void initializeXwindowHandle();
84 void ewkClientInit(Evas_Object *wkView);
85 void ewkClientDeinit(Evas_Object *wkView);
86 bool createEwkView(Evas* canvas);
87 void prepareEwkView(Evas_Object *wkView);
88 void removeEwkView(Evas_Object *wkView);
89 void setEwkViewVisible(Evas_Object *wkView);
90 void setEwkViewInvisible(Evas_Object *wkView);
91 void resumeWebkit(Evas_Object *wkView);
92 void suspendWebkit(Evas_Object *wkView);
95 static void loadStartedCallback(
99 static void loadFinishedCallback(
103 static void titleChangedCallback(
107 static void loadProgressStartedCallback(
111 static void loadProgressCallback(
115 static void loadProgressFinishedCallback(
119 static void processCrashedCallback(
125 static void createWindowCallback(
129 static void closeWindowCallback(
134 // EWK PolicyDecide Callback
135 static void policyNavigationDecideCallback(
139 static void policyNewWindowDecideCallback(
143 static void pageResponseDecideCallback(
148 // EWK ContextMenu Callback
149 static void contextmenuCustomizeCallback(
154 // EWK Geolocation Callback
155 static void geolocationPermissionRequestCallback(
160 // EWK Notification Callback
161 static void notificationShowCallback(
165 static void notificationCancelCallback(
169 static void notificationPermissionRequestCallback(
174 // EWK Orientation Callback
175 static Eina_Bool orientationLockCallback(
181 // EWK Fullscreen API callbacks
182 static void enterFullscreenCallback(
186 static void exitFullscreenCallback(
191 // EWK IME Change/Show/Hide Callback
192 static void imeChangedCallback(
196 static void imeOpenedCallback(
200 static void imeClosedCallback(
205 // EWK Usermedia Callback
206 static void usermediaPermissionRequestCallback(
211 // custom content/scheme handlers
212 static void protocolHandlerRegistrationCallback(void* data,
215 static void protocolHandlerIsRegisteredCallback(void* data,
218 static void protocolHandlerUnregistrationCallback(void* data,
222 static void contentHandlerRegistrationCallback(void* data,
225 static void contentHandlerIsRegisteredCallback(void* data,
228 static void contentHandlerUnregistrationCallback(void* data,
231 static Eina_Bool exceededDatabaseQuotaCallback(Evas_Object* obj,
232 Ewk_Security_Origin* origin,
233 const char* databaseName,
234 unsigned long long expectedQuota,
236 static Eina_Bool exceededIndexedDatabaseQuotaCallback(Evas_Object* obj,
237 Ewk_Security_Origin* origin,
238 long long expectedQuota,
240 static Eina_Bool exceededLocalFileSystemQuotaCallback(Evas_Object* obj,
241 Ewk_Security_Origin* origin,
242 long long expectedQuota,
244 static void certificateConfirmRequestCallback(
248 static void authenticationChallengeRequestCallback(
253 static void viewFrameRenderedCallback(
258 static void mediacontrolRotateHorizontal(void* data,
261 static void mediacontrolRotateVertical(void* data,
264 static void mediacontrolRotateExit(void* data,
267 static void popupReplyWaitStart(void* data,
270 static void popupReplyWaitFinish(void* data,
274 #ifdef MULTIPROCESS_SERVICE_SUPPORT_INLINE
275 static int appServiceCallerIsKilled(void *data);
278 void attachToCustomHandlersDao();
279 void detachFromCustomHandlersDao();
281 // JS execute callback
282 static void didRunJavaScriptCallback(
288 static void eaKeyCallback(void* data,
293 static Eina_Bool windowCloseIdlerCallback(void *data);
296 static Eina_Bool orientationThresholdTimerCallback(void* data);
299 void requestUrlBlocked(const std::string& blockedUrl);
302 void windowClose(void);
305 static void systemSettingsChangedCallback(system_settings_key_e key, void* data);
307 Ewk_Context* m_ewkContext;
308 bool m_attachedToCustomHandlerDao;
309 std::list<Evas_Object*> m_ewkViewList;
310 Evas_Object* m_currentEwkView;
311 Evas_Object* m_closedEwkView;
312 Evas_Object* m_window;
313 WidgetModel* m_model;
314 std::string m_blockedUri;
315 std::string m_currentTitle;
317 std::string m_startUrl;
318 WRT::UserDelegatesPtr m_cbs;
321 bool m_isBackgroundReload;
322 bool m_isBackgroundSupport;
324 int m_deferredRotateAngle;
325 Ecore_Timer* m_orientationThresholdTimer;
326 bool m_isPopupReplyWait;
328 std::unique_ptr<SchemeSupport> m_schemeSupport;
329 std::unique_ptr<ViewModule::AppsSupport> m_appsSupport;
330 std::unique_ptr<ViewModule::VibrationSupport> m_vibrationSupport;
331 std::unique_ptr<ViewModule::SecurityOriginSupport> m_securityOriginSupport;
332 std::unique_ptr<ViewModule::CertificateSupport> m_certificateSupport;
334 static std::map<const std::string, const Evas_Smart_Cb> m_ewkCallbacksMap;
337 #endif //VIEW_LOGIC_H_