Merge "fix: use EINA_* booleans instread of TRUE/FALSE" into tizen
[platform/framework/web/wrt.git] / src / view / webkit / view_logic.h
1 /*
2  * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
3  *
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
7  *
8  *        http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16 /**
17  * @file    view_logic.h
18  * @author  Lukasz Wrzosek (l.wrzosek@samsung.com)
19  * @brief   Declaration file for view logic for Webkit2
20  */
21
22 #ifndef VIEW_LOGIC_H_
23 #define VIEW_LOGIC_H_
24
25 #include <i_view_module.h>
26 #include <memory>
27 #include <map>
28 #include <string>
29 #include <dpl/log/log.h>
30 #include <dpl/assert.h>
31
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>
37
38 #include <EWebKit2.h>
39
40 namespace ViewModule {
41 class SecurityOriginSupport;
42 class CertificateSupport;
43 class WebNotificationSupport;
44 }
45
46 class ViewLogic : public ViewModule::IViewModule
47 {
48   public:
49     ViewLogic();
50     virtual ~ViewLogic();
51
52     // IViewModule Impl
53     bool createWebView(Ewk_Context* context,
54                        Evas_Object* window);
55     void destroyWebView();
56     void prepareView(WidgetModel* m, const std::string &startUrl);
57     void showWidget();
58     void hideWidget();
59     void suspendWidget();
60     void resumeWidget();
61     void resetWidget();
62     void backward();
63     void reloadStartPage();
64     Evas_Object* getCurrentWebview();
65     void fireJavascriptEvent(int event, void* data);
66     void setUserCallbacks(const WRT::UserDelegatesPtr& cbs);
67     void checkSyncMessageFromBundle(
68             const char* name,
69             const char* body,
70             char** returnData);
71     void checkAsyncMessageFromBundle(
72             const char* name,
73             const char* body);
74     void downloadData(const char* url);
75     void activateVibration(bool on, uint64_t time);
76
77
78   private:
79     void initializeSupport();
80     void initializePluginLoading();
81     void initializeXwindowHandle();
82
83     // EwkView operations
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);
93
94     // WKPageLoaderClient
95     static void loadStartedCallback(
96         void* data,
97         Evas_Object* obj,
98         void* eventInfo);
99     static void loadFinishedCallback(
100         void* data,
101         Evas_Object* obj,
102         void* eventInfo);
103     static void loadProgressStartedCallback(
104         void* data,
105         Evas_Object* obj,
106         void* eventInfo);
107     static void loadProgressCallback(
108         void* data,
109         Evas_Object* obj,
110         void* eventInfo);
111     static void loadProgressFinishedCallback(
112         void* data,
113         Evas_Object* obj,
114         void* eventInfo);
115     static void processCrashedCallback(
116         void* data,
117         Evas_Object* obj,
118         void* eventInfo);
119
120     // EWK Callback
121     static void createWindowCallback(
122         void* data,
123         Evas_Object* obj,
124         void* eventInfo);
125     static void closeWindowCallback(
126         void* data,
127         Evas_Object* obj,
128         void* eventInfo);
129
130     // EWK PolicyDecide Callback
131     static void policyNavigationDecideCallback(
132         void* data,
133         Evas_Object* obj,
134         void* eventInfo);
135     static void policyNewWindowDecideCallback(
136         void* data,
137         Evas_Object* obj,
138         void* eventInfo);
139     static void pageResponseDecideCallback(
140         void* data,
141         Evas_Object* obj,
142         void* eventInfo);
143
144     // EWK ContextMenu Callback
145     static void contextmenuCustomizeCallback(
146         void* data,
147         Evas_Object* obj,
148         void* eventInfo);
149
150     // EWK Geolocation Callback
151     static void geolocationPermissionRequestCallback(
152         void* data,
153         Evas_Object* obj,
154         void* eventInfo);
155
156     // EWK Notification Callback
157     static void notificationShowCallback(
158         void* data,
159         Evas_Object* obj,
160         void* eventInfo);
161     static void notificationCancelCallback(
162         void* data,
163         Evas_Object* obj,
164         void* eventInfo);
165     static void notificationPermissionRequestCallback(
166         void* data,
167         Evas_Object* obj,
168         void* eventInfo);
169
170     // EWK Orientation Callback
171     static Eina_Bool orientationLockCallback(
172         Evas_Object* obj,
173         Eina_Bool needLock,
174         int orientation,
175         void* data);
176
177     // EWK Fullscreen API callbacks
178     static void enterFullscreenCallback(
179         void* data,
180         Evas_Object* obj,
181         void* eventInfo);
182     static void exitFullscreenCallback(
183         void* data,
184         Evas_Object* obj,
185         void* eventInfo);
186
187     // EWK IME Change/Show/Hide Callback
188     static void imeChangedCallback(
189         void* data,
190         Evas_Object* obj,
191         void* eventInfo);
192     static void imeOpenedCallback(
193         void* data,
194         Evas_Object* obj,
195         void* eventInfo);
196     static void imeClosedCallback(
197         void* data,
198         Evas_Object* obj,
199         void* eventInfo);
200
201     // EWK Usermedia Callback
202     static void usermediaPermissionRequestCallback(
203         void* data,
204         Evas_Object* obj,
205         void* eventInfo);
206
207     // custom content/scheme handlers
208     static void protocolHandlerRegistrationCallback(void* data,
209                                                     Evas_Object* obj,
210                                                     void* eventInfo);
211     static void protocolHandlerIsRegisteredCallback(void* data,
212                                                     Evas_Object* obj,
213                                                     void* eventInfo);
214     static void protocolHandlerUnregistrationCallback(void* data,
215                                                       Evas_Object* obj,
216                                                       void* eventInfo);
217
218     static void contentHandlerRegistrationCallback(void* data,
219                                                    Evas_Object* obj,
220                                                    void* eventInfo);
221     static void contentHandlerIsRegisteredCallback(void* data,
222                                                    Evas_Object* obj,
223                                                    void* eventInfo);
224     static void contentHandlerUnregistrationCallback(void* data,
225                                                      Evas_Object* obj,
226                                                      void* eventInfo);
227     static Eina_Bool exceededDatabaseQuotaCallback(Evas_Object* obj,
228                                                    Ewk_Security_Origin* origin,
229                                                    const char* databaseName,
230                                                    unsigned long long expectedQuota,
231                                                    void* data);
232     static Eina_Bool exceededIndexedDatabaseQuotaCallback(Evas_Object* obj,
233                                                           Ewk_Security_Origin* origin,
234                                                           long long expectedQuota,
235                                                           void* data);
236     static Eina_Bool exceededLocalFileSystemQuotaCallback(Evas_Object* obj,
237                                                           Ewk_Security_Origin* origin,
238                                                           long long expectedQuota,
239                                                           void* data);
240     static void certificateConfirmRequestCallback(
241         void* data,
242         Evas_Object* obj,
243         void* eventInfo);
244     static void authenticationChallengeRequestCallback(
245         void* data,
246         Evas_Object* obj,
247         void* eventInfo);
248
249     static void viewFrameRenderedCallback(
250         void* data,
251         Evas_Object* obj,
252         void* eventInfo);
253
254     static void mediacontrolRotateHorizontal(void* data,
255                                              Evas_Object* obj,
256                                              void* eventInfo);
257     static void mediacontrolRotateVertical(void* data,
258                                            Evas_Object* obj,
259                                            void* eventInfo);
260     static void mediacontrolRotateExit(void* data,
261                                        Evas_Object* obj,
262                                        void* eventInfo);
263     static void popupReplyWaitStart(void* data,
264                                     Evas_Object* obj,
265                                     void* eventInfo);
266     static void popupReplyWaitFinish(void* data,
267                                      Evas_Object* obj,
268                                      void* eventInfo);
269
270     void attachToCustomHandlersDao();
271     void detachFromCustomHandlersDao();
272
273     // JS execute callback
274     static void didRunJavaScriptCallback(
275         Evas_Object* obj,
276         const char* result,
277         void* userData);
278
279     // event callback
280     static void eaKeyCallback(void* data,
281                               Evas_Object* obj,
282                               void* eventInfo);
283
284     // idler callback
285     static Eina_Bool windowCloseIdlerCallback(void *data);
286
287     // timer callback
288     static Eina_Bool orientationThresholdTimerCallback(void* data);
289
290     // security
291     void requestUrlBlocked(const std::string& blockedUrl);
292
293     // window
294     void windowClose(void);
295
296     // system settings
297     static void systemSettingsChangedCallback(system_settings_key_e key, void* data);
298
299     Ewk_Context* m_ewkContext;
300     bool m_attachedToCustomHandlerDao;
301     std::list<Evas_Object*> m_ewkViewList;
302     Evas_Object* m_currentEwkView;
303     Evas_Object* m_closedEwkView;
304     Evas_Object* m_window;
305     WidgetModel* m_model;
306     std::string m_blockedUri;
307     std::string m_theme;
308     std::string m_startUrl;
309     WRT::UserDelegatesPtr m_cbs;
310     size_t m_imeWidth;
311     size_t m_imeHeight;
312     bool m_isBackgroundReload;
313     bool m_isBackgroundSupport;
314     int m_rotateAngle;
315     int m_deferredRotateAngle;
316     Ecore_Timer* m_orientationThresholdTimer;
317     bool m_isPopupReplyWait;
318     bool m_isFullscreenByPlatform;
319
320     std::unique_ptr<ViewModule::AppsSupport> m_appsSupport;
321     std::unique_ptr<ViewModule::VibrationSupport> m_vibrationSupport;
322     std::unique_ptr<ViewModule::SecurityOriginSupport> m_securityOriginSupport;
323     std::unique_ptr<ViewModule::CertificateSupport> m_certificateSupport;
324     std::unique_ptr<ViewModule::WebNotificationSupport> m_webNotificationSupport;
325
326     static std::map<const std::string, const Evas_Smart_Cb> m_ewkCallbacksMap;
327 };
328
329 #endif //VIEW_LOGIC_H_