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_ =
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.
}
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);
}
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);
}
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() {
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());
}
class WebViewEvasEventHandler;
class _Ewk_Quota_Permission_Request;
-class EwkViewPlainTextGetCallback {
+template <typename CallbackPtr, typename CallbackParameter>
+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 {
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 {
base::string16 previous_text_;
int current_find_request_id_;
static int find_request_id_counter_;
+
+ typedef WebViewCallback<Ewk_View_Plain_Text_Get_Callback, const char*> EwkViewPlainTextGetCallback;
IDMap<EwkViewPlainTextGetCallback, IDMapOwnPointer> plain_text_get_callback_map_;
+
+ typedef WebViewCallback<Ewk_View_MHTML_Data_Get_Callback, const char*> MHTMLCallbackDetails;
+ IDMap<MHTMLCallbackDetails, IDMapOwnPointer> 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<MHTMLCallbackDetails, IDMapOwnPointer> mhtml_callback_map_;
double page_scale_factor_;
double min_page_scale_factor_;
double max_page_scale_factor_;
- scoped_ptr<WebViewGeolocationPermissionCallback> geolocation_permission_cb_;
- scoped_ptr<WebViewUserMediaPermissionCallback> user_media_permission_cb_;
- scoped_ptr<WebViewUnfocusAllowCallback> unfocus_allow_cb_;
+
+ WebViewCallback<Ewk_View_Geolocation_Permission_Callback,
+ _Ewk_Geolocation_Permission_Request*> geolocation_permission_cb_;
+ WebViewCallback<Ewk_View_User_Media_Permission_Callback,
+ _Ewk_User_Media_Permission_Request*> user_media_permission_cb_;
+ WebViewCallback<Ewk_View_Unfocus_Allow_Callback,
+ Ewk_Unfocus_Direction> unfocus_allow_cb_;
+ WebViewCallback<Ewk_View_Notification_Permission_Callback,
+ Ewk_Notification_Permission_Request*> notification_permission_callback_;
+ WebViewCallback<Ewk_Quota_Permission_Request_Callback,
+ const _Ewk_Quota_Permission_Request*> quota_request_callback_;
+
scoped_ptr<content::InputPicker> inputPicker_;
IDMap<WebApplicationIconUrlGetCallback, IDMapOwnPointer> web_app_icon_url_get_callback_map_;
IDMap<WebApplicationIconUrlsGetCallback, IDMapOwnPointer> web_app_icon_urls_get_callback_map_;
IDMap<WebApplicationCapableGetCallback, IDMapOwnPointer> web_app_capable_get_callback_map_;
- scoped_ptr<NotificationPermissionCallback> notification_permission_callback_;
scoped_ptr<PermissionPopupManager> permission_popup_manager_;
scoped_ptr<ScrollDetector> scroll_detector_;
+
#if defined(OS_TIZEN_MOBILE)
content::FileChooserParams::Mode filechooser_mode_;
#endif
std::map<const _Ewk_Quota_Permission_Request*, content::QuotaPermissionContext::PermissionCallback> quota_permission_request_map_;
- scoped_ptr<QuotaPermissionRequestCallback> quota_request_callback_;
+
bool is_initialized_;
scoped_ptr<_Ewk_Back_Forward_List> back_forward_list_;