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 downloadData(const char* url);
72 void activateVibration(bool on, uint64_t time);
76 void initializeSupport();
77 void initializePluginLoading();
78 void initializeXwindowHandle();
81 void ewkClientInit(Evas_Object *wkView);
82 void ewkClientDeinit(Evas_Object *wkView);
83 bool createEwkView(Evas* canvas);
84 void prepareEwkView(Evas_Object *wkView);
85 void removeEwkView(Evas_Object *wkView);
86 void resumeEwkView(Evas_Object *wkView);
87 void suspendEwkView(Evas_Object *wkView);
88 void setEwkViewVisible(Evas_Object *wkView);
89 void setEwkViewInvisible(Evas_Object *wkView);
90 void resumeWebkit(Evas_Object *wkView);
91 void suspendWebkit(Evas_Object *wkView);
94 static void loadStartedCallback(
98 static void loadFinishedCallback(
102 static void titleChangedCallback(
106 static void loadProgressStartedCallback(
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 Geolocation Callback
154 static void geolocationPermissionRequestCallback(
159 // EWK Notification Callback
160 static void notificationShowCallback(
164 static void notificationCancelCallback(
168 static void notificationPermissionRequestCallback(
173 // EWK Orientation Callback
174 static Eina_Bool orientationLockCallback(
180 // EWK Fullscreen API callbacks
181 static void enterFullscreenCallback(
185 static void exitFullscreenCallback(
190 // EWK IME Change/Show/Hide Callback
191 static void imeChangedCallback(
195 static void imeOpenedCallback(
199 static void imeClosedCallback(
204 // EWK Usermedia Callback
205 static void usermediaPermissionRequestCallback(
210 // custom content/scheme handlers
211 static void protocolHandlerRegistrationCallback(void* data,
214 static void protocolHandlerIsRegisteredCallback(void* data,
217 static void protocolHandlerUnregistrationCallback(void* data,
221 static void contentHandlerRegistrationCallback(void* data,
224 static void contentHandlerIsRegisteredCallback(void* data,
227 static void contentHandlerUnregistrationCallback(void* data,
230 static Eina_Bool exceededDatabaseQuotaCallback(Evas_Object* obj,
231 Ewk_Security_Origin* origin,
232 const char* databaseName,
233 unsigned long long expectedQuota,
235 static Eina_Bool exceededIndexedDatabaseQuotaCallback(Evas_Object* obj,
236 Ewk_Security_Origin* origin,
237 long long expectedQuota,
239 static Eina_Bool exceededLocalFileSystemQuotaCallback(Evas_Object* obj,
240 Ewk_Security_Origin* origin,
241 long long expectedQuota,
243 static void certificateConfirmRequestCallback(
247 static void authenticationChallengeRequestCallback(
252 static void viewFrameRenderedCallback(
257 static void mediacontrolRotateHorizontal(void* data,
260 static void mediacontrolRotateVertical(void* data,
263 static void mediacontrolRotateExit(void* data,
267 #ifdef MULTIPROCESS_SERVICE_SUPPORT_INLINE
268 static int appServiceCallerIsKilled(void *data);
271 void attachToCustomHandlersDao();
272 void detachFromCustomHandlersDao();
274 // JS execute callback
275 static void didRunJavaScriptCallback(
281 static void keyupCallback(void* data,
287 static Eina_Bool windowCloseIdlerCallback(void *data);
290 void requestUrlBlocked(const std::string& blockedUrl);
293 void windowClose(void);
296 static void systemSettingsChangedCallback(system_settings_key_e key, void* data);
298 Ewk_Context* m_ewkContext;
299 bool m_attachedToCustomHandlerDao;
300 std::list<Evas_Object*> m_ewkViewList;
301 Evas_Object* m_currentEwkView;
302 Evas_Object* m_closedEwkView;
303 Evas_Object* m_window;
304 WidgetModel* m_model;
305 std::string m_blockedUri;
306 std::string m_currentTitle;
308 std::string m_startUrl;
309 WRT::UserDelegatesPtr m_cbs;
312 bool m_isBackgroundReload;
313 bool m_isBackgroundSupport;
316 std::unique_ptr<SchemeSupport> m_schemeSupport;
317 std::unique_ptr<ViewModule::AppsSupport> m_appsSupport;
318 std::unique_ptr<ViewModule::VibrationSupport> m_vibrationSupport;
319 std::unique_ptr<ViewModule::SecurityOriginSupport> m_securityOriginSupport;
320 std::unique_ptr<ViewModule::CertificateSupport> m_certificateSupport;
322 static std::map<const std::string, const Evas_Smart_Cb> m_ewkCallbacksMap;
325 #endif //VIEW_LOGIC_H_