From 0b689e3904e1433564034ec96f5ac2fa8f83da00 Mon Sep 17 00:00:00 2001 From: Antonio Gomes Date: Mon, 4 Jan 2016 16:31:54 -0400 Subject: [PATCH] Templatize EWebView callback classes. Patch templatizes the following classes in order to remove duplication: - EwkViewPlainTextGetCallback - MHTMLCallbackDetails - QuotaPermissionRequestCallback - WebViewGeolocationPermissionCallback - WebViewUserMediaPermissionCallback - NotificationPermissionCallback - WebViewUnfocusAllowCallback They all share the same logic. Original beta/m47 patches: - http://165.213.202.130/gerrit/#/c/102267/ - http://165.213.202.130/gerrit/#/c/102906/ (by Grzegorz Czajkowski) Bug: http://107.108.218.239/bugzilla/show_bug.cgi?id=15494 Reviewed by: djmix.kim, g.czajkowski Change-Id: I6b8e97b05bed2fe30c4bfe236e9a48748108945c Signed-off-by: Antonio Gomes --- tizen_src/ewk/efl_integration/eweb_view.cc | 131 +++++------------------------ tizen_src/ewk/efl_integration/eweb_view.h | 111 +++++++++++------------- 2 files changed, 68 insertions(+), 174 deletions(-) diff --git a/tizen_src/ewk/efl_integration/eweb_view.cc b/tizen_src/ewk/efl_integration/eweb_view.cc index c529e46..c8407b3 100644 --- a/tizen_src/ewk/efl_integration/eweb_view.cc +++ b/tizen_src/ewk/efl_integration/eweb_view.cc @@ -145,70 +145,6 @@ class WebViewAsyncRequestHitTestDataUserCallback: public WebViewAsyncRequestHitT void* user_data_; }; -class WebViewGeolocationPermissionCallback { - public: - WebViewGeolocationPermissionCallback(Ewk_View_Geolocation_Permission_Callback cb, void* data) - : callback(cb) - , user_data(data) { } - - Eina_Bool Run(Evas_Object* webview, _Ewk_Geolocation_Permission_Request* request, Eina_Bool* callback_result) { - CHECK(callback_result); - if (callback) { - Eina_Bool result = callback(webview, request, user_data); - *callback_result = result; - return true; - } - return false; - } - - private: - Ewk_View_Geolocation_Permission_Callback callback; - void* user_data; -}; - -class WebViewUserMediaPermissionCallback { - public: - WebViewUserMediaPermissionCallback( - Ewk_View_User_Media_Permission_Callback cb, void* data) - : callback(cb) - , user_data(data) { } - - Eina_Bool Run(Evas_Object* webview, _Ewk_User_Media_Permission_Request* request, Eina_Bool* callback_result) { - CHECK(callback_result); - if (callback) { - Eina_Bool result = callback(webview, request, user_data); - *callback_result = result; - return true; - } - return false; - } - - private: - Ewk_View_User_Media_Permission_Callback callback; - void* user_data; -}; - -class WebViewUnfocusAllowCallback { - public: - WebViewUnfocusAllowCallback(Ewk_View_Unfocus_Allow_Callback cb, void* data) - : callback(cb) - , user_data(data) { } - - Eina_Bool Run(Evas_Object* webview, Ewk_Unfocus_Direction direction, Eina_Bool* callback_result) { - CHECK(callback_result); - if (callback) { - Eina_Bool result = callback(webview, direction, user_data); - *callback_result = result; - return true; - } - return false; - } - - private: - Ewk_View_Unfocus_Allow_Callback callback; - void* user_data; -}; - int EWebView::find_request_id_counter_ = 0; content::WebContentsEflDelegate::WebContentsCreateCallback EWebView::create_new_window_web_contents_cb_ = @@ -254,11 +190,6 @@ void EWebView::Initialize() { back_forward_list_.reset(new _Ewk_Back_Forward_List( web_contents_->GetController())); - geolocation_permission_cb_.reset(new WebViewGeolocationPermissionCallback(NULL, NULL)); - user_media_permission_cb_.reset( - new WebViewUserMediaPermissionCallback(NULL, NULL)); - unfocus_allow_cb_.reset(new WebViewUnfocusAllowCallback(NULL, NULL)); - DCHECK(web_contents_->GetRenderViewHost()); // Settings (content::WebPreferences) will be initalized by // RenderViewHostImpl::ComputeWebkitPrefs() based on command line switches. @@ -1433,18 +1364,15 @@ void EWebView::SetOverrideEncoding(const std::string& encoding) { } void EWebView::SetQuotaPermissionRequestCallback(Ewk_Quota_Permission_Request_Callback callback, void *user_data) { - if (callback) - quota_request_callback_.reset(new QuotaPermissionRequestCallback(callback, user_data)); - else - quota_request_callback_.reset(); + quota_request_callback_.Set(callback, user_data); } void EWebView::InvokeQuotaPermissionRequest(_Ewk_Quota_Permission_Request* request, const content::QuotaPermissionContext::PermissionCallback& cb) { quota_permission_request_map_[request] = cb; request->setView(evas_object()); - if (quota_request_callback_.get()) - quota_request_callback_->Run(evas_object(), request); + if (quota_request_callback_.IsCallbackSet()) + quota_request_callback_.Run(evas_object(), request); else QuotaRequestCancel(request); } @@ -1635,34 +1563,23 @@ void EWebView::InvokeWebAppIconUrlsGetCallback(const StringMap &iconUrls, int ca void EWebView::SetNotificationPermissionCallback( Ewk_View_Notification_Permission_Callback callback, void *user_data) { - if (!callback) { - notification_permission_callback_.reset(nullptr); - return; - } - notification_permission_callback_.reset( - new NotificationPermissionCallback(evas_object_, callback, user_data)); + notification_permission_callback_.Set(callback, user_data); } bool EWebView::IsNotificationPermissionCallbackSet() const { - return notification_permission_callback_; + return notification_permission_callback_.IsCallbackSet(); } bool EWebView::InvokeNotificationPermissionCallback( Ewk_Notification_Permission_Request *request) { - if (!notification_permission_callback_) { - return false; - } - return notification_permission_callback_->Run(request); -} - -void EwkViewPlainTextGetCallback::TriggerCallback(Evas_Object* obj, const std::string& content_text) -{ - if(callback_) - (callback_)(obj, content_text.c_str(), user_data_); + Eina_Bool ret = EINA_FALSE; + notification_permission_callback_.Run(evas_object_, request, &ret); + return ret; } int EWebView::SetEwkViewPlainTextGetCallback(Ewk_View_Plain_Text_Get_Callback callback, void* user_data) { - EwkViewPlainTextGetCallback* view_plain_text_callback_ptr = new EwkViewPlainTextGetCallback(callback, user_data); + EwkViewPlainTextGetCallback* view_plain_text_callback_ptr = new EwkViewPlainTextGetCallback; + view_plain_text_callback_ptr->Set(callback, user_data); return plain_text_get_callback_map_.Add(view_plain_text_callback_ptr); } @@ -1676,40 +1593,38 @@ bool EWebView::PlainTextGet(Ewk_View_Plain_Text_Get_Callback callback, void* use void EWebView::InvokePlainTextGetCallback(const std::string& content_text, int plain_text_get_callback_id) { EwkViewPlainTextGetCallback* view_plain_text_callback_invoke_ptr = plain_text_get_callback_map_.Lookup(plain_text_get_callback_id); - view_plain_text_callback_invoke_ptr->TriggerCallback(evas_object(), content_text); + view_plain_text_callback_invoke_ptr->Run(evas_object(), content_text.c_str()); plain_text_get_callback_map_.Remove(plain_text_get_callback_id); } void EWebView::SetViewGeolocationPermissionCallback(Ewk_View_Geolocation_Permission_Callback callback, void* user_data) { - geolocation_permission_cb_.reset(new WebViewGeolocationPermissionCallback(callback, user_data)); + geolocation_permission_cb_.Set(callback, user_data); } bool EWebView::InvokeViewGeolocationPermissionCallback(_Ewk_Geolocation_Permission_Request* permission_context, Eina_Bool* callback_result) { - return geolocation_permission_cb_->Run(evas_object_, permission_context, callback_result); + return geolocation_permission_cb_.Run(evas_object_, permission_context, callback_result); } void EWebView::SetViewUserMediaPermissionCallback( - Ewk_View_User_Media_Permission_Callback callback, - void* user_data) { - user_media_permission_cb_.reset(new WebViewUserMediaPermissionCallback( - callback, user_data)); + Ewk_View_User_Media_Permission_Callback callback, void* user_data) { + user_media_permission_cb_.Set(callback, user_data); } bool EWebView::InvokeViewUserMediaPermissionCallback( _Ewk_User_Media_Permission_Request* permission_context, Eina_Bool* callback_result) { - return user_media_permission_cb_->Run(evas_object_, permission_context, + return user_media_permission_cb_.Run(evas_object_, permission_context, callback_result); } void EWebView::SetViewUnfocusAllowCallback( Ewk_View_Unfocus_Allow_Callback callback, void* user_data) { - unfocus_allow_cb_.reset(new WebViewUnfocusAllowCallback(callback, user_data)); + unfocus_allow_cb_.Set(callback, user_data); } bool EWebView::InvokeViewUnfocusAllowCallback( Ewk_Unfocus_Direction direction, Eina_Bool* callback_result) { - return unfocus_allow_cb_->Run(evas_object_, direction, callback_result); + return unfocus_allow_cb_.Run(evas_object_, direction, callback_result); } void EWebView::StopFinding() { @@ -1743,22 +1658,18 @@ bool EWebView::GetMHTMLData(Ewk_View_MHTML_Data_Get_Callback callback, void* use if (!render_view_host) return false; - MHTMLCallbackDetails* callback_details = new MHTMLCallbackDetails(callback, user_data); + MHTMLCallbackDetails* callback_details = new MHTMLCallbackDetails; + callback_details->Set(callback, user_data); int mhtml_callback_id = mhtml_callback_map_.Add(callback_details); return render_view_host->Send(new EwkViewMsg_GetMHTMLData(render_view_host->GetRoutingID(), mhtml_callback_id)); } void EWebView::OnMHTMLContentGet(const std::string& mhtml_content, int callback_id) { MHTMLCallbackDetails* callback_details = mhtml_callback_map_.Lookup(callback_id); - callback_details->Run(evas_object(), mhtml_content); + callback_details->Run(evas_object(), mhtml_content.c_str()); mhtml_callback_map_.Remove(callback_id); } -void MHTMLCallbackDetails::Run(Evas_Object* obj, const std::string& mhtml_content) { - if (callback_func_) - callback_func_(obj, mhtml_content.c_str(), user_data_); -} - bool EWebView::IsFullscreen() { return web_contents_delegate_->IsFullscreenForTabOrPending(web_contents_.get()); } diff --git a/tizen_src/ewk/efl_integration/eweb_view.h b/tizen_src/ewk/efl_integration/eweb_view.h index d424a6a..7a16f52 100644 --- a/tizen_src/ewk/efl_integration/eweb_view.h +++ b/tizen_src/ewk/efl_integration/eweb_view.h @@ -70,29 +70,37 @@ class Ewk_Context; class WebViewEvasEventHandler; class _Ewk_Quota_Permission_Request; -class EwkViewPlainTextGetCallback { +template +class WebViewCallback { public: - EwkViewPlainTextGetCallback(Ewk_View_Plain_Text_Get_Callback callback, - void* user_data) - : callback_(callback), user_data_(user_data) - { } - void TriggerCallback(Evas_Object* obj, const std::string& content_text); + WebViewCallback() { Set(nullptr, nullptr); } - private: - Ewk_View_Plain_Text_Get_Callback callback_; - void* user_data_; -}; + void Set(CallbackPtr cb, void* data) { + callback_ = cb; + user_data_ = data; + } -class MHTMLCallbackDetails { - public: - MHTMLCallbackDetails(Ewk_View_MHTML_Data_Get_Callback callback_func, void *user_data) - : callback_func_(callback_func), - user_data_(user_data) - {} - void Run(Evas_Object* obj, const std::string& mhtml_content); + bool IsCallbackSet() const { + return callback_; + } - Ewk_View_MHTML_Data_Get_Callback callback_func_; - void *user_data_; + Eina_Bool Run(Evas_Object* webview, CallbackParameter param, Eina_Bool* callback_result) { + CHECK(callback_result); + if (IsCallbackSet()) { + *callback_result = callback_(webview, param, user_data_); + return true; + } + return false; + } + + void Run(Evas_Object* webview, CallbackParameter param) { + if (IsCallbackSet()) + callback_(webview, param, user_data_); + } + + private: + CallbackPtr callback_; + void* user_data_; }; class WebApplicationIconUrlGetCallback { @@ -148,47 +156,8 @@ class WebApplicationCapableGetCallback { void *user_data_; }; -class AsyncHitTestRequest; -class NotificationPermissionCallback { - public: - NotificationPermissionCallback( - Evas_Object* obj, - Ewk_View_Notification_Permission_Callback func, - void* user_data) - : obj_(obj), func_(func), user_data_(user_data) {} - bool Run(Ewk_Notification_Permission_Request* request) { - if (func_) { - return (func_)(obj_, request, user_data_) == EINA_TRUE; - } - return false; - } - -private: - Evas_Object* obj_; - Ewk_View_Notification_Permission_Callback func_; - void* user_data_; -}; - -class QuotaPermissionRequestCallback { -public: - QuotaPermissionRequestCallback(Ewk_Quota_Permission_Request_Callback func, void* user_data) - : func_(func), user_data_(user_data) - {} - void Run(Evas_Object* obj, const _Ewk_Quota_Permission_Request* req) { - if (func_) { - (func_)(obj, req, user_data_); - } - } -private: - Ewk_Quota_Permission_Request_Callback func_; - void* user_data_; -}; - class WebViewAsyncRequestHitTestDataCallback; class JavaScriptDialogManagerEfl; -class WebViewGeolocationPermissionCallback; -class WebViewUserMediaPermissionCallback; -class WebViewUnfocusAllowCallback; class PermissionPopupManager; class EWebView { @@ -512,32 +481,46 @@ class EWebView { base::string16 previous_text_; int current_find_request_id_; static int find_request_id_counter_; + + typedef WebViewCallback EwkViewPlainTextGetCallback; IDMap plain_text_get_callback_map_; + + typedef WebViewCallback MHTMLCallbackDetails; + IDMap mhtml_callback_map_; + gfx::Size contents_size_; double progress_; mutable std::string title_; mutable std::string pem_certificate_; Hit_Test_Params hit_test_params_; base::WaitableEvent hit_test_completion_; - IDMap mhtml_callback_map_; double page_scale_factor_; double min_page_scale_factor_; double max_page_scale_factor_; - scoped_ptr geolocation_permission_cb_; - scoped_ptr user_media_permission_cb_; - scoped_ptr unfocus_allow_cb_; + + WebViewCallback geolocation_permission_cb_; + WebViewCallback user_media_permission_cb_; + WebViewCallback unfocus_allow_cb_; + WebViewCallback notification_permission_callback_; + WebViewCallback quota_request_callback_; + scoped_ptr inputPicker_; IDMap web_app_icon_url_get_callback_map_; IDMap web_app_icon_urls_get_callback_map_; IDMap web_app_capable_get_callback_map_; - scoped_ptr notification_permission_callback_; scoped_ptr permission_popup_manager_; scoped_ptr scroll_detector_; + #if defined(OS_TIZEN_MOBILE) content::FileChooserParams::Mode filechooser_mode_; #endif std::map quota_permission_request_map_; - scoped_ptr quota_request_callback_; + bool is_initialized_; scoped_ptr<_Ewk_Back_Forward_List> back_forward_list_; -- 2.7.4