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