Merge "Patch for PluginLogic pre-initializing."
[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
37 #include <EWebKit2.h>
38
39 class SchemeSupport;
40 namespace ViewModule {
41 class SecurityOriginSupport;
42 }
43
44 class ViewLogic : public ViewModule::IViewModule
45 {
46   public:
47     ViewLogic();
48     virtual ~ViewLogic();
49
50     void createWebView(Ewk_Context* context,
51                        Evas_Object* window);
52     void destroyWebView();
53     void initialize();
54     void terminate();
55     void prepareView(WidgetModel* m, const std::string &startUrl);
56     void showWidget();
57     void hideWidget();
58     void suspendWidget();
59     void resumeWidget();
60     void resetWidget();
61     void backward();
62     void reloadStartPage();
63     Evas_Object* getCurrentWebview();
64     void fireJavascriptEvent(int event, void* data);
65     void setUserCallbacks(const WRT::UserDelegatesPtr& cbs);
66
67     // Ewk_Context operations
68     void initializeEwkContext(Ewk_Context* context);
69     void finalizeEwkContext();
70
71   private:
72     void initializeSupport();
73     void initializePluginLoading();
74
75     // EwkView operations
76     void ewkClientInit(Evas_Object *wkView);
77     void ewkClientDeinit(Evas_Object *wkView);
78     void createEwkView(Evas* canvas);
79     void setStartPage();
80     void prepareEwkView(Evas_Object *wkView);
81     void removeEwkView(Evas_Object *wkView);
82     void resumeEwkView(Evas_Object *wkView);
83     void suspendEwkView(Evas_Object *wkView);
84     void resumeWebkit(Evas_Object *wkView);
85     void suspendWebkit(Evas_Object *wkView);
86
87     // message from injected bundle Callback
88     static void contextMessageFromInjectedBundleCallback(
89             const char* name,
90             const char* body,
91             char** returnData,
92             void* userData);
93
94     // EWK Context Callback
95     static void didStartDownloadCallback(
96             const char* downloadUrl,
97             void* data);
98
99     // WKPageLoaderClient
100     static void loadStartedCallback(
101             void* data,
102             Evas_Object* obj,
103             void* eventInfo);
104     static void loadFinishedCallback(
105             void* data,
106             Evas_Object* obj,
107             void* eventInfo);
108     static void titleChangedCallback(
109             void* data,
110             Evas_Object* obj,
111             void* eventInfo);
112     static void loadProgressCallback(
113             void* data,
114             Evas_Object* obj,
115             void* eventInfo);
116     static void loadProgressFinishedCallback(
117             void* data,
118             Evas_Object* obj,
119             void* eventInfo);
120     static void processCrashedCallback(
121             void* data,
122             Evas_Object* obj,
123             void* eventInfo);
124
125     // EWK Callback
126     static void createWindowCallback(
127             void* data,
128             Evas_Object* obj,
129             void* eventInfo);
130     static void closeWindowCallback(
131             void* data,
132             Evas_Object* obj,
133             void* eventInfo);
134
135     // EWK PolicyDecide Callback
136     static void policyNavigationDecideCallback(
137             void* data,
138             Evas_Object* obj,
139             void* eventInfo);
140     static void policyNewWindowDecideCallback(
141             void* data,
142             Evas_Object* obj,
143             void* eventInfo);
144     static void pageResponseDecideCallback(
145             void* data,
146             Evas_Object* obj,
147             void* eventInfo);
148
149     // EWK ContextMenu Callback
150     static void contextmenuCustomizeCallback(
151             void* data,
152             Evas_Object* obj,
153             void* eventInfo);
154
155     // EWK FormClient Callback
156     static void formSubmitCallback(
157             void *data,
158             Evas_Object *obj,
159             void *eventInfo);
160
161     // EWK Geolocation Callback
162     static void geolocationPermissionRequestCallback(
163             void* data,
164             Evas_Object* obj,
165             void* eventInfo);
166
167     // EWK Notification Callback
168     static void notificationShowCallback(
169             void* data,
170             Evas_Object* obj,
171             void* eventInfo);
172     static void notificationCancelCallback(
173             void* data,
174             Evas_Object* obj,
175             void* eventInfo);
176     static void notificationPermissionRequestCallback(
177             void* data,
178             Evas_Object* obj,
179             void* eventInfo);
180
181     // EWK Vibration Callback
182     static void vibrationVibrateCallback(
183             void* data,
184             Evas_Object* obj,
185             void* eventInfo);
186     static void vibrationCancelCallback(
187             void* data,
188             Evas_Object* obj,
189             void* eventInfo);
190
191     // EWK Orientation Callback
192     static Eina_Bool orientationLockCallback(
193             Evas_Object* obj,
194             Eina_Bool needLock,
195             int orientation,
196             void* data);
197
198     // EWK Fullscreen API callbacks
199     static void enterFullscreenCallback(
200             void* data,
201             Evas_Object* obj,
202             void* eventInfo);
203     static void exitFullscreenCallback(
204             void* data,
205             Evas_Object* obj,
206             void* eventInfo);
207
208     // EWK IME Change/Show/Hide Callback
209     static void imeChangedCallback(
210             void* data,
211             Evas_Object* obj,
212             void* eventInfo);
213     static void imeOpenedCallback(
214             void* data,
215             Evas_Object* obj,
216             void* eventInfo);
217     static void imeClosedCallback(
218             void* data,
219             Evas_Object* obj,
220             void* eventInfo);
221
222     // EWK Usermedia Callback
223     static void usermediaPermissionRequestCallback(
224             void* data,
225             Evas_Object* obj,
226             void* eventInfo);
227
228     // custom content/scheme handlers
229     static void protocolHandlerRegistrationCallback(void* data,
230             Evas_Object* obj,
231             void* eventInfo);
232     static void protocolHandlerIsRegisteredCallback(void* data,
233             Evas_Object* obj,
234             void* eventInfo);
235     static void protocolHandlerUnregistrationCallback(void* data,
236             Evas_Object* obj,
237             void* eventInfo);
238
239     static void contentHandlerRegistrationCallback(void* data,
240             Evas_Object* obj,
241             void* eventInfo);
242     static void contentHandlerIsRegisteredCallback(void* data,
243             Evas_Object* obj,
244             void* eventInfo);
245     static void contentHandlerUnregistrationCallback(void* data,
246             Evas_Object* obj,
247             void* eventInfo);
248
249     // database usage permission request callback
250     static void databaseUsagePermissionRequestCallback(
251         void* data,
252         Evas_Object* obj,
253         void* eventInfo);
254     // file System Permission Request Callback
255     static void fileSystemPermissionRequestCallback(
256         void* data,
257         Evas_Object* obj,
258         void* eventInfo);
259
260     void attachToCustomHandlersDao();
261     void detachFromCustomHandlersDao();
262
263     // JS execute callback
264     static void didRunJavaScriptCallback(
265             Evas_Object* obj,
266             const char* result,
267             void* userData);
268
269     // idler callback
270     static Eina_Bool windowCloseIdlerCallback(void *data);
271
272     // appcore event callback
273     static int appcoreLowMemoryCallback(void *data);
274
275     //bundle
276     void didRecieveMessageFromInjectedBundle(
277             const char* name,
278             const char* body);
279     void didReceiveSynchronousMessage(
280             const char* name,
281             const char* body,
282             char** returnData);
283
284     // security
285     void rememberBlockedURI(const DPL::String& str);
286     std::string requestUriChanged(const DPL::String& changedURL);
287
288     // window
289     void windowClose(void);
290
291     Ewk_Context* m_ewkContext;
292     std::list<Evas_Object*> m_ewkViewList;
293     Evas_Object* m_currentEwkView;
294     Evas_Object* m_closedEwkView;
295     Evas_Object* m_window;
296     WidgetModel* m_model;
297     std::string m_currentUri;
298     std::string m_blockedUri;
299     std::string m_theme;
300     std::string m_startUrl;
301     WRT::UserDelegatesPtr m_cbs;
302     size_t m_imeWidth;
303     size_t m_imeHeight;
304     bool m_isBackgroundReload;
305
306     std::unique_ptr<SchemeSupport> m_schemeSupport;
307     std::unique_ptr<ViewModule::AppsSupport> m_appsSupport;
308     std::unique_ptr<ViewModule::VibrationSupport> m_vibrationSupport;
309     std::unique_ptr<ViewModule::SecurityOriginSupport> m_securityOriginSupport;
310     bool m_attachedToCustomHandlerDao;
311
312     static std::map<const std::string, const Evas_Smart_Cb> m_ewkCallbacksMap;
313 };
314
315 #endif //VIEW_LOGIC_H_