[wpe-webkit] Calling a JS function from a web extension thread aborts

Ludovic Cintrat ludovic.cintrat at nexvision.fr
Mon May 10 09:40:56 PDT 2021


Hi all,

I am writing a web extension for WPE Webkit, and the extension needs to 
asynchronously send and signal new data to the JS context.
Relevant parts of the native code below.

-------

JSCValue *metadata_callback;

void register_metadata_callback(JSCValue *value) {

   g_return_if_fail(jsc_value_is_function(value));

   g_object_ref(G_OBJECT(value));

   metadata_callback = value;
}

void register_class(JSCContext *context) {

   JSCClass *jscClass = jsc_context_register_class(context, "Pipeline", 
nullptr,
                                                   nullptr, nullptr);
   g_assert_true(jscClass != nullptr);

   JSCValue *constructor = jsc_class_add_constructor(
       jscClass, nullptr, G_CALLBACK(pipeline_init), nullptr, nullptr,
       pipeline_get_type(), 1, G_TYPE_STRING);

   g_assert_true(constructor != nullptr);

   jsc_class_add_method(jscClass, "registerMetadataCallback",
                        G_CALLBACK(register_metadata_callback),
                        nullptr, nullptr, G_TYPE_NONE, 1, JSC_TYPE_VALUE);

   jsc_context_set_value(context, "Pipeline", constructor);
}

-------

And from another thread created by the extension, the following code is 
called:

jsc_value_function_call(metadata_callback, G_TYPE_NONE);

-------

JS part:

var pipeline = new Pipeline("test")
pipeline.registerMetadataCallback(md_cb)

-------

Abort occurs with the following message if the JS callback function 
changes the DOM:

ASSERTION FAILED: Unsafe to ref/deref from different threads
m_isOwnedByMainThread == isMainThread()
DerivedSources/ForwardingHeaders/wtf/RefCounted.h(114) : void 
WTF::RefCountedBase::applyRefDerefThreadingCheck() const

If only a JS variable is changed for example there is no such abort.

How can I call a JS callback from the main thread from a web extension?
Maybe another way exists for that feature?

Best regards,
Ludovic



More information about the webkit-wpe mailing list