mirror of
https://github.com/netsurf-browser/netsurf
synced 2024-12-22 12:12:35 +03:00
JS: Add concept of js_closethread
In order to better model content close vs destroy, add the concept of closing a thread to the JS interface. Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
This commit is contained in:
parent
efbfaa0cb1
commit
d1e2eef18b
@ -754,6 +754,26 @@ nserror js_newthread(jsheap *heap, void *win_priv, void *doc_priv, jsthread **th
|
||||
#undef CTX
|
||||
#define CTX (thread->ctx)
|
||||
|
||||
/* exported interface documented in js.h */
|
||||
nserror js_closethread(jsthread *thread)
|
||||
{
|
||||
/* We can always close down a thread, it might just confuse
|
||||
* the code running, though we don't mind since we're in the
|
||||
* process of destruction at this point
|
||||
*/
|
||||
duk_int_t top = duk_get_top(CTX);
|
||||
|
||||
/* Closing down the extant thread */
|
||||
NSLOG(dukky, DEBUG, "Closing down extant thread %p in heap %p", thread, thread->heap);
|
||||
duk_get_global_string(CTX, MAGIC(closedownThread));
|
||||
dukky_pcall(CTX, 0, true);
|
||||
|
||||
/* Restore whatever stack we had */
|
||||
duk_set_top(CTX, top);
|
||||
|
||||
return NSERROR_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroy a Duktape thread
|
||||
*/
|
||||
|
@ -96,15 +96,28 @@ void js_destroyheap(jsheap *heap);
|
||||
*/
|
||||
nserror js_newthread(jsheap *heap, void *win_priv, void *doc_priv, jsthread **thread);
|
||||
|
||||
/**
|
||||
* Close a javascript thread
|
||||
*
|
||||
* This should be called when the HTML content which owns the thread is
|
||||
* being closed. This is a separate process from destroying the thread
|
||||
* and merely disconnects any callbacks and thus hopefully stops
|
||||
* additional JS things from triggering. If any code runs and attempts to
|
||||
* register callbacks after closedown, they will fail.
|
||||
*
|
||||
* \param thread The thread to close down
|
||||
* \return NSERROR_OK on success, appropriate error otherwise
|
||||
*/
|
||||
nserror js_closethread(jsthread *thread);
|
||||
|
||||
/**
|
||||
* Destroy a javascript thread
|
||||
*
|
||||
* This should be called when the browsing context is done with the thread.
|
||||
*
|
||||
* Essentially it should be called when the content is about to be destroyed
|
||||
* but in reality it can be called when the browser window relinquishes its
|
||||
* handle on the content since nominally the browser window itself owns
|
||||
* the thread.
|
||||
* This will be called when the HTML content associated with the browsing
|
||||
* context is being destroyed. The thread should have already been closed
|
||||
* down during the HTML content close.
|
||||
*
|
||||
* \param thread The thread to be destroyed
|
||||
*/
|
||||
|
@ -51,6 +51,11 @@ nserror js_newthread(jsheap *heap, void *win_priv, void *doc_priv, jsthread **th
|
||||
return NSERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
nserror js_closethread(jsthread *thread)
|
||||
{
|
||||
return NSERROR_OK;
|
||||
}
|
||||
|
||||
void js_destroythread(jsthread *thread)
|
||||
{
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user