"for (var i=0; i < window.frames.length; i++)\n"
"{ window.frames[i].document.dispatchEvent(__event); }"
"})()";
-
const char* kFullscreenPrivilege = "http://tizen.org/privilege/fullscreen";
const char* kFullscreenFeature = "fullscreen";
+ const char* kNotificationPrivilege =
+ "http://tizen.org/privilege/notification";
bool FindPrivilege(wrt::ApplicationData* app_data,
const std::string& privilege) {
}
return false;
}
-
} // namespace
namespace wrt {
return true;
}
+void WebApplication::OnNotificationPermissionRequest(
+ WebView* view,
+ const std::string& url,
+ std::function<void(bool)> result_handler) {
+ // TODO(sngn.lee): check from DB url was already allowed
+ // if(check already allow or denied) {
+ // result_handler(true);
+ // return;
+ // }
+ // Local Domain: Grant permission if defined, otherwise Popup user prompt.
+ // Remote Domain: Popup user prompt.
+ if (utils::StartsWith(url, "file://") &&
+ FindPrivilege(app_data_.get(), kNotificationPrivilege)) {
+ result_handler(true);
+ return;
+ }
+
+ // TODO(sngn.lee): create popup and show
+}
+
+
} // namespace wrt
#include <Elementary.h>
#include <ewk_ipc_message.h>
#include <string>
+#include <functional>
class Ewk_Context;
int /*preferred_rotation*/) {}
virtual void OnConsoleMessage(const std::string& /*msg*/, int /*level*/) {}
virtual bool OnContextMenuDisabled(WebView* /*view*/) { return false; }
+
+ virtual void OnNotificationPermissionRequest(
+ WebView* /*view*/,
+ const std::string& /*url*/,
+ std::function<void(bool)> /*result_handler*/) {}
};
WebView(wrt::NativeWindow* window, Ewk_Context* context);
#include <sstream>
#include "runtime/native_window.h"
+#include "common/logger.h"
namespace wrt {
InitRotationCallback();
InitWindowCreateCallback();
InitFullscreenCallback();
+ InitNotificationPermissionCallback();
// TODO(sngn.lee): "request,certificate,confirm" certification popup
- // TODO(sngn.lee): ewk_view_notification_permission_callback_set
// TODO(sngn.lee): "notification,show"
// TODO(sngn.lee): "notification,cancel"
- // TODO(sngn.lee): "create,window"
- // TODO(sngn.lee): "close,window"
// TODO(sngn.lee): "protocolhandler,registration,requested"
// custom protocol handler
// TODO(sngn.lee): ewk_view_geolocation_permission_callback_set
ewk_view_,
NULL,
NULL);
+ ewk_view_notification_permission_callback_set(
+ ewk_view_,
+ NULL,
+ NULL);
window_->RemoveRotationHandler(rotation_handler_id_);
}
smart_callbacks_["fullscreen,exitfullscreen"] = exit_callback;
}
+void WebViewImpl::InitNotificationPermissionCallback() {
+ auto request_callback = [](Evas_Object*,
+ Ewk_Notification_Permission_Request* request,
+ void* user_data) {
+ LoggerD("Notification Permission Request");
+ WebViewImpl* self = static_cast<WebViewImpl*>(user_data);
+ if (!self->listener_) {
+ ewk_notification_permission_reply(request, EINA_FALSE);
+ return EINA_TRUE;
+ }
+
+ ewk_notification_permission_request_suspend(request);
+ auto result_handler = [request](bool result) {
+ LoggerD("Notification Permission Result : %d", result);
+ ewk_notification_permission_reply(request, result);
+ };
+ const Ewk_Security_Origin* ewk_origin =
+ ewk_notification_permission_request_origin_get(request);
+
+ std::stringstream url;
+ url << ewk_security_origin_protocol_get(ewk_origin)
+ << "://"
+ << ewk_security_origin_host_get(ewk_origin)
+ << ":"
+ << ewk_security_origin_port_get(ewk_origin);
+ self->listener_->OnNotificationPermissionRequest(
+ self->view_,
+ url.str(),
+ result_handler);
+ return EINA_TRUE;
+ };
+ ewk_view_notification_permission_callback_set(ewk_view_,
+ request_callback,
+ this);
+}
+
std::string WebViewImpl::GetUrl() {
return std::string(ewk_view_url_get(ewk_view_));