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