From 7ec49463dafc20f915ce68c789f36458579783c3 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Tue, 26 Apr 2016 10:26:00 +0100 Subject: fix error reporting from frameset creation --- desktop/browser.c | 10 ++++++---- desktop/frames.c | 25 +++++++++++++------------ desktop/frames.h | 11 ++++++++++- 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/desktop/browser.c b/desktop/browser.c index 2cc13e32a..9316b771d 100644 --- a/desktop/browser.c +++ b/desktop/browser.c @@ -1311,6 +1311,7 @@ static nserror browser_window_callback(hlcache_handle *c, const hlcache_event *event, void *pw) { struct browser_window *bw = pw; + nserror res = NSERROR_OK; switch (event->type) { case CONTENT_MSG_DOWNLOAD: @@ -1414,10 +1415,11 @@ static nserror browser_window_callback(hlcache_handle *c, } /* frames */ - if (content_get_type(c) == CONTENT_HTML && - html_get_frameset(c) != NULL) - browser_window_create_frameset(bw, + if ((content_get_type(c) == CONTENT_HTML) && + (html_get_frameset(c) != NULL)) { + res = browser_window_create_frameset(bw, html_get_frameset(c)); + } if (content_get_type(c) == CONTENT_HTML && html_get_iframe(c) != NULL) browser_window_create_iframes(bw, html_get_iframe(c)); @@ -1704,7 +1706,7 @@ static nserror browser_window_callback(hlcache_handle *c, break; } - return NSERROR_OK; + return res; } diff --git a/desktop/frames.c b/desktop/frames.c index 253e84225..394deb2ad 100644 --- a/desktop/frames.c +++ b/desktop/frames.c @@ -291,14 +291,8 @@ void browser_window_recalculate_iframes(struct browser_window *bw) } -/** - * Create and open a frameset for a browser window. - * - * \param bw The browser window to create the frameset for - * \param frameset The frameset to create - */ - -void browser_window_create_frameset(struct browser_window *bw, +/* exported interface documented in desktop/frames.h */ +nserror browser_window_create_frameset(struct browser_window *bw, struct content_html_frames *frameset) { int row, col, index; @@ -313,8 +307,10 @@ void browser_window_create_frameset(struct browser_window *bw, assert(frameset->cols + frameset->rows != 0); bw->children = calloc((frameset->cols * frameset->rows), sizeof(*bw)); - if (!bw->children) - return; + if (!bw->children) { + return NSERROR_NOMEM; + } + bw->cols = frameset->cols; bw->rows = frameset->rows; for (row = 0; row < bw->rows; row++) { @@ -344,8 +340,11 @@ void browser_window_create_frameset(struct browser_window *bw, window->margin_height = frame->margin_height; if (frame->name) { window->name = strdup(frame->name); - if (!window->name) - warn_user("NoMemory", 0); + if (!window->name) { + free(bw->children); + bw->children = NULL; + return NSERROR_NOMEM; + } } window->scale = bw->scale; @@ -406,6 +405,8 @@ void browser_window_create_frameset(struct browser_window *bw, } } } + + return NSERROR_OK; } diff --git a/desktop/frames.h b/desktop/frames.h index 02c513c22..b39c8a807 100644 --- a/desktop/frames.h +++ b/desktop/frames.h @@ -35,8 +35,17 @@ struct scrollbar_msg_data; nserror browser_window_create_iframes(struct browser_window *bw, struct content_html_iframe *iframe); void browser_window_recalculate_iframes(struct browser_window *bw); -void browser_window_create_frameset(struct browser_window *bw, + +/** + * Create and open a frameset for a browser window. + * + * \param[in,out] bw The browser window to create the frameset for + * \param[in] frameset The frameset to create + * \return NSERROR_OK or error code on faliure + */ +nserror browser_window_create_frameset(struct browser_window *bw, struct content_html_frames *frameset); + void browser_window_recalculate_frameset(struct browser_window *bw); bool browser_window_frame_resize_start(struct browser_window *bw, browser_mouse_state mouse, int x, int y, -- cgit v1.2.3