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>
40 namespace ViewModule {
41 class SecurityOriginSupport;
42 class CertificateSupport;
45 class ViewLogic : public ViewModule::IViewModule
52 bool createWebView(Ewk_Context* context,
54 void destroyWebView();
55 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);
66 void checkSyncMessageFromBundle(
70 void downloadData(const char* url);
71 void activateVibration(bool on, uint64_t time);
75 void initializeSupport();
76 void initializePluginLoading();
79 void ewkClientInit(Evas_Object *wkView);
80 void ewkClientDeinit(Evas_Object *wkView);
81 bool createEwkView(Evas* canvas);
82 void prepareEwkView(Evas_Object *wkView);
83 void removeEwkView(Evas_Object *wkView);
84 void resumeEwkView(Evas_Object *wkView);
85 void suspendEwkView(Evas_Object *wkView);
86 void setEwkViewVisible(Evas_Object *wkView);
87 void setEwkViewInvisible(Evas_Object *wkView);
88 void resumeWebkit(Evas_Object *wkView);
89 void suspendWebkit(Evas_Object *wkView);
92 static void loadStartedCallback(
96 static void loadFinishedCallback(
100 static void titleChangedCallback(
104 static void loadProgressCallback(
108 static void loadProgressFinishedCallback(
112 static void processCrashedCallback(
118 static void createWindowCallback(
122 static void closeWindowCallback(
127 // EWK PolicyDecide Callback
128 static void policyNavigationDecideCallback(
132 static void policyNewWindowDecideCallback(
136 static void pageResponseDecideCallback(
141 // EWK ContextMenu Callback
142 static void contextmenuCustomizeCallback(
147 // EWK Geolocation Callback
148 static void geolocationPermissionRequestCallback(
153 // EWK Notification Callback
154 static void notificationShowCallback(
158 static void notificationCancelCallback(
162 static void notificationPermissionRequestCallback(
167 // EWK Orientation Callback
168 static Eina_Bool orientationLockCallback(
174 // EWK Fullscreen API callbacks
175 static void enterFullscreenCallback(
179 static void exitFullscreenCallback(
184 // EWK IME Change/Show/Hide Callback
185 static void imeChangedCallback(
189 static void imeOpenedCallback(
193 static void imeClosedCallback(
198 // EWK Usermedia Callback
199 static void usermediaPermissionRequestCallback(
204 // custom content/scheme handlers
205 static void protocolHandlerRegistrationCallback(void* data,
208 static void protocolHandlerIsRegisteredCallback(void* data,
211 static void protocolHandlerUnregistrationCallback(void* data,
215 static void contentHandlerRegistrationCallback(void* data,
218 static void contentHandlerIsRegisteredCallback(void* data,
221 static void contentHandlerUnregistrationCallback(void* data,
224 static Eina_Bool exceededDatabaseQuotaCallback(Evas_Object* obj,
225 Ewk_Security_Origin* origin,
226 const char* databaseName,
227 unsigned long long expectedQuota,
229 static Eina_Bool exceededIndexedDatabaseQuotaCallback(Evas_Object* obj,
230 Ewk_Security_Origin* origin,
231 long long expectedQuota,
233 static Eina_Bool exceededLocalFileSystemQuotaCallback(Evas_Object* obj,
234 Ewk_Security_Origin* origin,
235 long long expectedQuota,
237 static void certificateConfirmRequestCallback(
241 static void authenticationChallengeRequestCallback(
246 static void viewFrameRenderedCallback(
251 #ifdef MULTIPROCESS_SERVICE_SUPPORT_INLINE
252 static int appServiceCallerIsKilled(void *data);
255 void attachToCustomHandlersDao();
256 void detachFromCustomHandlersDao();
258 // JS execute callback
259 static void didRunJavaScriptCallback(
265 static Eina_Bool windowCloseIdlerCallback(void *data);
268 void requestUrlBlocked(const std::string& blockedUrl);
271 void windowClose(void);
273 Ewk_Context* m_ewkContext;
274 bool m_attachedToCustomHandlerDao;
275 std::list<Evas_Object*> m_ewkViewList;
276 Evas_Object* m_currentEwkView;
277 Evas_Object* m_closedEwkView;
278 Evas_Object* m_window;
279 WidgetModel* m_model;
280 std::string m_blockedUri;
281 std::string m_currentTitle;
283 std::string m_startUrl;
284 WRT::UserDelegatesPtr m_cbs;
287 bool m_isBackgroundReload;
288 bool m_isBackgroundSupport;
290 std::unique_ptr<SchemeSupport> m_schemeSupport;
291 std::unique_ptr<ViewModule::AppsSupport> m_appsSupport;
292 std::unique_ptr<ViewModule::VibrationSupport> m_vibrationSupport;
293 std::unique_ptr<ViewModule::SecurityOriginSupport> m_securityOriginSupport;
294 std::unique_ptr<ViewModule::CertificateSupport> m_certificateSupport;
296 static std::map<const std::string, const Evas_Smart_Cb> m_ewkCallbacksMap;
299 #endif //VIEW_LOGIC_H_