const char* kGeolocationPermissionPrefix = "__WRT_GEOPERM_";
const char* kNotificationPermissionPrefix = "__WRT_NOTIPERM_";
const char* kQuotaPermissionPrefix = "__WRT_QUOTAPERM_";
-
+const char* kCertificateAllowPrefix = "__WRT_CERTIPERM_";
bool FindPrivilege(wrt::ApplicationData* app_data,
result_handler(false, "", "");
}
+void WebApplication::OnCertificateAllowRequest(
+ WebView* view,
+ const std::string& url,
+ const std::string& pem,
+ std::function<void(bool allow)> result_handler) {
+ auto db = AppDB::GetInstance();
+ std::string reminder = db->Get(kCertificateAllowPrefix + pem);
+ if (reminder == "allowed") {
+ result_handler(true);
+ } else if (reminder == "denied") {
+ result_handler(false);
+ }
+
+ // TODO(sngn.lee): create poup and show
+ result_handler(false);
+}
+
void WebApplication::HandleDBusMethod(GDBusConnection* /*connection*/,
const std::string& method_name,
const std::string& /*id*/,
const std::string& /*password*/)
> /*result_handler*/) {}
+ virtual void OnCertificateAllowRequest(
+ WebView* /*view*/,
+ const std::string& /*url*/,
+ const std::string& /*pem*/,
+ std::function<void(bool allow)> result_handler) {
+ result_handler(false);
+ }
};
WebView(wrt::NativeWindow* window, Ewk_Context* context);
InitNotificationPermissionCallback();
InitGeolocationPermissionCallback();
InitAuthenticationCallback();
+ InitCertificateAllowCallback();
- // TODO(sngn.lee): "request,certificate,confirm" certification popup
// TODO(sngn.lee): "notification,show"
// TODO(sngn.lee): "notification,cancel"
// TODO(sngn.lee): "protocolhandler,registration,requested"
smart_callbacks_["authentication,challenge"] = auth_callback;
}
+void WebViewImpl::InitCertificateAllowCallback() {
+ auto certi_callback = [](void* user_data,
+ Evas_Object*,
+ void* event_info) {
+ WebViewImpl* self = static_cast<WebViewImpl*>(user_data);
+ Ewk_Certificate_Policy_Decision* policy =
+ static_cast<Ewk_Certificate_Policy_Decision*>(event_info);
+
+ if (self == NULL || self->listener_ == NULL) {
+ ewk_certificate_policy_decision_allowed_set(policy, EINA_FALSE);
+ return;
+ }
+
+ ewk_certificate_policy_decision_suspend(policy);
+ auto result_handler = [policy](bool allow) {
+ ewk_certificate_policy_decision_allowed_set(policy, allow);
+ };
+
+ auto ptr = ewk_certificate_policy_decision_url_get(policy);
+ std::string url(ptr ? ptr : "");
+ ptr = ewk_certificate_policy_decision_certificate_pem_get(policy);
+ std::string pem(ptr ? ptr : "");
+ self->listener_->OnCertificateAllowRequest(self->view_,
+ url,
+ pem,
+ result_handler);
+ };
+ evas_object_smart_callback_add(ewk_view_,
+ "request,certificate,confirm",
+ certi_callback,
+ this);
+ smart_callbacks_["request,certificate,confirm"] = certi_callback;
+}
+
+
std::string WebViewImpl::GetUrl() {
return std::string(ewk_view_url_get(ewk_view_));
}