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"
37 namespace Tizen { namespace Base { namespace Collection
39 template< class KeyType, class ValueType > class HashMapT;
40 }}} // Tizen::Base::Collection
42 namespace Tizen { namespace Base { namespace Runtime
45 }}} // Tizen::Base::Runtime
47 namespace Tizen { namespace Graphics
54 namespace Tizen { namespace Net { namespace Http {
56 }}} // Tizen::Net::Http
58 namespace Tizen { namespace Ui
65 namespace Tizen { namespace Ui { namespace Controls
69 }}} // Tizen::Ui::Controls
71 namespace Tizen { namespace Web { namespace Json
74 }}} // Tizen::Web::Json
76 namespace Tizen { namespace Web { namespace Controls
78 class IJavaScriptBridge;
79 class ILoadingListener;
80 class ITextSearchListener;
81 class IWebDownloadListener;
82 class IWebKeypadEventListener;
83 class IWebUiEventListener;
84 class AuthenticationChallenge;
85 class HitElementResult;
86 class PageNavigationList;
93 class _JsBridgeComparer;
94 class _JsBridgeHashCodeProvider;
95 class _AuthConfirmPopup;
96 class _GeolocationConfirmPopup;
98 class _WebDataHandler;
100 class _InputPickerPopup;
105 bool __searchForward;
106 bool __caseSensitive;
110 Tizen::Base::String __text;
111 Tizen::Base::Collection::Queue __searchQueue;
121 : public Tizen::Ui::_ContainerImpl
122 , public Tizen::Ui::ITextEventListener
123 , public Tizen::Web::Controls::_IWebEventListener
124 , virtual public Tizen::Base::Runtime::IEventListener
127 _WebImpl(Web* pWeb, Tizen::Ui::_Control* pCore);
129 virtual ~_WebImpl(void);
131 result Construct(void);
133 bool HasValidNativeNode(void) const;
135 result SetZoomLevel(float level);
137 float GetZoomLevel(void) const;
139 result LoadUrl(const Tizen::Base::String& url) const;
141 result LoadUrl(const Tizen::Base::String& url, const Tizen::Net::Http::HttpHeader& header);
143 result LoadUrlWithPostRequest(const Tizen::Base::String& url, const Tizen::Net::Http::HttpHeader& header, const Tizen::Base::ByteBuffer& body) const;
145 result LoadData(const Tizen::Base::String& baseUrl, const Tizen::Base::ByteBuffer& content, const Tizen::Base::String& mime, const Tizen::Base::String& encoding) const;
147 bool CanGoBack(void) const;
149 bool CanGoForward(void) const;
151 void GoBack(void) const;
153 void GoForward(void) const;
155 bool IsLoading(void) const;
157 void StopLoading(void) const;
159 void Reload(void) const;
161 result AddCustomHeader(const Tizen::Net::Http::HttpHeader& header);
163 void RemoveAllCustomHeaders(void);
165 bool SearchText(const Tizen::Base::String& word, bool searchForward);
167 result SetSetting(const Tizen::Web::Controls::WebSetting& setting);
169 Tizen::Web::Controls::WebSetting GetSetting(void) const;
171 Tizen::Base::String GetUrl(void) const;
173 Tizen::Base::String GetTitle(void) const;
175 result SetBlockSelectionPosition(const Tizen::Graphics::Point& startPoint);
177 result ReleaseBlock(void);
179 result GetBlockRange(Tizen::Graphics::Point& startPoint, Tizen::Graphics::Point& endPoint) const;
181 void FireWebPageBlockSelectedEvent(void) const;
183 Tizen::Base::String GetTextFromBlock(void) const;
185 Tizen::Base::String* EvaluateJavascriptN(const Tizen::Base::String& scriptCode) const;
187 bool IsPrivateBrowsingEnabled(void) const;
189 result SetPrivateBrowsingEnabled(bool enable);
191 void ClearCache(void);
193 void ClearCookie(void);
195 bool IsCookieEnabled(void) const;
197 void SetCookieEnabled(bool enable);
199 result SavePageAsPdf(const Tizen::Base::String& filePath, const Tizen::Graphics::Dimension* pSize) const;
201 bool IsMimeSupported(const Tizen::Base::String& mime) const;
203 result SearchTextAllAsync(const Tizen::Base::String& text, bool caseSensitive);
205 result SearchNextAsync(bool searchForward);
207 result SynchronizeSearch(_SearchType type, Evas_Object* pView, Ewk_Find_Options condition, const Tizen::Base::String& text
208 , bool searchForward, bool caseSensitive = false, _WebPresenter* pWebPresenter = null);
210 void SetAsyncSearchResult(int totalCount);
212 _WebPresenter* GetSearchPresenter(void);
214 int GetPendingAsyncSearchCount(void) const;
216 void CalculateAsyncSearchOrdinal(void);
218 int GetAsyncSearchOrdinal(void) const;
220 void DisableAsyncSearch(void);
222 void SetTextSearchListener(Tizen::Web::Controls::ITextSearchListener* pTextSearchListener);
224 void SetLoadingListener(Tizen::Web::Controls::ILoadingListener* pLoadingListener);
226 void SetWebUiEventListener(Tizen::Web::Controls::IWebUiEventListener* pUiEventListener);
228 void SetWebKeypadEventListener(IWebKeypadEventListener* pKeypadEventListener);
230 void SetDownloadListener(Tizen::Web::Controls::IWebDownloadListener* pDownLoadListener);
232 Tizen::Web::Controls::ILoadingListener* GetLoadingListener(void) const;
234 Tizen::Web::Controls::IWebUiEventListener* GetUiEventListener(void) const;
236 Tizen::Web::Controls::ITextSearchListener* GetTextSearchListener(void) const;
238 Tizen::Web::Controls::IWebKeypadEventListener* GetWebKeypadEventListener(void) const;
240 const Tizen::Web::Controls::PageNavigationList* GetBackForwardListN(void) const;
242 const Tizen::Web::Controls::HitElementResult* GetElementByPointN(const Tizen::Graphics::Point& point) const;
244 result AddJavaScriptBridge(const IJavaScriptBridge& jsBridge);
246 result RemoveJavaScriptBridge(const IJavaScriptBridge& jsBridge);
248 result SetScrollEnabled(bool enable);
250 bool IsScrollEnabled(void) const;
252 virtual bool IsLayoutable(void) const;
254 void SetEventListenerCallback(void) const;
256 void RemoveEventListenerCallback(void) const;
258 _WebEvent* GetWebEvent(void) const;
260 _WebDataHandler* GetDownloadHandler(void) const;
262 result SetFullScreenKeypad(void);
264 void RemoveFullScreenKeypad(void);
266 void SetCurrentEvent(Tizen::Base::Runtime::IEventArg* arg);
268 void SetLoadingErrorOccurred(bool arg);
270 bool IsLoadingErrorOccurred(void) const;
272 void SetRedirectRequested(bool arg);
274 bool IsRedirectRequested(void) const;
276 bool IsFooterVisible(void) const;
278 void SetFooterVisibleState(bool isFooterVisible);
280 bool IsKeypadVisible(void) const;
282 void SetKeypadVisibleState(bool isKeypadVisible);
284 bool IsKeypadOpened(void) const;
286 void SetKeypadOpened(bool isKeypadOpened);
288 int GetKeypadHeight(void) const;
290 void SetKeypadHeight(int keypadHeight);
292 Tizen::Ui::_ControlOrientation GetPreviousOrientation(void) const;
294 void SetPreviousOrientation(Tizen::Ui::_ControlOrientation orientation);
296 result HttpAuthenticationRequested(Ewk_Auth_Challenge* pChallenge);
298 result ShowGeolocationPopup(Ewk_Geolocation_Permission_Data* pPermissionData);
300 Tizen::Ui::Controls::_Form* GetParentFormCore(Tizen::Ui::_Control* pControlCore);
302 Tizen::Graphics::Bitmap* GetFaviconN(void) const;
308 void SetSelectBox(_SelectBox* pSelectBox);
310 _SelectBox* GetSelectBox(void);
312 void DeleteSelectBox(void);
314 result ShowColorPicker(int r, int g, int b, int a,Tizen::Graphics::Color& color);
315 Eina_Bool HideColorPicker();
316 _InputPickerPopup* GetColorpicker(void);
318 result ShowDatePicker(Ewk_Input_Type inputType, const char* inputValue,Tizen::Base::String& dateStr);
319 _InputPickerPopup* GetDatepicker(void);
322 void SetPolicyDecision(DecisionPolicy policy);
324 DecisionPolicy GetPolicyDecision(void) const;
326 virtual bool OnFocusGained(const Tizen::Ui::_ControlImpl& source);
328 virtual bool OnFocusLost(const Tizen::Ui::_ControlImpl& source);
330 virtual void OnTextValueChangeCanceled(const Tizen::Ui::Control& source);
332 virtual void OnTextValueChanged(const Tizen::Ui::Control& source);
334 virtual result OnAttachedToMainTree(void);
336 virtual void OnChangeLayout(Tizen::Ui::_ControlOrientation orientation);
338 static _WebImpl* CreateWebImplN(Web* pControl, const Tizen::Graphics::Rectangle& bounds);
340 static _WebImpl* GetInstance(Web* pWeb);
342 static const _WebImpl* GetInstance(const Web* pWeb);
345 result InitializeSetting(void);
346 result InitJsBridgeList(void);
347 result InitWebEvent(void);
349 IJavaScriptBridge* FindJsInterface(const Tizen::Web::Json::IJsonValue* pValue) const;
350 result LaunchAppControl(const Tizen::Base::Runtime::IEventArg& arg);
352 result ShowAuthenticationPopup(const Tizen::Base::String& host, const Tizen::Base::String& realm, AuthenticationChallenge* pAuthChallenge);
354 Eina_Hash* ConvertToSlpHeaderN(const Tizen::Net::Http::HttpHeader& header) const;
356 result OnHandleJavaScriptRequestByEventArg(const Tizen::Base::Runtime::IEventArg& arg);
357 result OnHandleLoadingEvent(const Tizen::Base::Runtime::IEventArg& arg);
358 result OnHandleWebDownloadEvent(const Tizen::Base::Runtime::IEventArg& arg);
359 result OnHandleWebUiEvent(const Tizen::Base::Runtime::IEventArg& arg);
360 result OnHandleTextSearchEvent(const Tizen::Base::Runtime::IEventArg& arg);
363 bool __isFooterVisible;
364 bool __isKeypadVisible;
365 bool __isKeypadOpened;
366 bool __isLoadingErrorOccurred;
367 bool __isRedirectRequested;
372 ILoadingListener* __pUserLoadingListener;
373 IWebUiEventListener* __pUserUiListener;
374 IWebKeypadEventListener* __pUserKeypadEventListener;
375 ITextSearchListener* __pTextSearchListener;
377 std::unique_ptr<Tizen::Ui::Controls::Keypad> __pKeypad;
379 std::unique_ptr<WebSetting> __pWebSetting;
381 std::unique_ptr<Tizen::Base::Collection::HashMapT< Tizen::Base::String, IJavaScriptBridge* > > __pJsBridgeList;
382 std::unique_ptr<_JsBridgeHashCodeProvider> __pJsProvider;
383 std::unique_ptr<_JsBridgeComparer> __pJsComparer;
385 std::unique_ptr<_WebDataHandler> __pWebDownloadHandler;
387 std::unique_ptr<_WebEvent> __pWebEvent;
389 std::unique_ptr<AuthenticationChallenge> __pAuthChallenge;
390 std::unique_ptr<_AuthConfirmPopup> __pAuthPopup;
392 std::unique_ptr<_GeolocationConfirmPopup> __pGeolocationPopup;
394 std::unique_ptr<_SelectBox> __pSelectBox;
395 std::unique_ptr<_InputPickerPopup> __pDatePicker;
396 std::unique_ptr<_InputPickerPopup> __pColorPicker;
398 Tizen::Ui::_ControlOrientation __orientation;
400 Tizen::Base::Runtime::Mutex __mutex;
402 _TextSearch __textSearch;
404 DecisionPolicy __policy;
407 }}} // Tizen::Web::Controls
408 #endif // _FWEB_CTRL_INTERNAL_WEB_IMPL_H_