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 resumeEwkView(Evas_Object *wkView);
90 void suspendEwkView(Evas_Object *wkView);
91 void setEwkViewVisible(Evas_Object *wkView);
92 void setEwkViewInvisible(Evas_Object *wkView);
93 void resumeWebkit(Evas_Object *wkView);
94 void suspendWebkit(Evas_Object *wkView);
97 static void loadStartedCallback(
101 static void loadFinishedCallback(
105 static void titleChangedCallback(
109 static void loadProgressStartedCallback(
113 static void loadProgressCallback(
117 static void loadProgressFinishedCallback(
121 static void processCrashedCallback(
127 static void createWindowCallback(
131 static void closeWindowCallback(
136 // EWK PolicyDecide Callback
137 static void policyNavigationDecideCallback(
141 static void policyNewWindowDecideCallback(
145 static void pageResponseDecideCallback(
150 // EWK ContextMenu Callback
151 static void contextmenuCustomizeCallback(
156 // EWK Geolocation Callback
157 static void geolocationPermissionRequestCallback(
162 // EWK Notification Callback
163 static void notificationShowCallback(
167 static void notificationCancelCallback(
171 static void notificationPermissionRequestCallback(
176 // EWK Orientation Callback
177 static Eina_Bool orientationLockCallback(
183 // EWK Fullscreen API callbacks
184 static void enterFullscreenCallback(
188 static void exitFullscreenCallback(
193 // EWK IME Change/Show/Hide Callback
194 static void imeChangedCallback(
198 static void imeOpenedCallback(
202 static void imeClosedCallback(
207 // EWK Usermedia Callback
208 static void usermediaPermissionRequestCallback(
213 // custom content/scheme handlers
214 static void protocolHandlerRegistrationCallback(void* data,
217 static void protocolHandlerIsRegisteredCallback(void* data,
220 static void protocolHandlerUnregistrationCallback(void* data,
224 static void contentHandlerRegistrationCallback(void* data,
227 static void contentHandlerIsRegisteredCallback(void* data,
230 static void contentHandlerUnregistrationCallback(void* data,
233 static Eina_Bool exceededDatabaseQuotaCallback(Evas_Object* obj,
234 Ewk_Security_Origin* origin,
235 const char* databaseName,
236 unsigned long long expectedQuota,
238 static Eina_Bool exceededIndexedDatabaseQuotaCallback(Evas_Object* obj,
239 Ewk_Security_Origin* origin,
240 long long expectedQuota,
242 static Eina_Bool exceededLocalFileSystemQuotaCallback(Evas_Object* obj,
243 Ewk_Security_Origin* origin,
244 long long expectedQuota,
246 static void certificateConfirmRequestCallback(
250 static void authenticationChallengeRequestCallback(
255 static void viewFrameRenderedCallback(
260 static void mediacontrolRotateHorizontal(void* data,
263 static void mediacontrolRotateVertical(void* data,
266 static void mediacontrolRotateExit(void* data,
269 static void popupReplyWaitStart(void* data,
272 static void popupReplyWaitFinish(void* data,
276 #ifdef MULTIPROCESS_SERVICE_SUPPORT_INLINE
277 static int appServiceCallerIsKilled(void *data);
280 void attachToCustomHandlersDao();
281 void detachFromCustomHandlersDao();
283 // JS execute callback
284 static void didRunJavaScriptCallback(
290 static void eaKeyCallback(void* data,
295 static Eina_Bool windowCloseIdlerCallback(void *data);
298 static Eina_Bool orientationThresholdTimerCallback(void* data);
301 void requestUrlBlocked(const std::string& blockedUrl);
304 void windowClose(void);
307 static void systemSettingsChangedCallback(system_settings_key_e key, void* data);
309 Ewk_Context* m_ewkContext;
310 bool m_attachedToCustomHandlerDao;
311 std::list<Evas_Object*> m_ewkViewList;
312 Evas_Object* m_currentEwkView;
313 Evas_Object* m_closedEwkView;
314 Evas_Object* m_window;
315 WidgetModel* m_model;
316 std::string m_blockedUri;
317 std::string m_currentTitle;
319 std::string m_startUrl;
320 WRT::UserDelegatesPtr m_cbs;
323 bool m_isBackgroundReload;
324 bool m_isBackgroundSupport;
326 int m_deferredRotateAngle;
327 Ecore_Timer* m_orientationThresholdTimer;
328 bool m_isPopupReplyWait;
330 std::unique_ptr<SchemeSupport> m_schemeSupport;
331 std::unique_ptr<ViewModule::AppsSupport> m_appsSupport;
332 std::unique_ptr<ViewModule::VibrationSupport> m_vibrationSupport;
333 std::unique_ptr<ViewModule::SecurityOriginSupport> m_securityOriginSupport;
334 std::unique_ptr<ViewModule::CertificateSupport> m_certificateSupport;
336 static std::map<const std::string, const Evas_Smart_Cb> m_ewkCallbacksMap;
339 #endif //VIEW_LOGIC_H_