Suspend URL until view size is calculated
[framework/web/webkit-efl.git] / Source / WebKit2 / UIProcess / API / efl / EwkViewImpl.h
1 /*
2    Copyright (C) 2011 Samsung Electronics
3    Copyright (C) 2012 Intel Corporation. All rights reserved.
4
5     This library is free software; you can redistribute it and/or
6     modify it under the terms of the GNU Library General Public
7     License as published by the Free Software Foundation; either
8     version 2 of the License, or (at your option) any later version.
9
10     This library is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13     Library General Public License for more details.
14
15     You should have received a copy of the GNU Library General Public License
16     along with this library; see the file COPYING.LIB.  If not, write to
17     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18     Boston, MA 02110-1301, USA.
19 */
20
21 #ifndef EwkViewImpl_h
22 #define EwkViewImpl_h
23
24 #include "RefPtrEfl.h"
25 #include "WKEinaSharedString.h"
26 #include "WKRetainPtr.h"
27 #include <Evas.h>
28 #include <WebCore/TextDirection.h>
29 #include <WebCore/Timer.h>
30 #include <WebKit2/WKBase.h>
31 #include <wtf/HashMap.h>
32 #include <wtf/OwnPtr.h>
33 #include <wtf/RefPtr.h>
34 #include <wtf/text/WTFString.h>
35
36 #if ENABLE(TOUCH_EVENTS)
37 #include "ewk_touch.h"
38 #endif
39
40 #if USE(ACCELERATED_COMPOSITING)
41 #include <Evas_GL.h>
42 #endif
43
44 #if OS(TIZEN)
45 #include "JavaScriptPopup.h"
46 #include "OpenPanel.h"
47 #include "ewk_auth_challenge_private.h"
48 #include <JavaScriptCore/JSRetainPtr.h>
49 #include <WebCore/IntPoint.h>
50
51 #if ENABLE(TIZEN_GESTURE)
52 #include "GestureRecognizer.h"
53 #include "GestureClient.h"
54 #endif
55
56 #if ENABLE(TIZEN_WEBKIT2_INPUT_FIELD_ZOOM)
57 #include "InputFieldZoom.h"
58 #endif
59
60 #if ENABLE(TIZEN_INPUT_TAG_EXTENSION)
61 #include "InputPicker.h"
62 #endif
63
64 #if ENABLE(TIZEN_WEBKIT2_FOCUS_RING)
65 #include "FocusRing.h"
66 #endif
67
68 #if ENABLE(TIZEN_WEBKIT2_POPUP_INTERNAL)
69 #include "ewk_popup_picker.h"
70 #endif
71 #endif
72
73 #define EWK_VIEW_IMPL_GET(smartData, impl)                                     \
74     EwkViewImpl* impl = smartData->priv
75
76 #define EWK_VIEW_IMPL_GET_OR_RETURN(smartData, impl, ...)                      \
77     if (!smartData) {                                                          \
78         EINA_LOG_CRIT("smart data is null");                                   \
79         return __VA_ARGS__;                                                    \
80     }                                                                          \
81     EWK_VIEW_IMPL_GET(smartData, impl);                                        \
82     do {                                                                       \
83         if (!impl) {                                                           \
84             EINA_LOG_CRIT("no private data for object %p (%s)",                \
85                 smartData->self, evas_object_type_get(smartData->self));       \
86             return __VA_ARGS__;                                                \
87         }                                                                      \
88     } while (0)
89
90 namespace WebKit {
91 class FindClientEfl;
92 class FormClientEfl;
93 class InputMethodContextEfl;
94 class PageClientImpl;
95 class PageLoadClientEfl;
96 class PagePolicyClientEfl;
97 class PageUIClientEfl;
98 class PageViewportControllerClientEfl;
99 class PageViewportController;
100 class ResourceLoadClientEfl;
101 class WebPageProxy;
102 class WebPopupItem;
103 class WebPopupMenuProxyEfl;
104 }
105
106 namespace WebCore {
107 class Color;
108 class Cursor;
109 class IntRect;
110 class IntSize;
111 }
112
113 class Ewk_Back_Forward_List;
114 class Ewk_Context;
115 class Ewk_Download_Job;
116 class Ewk_Error;
117 class Ewk_Form_Submission_Request;
118 class Ewk_Intent;
119 class Ewk_Intent_Service;
120 class Ewk_Navigation_Policy_Decision;
121 class Ewk_Resource;
122 class Ewk_Settings;
123 class Ewk_Url_Request;
124 class Ewk_Url_Response;
125
126 typedef struct Ewk_View_Smart_Data Ewk_View_Smart_Data;
127
128 #if OS(TIZEN)
129 namespace WebCore {
130 class AffineTransform;
131 }
132
133 // FIXME: we have to include ewk_view.h instead of typedef,
134 // because there are "circular include" in the local code unlike open source,
135 // so we can not do typedef again here.
136 //typedef struct Ewk_View_Smart_Data Ewk_View_Smart_Data;
137 #include "ewk_view.h"
138
139 struct Ewk_View_Callback_Context {
140     union {
141         Ewk_Web_App_Capable_Get_Callback webAppCapableCallback;
142         Ewk_Web_App_Icon_URL_Get_Callback webAppIconURLCallback;
143         Ewk_Web_App_Icon_URLs_Get_Callback webAppIconURLsCallback;
144 #if ENABLE(TIZEN_WEB_STORAGE) && ENABLE(TIZEN_WEBKIT2_NUMBER_TYPE_SUPPORT)
145         Ewk_Web_Storage_Quota_Get_Callback webStorageQuotaCallback;
146 #endif
147         Ewk_View_Script_Execute_Callback scriptExecuteCallback;
148         Ewk_View_Plain_Text_Get_Callback plainTextGetCallback;
149 #if ENABLE(TIZEN_SUPPORT_MHTML)
150         Ewk_View_MHTML_Data_Get_Callback mhtmlDataGetCallback;
151 #endif
152         Ewk_View_JavaScript_Alert_Callback javascriptAlertCallback;
153         Ewk_View_JavaScript_Confirm_Callback javascriptConfirmCallback;
154         Ewk_View_JavaScript_Prompt_Callback javascriptPromptCallback;
155 #if ENABLE(TIZEN_SUPPORT_BEFORE_UNLOAD_CONFIRM_PANEL)
156         Ewk_View_Before_Unload_Confirm_Panel_Callback beforeUnloadConfirmPanelCallback;
157 #endif
158         Ewk_View_Open_Panel_Callback openPanelCallback;
159 #if ENABLE(TIZEN_APPLICATION_CACHE)
160         Ewk_View_Applicacion_Cache_Permission_Callback applicationCachePermissionCallback;
161 #endif
162 #if ENABLE(TIZEN_INDEXED_DATABASE)
163         Ewk_View_Exceeded_Indexed_Database_Quota_Callback exceededIndexedDatabaseQuotaCallback;
164 #endif
165 #if ENABLE(TIZEN_SQL_DATABASE)
166         Ewk_View_Exceeded_Database_Quota_Callback exceededDatabaseQuotaCallback;
167 #endif
168 #if ENABLE(TIZEN_FILE_SYSTEM)
169         Ewk_View_Exceeded_Local_File_System_Quota_Callback exceededLocalFileSystemQuotaCallback;
170 #endif
171     };
172
173     Evas_Object* ewkView;
174     void* userData;
175 };
176 typedef struct Ewk_View_Callback_Context Ewk_View_Callback_Context;
177 #endif
178
179 class EwkViewImpl {
180 public:
181     explicit EwkViewImpl(Evas_Object* view);
182     ~EwkViewImpl();
183
184     static EwkViewImpl* fromEvasObject(const Evas_Object* view);
185
186     inline Evas_Object* view() { return m_view; }
187     WKPageRef wkPage();
188     inline WebKit::WebPageProxy* page() { return pageProxy.get(); }
189     Ewk_Context* ewkContext() { return context.get(); }
190     Ewk_Settings* settings() { return m_settings.get(); }
191
192     WebCore::IntSize size() const;
193     bool isFocused() const;
194     bool isVisible() const;
195
196     const char* url() const { return m_url; }
197
198 #if ENABLE(TIZEN_WEBKIT2_SUSPEND_LOADING_URL)
199     const char* suspendedURL() { return m_suspendedURL; }
200     void setSuspendedURL(const char* url) { m_suspendedURL = url; }
201 #endif
202
203     const char* faviconURL() const { return m_faviconURL; }
204     const char* title() const;
205     WebKit::InputMethodContextEfl* inputMethodContext();
206
207     const char* themePath() const;
208     void setThemePath(const char* theme);
209     const char* customTextEncodingName() const;
210     void setCustomTextEncodingName(const char* encoding);
211
212     bool mouseEventsEnabled() const { return m_mouseEventsEnabled; }
213     void setMouseEventsEnabled(bool enabled);
214 #if ENABLE(TOUCH_EVENTS)
215     bool touchEventsEnabled() const { return m_touchEventsEnabled; }
216     void setTouchEventsEnabled(bool enabled);
217 #endif
218
219     void setCursor(const WebCore::Cursor& cursor);
220     void redrawRegion(const WebCore::IntRect& rect);
221     void setImageData(void* imageData, const WebCore::IntSize& size);
222
223 #if ENABLE(INPUT_TYPE_COLOR)
224     bool setColorPickerColor(const WebCore::Color& color);
225 #endif
226
227     static void addToPageViewMap(const Evas_Object* ewkView);
228     static void removeFromPageViewMap(const Evas_Object* ewkView);
229     static const Evas_Object* viewFromPageViewMap(const WKPageRef);
230
231 #if ENABLE(FULLSCREEN_API)
232     void enterFullScreen();
233     void exitFullScreen();
234 #endif
235
236 #if USE(ACCELERATED_COMPOSITING)
237     bool createGLSurface(const WebCore::IntSize& viewSize);
238     bool enterAcceleratedCompositingMode();
239     bool exitAcceleratedCompositingMode();
240 #endif
241
242 #if ENABLE(INPUT_TYPE_COLOR)
243     void requestColorPicker(int r, int g, int b, int a, WKColorPickerResultListenerRef listener);
244     void dismissColorPicker();
245 #endif
246
247     WKPageRef createNewPage();
248     void closePage();
249
250 #if ENABLE(TIZEN_MULTIPLE_SELECT)
251     void requestPopupMenu(WebKit::WebPopupMenuProxyEfl*, const WebCore::IntRect&, WebCore::TextDirection, double pageScaleFactor, const Vector<WebKit::WebPopupItem>& items, int32_t selectedIndex, bool);
252 #else
253     void requestPopupMenu(WebKit::WebPopupMenuProxyEfl*, const WebCore::IntRect&, WebCore::TextDirection, double pageScaleFactor, const Vector<WebKit::WebPopupItem>& items, int32_t selectedIndex);
254 #endif
255     void updateTextInputState();
256
257     void requestJSAlertPopup(const WKEinaSharedString& message);
258     bool requestJSConfirmPopup(const WKEinaSharedString& message);
259     WKEinaSharedString requestJSPromptPopup(const WKEinaSharedString& message, const WKEinaSharedString& defaultValue);
260
261     void informDownloadJobCancelled(Ewk_Download_Job* download);
262     void informDownloadJobFailed(Ewk_Download_Job* download, Ewk_Error* error);
263     void informDownloadJobFinished(Ewk_Download_Job* download);
264     void informDownloadJobRequested(Ewk_Download_Job* download);
265
266     void informNewFormSubmissionRequest(Ewk_Form_Submission_Request* request);
267     void informLoadError(Ewk_Error* error);
268     void informLoadFinished();
269     void informLoadProgress(double progress);
270     void informProvisionalLoadFailed(Ewk_Error* error);
271 #if USE(TILED_BACKING_STORE)
272     void informLoadCommitted();
273 #endif
274     void informProvisionalLoadRedirect();
275     void informProvisionalLoadStarted();
276
277     void informResourceLoadStarted(Ewk_Resource* resource, Ewk_Url_Request* request);
278     void informResourceLoadResponse(Ewk_Resource* resource, Ewk_Url_Response* response);
279     void informResourceLoadFailed(Ewk_Resource* resource, Ewk_Error* error);
280     void informResourceLoadFinished(Ewk_Resource* resource);
281     void informResourceRequestSent(Ewk_Resource* resource, Ewk_Url_Request* request, Ewk_Url_Response* redirectResponse);
282
283     void informNavigationPolicyDecision(Ewk_Navigation_Policy_Decision* decision);
284     void informNewWindowPolicyDecision(Ewk_Navigation_Policy_Decision* decision);
285     void informBackForwardListChange();
286
287     void informTitleChange(const String& title);
288     void informTooltipTextChange(const String& text);
289     void informTextFound(unsigned matchCount);
290     void informIconChange();
291     void informWebProcessCrashed();
292     void informContentsSizeChange(const WebCore::IntSize& size);
293     unsigned long long informDatabaseQuotaReached(const String& databaseName, const String& displayName, unsigned long long currentQuota, unsigned long long currentOriginUsage, unsigned long long currentDatabaseUsage, unsigned long long expectedUsage);
294     void informURLChange();
295
296 #if ENABLE(WEB_INTENTS)
297     void informIntentRequest(Ewk_Intent* ewkIntent);
298 #endif
299 #if ENABLE(WEB_INTENTS_TAG)
300     void informIntentServiceRegistration(Ewk_Intent_Service* ewkIntentService);
301 #endif
302
303 #if OS(TIZEN)
304 #if ENABLE(TIZEN_WEBKIT2_TILED_BACKING_STORE)
305     WebCore::AffineTransform transformFromView() const;
306     WebCore::AffineTransform transformToView() const;
307 #endif
308     WebCore::AffineTransform transformToScene() const;
309     WebCore::AffineTransform transformFromScene() const;
310     WebCore::AffineTransform transformToScreen() const;
311
312 #if ENABLE(TIZEN_WEBKIT2_SEPERATE_LOAD_PROGRESS)
313     void informLoadProgressStarted();
314     void informLoadProgressFinished();
315 #endif
316
317 #if ENABLE(TIZEN_DATALIST_ELEMENT)
318     void deleteDataList();
319 #endif
320
321 #if ENABLE(TIZEN_GEOLOCATION)
322     bool isValidLocationService();
323 #endif
324
325 #if USE(TILED_BACKING_STORE)
326     void setScaleFactor(float scaleFactor) { m_scaleFactor = scaleFactor; }
327     float scaleFactor() const { return m_scaleFactor; }
328
329     void setScrollPosition(WebCore::IntPoint position) { m_scrollPosition = position; }
330     const WebCore::IntPoint scrollPosition() const { return m_scrollPosition; }
331 #endif
332
333 #if ENABLE(TIZEN_GESTURE)
334 #if ENABLE(TOUCH_EVENTS)
335     void feedTouchEventsByType(Ewk_Touch_Event_Type);
336 #endif
337     void setDoubleTapEnabled(bool);
338 #endif
339
340 #if ENABLE(TIZEN_WEBKIT2_FOCUS_RING)
341     FocusRing* focusRing() { return m_focusRing.get(); }
342 #endif
343
344 #if ENABLE(TIZEN_FOCUS_UI)
345     static void pages(Vector<RefPtr<WebKit::WebPageProxy> >&);
346 #endif
347 #endif // #if OS(TIZEN)
348
349     // FIXME: Make members private for encapsulation.
350     OwnPtr<WebKit::PageClientImpl> pageClient;
351 #if ENABLE(WAIT_UPVERSION)
352 #if USE(TILED_BACKING_STORE)
353     OwnPtr<WebKit::PageViewportControllerClientEfl> pageViewportControllerClient;
354     OwnPtr<WebKit::PageViewportController> pageViewportController;
355 #endif
356 #endif
357     RefPtr<WebKit::WebPageProxy> pageProxy;
358     OwnPtr<WebKit::PageLoadClientEfl> pageLoadClient;
359     OwnPtr<WebKit::PagePolicyClientEfl> pagePolicyClient;
360     OwnPtr<WebKit::PageUIClientEfl> pageUIClient;
361     OwnPtr<WebKit::ResourceLoadClientEfl> resourceLoadClient;
362     OwnPtr<WebKit::FindClientEfl> findClient;
363     OwnPtr<WebKit::FormClientEfl> formClient;
364
365     OwnPtr<Ewk_Back_Forward_List> backForwardList;
366     RefPtr<Ewk_Context> context;
367
368     WebKit::WebPopupMenuProxyEfl* popupMenuProxy;
369     Eina_List* popupMenuItems;
370
371 #if USE(ACCELERATED_COMPOSITING)
372     Evas_GL* evasGl;
373     Evas_GL_Context* evasGlContext;
374     Evas_GL_Surface* evasGlSurface;
375 #endif
376
377 #if OS(TIZEN)
378 #if ENABLE(TIZEN_ORIENTATION_EVENTS)
379     int orientation;
380 #endif
381
382     JSGlobalContextRef javascriptGlobalContext;
383
384     WKEinaSharedString userAgent;
385
386 #if OS(TIZEN)
387     WKEinaSharedString applicationName;
388 #endif
389
390 #if ENABLE(TIZEN_SUPPORT_WEBAPP_META_TAG)
391     WKEinaSharedString webAppIconURL;
392     Eina_List* webAppIconURLs;
393 #endif
394
395     OwnPtr<Ewk_View_Callback_Context> alertContext;
396     OwnPtr<Ewk_View_Callback_Context> confirmContext;
397     OwnPtr<Ewk_View_Callback_Context> promptContext;
398
399 #if ENABLE(TIZEN_SUPPORT_BEFORE_UNLOAD_CONFIRM_PANEL)
400     OwnPtr<Ewk_View_Callback_Context> beforeUnloadConfirmPanelContext;
401 #endif
402
403     OwnPtr<Ewk_View_Callback_Context> openpanelContext;
404     OwnPtr<WebKit::JavaScriptPopup> javascriptPopup;
405     bool isWaitingForJavaScriptPopupReply;
406     OwnPtr<WebKit::OpenPanel> openPanel;
407
408 #if ENABLE(TIZEN_INPUT_TAG_EXTENSION)
409     OwnPtr<WebKit::InputPicker> inputPicker;
410     WKEinaSharedString inputValue;
411 #endif
412
413     Ewk_Auth_Challenge* authChallenge;
414     Ewk_Policy_Decision* policyDecision;
415     WKOpenPanelResultListenerRef openPanelListener;
416
417 #if ENABLE(TIZEN_CERTIFICATE_HANDLING)
418     Ewk_Certificate_Policy_Decision* certificatePolicyDecision;
419 #endif
420
421 #if ENABLE(TIZEN_MEDIA_STREAM)
422     Eina_List* userMediaPermissionRequests;
423 #endif
424
425 #if ENABLE(TIZEN_GEOLOCATION)
426     Eina_List* geolocationPermissionRequests;
427 #endif
428
429     bool suspendRequested;
430     bool suspendedPainting;
431     bool suspendedResources;
432
433 #if ENABLE(TIZEN_NOTIFICATIONS)
434     Eina_List* notifications;
435     Eina_List* notificationPermissionRequests;
436 #endif
437
438 #if ENABLE(TIZEN_WEBKIT2_POPUP_INTERNAL)
439     Ewk_Popup_Picker* popupPicker;
440 #endif
441
442     bool isVerticalEdge;
443     bool isHorizontalEdge;
444
445 #if ENABLE(TIZEN_GESTURE)
446     OwnPtr<WebKit::GestureRecognizer> gestureRecognizer;
447     OwnPtr<WebKit::GestureClient> gestureClient;
448 #if ENABLE(TOUCH_EVENTS)
449     Evas_Coord_Point touchDownPoint;
450     bool exceedTouchMoveThreshold;
451     bool wasHandledTouchStart;
452     bool wasHandledTouchMove;
453 #endif
454     bool holdHorizontalPanning;
455     bool holdVerticalPanning;
456 #endif // #if ENABLE(TIZEN_GESTURE)
457
458 #if ENABLE(TIZEN_WEBKIT2_INPUT_FIELD_ZOOM)
459     OwnPtr<WebKit::InputFieldZoom> inputFieldZoom;
460 #endif
461
462 #if ENABLE(TIZEN_WEBKIT2_TILED_SCROLLBAR)
463     bool mainFrameScrollbarVisibility;
464 #endif
465
466 #if ENABLE(TIZEN_RUNTIME_BACKEND_SELECTION)
467     Ecore_Animator* compositionAnimator;
468 #endif
469
470 #if ENABLE(TIZEN_WEBKIT2_TEXT_SELECTION)
471     WKEinaSharedString selectedText;
472 #endif
473
474 #if ENABLE(TIZEN_DATALIST_ELEMENT)
475     Eina_List* dataList;
476 #endif
477
478 #if ENABLE(TIZEN_SCREEN_ORIENTATION_SUPPORT_INTERNAL)
479     struct {
480         Ewk_Orientation_Lock_Cb callback;
481         void* data;
482     } orientationLock;
483 #endif
484
485 #if ENABLE(TIZEN_WEBKIT2_CREATE_VIEW_WITH_CREATED_PAGE_GROUP_WITH_IDENTIFIER)
486     RefPtr<WebKit::WebPageGroup> pageGroup;
487 #endif
488
489 #if ENABLE(TIZEN_APPLICATION_CACHE)
490     OwnPtr<Ewk_View_Callback_Context> applicationCachePermissionContext;
491     Ewk_Security_Origin* applicationCachePermissionOrigin;
492     bool isWaitingForApplicationCachePermission;
493 #endif
494 #if ENABLE(TIZEN_INDEXED_DATABASE)
495     OwnPtr<Ewk_View_Callback_Context> exceededIndexedDatabaseQuotaContext;
496 #endif
497 #if ENABLE(TIZEN_SQL_DATABASE)
498     OwnPtr<Ewk_View_Callback_Context> exceededDatabaseQuotaContext;
499 #endif
500 #if ENABLE(TIZEN_FILE_SYSTEM)
501     OwnPtr<Ewk_View_Callback_Context> exceededLocalFileSystemQuotaContext;
502 #endif
503     Ewk_Security_Origin* exceededQuotaOrigin;
504     bool isWaitingForExceededQuotaPopupReply;
505 #endif // #if OS(TIZEN)
506
507 private:
508     inline Ewk_View_Smart_Data* smartData() const;
509     void displayTimerFired(WebCore::Timer<EwkViewImpl>*);
510
511     static void onMouseDown(void* data, Evas*, Evas_Object*, void* eventInfo);
512     static void onMouseUp(void* data, Evas*, Evas_Object*, void* eventInfo);
513     static void onMouseMove(void* data, Evas*, Evas_Object*, void* eventInfo);
514 #if ENABLE(TOUCH_EVENTS)
515     void feedTouchEvents(Ewk_Touch_Event_Type type);
516     static void onTouchDown(void* /* data */, Evas* /* canvas */, Evas_Object* ewkView, void* /* eventInfo */);
517     static void onTouchUp(void* /* data */, Evas* /* canvas */, Evas_Object* ewkView, void* /* eventInfo */);
518     static void onTouchMove(void* /* data */, Evas* /* canvas */, Evas_Object* ewkView, void* /* eventInfo */);
519 #endif
520
521     Evas_Object* m_view;
522     OwnPtr<Ewk_Settings> m_settings;
523     RefPtr<Evas_Object> m_cursorObject;
524     WKEinaSharedString m_cursorGroup;
525     WKEinaSharedString m_faviconURL;
526     WKEinaSharedString m_url;
527
528 #if ENABLE(TIZEN_WEBKIT2_SUSPEND_LOADING_URL)
529     WKEinaSharedString m_suspendedURL;
530 #endif
531
532     mutable WKEinaSharedString m_title;
533     WKEinaSharedString m_theme;
534     mutable WKEinaSharedString m_customEncoding;
535     bool m_mouseEventsEnabled;
536 #if ENABLE(TOUCH_EVENTS)
537     bool m_touchEventsEnabled;
538 #endif
539     WKRetainPtr<WKColorPickerResultListenerRef> m_colorPickerResultListener;
540     WebCore::Timer<EwkViewImpl> m_displayTimer;
541     WTF::Vector <WebCore::IntRect> m_dirtyRects;
542     OwnPtr<WebKit::InputMethodContextEfl> m_inputMethodContext;
543
544     typedef HashMap<WKPageRef, const Evas_Object*> PageViewMap;
545     static PageViewMap pageViewMap;
546
547 #if OS(TIZEN)
548 #if USE(TILED_BACKING_STORE)
549     float m_scaleFactor;
550     WebCore::IntPoint m_scrollPosition;
551 #endif
552
553 #if ENABLE(TIZEN_WEBKIT2_FOCUS_RING)
554     OwnPtr<FocusRing> m_focusRing;
555 #endif
556 #endif
557 };
558
559 #endif // EwkViewImpl_h