Update wrt_0.8.90
[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
27 //#include "view_logic.h"
28
29 #include <memory>
30 #include <dpl/log/log.h>
31 #include <dpl/assert.h>
32
33 #include <widget_model.h>
34 #include <i_runnable_widget_object.h>
35 #include <common/view_logic_apps_support.h>
36 #include <common/view_logic_vibration_support.h>
37
38 #include <WebKit2.h>
39 #include <EWebKit2.h>
40
41 class SchemeSupport;
42
43 class ViewLogic : public ViewModule::IViewModule
44 {
45   public:
46     void createWebView(Ewk_Context* context,
47                        Evas_Object* window);
48     void destroyWebView();
49     void initialize();
50     void terminate();
51     void prepareView(WidgetModel* m, const std::string &startUrl);
52     void showWidget();
53     void hideWidget();
54     void suspendWidget();
55     void resumeWidget();
56     void resetWidget();
57     void goBack();
58     Evas_Object* getCurrentWebview();
59     void setUserCallbacks(WRT::UserCallbacksPtr cbs, void *data);
60
61     // Ewk_Context operations
62     void initializeEwkContext(Ewk_Context* context);
63     void finalizeEwkContext();
64     ViewLogic();
65     virtual ~ViewLogic();
66
67   private:
68     void initializeSupport();
69     void initializePluginLoading();
70
71     // EwkView operations
72     void ewkClientInit(Evas_Object *wkView);
73     void ewkClientDeinit(Evas_Object *wkView);
74     void createEwkView();
75     void setStartPage();
76     void prepareEwkView(Evas_Object *wkView);
77     void removeEwkView(Evas_Object *wkView);
78     void resumeEwkView(Evas_Object *wkView);
79     void suspendEwkView(Evas_Object *wkView);
80     void resumeWebkit(Evas_Object *wkView);
81     void suspendWebkit(Evas_Object *wkView);
82
83     // message from injected bundle Callback
84     static void contextMessageFromInjectedBundleCallback(
85             const char* name,
86             const char* body,
87             char** returnData,
88             void* userData);
89
90     // EWK Context Callback
91     static void didStartDownloadCallback(
92             const char* downloadUrl,
93             void* data);
94
95     // WKPageLoaderClient Callback
96     static void didStartProvisionalLoadForFrameCallback(
97             WKPageRef page,
98             WKFrameRef frame,
99             WKTypeRef userData,
100             const void *clientInfo);
101     static void didFinishLoadForFrameCallback(
102             WKPageRef page,
103             WKFrameRef frame,
104             WKTypeRef userData,
105             const void *clientInfo);
106     static void didReceiveTitleForFrameCallback(
107             WKPageRef page,
108             WKStringRef title,
109             WKFrameRef frame,
110             WKTypeRef userData,
111             const void* clientinfo);
112     static void didStartProgressCallback(
113             WKPageRef page,
114             const void* clientinfo);
115     static void didChangeProgressCallback(
116             WKPageRef page,
117             const void* clientinfo);
118     static void didFinishProgressCallback(
119             WKPageRef page,
120             const void* clientinfo);
121
122     // EWK Callback
123     static void createWindowCallback(
124             void* data,
125             Evas_Object* obj,
126             void* eventInfo);
127     static void closeWindowCallback(
128             void* data,
129             Evas_Object* obj,
130             void* eventInfo);
131
132     // WKPagePolicyClient Callback
133     static void pageDecidePolicyForNavigationActionCallback(
134             WKPageRef page,
135             WKFrameRef frame,
136             WKFrameNavigationType navigationType,
137             WKEventModifiers modifiers,
138             WKEventMouseButton mouseButton,
139             WKURLRequestRef request,
140             WKFramePolicyListenerRef listener,
141             WKTypeRef userData,
142             const void* clientinfo);
143     static void pageDecidePolicyForResponseCallback(
144             WKPageRef page,
145             WKFrameRef frame,
146             WKURLResponseRef response,
147             WKURLRequestRef request,
148             WKFramePolicyListenerRef listener,
149             WKTypeRef userData,
150             const void* clientinfo);
151     static void pageDecidePolicyForNewWindowActionCallback(
152             WKPageRef page,
153             WKFrameRef frame,
154             WKFrameNavigationType navigationType,
155             WKEventModifiers modifiers,
156             WKEventMouseButton mouseButton,
157             WKURLRequestRef request,
158             WKStringRef frameName,
159             WKFramePolicyListenerRef listener,
160             WKTypeRef userData,
161             const void* clientInfo);
162
163     // EWK ContextMenu Callback
164     static void contextmenuCustomizeCallback(
165             void* data,
166             Evas_Object* obj,
167             void* eventInfo);
168
169     // EWK FormClient Callback
170     static void formSubmitCallback(
171             void *data,
172             Evas_Object *obj,
173             void *eventInfo);
174
175     // EWK Geolocation Callback
176     static void geolocationPermissionRequestCallback(
177             void* data,
178             Evas_Object* obj,
179             void* eventInfo);
180
181     // EWK Notification Callback
182     static void notificationShowCallback(
183             void* data,
184             Evas_Object* obj,
185             void* eventInfo);
186     static void notificationCancelCallback(
187             void* data,
188             Evas_Object* obj,
189             void* eventInfo);
190     static void notificationPermissionRequestCallback(
191             void* data,
192             Evas_Object* obj,
193             void* eventInfo);
194
195     // EWK Vibration Callback
196     static void vibrationVibrateCallback(
197             void* data,
198             Evas_Object* obj,
199             void* eventInfo);
200     static void vibrationCancelCallback(
201             void* data,
202             Evas_Object* obj,
203             void* eventInfo);
204
205     // EWK Orientation Callback
206     static Eina_Bool orientationLockCallback(
207             Evas_Object* obj,
208             Eina_Bool needLock,
209             int orientation,
210             void* data);
211
212     // JS execute callback
213     static void didRunJavaScriptCallback(
214             Evas_Object* obj,
215             const char* result,
216             void* userData);
217
218     // UI callback
219     static void backButtonCallback(void* data,
220                                    Evas_Object* obj,
221                                    void* event_info);
222
223     // idler callback
224     static Eina_Bool windowCloseIdlerCallback(void *data);
225
226     // process crash callback
227     static void processDidCrashCallback(WKPageRef page,
228                                         const void* clientInfo);
229
230     // appcore event callback
231     static int appcoreLowMemoryCallback(void *data);
232
233     //bundle
234     void didRecieveMessageFromInjectedBundle(
235             const char* name,
236             const char* body);
237     void didReceiveSynchronousMessage(
238             const char* name,
239             const char* body,
240             char** returnData);
241
242     // security
243     DPL::Optional<DPL::String> requestWillSend(const DPL::String& str,
244                                                bool is_xhr);
245     std::string requestUriChanged(const DPL::String& changedURL);
246     void disconnectNetworkConnectionsFunction();
247
248     // window
249     void windowClose(void);
250
251
252     Ewk_Context* m_ewkContext;
253     std::list<Evas_Object*> m_ewkViewList;
254     Evas_Object* m_currentEwkView;
255     Evas_Object* m_window;
256     WidgetModel* m_model;
257     std::string m_currentUri;
258     std::string m_blockedUri;
259     bool m_emptyView;
260     std::string m_theme;
261     std::string m_startUrl;
262     WRT::UserCallbacksPtr m_cbs;
263     void* m_cbsData;
264
265     std::unique_ptr<SchemeSupport> m_schemeSupport;
266     std::unique_ptr<ViewModule::AppsSupport> m_appsSupport;
267     std::unique_ptr<ViewModule::VibrationSupport> m_vibrationSupport;
268 };
269
270 #endif //VIEW_LOGIC_H_