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();
80 void ewkClientInit(Evas_Object *wkView);
81 void ewkClientDeinit(Evas_Object *wkView);
82 bool createEwkView(Evas* canvas);
83 void prepareEwkView(Evas_Object *wkView);
84 void removeEwkView(Evas_Object *wkView);
85 void resumeEwkView(Evas_Object *wkView);
86 void suspendEwkView(Evas_Object *wkView);
87 void setEwkViewVisible(Evas_Object *wkView);
88 void setEwkViewInvisible(Evas_Object *wkView);
89 void resumeWebkit(Evas_Object *wkView);
90 void suspendWebkit(Evas_Object *wkView);
93 static void loadStartedCallback(
97 static void loadFinishedCallback(
101 static void titleChangedCallback(
105 static void loadProgressCallback(
109 static void loadProgressFinishedCallback(
113 static void processCrashedCallback(
119 static void createWindowCallback(
123 static void closeWindowCallback(
128 // EWK PolicyDecide Callback
129 static void policyNavigationDecideCallback(
133 static void policyNewWindowDecideCallback(
137 static void pageResponseDecideCallback(
142 // EWK ContextMenu Callback
143 static void contextmenuCustomizeCallback(
148 // EWK Geolocation Callback
149 static void geolocationPermissionRequestCallback(
154 // EWK Notification Callback
155 static void notificationShowCallback(
159 static void notificationCancelCallback(
163 static void notificationPermissionRequestCallback(
168 // EWK Orientation Callback
169 static Eina_Bool orientationLockCallback(
175 // EWK Fullscreen API callbacks
176 static void enterFullscreenCallback(
180 static void exitFullscreenCallback(
185 // EWK IME Change/Show/Hide Callback
186 static void imeChangedCallback(
190 static void imeOpenedCallback(
194 static void imeClosedCallback(
199 // EWK Usermedia Callback
200 static void usermediaPermissionRequestCallback(
205 // custom content/scheme handlers
206 static void protocolHandlerRegistrationCallback(void* data,
209 static void protocolHandlerIsRegisteredCallback(void* data,
212 static void protocolHandlerUnregistrationCallback(void* data,
216 static void contentHandlerRegistrationCallback(void* data,
219 static void contentHandlerIsRegisteredCallback(void* data,
222 static void contentHandlerUnregistrationCallback(void* data,
225 static Eina_Bool exceededDatabaseQuotaCallback(Evas_Object* obj,
226 Ewk_Security_Origin* origin,
227 const char* databaseName,
228 unsigned long long expectedQuota,
230 static Eina_Bool exceededIndexedDatabaseQuotaCallback(Evas_Object* obj,
231 Ewk_Security_Origin* origin,
232 long long expectedQuota,
234 static Eina_Bool exceededLocalFileSystemQuotaCallback(Evas_Object* obj,
235 Ewk_Security_Origin* origin,
236 long long expectedQuota,
238 static void certificateConfirmRequestCallback(
242 static void authenticationChallengeRequestCallback(
247 static void viewFrameRenderedCallback(
252 #ifdef MULTIPROCESS_SERVICE_SUPPORT_INLINE
253 static int appServiceCallerIsKilled(void *data);
256 void attachToCustomHandlersDao();
257 void detachFromCustomHandlersDao();
259 // JS execute callback
260 static void didRunJavaScriptCallback(
266 static Eina_Bool windowCloseIdlerCallback(void *data);
269 void requestUrlBlocked(const std::string& blockedUrl);
272 void windowClose(void);
275 static void systemSettingsChangedCallback(system_settings_key_e key, void* data);
277 Ewk_Context* m_ewkContext;
278 bool m_attachedToCustomHandlerDao;
279 std::list<Evas_Object*> m_ewkViewList;
280 Evas_Object* m_currentEwkView;
281 Evas_Object* m_closedEwkView;
282 Evas_Object* m_window;
283 WidgetModel* m_model;
284 std::string m_blockedUri;
285 std::string m_currentTitle;
287 std::string m_startUrl;
288 WRT::UserDelegatesPtr m_cbs;
291 bool m_isBackgroundReload;
292 bool m_isBackgroundSupport;
294 std::unique_ptr<SchemeSupport> m_schemeSupport;
295 std::unique_ptr<ViewModule::AppsSupport> m_appsSupport;
296 std::unique_ptr<ViewModule::VibrationSupport> m_vibrationSupport;
297 std::unique_ptr<ViewModule::SecurityOriginSupport> m_securityOriginSupport;
298 std::unique_ptr<ViewModule::CertificateSupport> m_certificateSupport;
300 static std::map<const std::string, const Evas_Smart_Cb> m_ewkCallbacksMap;
303 #endif //VIEW_LOGIC_H_