diff options
Diffstat (limited to 'desktop/browser_window.c')
-rw-r--r-- | desktop/browser_window.c | 55 |
1 files changed, 17 insertions, 38 deletions
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 && |