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 <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"
39 namespace Tizen { namespace Base { namespace Collection
41 template< class KeyType, class ValueType > class HashMapT;
42 }}} // Tizen::Base::Collection
44 namespace Tizen { namespace Base { namespace Runtime
47 }}} // Tizen::Base::Runtime
49 namespace Tizen { namespace Graphics
56 namespace Tizen { namespace Net { namespace Http {
58 }}} // Tizen::Net::Http
60 namespace Tizen { namespace Ui
67 namespace Tizen { namespace Ui { namespace Controls
71 }}} // Tizen::Ui::Controls
73 namespace Tizen { namespace Web { namespace Json
76 }}} // Tizen::Web::Json
78 namespace Tizen { namespace Web { namespace Controls
80 class IJavaScriptBridge;
81 class ILoadingListener;
82 class ITextSearchListener;
83 class IWebDownloadListener;
84 class IWebKeypadEventListener;
85 class IWebUiEventListener;
86 class IWebUiEventListenerF;
87 class AuthenticationChallenge;
88 class HitElementResult;
89 class PageNavigationList;
96 class _JsBridgeComparer;
97 class _JsBridgeHashCodeProvider;
98 class _AuthConfirmPopup;
99 class _GeolocationConfirmPopup;
101 class _WebDataHandler;
103 class _InputPickerPopup;
108 bool __searchForward;
109 bool __caseSensitive;
113 Tizen::Base::String __text;
114 Tizen::Base::Collection::Queue __searchQueue;
124 : public Tizen::Ui::_ContainerImpl
125 , public Tizen::Ui::ITextEventListener
126 , public Tizen::Web::Controls::_IWebEventListener
127 , virtual public Tizen::Base::Runtime::IEventListener
130 _WebImpl(Web* pWeb, Tizen::Ui::_Control* pCore);
132 virtual ~_WebImpl(void);
134 result Construct(void);
136 bool HasValidNativeNode(void) const;
138 result SetZoomLevel(float level);
140 float GetZoomLevel(void) const;
142 result LoadUrl(const Tizen::Base::String& url) const;
144 result LoadUrl(const Tizen::Base::String& url, const Tizen::Net::Http::HttpHeader& header);
146 result LoadUrlWithPostRequest(const Tizen::Base::String& url, const Tizen::Net::Http::HttpHeader& header, const Tizen::Base::ByteBuffer& body) const;
148 result LoadData(const Tizen::Base::String& baseUrl, const Tizen::Base::ByteBuffer& content, const Tizen::Base::String& mime, const Tizen::Base::String& encoding) const;
150 bool CanGoBack(void) const;
152 bool CanGoForward(void) const;
154 void GoBack(void) const;
156 void GoForward(void) const;
158 bool IsLoading(void) const;
160 void StopLoading(void) const;
162 void Reload(void) const;
164 result AddCustomHeader(const Tizen::Net::Http::HttpHeader& header);
166 void RemoveAllCustomHeaders(void);
168 bool SearchText(const Tizen::Base::String& word, bool searchForward);
170 result SetSetting(const Tizen::Web::Controls::WebSetting& setting);
172 Tizen::Web::Controls::WebSetting GetSetting(void) const;
174 Tizen::Base::String GetUrl(void) const;
176 Tizen::Base::String GetTitle(void) const;
178 result SetBlockSelectionPosition(const Tizen::Graphics::Point& startPoint);
180 result SetBlockSelectionPosition(const Tizen::Graphics::FloatPoint& startPoint);
182 void ReleaseBlock(void);
184 void GetBlockRange(Tizen::Graphics::Point& startPoint, Tizen::Graphics::Point& endPoint) const;
186 void GetBlockRange(Tizen::Graphics::FloatPoint& startPoint, Tizen::Graphics::FloatPoint& endPoint) const;
188 Tizen::Base::String GetTextFromBlock(void) const;
190 Tizen::Base::String* EvaluateJavascriptN(const Tizen::Base::String& scriptCode) const;
192 bool IsPrivateBrowsingEnabled(void) const;
194 void SetPrivateBrowsingEnabled(bool enable);
196 void ClearHistory(void);
198 void ClearCache(void);
200 void ClearCookie(void);
202 void ClearFormData(void);
204 void ClearLoginFormData(void);
206 bool IsCookieEnabled(void) const;
208 void SetCookieEnabled(bool enable);
210 result SavePageAsPdf(const Tizen::Base::String& filePath, const Tizen::Graphics::Dimension* pSize) const;
212 bool IsMimeSupported(const Tizen::Base::String& mime) const;
214 result SearchTextAllAsync(const Tizen::Base::String& text, bool caseSensitive);
216 result SearchNextAsync(bool searchForward);
218 result SynchronizeSearch(_SearchType type, Evas_Object* pView, Ewk_Find_Options condition, const Tizen::Base::String& text
219 , bool searchForward, bool caseSensitive = false, _WebPresenter* pWebPresenter = null);
221 void SetAsyncSearchResult(int totalCount);
223 _WebPresenter* GetSearchPresenter(void);
225 int GetPendingAsyncSearchCount(void) const;
227 void CalculateAsyncSearchOrdinal(void);
229 int GetAsyncSearchOrdinal(void) const;
231 void DisableAsyncSearch(void);
233 void SetTextSearchListener(Tizen::Web::Controls::ITextSearchListener* pTextSearchListener);
235 void SetLoadingListener(Tizen::Web::Controls::ILoadingListener* pLoadingListener);
237 void SetWebUiEventListener(Tizen::Web::Controls::IWebUiEventListener* pUiEventListener);
239 void SetWebUiEventListenerF(Tizen::Web::Controls::IWebUiEventListenerF* pUiEventListener);
241 void SetWebKeypadEventListener(IWebKeypadEventListener* pKeypadEventListener);
243 void SetDownloadListener(Tizen::Web::Controls::IWebDownloadListener* pDownLoadListener);
245 Tizen::Web::Controls::ILoadingListener* GetLoadingListener(void) const;
247 Tizen::Web::Controls::IWebUiEventListener* GetUiEventListener(void) const;
249 Tizen::Web::Controls::IWebUiEventListenerF* GetUiEventListenerF(void) const;
251 Tizen::Web::Controls::ITextSearchListener* GetTextSearchListener(void) const;
253 Tizen::Web::Controls::IWebKeypadEventListener* GetWebKeypadEventListener(void) const;
255 const Tizen::Web::Controls::PageNavigationList* GetBackForwardListN(void) const;
257 const Tizen::Web::Controls::HitElementResult* GetElementByPointN(const Tizen::Graphics::Point& point) const;
259 const Tizen::Web::Controls::HitElementResult* GetElementByPointN(const Tizen::Graphics::FloatPoint& point) const;
261 result AddJavaScriptBridge(const IJavaScriptBridge& jsBridge);
263 result RemoveJavaScriptBridge(const IJavaScriptBridge& jsBridge);
265 void SetScrollEnabled(bool enable);
267 bool IsScrollEnabled(void) const;
269 Tizen::Graphics::Bitmap* GetFaviconN(void) const;
275 void ScrollBy(const Tizen::Graphics::Point& diff);
277 void ScrollTo(const Tizen::Graphics::Point& dest);
279 Tizen::Graphics::Point GetScrollPosition(void) const;
281 Tizen::Graphics::Dimension GetPageSize(void) const;
283 virtual bool IsLayoutable(void) const;
285 void SetEventListenerCallback(void) const;
287 void RemoveEventListenerCallback(void) const;
289 _WebEvent* GetWebEvent(void) const;
291 _WebDataHandler* GetDownloadHandler(void) const;
293 result SetFullScreenKeypad(void);
295 void RemoveFullScreenKeypad(void);
297 void SetCurrentEvent(Tizen::Base::Runtime::IEventArg* arg);
299 void SetLoadingErrorOccurred(bool arg);
301 bool IsLoadingErrorOccurred(void) const;
303 void SetRedirectRequested(bool arg);
305 bool IsRedirectRequested(void) const;
307 void SetCertificateRequested(bool arg);
308 bool IsCertificateRequested(void) const;
309 bool IsCertificateConfirmed(void) const;
311 bool IsFooterVisible(void) const;
313 void SetFooterVisibleState(bool isFooterVisible);
315 bool IsKeypadVisible(void) const;
317 void SetKeypadVisibleState(bool isKeypadVisible);
319 bool IsKeypadOpened(void) const;
321 void SetKeypadOpened(bool isKeypadOpened);
323 Tizen::Graphics::Rectangle GetPreviousKeypadBounds(void) const;
325 void SetPreviousKeypadBounds(Tizen::Graphics::Rectangle& bounds);
327 result HttpAuthenticationRequested(Ewk_Auth_Challenge* pChallenge);
329 result ShowCertificateConfirmPopup(_CertificatePopupMode userConfirmMode, Ewk_Certificate_Policy_Decision *pPolicy);
331 result ShowUserConfirmPopupAsync(_UserConfirmMode userConfirmMode, void* pPolicy);
333 Tizen::Ui::Controls::_Form* GetParentFormCore(Tizen::Ui::_Control* pControlCore);
335 result ShowSelectBoxPopup(bool isMultiSelect, const Tizen::Base::String& title, Eina_List* pItems, Evas_Object* pWebView, int selectedIndex);
336 result UpdateSelectBoxPopup(Eina_List* pItems, int selectedIndex, bool isGroupedList);
337 result ClearSelectBoxPopup(void);
339 result ShowColorPicker(int r, int g, int b, int a,Tizen::Graphics::Color& color);
340 Eina_Bool HideColorPicker(void);
341 _InputPickerPopup* GetColorpicker(void);
343 result ShowDatePicker(Ewk_Input_Type inputType, const char* inputValue,Tizen::Base::String& dateStr);
344 _InputPickerPopup* GetDatepicker(void);
347 void SetPolicyDecision(DecisionPolicy policy);
349 DecisionPolicy GetPolicyDecision(void) const;
351 virtual bool OnFocusGained(const Tizen::Ui::_ControlImpl& source);
353 virtual bool OnFocusLost(const Tizen::Ui::_ControlImpl& source);
355 virtual void OnTextValueChangeCanceled(const Tizen::Ui::Control& source);
357 virtual void OnTextValueChanged(const Tizen::Ui::Control& source);
359 virtual result OnAttachedToMainTree(void);
361 virtual void OnChangeLayout(Tizen::Ui::_ControlOrientation orientation);
363 virtual void OnAncestorVisibleStateChanged(const Tizen::Ui::_Control& control);
365 static _WebImpl* CreateWebImplN(Web* pControl, const Tizen::Graphics::Rectangle& bounds);
367 static _WebImpl* CreateWebImplN(Web* pControl, const Tizen::Graphics::FloatRectangle& bounds);
369 static _WebImpl* GetInstance(Web* pWeb);
371 static const _WebImpl* GetInstance(const Web* pWeb);
374 result InitializeSetting(void);
375 result InitJsBridgeList(void);
376 result InitWebEvent(void);
378 IJavaScriptBridge* FindJsInterface(const Tizen::Web::Json::IJsonValue* pValue) const;
379 result LaunchAppControl(const Tizen::Base::Runtime::IEventArg& arg);
381 result ShowAuthenticationPopup(const Tizen::Base::String& host, const Tizen::Base::String& realm, AuthenticationChallenge* pAuthChallenge);
383 Eina_Hash* ConvertToSlpHeaderN(const Tizen::Net::Http::HttpHeader& header) const;
385 result OnHandleJavaScriptRequestByEventArg(const Tizen::Base::Runtime::IEventArg& arg);
386 result OnHandleLoadingEvent(const Tizen::Base::Runtime::IEventArg& arg);
387 result OnHandleWebDownloadEvent(const Tizen::Base::Runtime::IEventArg& arg);
388 result OnHandleWebUiEvent(const Tizen::Base::Runtime::IEventArg& arg);
389 result OnHandleWebUiEventF(const Tizen::Base::Runtime::IEventArg& arg);
390 result OnHandleTextSearchEvent(const Tizen::Base::Runtime::IEventArg& arg);
393 bool __isFooterVisible;
394 bool __isKeypadVisible;
395 bool __isKeypadOpened;
396 bool __isLoadingErrorOccurred;
397 bool __isRedirectRequested;
398 bool __isCertificateRequested;
399 bool __isCertificateConfirmed;
400 Tizen::Graphics::Rectangle __keypadBounds;
404 ILoadingListener* __pUserLoadingListener;
405 IWebUiEventListener* __pUserUiListener;
406 IWebUiEventListenerF* __pUserUiListenerF;
407 IWebKeypadEventListener* __pUserKeypadEventListener;
408 ITextSearchListener* __pTextSearchListener;
410 std::unique_ptr<Tizen::Ui::Controls::Keypad> __pKeypad;
412 std::unique_ptr<Tizen::Base::Collection::HashMapT< Tizen::Base::String, IJavaScriptBridge* > > __pJsBridgeList;
413 std::unique_ptr<_JsBridgeHashCodeProvider> __pJsProvider;
414 std::unique_ptr<_JsBridgeComparer> __pJsComparer;
416 std::unique_ptr<_WebDataHandler> __pWebDownloadHandler;
418 std::unique_ptr<_WebEvent> __pWebEvent;
420 std::unique_ptr<AuthenticationChallenge> __pAuthChallenge;
421 std::unique_ptr<_AuthConfirmPopup> __pAuthPopup;
423 std::unique_ptr<_UserConfirmPopup> __pUserConfirmPopup;
425 std::unique_ptr<_CertificateConfirmPopup> __pCertConfirmPopup;
427 std::unique_ptr<_SelectBox> __pSelectBox;
428 std::unique_ptr<_InputPickerPopup> __pDatePicker;
429 std::unique_ptr<_InputPickerPopup> __pColorPicker;
431 Tizen::Base::Runtime::Mutex __mutex;
433 _TextSearch __textSearch;
435 DecisionPolicy __policy;
438 }}} // Tizen::Web::Controls
439 #endif // _FWEB_CTRL_INTERNAL_WEB_IMPL_H_