// TODO(sngn.lee): create popup and show
}
+void WebApplication::OnAuthenticationRequest(
+ WebView* view,
+ const std::string& url,
+ const std::string& message,
+ std::function<void(bool submit,
+ const std::string& id,
+ const std::string& password)
+ > result_handler) {
+ // TODO(sngn.lee): create popup and show
+ result_handler(false, "", "");
+}
+
+
void WebApplication::HandleDBusMethod(GDBusConnection* /*connection*/,
const std::string& method_name,
GVariant* parameters,
WebView* view,
const std::string& url,
std::function<void(bool)> result_handler);
+ virtual void OnAuthenticationRequest(
+ WebView* view,
+ const std::string& url,
+ const std::string& message,
+ std::function<void(bool submit,
+ const std::string& id,
+ const std::string& password)
+ > result_handler);
+
private:
bool Initialize();
WebView* /*view*/,
const std::string& /*url*/,
std::function<void(bool)> /*result_handler*/) {}
+ virtual void OnAuthenticationRequest(
+ WebView* /*view*/,
+ const std::string& /*url*/,
+ const std::string& /*message*/,
+ std::function<void(bool /*submit*/,
+ const std::string& /*id*/,
+ const std::string& /*password*/)
+ > /*result_handler*/) {}
};
WebView(wrt::NativeWindow* window, Ewk_Context* context);
InitFullscreenCallback();
InitNotificationPermissionCallback();
InitGeolocationPermissionCallback();
+ InitAuthenticationCallback();
// TODO(sngn.lee): "request,certificate,confirm" certification popup
// TODO(sngn.lee): "notification,show"
this);
}
+void WebViewImpl::InitAuthenticationCallback() {
+ auto auth_callback = [](void* user_data,
+ Evas_Object*,
+ void* event_info) {
+ LoggerD("Authentication Request");
+ WebViewImpl* self = static_cast<WebViewImpl*>(user_data);
+ Ewk_Auth_Challenge* auth_challenge =
+ static_cast<Ewk_Auth_Challenge*>(event_info);
+
+ if (self == NULL || self->listener_ == NULL) {
+ ewk_auth_challenge_credential_cancel(auth_challenge);
+ return;
+ }
+ auto result_handler = [auth_challenge](bool submit,
+ const std::string& id,
+ const std::string& password) {
+ LoggerD("Authentication Result : submit %d", submit);
+ if (!submit) {
+ ewk_auth_challenge_credential_cancel(auth_challenge);
+ return;
+ }
+ ewk_auth_challenge_credential_use(auth_challenge,
+ id.c_str(),
+ password.c_str());
+ };
+ ewk_auth_challenge_suspend(auth_challenge);
+ const char* message =
+ ewk_auth_challenge_realm_get(auth_challenge);
+ std::string url = self->GetUrl();
+ self->listener_->OnAuthenticationRequest(self->view_,
+ url,
+ message,
+ result_handler);
+ };
+ // "authentication,challenge"
+ evas_object_smart_callback_add(ewk_view_,
+ "authentication,challenge",
+ auth_callback,
+ this);
+ smart_callbacks_["authentication,challenge"] = auth_callback;
+}
+
std::string WebViewImpl::GetUrl() {
return std::string(ewk_view_url_get(ewk_view_));
}