diff options
author | Daniel Silverstone <dsilvers@digital-scurf.org> | 2020-03-22 10:00:29 +0000 |
---|---|---|
committer | Daniel Silverstone <dsilvers@digital-scurf.org> | 2020-03-22 10:00:29 +0000 |
commit | efbfaa0cb1808a3953f1595b9c5e1be9d7994469 (patch) | |
tree | b26e51d0004397a3da6a4328b2b6048175e34bad /desktop | |
parent | 98e461a3b3580cfee2356459557d4f58b7db987c (diff) | |
download | netsurf-efbfaa0cb1808a3953f1595b9c5e1be9d7994469.tar.gz netsurf-efbfaa0cb1808a3953f1595b9c5e1be9d7994469.tar.bz2 |
JS: Move ownership of jsthread from browser to htmlc
Since it makes more sense for the htmlc to be responsible for
when the JS thread gets destroyed, move its lifetime from the
responsibility of the browser window to the html content.
Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
Diffstat (limited to 'desktop')
-rw-r--r-- | desktop/browser_private.h | 6 | ||||
-rw-r--r-- | desktop/browser_window.c | 55 |
2 files changed, 17 insertions, 44 deletions
diff --git a/desktop/browser_private.h b/desktop/browser_private.h index 89dc5cca4..ed2d845de 100644 --- a/desktop/browser_private.h +++ b/desktop/browser_private.h @@ -265,12 +265,6 @@ struct browser_window { /** current javascript context */ struct jsheap *jsheap; - /** The JS thread (if any) for the current content */ - struct jsthread *current_jsthread; - - /** The JS thread (if any) for the loading content */ - struct jsthread *loading_jsthread; - /** cache of the currently displayed status text. */ struct { char *text; /**< Current status bar text. */ diff --git a/desktop/browser_window.c b/desktop/browser_window.c index c98eca832..9151ee1b3 100644 --- a/desktop/browser_window.c +++ b/desktop/browser_window.c @@ -701,11 +701,6 @@ browser_window_convert_to_download(struct browser_window *bw, /* remove content from browser window */ hlcache_handle_release(bw->loading_content); - bw->loading_content = NULL; - if (bw->loading_jsthread != NULL) { - js_destroythread(bw->loading_jsthread); - bw->loading_jsthread = NULL; - } browser_window_stop_throbber(bw); } @@ -723,15 +718,10 @@ static nserror browser_window_content_ready(struct browser_window *bw) if (bw->current_content != NULL) { content_close(bw->current_content); hlcache_handle_release(bw->current_content); - if (bw->current_jsthread != NULL) { - js_destroythread(bw->current_jsthread); - } } bw->current_content = bw->loading_content; - bw->current_jsthread = bw->loading_jsthread; bw->loading_content = NULL; - bw->loading_jsthread = NULL; if (!bw->internal_nav) { /* Transfer the fetch parameters */ @@ -1289,10 +1279,6 @@ browser_window__handle_error(struct browser_window *bw, if (c == bw->loading_content) { bw->loading_content = NULL; - if (bw->loading_jsthread != NULL) { - js_destroythread(bw->loading_jsthread); - bw->loading_jsthread = NULL; - } } else if (c == bw->current_content) { bw->current_content = NULL; browser_window_remove_caret(bw, false); @@ -1499,16 +1485,23 @@ browser_window_callback(hlcache_handle *c, const hlcache_event *event, void *pw) break; case CONTENT_MSG_GETTHREAD: - /* only the content object created by the browser - * window requires a new javascript thread object - */ - assert(bw->loading_content == c); - assert(bw->loading_jsthread == NULL); - if (js_newthread(bw->jsheap, - bw, - hlcache_handle_get_content(c), - &bw->loading_jsthread) == NSERROR_OK) { - *(event->data.jsthread) = bw->loading_jsthread; + { + /* only the content object created by the browser + * window requires a new javascript thread object + */ + jsthread *thread; + assert(bw->loading_content == c); + + if (js_newthread(bw->jsheap, + bw, + hlcache_handle_get_content(c), + &thread) == NSERROR_OK) { + /* The content which is requesting the thread + * is required to keep hold of it and + * to destroy it when it is finished with it. + */ + *(event->data.jsthread) = thread; + } } break; @@ -1752,22 +1745,12 @@ static void browser_window_destroy_internal(struct browser_window *bw) bw->loading_content = NULL; } - if (bw->loading_jsthread != NULL) { - js_destroythread(bw->loading_jsthread); - bw->loading_jsthread = NULL; - } - if (bw->current_content != NULL) { content_close(bw->current_content); hlcache_handle_release(bw->current_content); bw->current_content = NULL; } - if (bw->current_jsthread != NULL) { - js_destroythread(bw->current_jsthread); - bw->current_jsthread = NULL; - } - if (bw->favicon.loading != NULL) { hlcache_handle_abort(bw->favicon.loading); hlcache_handle_release(bw->favicon.loading); @@ -4091,10 +4074,6 @@ void browser_window_stop(struct browser_window *bw) hlcache_handle_abort(bw->loading_content); hlcache_handle_release(bw->loading_content); bw->loading_content = NULL; - if (bw->loading_jsthread != NULL) { - js_destroythread(bw->loading_jsthread); - bw->loading_jsthread = NULL; - } } if (bw->current_content != NULL && |