2 // Open Service Platform
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
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
9 // http://www.apache.org/licenses/LICENSE-2.0
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.
19 * @file FWebCtrl_WebImpl.h
20 * @brief The file contains the declaration of _WebImpl class.
22 * The file contains the declaration of _WebImpl class.
24 #ifndef _FWEB_CTRL_INTERNAL_WEB_IMPL_H_
25 #define _FWEB_CTRL_INTERNAL_WEB_IMPL_H_
27 #include <unique_ptr.h>
29 #include <FBaseColArrayList.h>
30 #include <FBaseString.h>
31 #include <FSysISettingEventListener.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"
41 namespace Tizen { namespace Base { namespace Collection
43 template< class KeyType, class ValueType > class HashMapT;
44 }}} // Tizen::Base::Collection
46 namespace Tizen { namespace Base { namespace Runtime
49 }}} // Tizen::Base::Runtime
51 namespace Tizen { namespace Graphics
58 namespace Tizen { namespace Net { namespace Http {
60 }}} // Tizen::Net::Http
62 namespace Tizen { namespace System
67 namespace Tizen { namespace Ui
74 namespace Tizen { namespace Ui { namespace Controls
78 }}} // Tizen::Ui::Controls
80 namespace Tizen { namespace Web { namespace Json
83 }}} // Tizen::Web::Json
85 namespace Tizen { namespace Web { namespace Controls
87 class IJavaScriptBridge;
88 class ILoadingListener;
89 class ITextSearchListener;
90 class IWebDownloadListener;
91 class IWebKeypadEventListener;
92 class IWebUiEventListener;
93 class IWebUiEventListenerF;
94 class AuthenticationChallenge;
95 class HitElementResult;
96 class PageNavigationList;
103 class _JsBridgeComparer;
104 class _JsBridgeHashCodeProvider;
105 class _AuthConfirmPopup;
107 class _GeolocationConfirmPopup;
108 class _WebDataHandler;
110 class _InputPickerPopup;
111 class _FormDataWindow;
112 class _WebNotification;
117 bool __searchForward;
118 bool __caseSensitive;
122 Tizen::Base::String __text;
123 Tizen::Base::Collection::Queue __searchQueue;
132 enum _WebPopupCloseId
134 ID_AUTHENTICATION_CONFIRM_POPUP_CANCEL,
135 ID_AUTHENTICATION_CONFIRM_POPUP_PROCESS,
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 ID_USER_SCRIPT_CONFIRM_CLOSE,
143 ID_USER_BEFORE_UNLOAD_CONFIRM_CLOSE,
144 ID_USER_SCRIPT_SELECTBOX_CLOSE
147 class _OSP_EXPORT_ _WebImpl
148 : public Tizen::Ui::_ContainerImpl
149 , public Tizen::Ui::ITextEventListener
150 , public Tizen::Web::Controls::_IWebEventListener
151 , public Tizen::System::ISettingEventListener
154 _WebImpl(Web* pWeb, Tizen::Ui::_Control* pCore);
156 virtual ~_WebImpl(void);
158 result Construct(void);
160 bool HasValidNativeNode(void) const;
162 result SetZoomLevel(float level);
164 float GetZoomLevel(void) const;
166 result LoadUrl(const Tizen::Base::String& url) const;
168 result LoadUrl(const Tizen::Base::String& url, const Tizen::Net::Http::HttpHeader& header);
170 result LoadUrlWithPostRequest(const Tizen::Base::String& url, const Tizen::Net::Http::HttpHeader& header, const Tizen::Base::ByteBuffer& body) const;
172 result LoadData(const Tizen::Base::String& baseUrl, const Tizen::Base::ByteBuffer& content, const Tizen::Base::String& mime, const Tizen::Base::String& encoding) const;
174 bool CanGoBack(void) const;
176 bool CanGoForward(void) const;
178 void GoBack(void) const;
180 void GoForward(void) const;
182 bool IsLoading(void) const;
184 void StopLoading(void) const;
186 void Reload(void) const;
188 bool SearchText(const Tizen::Base::String& word, bool searchForward);
190 result SetSetting(const Tizen::Web::Controls::WebSetting& setting);
192 Tizen::Web::Controls::WebSetting GetSetting(void) const;
194 Tizen::Base::String GetUrl(void) const;
196 Tizen::Base::String GetTitle(void) const;
198 result SetBlockSelectionPosition(const Tizen::Graphics::Point& startPoint);
200 result SetBlockSelectionPosition(const Tizen::Graphics::FloatPoint& startPoint);
202 void ReleaseBlock(void);
204 void GetBlockRange(Tizen::Graphics::Point& startPoint, Tizen::Graphics::Point& endPoint) const;
206 void GetBlockRange(Tizen::Graphics::FloatPoint& startPoint, Tizen::Graphics::FloatPoint& endPoint) const;
208 Tizen::Base::String GetTextFromBlock(void) const;
210 Tizen::Base::String* EvaluateJavascriptN(const Tizen::Base::String& scriptCode);
212 bool IsPrivateBrowsingEnabled(void) const;
214 void SetPrivateBrowsingEnabled(bool enable);
216 void ClearHistory(void);
218 void ClearCache(void);
220 void ClearCookie(void);
222 void ClearFormData(void);
224 void ClearLoginFormData(void);
226 bool IsCookieEnabled(void) const;
228 void SetCookieEnabled(bool enable);
230 result SavePageAsPdf(const Tizen::Base::String& filePath, const Tizen::Graphics::Dimension* pSize) const;
232 bool IsMimeSupported(const Tizen::Base::String& mime) const;
234 result SearchTextAllAsync(const Tizen::Base::String& text, bool caseSensitive);
236 result SearchNextAsync(bool searchForward);
238 result SynchronizeSearch(_SearchType type, Evas_Object* pView, Ewk_Find_Options condition, const Tizen::Base::String& text
239 , bool searchForward, bool caseSensitive = false, _WebPresenter* pWebPresenter = null);
241 void SetAsyncSearchResult(int totalCount);
243 _WebPresenter* GetSearchPresenter(void);
245 int GetPendingAsyncSearchCount(void) const;
247 void CalculateAsyncSearchOrdinal(void);
249 int GetAsyncSearchOrdinal(void) const;
251 void DisableAsyncSearch(void);
253 void SetTextSearchListener(Tizen::Web::Controls::ITextSearchListener* pTextSearchListener);
255 void SetLoadingListener(Tizen::Web::Controls::ILoadingListener* pLoadingListener);
257 void SetWebUiEventListener(Tizen::Web::Controls::IWebUiEventListener* pUiEventListener);
259 void SetWebUiEventListenerF(Tizen::Web::Controls::IWebUiEventListenerF* pUiEventListener);
261 void SetWebKeypadEventListener(IWebKeypadEventListener* pKeypadEventListener);
263 void SetDownloadListener(Tizen::Web::Controls::IWebDownloadListener* pDownLoadListener);
265 Tizen::Web::Controls::ILoadingListener* GetLoadingListener(void) const;
267 Tizen::Web::Controls::IWebUiEventListener* GetUiEventListener(void) const;
269 Tizen::Web::Controls::IWebUiEventListenerF* GetUiEventListenerF(void) const;
271 Tizen::Web::Controls::ITextSearchListener* GetTextSearchListener(void) const;
273 Tizen::Web::Controls::IWebKeypadEventListener* GetWebKeypadEventListener(void) const;
275 const Tizen::Web::Controls::PageNavigationList* GetBackForwardListN(void) const;
277 const Tizen::Web::Controls::HitElementResult* GetElementByPointN(const Tizen::Graphics::Point& point) const;
279 const Tizen::Web::Controls::HitElementResult* GetElementByPointN(const Tizen::Graphics::FloatPoint& point) const;
281 result AddJavaScriptBridge(const IJavaScriptBridge& jsBridge);
283 result RemoveJavaScriptBridge(const IJavaScriptBridge& jsBridge);
285 void SetScrollEnabled(bool enable);
287 bool IsScrollEnabled(void) const;
289 Tizen::Graphics::Bitmap* GetFaviconN(void) const;
295 void ScrollBy(const Tizen::Graphics::Point& diff);
297 void ScrollTo(const Tizen::Graphics::Point& dest);
299 Tizen::Graphics::Point GetScrollPosition(void) const;
301 Tizen::Graphics::Dimension GetPageSize(void) const;
303 virtual bool IsLayoutable(void) const;
305 void SetEventListenerCallback(void) const;
307 void RemoveEventListenerCallback(void) const;
309 _WebEvent* GetWebEvent(void) const;
311 _WebDataHandler* GetDownloadHandler(void) const;
313 result SetFullScreenKeypad(void);
315 void RemoveFullScreenKeypad(void);
317 void SetCurrentEvent(Tizen::Base::Runtime::IEventArg* arg);
319 void SetLoadingErrorOccurred(bool arg);
321 bool IsLoadingErrorOccurred(void) const;
323 void SetRedirectRequested(bool arg);
325 bool IsRedirectRequested(void) const;
327 void SetCertificateRequested(bool arg);
328 bool IsCertificateRequested(void) const;
329 void SetCertificateConfirmed(bool arg);
330 bool IsCertificateConfirmed(void) const;
332 void SetOrientationChanged(bool arg);
333 bool IsOrientationChanged(void) const;
335 result VibrationRequested(uint64_t duration);
336 void VibrationCanceled(void);
338 bool IsFooterVisible(void) const;
340 void SetFooterVisibleState(bool isFooterVisible);
342 bool IsKeypadVisible(void) const;
344 void SetKeypadVisibleState(bool isKeypadVisible);
346 bool IsKeypadOpened(void) const;
348 void SetKeypadOpened(bool isKeypadOpened);
350 bool IsWinFocusLost(void) const;
352 void SetWinFocusLost(bool isWinFocusLost);
354 Tizen::Graphics::Rectangle GetPreviousKeypadBounds(void) const;
356 void SetPreviousKeypadBounds(Tizen::Graphics::Rectangle& bounds);
358 result HttpAuthenticationRequested(Ewk_Auth_Challenge* pChallenge);
360 result ShowCertificateConfirmPopup(_CertificatePopupMode userConfirmMode, Ewk_Certificate_Policy_Decision *pPolicy);
362 result ShowPromptPopup(Tizen::Base::String msg = L"", Tizen::Base::String defVal = L"");
364 result ShowUserConfirmPopup(_UserConfirmMode userConfirmMode, void* pPolicy, Tizen::Base::String msg = L"");
365 result ShowUserConfirmPopupAsync(_UserConfirmMode userConfirmMode, void* pPolicy, Tizen::Base::String msg = L"");
367 Tizen::Ui::Controls::_FormImpl* GetParentFormImpl(Tizen::Ui::_ControlImpl* pControlImpl);
369 result ShowSelectBoxPopup(bool isMultiSelect, const Tizen::Base::String& title, Eina_List* pItems, Evas_Object* pWebView, int selectedIndex);
370 result UpdateSelectBoxPopup(Eina_List* pItems, int selectedIndex, bool isGroupedList);
371 result ClearSelectBoxPopup(void);
373 result ShowColorPicker(int r, int g, int b, int a,Tizen::Graphics::Color& color);
374 Eina_Bool HideColorPicker(void);
375 _InputPickerPopup* GetColorpicker(void);
377 result ShowDatePicker(Ewk_Input_Type inputType, const char* inputValue,Tizen::Base::String& dateStr);
378 _InputPickerPopup* GetDatepicker(void);
381 void SetPolicyDecision(DecisionPolicy policy);
383 DecisionPolicy GetPolicyDecision(void) const;
385 virtual bool OnFocusGained(const Tizen::Ui::_ControlImpl& source);
387 virtual bool OnFocusLost(const Tizen::Ui::_ControlImpl& source);
389 virtual void OnTextValueChangeCanceled(const Tizen::Ui::Control& source);
391 virtual void OnTextValueChanged(const Tizen::Ui::Control& source);
393 virtual result OnPreAttachedToMainTree(void);
395 virtual result OnDetachingFromMainTree(void);
397 virtual void OnChangeLayout(Tizen::Ui::_ControlRotation rotation);
399 virtual void OnChangeLayout(Tizen::Ui::_ControlOrientation orientation);
401 virtual void OnAncestorVisibleStateChanged(const Tizen::Ui::_Control& control);
403 virtual void OnUserEventReceivedN(RequestId requestId, Tizen::Base::Collection::IList* pArgs);
405 static _WebImpl* CreateWebImplN(Web* pControl, const Tizen::Graphics::Rectangle& bounds);
407 static _WebImpl* CreateWebImplN(Web* pControl, const Tizen::Graphics::FloatRectangle& bounds);
409 static _WebImpl* GetInstance(Web* pWeb);
411 static const _WebImpl* GetInstance(const Web* pWeb);
413 int SearchHandler(Ewk_Custom_Handlers_Data* pHandlerData, bool checkmime);
415 result UnregistrationHandler(Ewk_Custom_Handlers_Data* pHandlerData, bool checkmime);
417 const Tizen::Base::String GetProtocolFromUri(const Tizen::Base::String& originuri, const Tizen::Base::String& currenturi);
419 const Tizen::Base::String GetRedirectUri(const Tizen::Base::String& originuri, const Tizen::Base::String& currenturi, const Tizen::Base::String& mime);
421 void SetFormDataList(Eina_List* pFormDataList);
423 bool IsFormDataWindowVisible(void) const;
425 result ShowFormDataWindow(const Tizen::Graphics::Rectangle& windowRect, Evas_Object* pWebView);
427 void HideFormDataWindow(bool delWindow = true);
429 void SetWebNotification(_WebNotification* pWebNotification);
431 void ClearWebNotification(_WebNotification* pWebNotification);
434 result InitializeSetting(void);
435 result InitJsBridgeList(void);
436 result InitWebEvent(void);
438 IJavaScriptBridge* FindJsInterface(const Tizen::Web::Json::IJsonValue* pValue) const;
440 result ShowAuthenticationPopup(const Tizen::Base::String& host, const Tizen::Base::String& realm, AuthenticationChallenge* pAuthChallenge);
442 Eina_Hash* ConvertToSlpHeaderN(const Tizen::Net::Http::HttpHeader& header) const;
444 result OnHandleJavaScriptRequestByEventArg(const Tizen::Base::Runtime::IEventArg& arg);
445 result OnHandleLoadingEvent(const Tizen::Base::Runtime::IEventArg& arg);
446 result OnHandleWebDownloadEvent(const Tizen::Base::Runtime::IEventArg& arg);
447 result OnHandleWebUiEvent(const Tizen::Base::Runtime::IEventArg& arg);
448 result OnHandleWebUiEventF(const Tizen::Base::Runtime::IEventArg& arg);
449 result OnHandleTextSearchEvent(const Tizen::Base::Runtime::IEventArg& arg);
451 virtual void OnSettingChanged(Tizen::Base::String& key);
453 static Eina_Bool OnBeforeUnloadConfirmRequested(Evas_Object* pView, const char* pMessage, void* pUserData);
455 bool __isFooterVisible;
456 bool __isKeypadVisible;
457 bool __isKeypadOpened;
458 bool __isWinFocusLost;
459 bool __isLoadingErrorOccurred;
460 bool __isRedirectRequested;
461 bool __isCertificateRequested;
462 bool __isCertificateConfirmed;
463 bool __isFormDataVisible;
464 Tizen::Graphics::Rectangle __keypadBounds;
468 ILoadingListener* __pUserLoadingListener;
469 IWebUiEventListener* __pUserUiListener;
470 IWebUiEventListenerF* __pUserUiListenerF;
471 IWebKeypadEventListener* __pUserKeypadEventListener;
472 ITextSearchListener* __pTextSearchListener;
474 std::unique_ptr<Tizen::Ui::Controls::Keypad> __pKeypad;
476 std::unique_ptr<Tizen::Base::Collection::HashMapT< Tizen::Base::String, IJavaScriptBridge* > > __pJsBridgeList;
477 std::unique_ptr<_JsBridgeHashCodeProvider> __pJsProvider;
478 std::unique_ptr<_JsBridgeComparer> __pJsComparer;
480 std::unique_ptr<_WebDataHandler> __pWebDownloadHandler;
482 std::unique_ptr<_WebEvent> __pWebEvent;
484 std::unique_ptr<AuthenticationChallenge> __pAuthChallenge;
485 std::unique_ptr<_AuthConfirmPopup> __pAuthPopup;
487 std::unique_ptr<_UserConfirmPopup> __pUserMediaConfirmPopup;
488 std::unique_ptr<_UserConfirmPopup> __pContentHandlerConfirmPopup;
489 std::unique_ptr<_UserConfirmPopup> __pProtocolHandlerConfirmPopup;
490 std::unique_ptr<_UserConfirmPopup> __pGeolocationConfirmPopup;
491 std::unique_ptr<_UserConfirmPopup> __pNotificationConfirmPopup;
492 std::unique_ptr<_UserConfirmPopup> __pScriptAlertConfirmPopup;
493 std::unique_ptr<_UserConfirmPopup> __pScriptConfirmPopup;
494 std::unique_ptr<_UserConfirmPopup> __pBeforeUnloadConfirmPopup;
495 std::unique_ptr<_UserConfirmPopup> __pAppCacheConfirmPopup;
496 std::unique_ptr<_UserConfirmPopup> __pDbQuotaConfirmPopup;
497 std::unique_ptr<_UserConfirmPopup> __pLocalFsQuotaConfirmPopup;
498 std::unique_ptr<_UserConfirmPopup> __pIndexedDbQuotaConfirmPopup;
500 std::unique_ptr< _PromptPopup > __pPromptPopup;
501 std::unique_ptr<_CertificateConfirmPopup> __pCertConfirmPopup;
503 std::unique_ptr<_SelectBox> __pSelectBox;
504 std::unique_ptr<_InputPickerPopup> __pDatePicker;
505 std::unique_ptr<_InputPickerPopup> __pColorPicker;
506 std::unique_ptr<_FormDataWindow> __pFormDataWindow;
508 std::unique_ptr<Tizen::System::Vibrator> __pVibrator;
510 Tizen::Base::Runtime::Mutex __mutex;
512 _TextSearch __textSearch;
514 Tizen::Base::Collection::ArrayList __webNotificationList;
516 DecisionPolicy __policy;
518 Tizen::Base::String __defaultUserAgent;
520 Eina_List* __pFormDataList;
525 }}} // Tizen::Web::Controls
526 #endif // _FWEB_CTRL_INTERNAL_WEB_IMPL_H_