fix bug for rotation
[framework/osp/web.git] / src / controls / inc / FWebCtrl_WebImpl.h
1 //
2 // Open Service Platform
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //     http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17
18 /**
19  * @file                FWebCtrl_WebImpl.h
20  * @brief               The file contains the declaration of _WebImpl class.
21  *
22  * The file contains the declaration of _WebImpl class.
23  */
24 #ifndef _FWEB_CTRL_INTERNAL_WEB_IMPL_H_
25 #define _FWEB_CTRL_INTERNAL_WEB_IMPL_H_
26
27 #include <unique_ptr.h>
28 #include <EWebKit2.h>
29 #include <FBaseColArrayList.h>
30 #include <FBaseString.h>
31 #include <FCntIDownloadListener.h>
32 #include <FUiIActionEventListener.h>
33 #include <FUiIOrientationEventListener.h>
34 #include <FUiITextEventListener.h>
35 #include <FWebCtrlILoadingListener.h>
36 #include <FUi_ContainerImpl.h>
37 #include "FWebCtrl_CertificateConfirmPopup.h"
38 #include "FWebCtrl_IWebEventListener.h"
39 #include "FWebCtrl_UserConfirmPopup.h"
40
41 namespace Tizen { namespace Base {  namespace Collection
42 {
43 template< class KeyType, class ValueType > class HashMapT;
44 }}} // Tizen::Base::Collection
45
46 namespace Tizen { namespace Base { namespace Runtime
47 {
48 class Mutex;
49 }}} // Tizen::Base::Runtime
50
51 namespace Tizen { namespace Graphics
52 {
53 class Dimension;
54 class Point;
55 class Rectangle;
56 }} // Tizen::Graphics
57
58 namespace Tizen { namespace Net { namespace Http {
59 class HttpHeader;
60 }}} // Tizen::Net::Http
61
62 namespace Tizen { namespace System
63 {
64 class _VibratorImpl;
65 }} // Tizen::Sytem
66
67 namespace Tizen { namespace Ui
68 {
69 class Contorl;
70 class _Contorl;
71 class _ContorlImpl;
72 }} // Tizen::Ui
73
74 namespace Tizen { namespace Ui {  namespace Controls
75 {
76 class Keypad;
77 class _Form;
78 }}} // Tizen::Ui::Controls
79
80 namespace Tizen { namespace Web { namespace Json
81 {
82 class IJsonValue;
83 }}} // Tizen::Web::Json
84
85 namespace Tizen { namespace Web { namespace Controls
86 {
87 _OSP_EXPORT_ extern const char WEB_CTRL[];
88
89 class IJavaScriptBridge;
90 class ILoadingListener;
91 class ITextSearchListener;
92 class IWebDownloadListener;
93 class IWebKeypadEventListener;
94 class IWebUiEventListener;
95 class IWebUiEventListenerF;
96 class AuthenticationChallenge;
97 class HitElementResult;
98 class PageNavigationList;
99 class Web;
100 class WebSetting;
101 class _Web;
102 class _JsBridgeArg;
103 class _WebEvent;
104 class _WebPresenter;
105 class _JsBridgeComparer;
106 class _JsBridgeHashCodeProvider;
107 class _AuthConfirmPopup;
108 class _PromptPopup;
109 class _GeolocationConfirmPopup;
110 class _WebDataHandler;
111 class _SelectBox;
112 class _InputPickerPopup;
113 class _FormDataWindow;
114 class _WebNotification;
115
116 struct _TextSearch
117 {
118         bool __searchAll;
119         bool __searchForward;
120         bool __caseSensitive;
121         int __pending;
122         int __currentIndex;
123         int __totalCount;
124         Tizen::Base::String __text;
125         Tizen::Base::Collection::Queue __searchQueue;
126 };
127
128 enum _SearchType {
129         SEARCH_SYNC,
130         SEARCH_ALL_ASYNC,
131         SEARCH_NEXT_ASYNC
132 };
133
134 enum _WebPopupCloseId
135 {
136         ID_CERTIFICATE_CONFIRM_POPUP_CLOSE,
137         ID_PROMPT_POPUP_CLOSE,
138         ID_USER_CONFIRM_USERMEDIA_CLOSE,
139         ID_USER_CONFIRM_GEOLOCATION_CLOSE,
140         ID_USER_CONFIRM_NOTIFICATION_CLOSE,
141         ID_USER_SCRIPT_ALERT_CLOSE
142 };
143
144 class _OSP_EXPORT_ _WebImpl
145         : public Tizen::Ui::_ContainerImpl
146         , public Tizen::Ui::ITextEventListener
147         , public Tizen::Web::Controls::_IWebEventListener
148         , public Tizen::Content::IDownloadListener
149 {
150 public:
151         _WebImpl(Web* pWeb, Tizen::Ui::_Control* pCore);
152
153         virtual ~_WebImpl(void);
154
155         result Construct(void);
156
157         bool HasValidNativeNode(void) const;
158
159         result SetZoomLevel(float level);
160
161         float GetZoomLevel(void) const;
162
163         result LoadUrl(const Tizen::Base::String& url) const;
164
165         result LoadUrl(const Tizen::Base::String& url, const Tizen::Net::Http::HttpHeader& header);
166
167         result LoadUrlWithPostRequest(const Tizen::Base::String& url, const Tizen::Net::Http::HttpHeader& header, const Tizen::Base::ByteBuffer& body) const;
168
169         result LoadData(const Tizen::Base::String& baseUrl, const Tizen::Base::ByteBuffer& content, const Tizen::Base::String& mime, const Tizen::Base::String& encoding) const;
170
171         bool CanGoBack(void) const;
172
173         bool CanGoForward(void) const;
174
175         void GoBack(void) const;
176
177         void GoForward(void) const;
178
179         bool IsLoading(void) const;
180
181         void StopLoading(void) const;
182
183         void Reload(void) const;
184
185         bool SearchText(const Tizen::Base::String& word, bool searchForward);
186
187         result SetSetting(const Tizen::Web::Controls::WebSetting& setting);
188
189         Tizen::Web::Controls::WebSetting GetSetting(void) const;
190
191         Tizen::Base::String GetUrl(void) const;
192
193         Tizen::Base::String GetTitle(void) const;
194
195         result SetBlockSelectionPosition(const Tizen::Graphics::Point& startPoint);
196
197         result SetBlockSelectionPosition(const Tizen::Graphics::FloatPoint& startPoint);
198
199         void ReleaseBlock(void);
200
201         void  GetBlockRange(Tizen::Graphics::Point& startPoint, Tizen::Graphics::Point& endPoint) const;
202
203         void  GetBlockRange(Tizen::Graphics::FloatPoint& startPoint, Tizen::Graphics::FloatPoint& endPoint) const;
204
205         Tizen::Base::String GetTextFromBlock(void) const;
206
207         Tizen::Base::String* EvaluateJavascriptN(const Tizen::Base::String& scriptCode);
208
209         bool IsPrivateBrowsingEnabled(void) const;
210
211         void SetPrivateBrowsingEnabled(bool enable);
212
213         void ClearHistory(void);
214
215         void ClearCache(void);
216
217         void ClearCookie(void);
218
219         void ClearFormData(void);
220
221         void ClearLoginFormData(void);
222
223         bool IsCookieEnabled(void) const;
224
225         void SetCookieEnabled(bool enable);
226
227         result SavePageAsPdf(const Tizen::Base::String& filePath, const Tizen::Graphics::Dimension* pSize) const;
228
229         bool IsMimeSupported(const Tizen::Base::String& mime) const;
230
231         result SearchTextAllAsync(const Tizen::Base::String& text, bool caseSensitive);
232
233         result SearchNextAsync(bool searchForward);
234
235         result SynchronizeSearch(_SearchType type, Evas_Object* pView, Ewk_Find_Options condition, const Tizen::Base::String& text
236                 , bool searchForward, bool caseSensitive = false,  _WebPresenter* pWebPresenter = null);
237
238         void SetAsyncSearchResult(int totalCount);
239
240         _WebPresenter* GetSearchPresenter(void);
241
242          int GetPendingAsyncSearchCount(void) const;
243
244         void CalculateAsyncSearchOrdinal(void);
245
246         int GetAsyncSearchOrdinal(void) const;
247
248         void DisableAsyncSearch(void);
249
250         void SetTextSearchListener(Tizen::Web::Controls::ITextSearchListener* pTextSearchListener);
251
252         void SetLoadingListener(Tizen::Web::Controls::ILoadingListener* pLoadingListener);
253
254         void SetWebUiEventListener(Tizen::Web::Controls::IWebUiEventListener* pUiEventListener);
255
256         void SetWebUiEventListenerF(Tizen::Web::Controls::IWebUiEventListenerF* pUiEventListener);
257
258         void SetWebKeypadEventListener(IWebKeypadEventListener* pKeypadEventListener);
259
260         void SetDownloadListener(Tizen::Web::Controls::IWebDownloadListener* pDownLoadListener);
261
262         Tizen::Web::Controls::ILoadingListener* GetLoadingListener(void) const;
263
264         Tizen::Web::Controls::IWebUiEventListener* GetUiEventListener(void) const;
265
266         Tizen::Web::Controls::IWebUiEventListenerF* GetUiEventListenerF(void) const;
267
268         Tizen::Web::Controls::ITextSearchListener* GetTextSearchListener(void) const;
269
270         Tizen::Web::Controls::IWebKeypadEventListener* GetWebKeypadEventListener(void) const;
271
272         const Tizen::Web::Controls::PageNavigationList* GetBackForwardListN(void) const;
273
274         const Tizen::Web::Controls::HitElementResult* GetElementByPointN(const Tizen::Graphics::Point& point) const;
275
276         const Tizen::Web::Controls::HitElementResult* GetElementByPointN(const Tizen::Graphics::FloatPoint& point) const;
277
278         result AddJavaScriptBridge(const IJavaScriptBridge& jsBridge);
279
280         result RemoveJavaScriptBridge(const IJavaScriptBridge& jsBridge);
281
282         void SetScrollEnabled(bool enable);
283
284         bool IsScrollEnabled(void) const;
285
286         Tizen::Graphics::Bitmap* GetFaviconN(void) const;
287
288         void Pause(void);
289
290         void Resume(void);
291
292         void ScrollBy(const Tizen::Graphics::Point& diff);
293
294         void ScrollTo(const Tizen::Graphics::Point& dest);
295
296         Tizen::Graphics::Point GetScrollPosition(void) const;
297
298         Tizen::Graphics::Dimension GetPageSize(void) const;
299
300         result AddHttpHeaderField(const Tizen::Base::String& name, const Tizen::Base::String& value);
301
302         result RemoveHttpHeaderField(const Tizen::Base::String& name);
303
304         virtual bool IsLayoutable(void) const;
305
306         void SetEventListenerCallback(void) const;
307
308         void RemoveEventListenerCallback(void) const;
309
310         _WebEvent* GetWebEvent(void) const;
311
312         _WebDataHandler* GetDownloadHandler(void) const;
313
314         result SetFullScreenKeypad(void);
315
316         void RemoveFullScreenKeypad(void);
317
318         void SetCurrentEvent(Tizen::Base::Runtime::IEventArg* arg);
319
320         void SetLoadingErrorOccurred(bool arg);
321
322         bool IsLoadingErrorOccurred(void) const;
323
324         void SetRedirectRequested(bool arg);
325
326         bool IsRedirectRequested(void) const;
327
328         void SetCertificateRequested(bool arg);
329         bool IsCertificateRequested(void) const;
330         void SetCertificateConfirmed(bool arg);
331         bool IsCertificateConfirmed(void) const;
332         void ClearCertificateDb(void);
333
334         void SetOrientationChanged(bool arg);
335         bool IsOrientationChanged(void) const;
336
337         result VibrationRequested(uint64_t duration);
338         void VibrationCanceled(void);
339
340         bool IsFooterVisible(void) const;
341
342         void SetFooterVisibleState(bool isFooterVisible);
343
344         bool IsKeypadVisible(void) const;
345
346         void SetKeypadVisibleState(bool isKeypadVisible);
347
348         bool IsKeypadOpened(void) const;
349
350         void SetKeypadOpened(bool isKeypadOpened);
351
352         bool IsPresenterAlived(_WebPresenter* pPresenter) const;
353         Tizen::Graphics::Rectangle GetPreviousKeypadBounds(void) const;
354
355         void SetPreviousKeypadBounds(Tizen::Graphics::Rectangle& bounds);
356
357         result HttpAuthenticationRequested(Ewk_Auth_Challenge* pChallenge);
358
359         result ShowCertificateConfirmPopup(_CertificatePopupMode userConfirmMode, Ewk_Certificate_Policy_Decision *pPolicy);
360
361         result ShowPromptPopup(Tizen::Base::String msg = L"", Tizen::Base::String defVal = L"");
362
363         result ShowUserConfirmPopup(_UserConfirmMode userConfirmMode, void* pPolicy, Tizen::Base::String msg = L"");
364         result ShowUserConfirmPopupAsync(_UserConfirmMode userConfirmMode, void* pPolicy, Tizen::Base::String msg = L"");
365
366         Tizen::Ui::Controls::_Form* GetParentFormCore(Tizen::Ui::_Control* pControlCore);
367
368         result ShowSelectBoxPopup(bool isMultiSelect, const Tizen::Base::String& title, Eina_List* pItems, Evas_Object* pWebView, int selectedIndex);
369         result UpdateSelectBoxPopup(Eina_List* pItems, int selectedIndex, bool isGroupedList);
370         result ClearSelectBoxPopup(void);
371
372         result ShowColorPicker(int r, int g, int b, int a,Tizen::Graphics::Color& color);
373         Eina_Bool HideColorPicker(void);
374         _InputPickerPopup* GetColorpicker(void);
375
376         result ShowDatePicker(Ewk_Input_Type inputType, const char* inputValue,Tizen::Base::String& dateStr);
377         _InputPickerPopup* GetDatepicker(void);
378
379
380         void SetPolicyDecision(DecisionPolicy policy);
381
382         DecisionPolicy GetPolicyDecision(void) const;
383
384         virtual bool OnFocusGained(const Tizen::Ui::_ControlImpl& source);
385
386         virtual bool OnFocusLost(const Tizen::Ui::_ControlImpl& source);
387
388         virtual void OnTextValueChangeCanceled(const Tizen::Ui::Control& source);
389
390         virtual void OnTextValueChanged(const Tizen::Ui::Control& source);
391
392         virtual result OnPreAttachedToMainTree(void);
393
394         virtual void OnChangeLayout(Tizen::Ui::_ControlRotation rotation);
395
396         virtual void OnChangeLayout(Tizen::Ui::_ControlOrientation orientation);
397
398         virtual void OnAncestorVisibleStateChanged(const Tizen::Ui::_Control& control);
399
400         virtual void OnUserEventReceivedN(RequestId requestId, Tizen::Base::Collection::IList* pArgs);
401
402         static _WebImpl* CreateWebImplN(Web* pControl, const Tizen::Graphics::Rectangle& bounds);
403
404         static _WebImpl* CreateWebImplN(Web* pControl, const Tizen::Graphics::FloatRectangle& bounds);
405
406         static _WebImpl* GetInstance(Web* pWeb);
407
408         static const _WebImpl* GetInstance(const Web* pWeb);
409
410         int SearchHandler(Ewk_Custom_Handlers_Data* pHandlerData, bool checkmime);
411
412         result UnregistrationHandler(Ewk_Custom_Handlers_Data* pHandlerData, bool checkmime);
413
414         const Tizen::Base::String GetProtocolFromUri(const Tizen::Base::String& originuri, const Tizen::Base::String& currenturi);
415
416         const Tizen::Base::String GetRedirectUri(const Tizen::Base::String& originuri, const Tizen::Base::String& currenturi, const Tizen::Base::String& mime);
417
418         void SetFormDataList(Eina_List* pFormDataList);
419
420         bool IsFormDataWindowVisible(void) const;
421
422         result ShowFormDataWindow(const Tizen::Graphics::Rectangle& windowRect, Evas_Object* pWebView);
423
424         void HideFormDataWindow(bool delWindow = true);
425
426         void SetWebNotification(_WebNotification* pWebNotification);
427
428         void ClearWebNotification(_WebNotification* pWebNotification);
429
430 private:
431         result InitializeSetting(void);
432         result InitJsBridgeList(void);
433         result InitWebEvent(void);
434
435         IJavaScriptBridge* FindJsInterface(const Tizen::Web::Json::IJsonValue* pValue) const;
436
437         result ShowAuthenticationPopup(const Tizen::Base::String& host, const Tizen::Base::String& realm, AuthenticationChallenge* pAuthChallenge);
438
439         Eina_Hash* ConvertToSlpHeaderN(const Tizen::Net::Http::HttpHeader& header) const;
440
441         result OnHandleJavaScriptRequestByEventArg(const Tizen::Base::Runtime::IEventArg& arg);
442         result OnHandleLoadingEvent(const Tizen::Base::Runtime::IEventArg& arg);
443         result OnHandleWebDownloadEvent(const Tizen::Base::Runtime::IEventArg& arg);
444         result OnHandleWebUiEvent(const Tizen::Base::Runtime::IEventArg& arg);
445         result OnHandleWebUiEventF(const Tizen::Base::Runtime::IEventArg& arg);
446         result OnHandleTextSearchEvent(const Tizen::Base::Runtime::IEventArg& arg);
447
448         virtual void OnDownloadCanceled(RequestId reqId) {}
449         virtual void OnDownloadCompleted(RequestId reqId, const Tizen::Base::String &path);
450         virtual void OnDownloadFailed(RequestId reqId, result r, const Tizen::Base::String &errorCode) {}
451         virtual void OnDownloadInProgress(RequestId reqId, unsigned long long receivedSize, unsigned long long totalSize) {}
452         virtual void OnDownloadPaused(RequestId reqId) {}
453
454 private:
455         bool __isFooterVisible;
456         bool __isKeypadVisible;
457         bool __isKeypadOpened;
458         bool __isLoadingErrorOccurred;
459         bool __isRedirectRequested;
460         bool __isCertificateRequested;
461         bool __isCertificateConfirmed;
462         bool __isFormDataVisible;
463         Tizen::Graphics::Rectangle __keypadBounds;
464
465         _Web* __pWebCore;
466
467         ILoadingListener* __pUserLoadingListener;
468         IWebUiEventListener* __pUserUiListener;
469         IWebUiEventListenerF* __pUserUiListenerF;
470         IWebKeypadEventListener* __pUserKeypadEventListener;
471         ITextSearchListener* __pTextSearchListener;
472
473         std::unique_ptr<Tizen::Ui::Controls::Keypad> __pKeypad;
474
475         std::unique_ptr<Tizen::Base::Collection::HashMapT< Tizen::Base::String, IJavaScriptBridge* > > __pJsBridgeList;
476         std::unique_ptr<_JsBridgeHashCodeProvider> __pJsProvider;
477         std::unique_ptr<_JsBridgeComparer> __pJsComparer;
478
479         std::unique_ptr<_WebDataHandler> __pWebDownloadHandler;
480
481         std::unique_ptr<_WebEvent> __pWebEvent;
482
483         std::unique_ptr<AuthenticationChallenge> __pAuthChallenge;
484         std::unique_ptr<_AuthConfirmPopup> __pAuthPopup;
485
486         std::unique_ptr<_UserConfirmPopup> __pUserMediaConfirmPopup;
487         std::unique_ptr<_UserConfirmPopup> __pContentHandlerConfirmPopup;
488         std::unique_ptr<_UserConfirmPopup> __pProtocolHandlerConfirmPopup;
489         std::unique_ptr<_UserConfirmPopup> __pGeolocationConfirmPopup;
490         std::unique_ptr<_UserConfirmPopup> __pNotificationConfirmPopup;
491         std::unique_ptr<_UserConfirmPopup> __pScriptAlertConfirmPopup;
492         std::unique_ptr<_UserConfirmPopup> __pAppCacheConfirmPopup;
493         std::unique_ptr<_UserConfirmPopup> __pDbQuotaConfirmPopup;
494         std::unique_ptr<_UserConfirmPopup> __pLocalFsQuotaConfirmPopup;
495         std::unique_ptr<_UserConfirmPopup> __pIndexedDbQuotaConfirmPopup;
496         
497         std::unique_ptr< _PromptPopup > __pPromptPopup;
498         std::unique_ptr<_CertificateConfirmPopup>  __pCertConfirmPopup;
499
500         std::unique_ptr<_SelectBox> __pSelectBox;
501         std::unique_ptr<_InputPickerPopup> __pDatePicker;
502         std::unique_ptr<_InputPickerPopup> __pColorPicker;
503         std::unique_ptr<_FormDataWindow> __pFormDataWindow;
504
505         std::unique_ptr<Tizen::System::_VibratorImpl> __pVibrator;
506
507         Tizen::Base::Runtime::Mutex __mutex;
508
509         _TextSearch __textSearch;
510
511         Tizen::Base::Collection::ArrayList __callbackList;
512
513         Tizen::Base::Collection::ArrayList __webNotificationList;
514
515         DecisionPolicy __policy;
516
517         Tizen::Base::String __defaultUserAgent;
518
519         Eina_List* __pFormDataList;
520 }; // _WebImpl
521
522 }}} // Tizen::Web::Controls
523 #endif // _FWEB_CTRL_INTERNAL_WEB_IMPL_H_