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