2 * Copyright (c) 2013 Samsung Electronics Co., Ltd All Rights Reserved
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
8 * http://floralicense.org/license/
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.
18 * @author Yunchan Cho (yunchan.cho@samsung.com)
27 #include <ewk_context.h>
30 #define EXPORT_CLASS __attribute__ ((visibility("default"))
32 class EXPORT_CLASS WebView: public IWebView {
34 static IWebViewPtr create(Evas_Object* win, Ewk_Context* ewkContext)
36 if (!win || !ewkContext) {
40 return IWebViewPtr(new WebView(win, ewkContext));
43 std::string& startUrl, int width, int height,
44 WebViewCallback didCreateBaseWebView, void* data);
46 virtual bool suspend();
47 virtual bool resume();
51 bool setBasicSetting(Evas_Object* webview);
52 bool unsetBasicSetting(Evas_Object* webview);
53 explicit WebView(Evas_Object* win, Ewk_Context* ewkContext);
56 std::string validateUrl(std::string& url);
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);
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);
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);
166 static std::map<const std::string, const Evas_Smart_Cb> m_smartCallbacksMap;
169 Evas_Object* m_topWebview;
170 std::string m_startUrl;
172 Ewk_Context* m_ewkContext;