From 4f9a373960a7bfdcc586d1b90bc75a8aea282aa7 Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Fri, 3 May 2019 13:32:23 +0100 Subject: Support Document::createEvent() Signed-off-by: Daniel Silverstone --- content/handlers/javascript/duktape/Document.bnd | 17 +++++++++++++++++ content/handlers/javascript/duktape/dukky.c | 2 +- content/handlers/javascript/duktape/dukky.h | 1 + 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/content/handlers/javascript/duktape/Document.bnd b/content/handlers/javascript/duktape/Document.bnd index f94a4e43c..23e0425e2 100644 --- a/content/handlers/javascript/duktape/Document.bnd +++ b/content/handlers/javascript/duktape/Document.bnd @@ -320,6 +320,23 @@ getter Document::cookie() return 0; %} +method Document::createEvent () +%{ + /* Create a new event, mark it untrusted since it's new from JS */ + dom_event *evt = NULL; + dom_exception exc; + + exc = dom_event_create(&evt); + if (exc != DOM_NO_ERR) return 0; + exc = dom_event_set_is_trusted(evt, false); + if (exc != DOM_NO_ERR) { dom_event_unref(evt); return 0; } + + dukky_push_event(ctx, evt); + + dom_event_unref(evt); + return 1; +%} + getter Document::onabort(); setter Document::onabort(); getter Document::onautocompleteerror(); diff --git a/content/handlers/javascript/duktape/dukky.c b/content/handlers/javascript/duktape/dukky.c index 750d14b64..5b3c12b95 100644 --- a/content/handlers/javascript/duktape/dukky.c +++ b/content/handlers/javascript/duktape/dukky.c @@ -736,7 +736,7 @@ handle_error: /*** New style event handling ***/ -static void dukky_push_event(duk_context *ctx, dom_event *evt) +void dukky_push_event(duk_context *ctx, dom_event *evt) { /* ... */ duk_get_global_string(ctx, EVENT_MAGIC); diff --git a/content/handlers/javascript/duktape/dukky.h b/content/handlers/javascript/duktape/dukky.h index 7e8a7867c..ee9f47409 100644 --- a/content/handlers/javascript/duktape/dukky.h +++ b/content/handlers/javascript/duktape/dukky.h @@ -36,6 +36,7 @@ void dukky_register_event_listener_for(duk_context *ctx, bool dukky_get_current_value_of_event_handler(duk_context *ctx, dom_string *name, dom_event_target *et); +void dukky_push_event(duk_context *ctx, dom_event *evt); bool dukky_event_target_push_listeners(duk_context *ctx, bool dont_create); typedef enum { -- cgit v1.2.3