The license change version 1.0 to version 1.1
[platform/framework/web/web-provider.git] / src / Core / View / WebView.h
1 /*
2  * Copyright (c) 2013 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  *    Licensed under the Flora License, Version 1.1 (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://floralicense.org/license/
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    WebView.h
18  * @author  Yunchan Cho (yunchan.cho@samsung.com)
19  */
20 #ifndef WEB_VIEW_H
21 #define WEB_VIEW_H
22
23 #include <string>
24 #include <map>
25 #include <Eina.h>
26 #include <Evas.h>
27 #include <ewk_context.h>
28 #include "IWebView.h"
29
30 #define EXPORT_CLASS __attribute__ ((visibility("default"))
31
32 class EXPORT_CLASS WebView: public IWebView {
33     public:
34         static IWebViewPtr create(Evas_Object* win, Ewk_Context* ewkContext)
35         {
36             if (!win || !ewkContext) {
37                 return IWebViewPtr();
38             }
39
40             return IWebViewPtr(new WebView(win, ewkContext));
41         }
42         virtual bool show(
43             std::string& startUrl, int width, int height,
44             WebViewCallback didCreateBaseWebView, void* data);
45         virtual bool hide();
46         virtual bool suspend();
47         virtual bool resume();
48         virtual ~WebView();
49
50     protected:
51         bool setBasicSetting(Evas_Object* webview);
52         bool unsetBasicSetting(Evas_Object* webview);
53         explicit WebView(Evas_Object* win, Ewk_Context* ewkContext);
54
55     private:
56         std::string validateUrl(std::string& url);
57
58         // webviw smart callbacks
59         static void loadStartedCallback(
60                 void* data, Evas_Object* obj, void* eventInfo);
61         static void loadFinishedCallback(
62                 void* data, Evas_Object* obj, void* eventInfo);
63         static void titleChangedCallback(
64                 void* data, Evas_Object* obj, void* eventInfo);
65         static void uriChangedCallback(
66                 void* data, Evas_Object* obj, void* eventInfo);
67         static void loadProgressCallback(
68                 void* data, Evas_Object* obj, void* eventInfo);
69         static void loadProgressFinishedCallback(
70                 void* data, Evas_Object* obj, void* eventInfo);
71         static void processCrashedCallback(
72                 void* data, Evas_Object* obj, void* eventInfo);
73         static void createWindowCallback(
74                 void* data, Evas_Object* obj, void* eventInfo);
75         static void closeWindowCallback(
76                 void* data, Evas_Object* obj, void* eventInfo);
77         static void policyNavigationDecideCallback(
78                 void* data, Evas_Object* obj, void* eventInfo);
79         static void policyNewWindowDecideCallback(
80                 void* data, Evas_Object* obj, void* eventInfo);
81         static void pageResponseDecideCallback(
82                 void* data, Evas_Object* obj, void* eventInfo);
83         static void contextmenuCustomizeCallback(
84                 void* data, Evas_Object* obj, void* eventInfo);
85         static void formSubmitCallback(
86                 void *data, Evas_Object *obj, void *eventInfo);
87         static void geolocationPermissionRequestCallback(
88                 void* data, Evas_Object* obj, void* eventInfo);
89         static void notificationShowCallback(
90                 void* data, Evas_Object* obj, void* eventInfo);
91         static void notificationCancelCallback(
92                 void* data, Evas_Object* obj, void* eventInfo);
93         static void notificationPermissionRequestCallback(
94                 void* data, Evas_Object* obj, void* eventInfo);
95         static void databaseUsagePermissionRequestCallback(
96                 void* data, Evas_Object* obj, void* eventInfo);
97         static void fileSystemPermissionRequestCallback(
98                 void* data, Evas_Object* obj, void* eventInfo);
99         static void enterFullscreenCallback(
100                 void* data, Evas_Object* obj, void* eventInfo);
101         static void exitFullscreenCallback(
102                 void* data, Evas_Object* obj, void* eventInfo);
103         static void imeChangedCallback(
104                 void* data, Evas_Object* obj, void* eventInfo);
105         static void imeOpenedCallback(
106                 void* data, Evas_Object* obj, void* eventInfo);
107         static void imeClosedCallback(
108                 void* data, Evas_Object* obj, void* eventInfo);
109         static void usermediaPermissionRequestCallback(
110                 void* data, Evas_Object* obj, void* eventInfo);
111         static void protocolHandlerRegistrationCallback(
112                 void* data, Evas_Object* obj, void* eventInfo);
113         static void protocolHandlerIsRegisteredCallback(
114                 void* data, Evas_Object* obj, void* eventInfo);
115         static void protocolHandlerUnregistrationCallback(
116                 void* data, Evas_Object* obj, void* eventInfo);
117         static void contentHandlerRegistrationCallback(
118                 void* data, Evas_Object* obj, void* eventInfo);
119         static void contentHandlerIsRegisteredCallback(
120                 void* data, Evas_Object* obj, void* eventInfo);
121         static void contentHandlerUnregistrationCallback(
122                 void* data, Evas_Object* obj, void* eventInfo);
123         static void certificateConfirmRequestCallback(
124             void* data, Evas_Object* obj, void* eventInfo);
125
126         // internal implementation for smart callbacks
127         virtual void didLoadStarted(Evas_Object* obj);
128         virtual void didLoadFinished(Evas_Object* obj);
129         virtual void didTitleChanged(Evas_Object* obj, void* eventInfo);
130         virtual void didUriChanged(Evas_Object* obj, void* eventInfo);
131         virtual void didLoadProgress(Evas_Object* obj, void* eventInfo);
132         virtual void didLoadProgressFinished(Evas_Object* obj);
133         virtual void didProcessCrashed(Evas_Object* obj); 
134         virtual void didCreateWindow(Evas_Object* obj, void* eventInfo);
135         virtual void didCloseWindow(Evas_Object* obj);
136         virtual void didPolicyNavigationDecide(Evas_Object* obj, void* eventInfo);
137         virtual void didPolicyNewWindowDecide(Evas_Object* obj, void* eventInfo);
138         virtual void didPageResponseDecide(Evas_Object* obj); 
139         virtual void didContextmenuCustomize(Evas_Object* obj, void* eventInfo);
140         virtual void didFormSubmit(Evas_Object* obj);
141         virtual void didGeolocationPermissionRequest(Evas_Object* obj, void* eventInfo);
142         virtual void didNotificationShow(Evas_Object* obj, void* eventInfo);
143         virtual void didNotificationCancel(Evas_Object* obj, void* eventInfo); 
144         virtual void didNotificationPermissionRequest(Evas_Object* obj, void* eventInfo);
145         virtual void didDatabaseUsagePermissionRequest(Evas_Object* obj, void* eventInfo);
146         virtual void didFilesystemPermissionRequest(Evas_Object* obj, void* eventInfo);
147         virtual void didEnterFullscreen(Evas_Object* obj);
148         virtual void didExitFullscreen(Evas_Object* obj);
149         virtual void didImeChanged(Evas_Object* obj, void* eventInfo);
150         virtual void didImeOpened(Evas_Object* obj);
151         virtual void didImeClosed(Evas_Object* obj);
152         virtual void didUsermediaPermissionRequest(Evas_Object* obj, void* eventInfo);
153         virtual void didProtocolHandlerRegistration(Evas_Object* obj, void* eventInfo);
154         virtual void didProtocolHandlerIsRegistered(Evas_Object* obj, void* eventInfo);
155         virtual void didProtocolHandlerUnregistration(Evas_Object* obj, void* eventInfo);
156         virtual void didContentHandlerRegistration(Evas_Object* obj, void* eventInfo);
157         virtual void didContentHandlerIsRegistered(Evas_Object* obj, void* eventInfo);
158         virtual void didContentHandlerUnregistration(Evas_Object* obj, void* eventInfo);
159         virtual void didCertificateConfirmRequest(Evas_Object* obj, void* eventInfo);
160
161         // orientation lock
162         static Eina_Bool orientationLockCallback(
163                 Evas_Object* obj, Eina_Bool needLock, int orientation, void* data);
164         static void executeScriptCallback(Evas_Object* obj, const char* result, void* data);
165
166         static std::map<const std::string, const Evas_Smart_Cb> m_smartCallbacksMap;
167
168         // members
169         Evas_Object* m_topWebview;
170         std::string m_startUrl;
171         Evas_Object* m_win;
172         Ewk_Context* m_ewkContext;
173 };
174
175 #endif // WEB_VIEW_H