Gitweb links:
...log
http://git.netsurf-browser.org/netsurf.git/shortlog/cfdaf181a28c463e041ee55585b8d559fd14aed9
...commit
http://git.netsurf-browser.org/netsurf.git/commit/cfdaf181a28c463e041ee55585b8d559fd14aed9
...tree
http://git.netsurf-browser.org/netsurf.git/tree/cfdaf181a28c463e041ee55585b8d559fd14aed9
The branch, master has been updated
via cfdaf181a28c463e041ee55585b8d559fd14aed9 (commit)
via c2fa6af0ff4098501560bd48f78dfbf9173f4021 (commit)
from f46b77160a0244b83ccd486df82ce14f7a4df59e (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff
http://git.netsurf-browser.org/netsurf.git/commit/?id=cfdaf181a28c463e041ee55585b8d559fd14aed9
commit cfdaf181a28c463e041ee55585b8d559fd14aed9
Author: Vincent Sanders <[email protected]>
Commit: Vincent Sanders <[email protected]>
cleanup browser window message handling
separate out ready and done message processing to make the code
more readable.
remove checking of content status as content_close() handles that
itself.
diff --git a/desktop/browser.c b/desktop/browser.c
index a3664ac..663bfd0 100644
--- a/desktop/browser.c
+++ b/desktop/browser.c
@@ -130,7 +130,7 @@ browser_window_get_name(struct browser_window *bw, const
char **out_name)
/* exported interface, documented in browser.h */
-nserror
+nserror
browser_window_set_name(struct browser_window *bw, const char *name)
{
char *nname = NULL;
@@ -143,7 +143,7 @@ browser_window_set_name(struct browser_window *bw, const
char *name)
return NSERROR_NOMEM;
}
}
-
+
if (bw->name != NULL) {
free(bw->name);
}
@@ -1076,13 +1076,7 @@ browser_window_favicon_callback(hlcache_handle *c,
switch (event->type) {
case CONTENT_MSG_DONE:
if (bw->favicon.current != NULL) {
- content_status status =
- content_get_status(bw->favicon.current);
-
- if ((status == CONTENT_STATUS_READY) ||
- (status == CONTENT_STATUS_DONE))
- content_close(bw->favicon.current);
-
+ content_close(bw->favicon.current);
hlcache_handle_release(bw->favicon.current);
}
@@ -1344,6 +1338,143 @@ static void browser_window_convert_to_download(struct
browser_window *bw,
browser_window_stop_throbber(bw);
}
+/**
+ * handle message for content ready on browser window
+ */
+static nserror
+browser_window_content_ready(struct browser_window *bw)
+{
+ int width, height;
+ nserror res = NSERROR_OK;
+
+ /* close and release the current window content */
+ if (bw->current_content != NULL) {
+ content_close(bw->current_content);
+ hlcache_handle_release(bw->current_content);
+ }
+
+ bw->current_content = bw->loading_content;
+ bw->loading_content = NULL;
+
+ /* Format the new content to the correct dimensions */
+ browser_window_get_dimensions(bw, &width, &height, true);
+ content_reformat(bw->current_content, false, width, height);
+
+ /* history */
+ if (bw->history_add && bw->history) {
+ nsurl *url = hlcache_handle_get_url(bw->current_content);
+
+ if (urldb_add_url(url)) {
+ urldb_set_url_title(url,
content_get_title(bw->current_content));
+ urldb_update_url_visit_data(url);
+ urldb_set_url_content_type(url,
+
content_get_type(bw->current_content));
+
+ /* This is safe as we've just added the URL */
+ global_history_add(urldb_get_url(url));
+ }
+ /**
+ * \todo Urldb / Thumbnails / Local history brokenness
+ *
+ * We add to local history after calling urldb_add_url rather
+ * than in the block above. If urldb_add_url fails (as it
+ * will for urls like "about:about", "about:config" etc),
+ * there would be no local history node, and later calls to
+ * history_update will either explode or overwrite the node
+ * for the previous URL.
+ *
+ * We call it after, rather than before urldb_add_url because
+ * history_add calls bitmap render, which tries to register
+ * the thumbnail with urldb. That thumbnail registration
+ * fails if the url doesn't exist in urldb already, and only
+ * urldb-registered thumbnails get freed. So if we called
+ * history_add before urldb_add_url we would leak thumbnails
+ * for all newly visited URLs. With the history_add call
+ * after, we only leak the thumbnails when urldb does not add
+ * the URL.
+ *
+ * Also, since browser_window_history_add can create a
+ * thumbnail (content_redraw), we need to do it after
+ * content_reformat.
+ */
+ browser_window_history_add(bw, bw->current_content,
bw->frag_id);
+ }
+
+ browser_window_remove_caret(bw, false);
+
+ if (bw->window != NULL) {
+ guit->window->new_content(bw->window);
+
+ browser_window_refresh_url_bar(bw);
+ }
+
+ /* new content; set scroll_to_top */
+ browser_window_update(bw, true);
+ content_open(bw->current_content, bw, 0, 0);
+ browser_window_set_status(bw,
content_get_status_message(bw->current_content));
+
+ /* frames */
+ if ((content_get_type(bw->current_content) == CONTENT_HTML) &&
+ (html_get_frameset(bw->current_content) != NULL)) {
+ res = browser_window_create_frameset(bw,
html_get_frameset(bw->current_content));
+ }
+
+ if (content_get_type(bw->current_content) == CONTENT_HTML &&
+ html_get_iframe(bw->current_content) != NULL) {
+ browser_window_create_iframes(bw,
html_get_iframe(bw->current_content));
+ }
+
+ return res;
+}
+
+
+/**
+ * handle message for content done on browser window
+ */
+static nserror
+browser_window_content_done(struct browser_window *bw)
+{
+ float sx, sy;
+ struct rect rect;
+ int scrollx;
+ int scrolly;
+
+ if (bw->window == NULL) {
+ /* Updated browser window's scrollbars. */
+ /**
+ * \todo update browser window scrollbars before
CONTENT_MSG_DONE
+ */
+ browser_window_reformat(bw, true, bw->width, bw->height);
+ browser_window_handle_scrollbars(bw);
+ }
+
+ browser_window_update(bw, false);
+ browser_window_set_status(bw,
content_get_status_message(bw->current_content));
+ browser_window_stop_throbber(bw);
+ browser_window_update_favicon(bw->current_content, bw, NULL);
+
+ if (browser_window_history_get_scroll(bw, &sx, &sy) == NSERROR_OK) {
+ scrollx = (int)((float)content_get_width(bw->current_content) *
sx);
+ scrolly = (int)((float)content_get_height(bw->current_content)
* sy);
+ rect.x0 = rect.x1 = scrollx;
+ rect.y0 = rect.y1 = scrolly;
+ if (browser_window_set_scroll(bw, &rect) != NSERROR_OK) {
+ NSLOG(netsurf, WARNING,
+ "Unable to set browser scroll offsets to %d by
%d",
+ scrollx, scrolly);
+ }
+ }
+
+ browser_window_history_update(bw, bw->current_content);
+ hotlist_update_url(hlcache_handle_get_url(bw->current_content));
+
+ if (bw->refresh_interval != -1) {
+ guit->misc->schedule(bw->refresh_interval * 10,
+ browser_window_refresh, bw);
+ }
+
+ return NSERROR_OK;
+}
/**
* Browser window content event callback handler.
@@ -1355,7 +1486,6 @@ browser_window_callback(hlcache_handle *c,
{
struct browser_window *bw = pw;
nserror res = NSERROR_OK;
- float sx, sy;
switch (event->type) {
case CONTENT_MSG_LOG:
@@ -1393,130 +1523,15 @@ browser_window_callback(hlcache_handle *c,
break;
case CONTENT_MSG_READY:
- {
- int width, height;
-
assert(bw->loading_content == c);
- if (bw->current_content != NULL) {
- content_status status =
- content_get_status(bw->current_content);
-
- if (status == CONTENT_STATUS_READY ||
- status == CONTENT_STATUS_DONE)
- content_close(bw->current_content);
-
- hlcache_handle_release(bw->current_content);
- }
-
- bw->current_content = c;
- bw->loading_content = NULL;
-
- /* Format the new content to the correct dimensions */
- browser_window_get_dimensions(bw, &width, &height, true);
- content_reformat(c, false, width, height);
-
- /* history */
- if (bw->history_add && bw->history) {
- nsurl *url = hlcache_handle_get_url(c);
-
- if (urldb_add_url(url)) {
- urldb_set_url_title(url, content_get_title(c));
- urldb_update_url_visit_data(url);
- urldb_set_url_content_type(url,
- content_get_type(c));
-
- /* This is safe as we've just added the URL */
- global_history_add(urldb_get_url(url));
- }
- /** \todo Urldb / Thumbnails / Local history brokenness
- *
- * We add to local history after calling urldb_add_url
- * rather than in the block above. If urldb_add_url
- * fails (as it will for urls like "about:about",
- * "about:config" etc), there would be no local history
- * node, and later calls to history_update will either
- * explode or overwrite the node for the previous URL.
- *
- * We call it after, rather than before urldb_add_url
- * because history_add calls bitmap render, which
- * tries to register the thumbnail with urldb. That
- * thumbnail registration fails if the url doesn't
- * exist in urldb already, and only urldb-registered
- * thumbnails get freed. So if we called history_add
- * before urldb_add_url we would leak thumbnails for
- * all newly visited URLs. With the history_add call
- * after, we only leak the thumbnails when urldb does
- * not add the URL.
- *
- * Also, since browser_window_history_add can create
- * a thumbnail (content_redraw), we need to do it after
- * content_reformat.
- */
- browser_window_history_add(bw, c, bw->frag_id);
- }
-
- browser_window_remove_caret(bw, false);
-
- if (bw->window != NULL) {
- guit->window->new_content(bw->window);
-
- browser_window_refresh_url_bar(bw);
- }
-
- /* new content; set scroll_to_top */
- browser_window_update(bw, true);
- content_open(c, bw, 0, 0);
- browser_window_set_status(bw, content_get_status_message(c));
-
- /* frames */
- 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));
- }
+ res = browser_window_content_ready(bw);
break;
case CONTENT_MSG_DONE:
assert(bw->current_content == c);
- if (bw->window == NULL) {
- /* Updated browser window's scrollbars.
- * TODO: do this before CONTENT_MSG_DONE */
- browser_window_reformat(bw, true,
- bw->width, bw->height);
- browser_window_handle_scrollbars(bw);
- }
-
- browser_window_update(bw, false);
- browser_window_set_status(bw, content_get_status_message(c));
- browser_window_stop_throbber(bw);
- browser_window_update_favicon(c, bw, NULL);
-
- if (browser_window_history_get_scroll(bw, &sx, &sy) ==
NSERROR_OK) {
- int scrollx =
(int)((float)content_get_width(bw->current_content) * sx);
- int scrolly =
(int)((float)content_get_height(bw->current_content) * sy);
- struct rect rect;
- rect.x0 = rect.x1 = scrollx;
- rect.y0 = rect.y1 = scrolly;
- if (browser_window_set_scroll(bw, &rect) != NSERROR_OK)
{
- NSLOG(netsurf, WARNING,
- "Unable to set browser scroll offsets to
%d by %d",
- scrollx, scrolly);
- }
- }
-
- browser_window_history_update(bw, c);
- hotlist_update_url(hlcache_handle_get_url(c));
-
- if (bw->refresh_interval != -1) {
- guit->misc->schedule(bw->refresh_interval * 10,
- browser_window_refresh, bw);
- }
+ res = browser_window_content_done(bw);
break;
case CONTENT_MSG_ERRORCODE:
@@ -1531,9 +1546,9 @@ browser_window_callback(hlcache_handle *c,
guit->misc->warning(event->data.error, NULL);
}
- if (c == bw->loading_content)
+ if (c == bw->loading_content) {
bw->loading_content = NULL;
- else if (c == bw->current_content) {
+ } else if (c == bw->current_content) {
bw->current_content = NULL;
browser_window_remove_caret(bw, false);
}
@@ -1908,11 +1923,7 @@ static void browser_window_destroy_internal(struct
browser_window *bw)
}
if (bw->current_content != NULL) {
- content_status status = content_get_status(bw->current_content);
- if (status == CONTENT_STATUS_READY ||
- status == CONTENT_STATUS_DONE)
- content_close(bw->current_content);
-
+ content_close(bw->current_content);
hlcache_handle_release(bw->current_content);
bw->current_content = NULL;
}
@@ -1924,13 +1935,7 @@ static void browser_window_destroy_internal(struct
browser_window *bw)
}
if (bw->favicon.current != NULL) {
- content_status status = content_get_status(bw->favicon.current);
-
- if (status == CONTENT_STATUS_READY ||
- status == CONTENT_STATUS_DONE) {
- content_close(bw->favicon.current);
- }
-
+ content_close(bw->favicon.current);
hlcache_handle_release(bw->favicon.current);
bw->favicon.current = NULL;
}
@@ -1965,7 +1970,7 @@ static void browser_window_destroy_internal(struct
browser_window *bw)
* \param bw Browser window to update URL bar for.
* \param url URL for content displayed by bw including any fragment.
*/
-static inline nserror
+static inline nserror
browser_window_refresh_url_bar_internal(struct browser_window *bw, nsurl *url)
{
assert(bw);
@@ -2326,7 +2331,7 @@ const char* browser_window_get_title(struct
browser_window *bw)
}
/* no content so return about:blank */
- return nsurl_access(corestring_nsurl_about_blank);
+ return nsurl_access(corestring_nsurl_about_blank);
}
/* Exported interface, documented in browser.h */
commitdiff
http://git.netsurf-browser.org/netsurf.git/commit/?id=c2fa6af0ff4098501560bd48f78dfbf9173f4021
commit c2fa6af0ff4098501560bd48f78dfbf9173f4021
Author: Vincent Sanders <[email protected]>
Commit: Vincent Sanders <[email protected]>
make content close check the content status itself
make content handler open and close return error status
diff --git a/content/content.c b/content/content.c
index 3a56280..f530340 100644
--- a/content/content.c
+++ b/content/content.c
@@ -67,12 +67,12 @@ static void content_convert(struct content *c);
nserror content__init(struct content *c, const content_handler *handler,
lwc_string *imime_type, const struct http_parameter *params,
- llcache_handle *llcache, const char *fallback_charset,
+ llcache_handle *llcache, const char *fallback_charset,
bool quirks)
{
struct content_user *user_sentinel;
nserror error;
-
+
NSLOG(netsurf, INFO, "url "URL_FMT_SPC" -> %p",
nsurl_access_log(llcache_handle_get_url(llcache)), c);
@@ -116,7 +116,7 @@ nserror content__init(struct content *c, const
content_handler *handler,
content_set_status(c, messages_get("Loading"));
/* Finally, claim low-level cache events */
- error = llcache_handle_change_callback(llcache,
+ error = llcache_handle_change_callback(llcache,
content_llcache_callback, c);
if (error != NSERROR_OK) {
lwc_string_unref(c->mime_type);
@@ -147,8 +147,8 @@ nserror content_llcache_callback(llcache_handle *llcache,
break;
case LLCACHE_EVENT_HAD_DATA:
if (c->handler->process_data != NULL) {
- if (c->handler->process_data(c,
- (const char *) event->data.data.buf,
+ if (c->handler->process_data(c,
+ (const char *) event->data.data.buf,
event->data.data.len) == false) {
llcache_handle_abort(c->llcache);
c->status = CONTENT_STATUS_ERROR;
@@ -273,7 +273,7 @@ void content_convert(struct content *c)
if (c->locked == true)
return;
-
+
NSLOG(netsurf, INFO, "content "URL_FMT_SPC" (%p)",
nsurl_access_log(llcache_handle_get_url(c->llcache)), c);
@@ -295,7 +295,7 @@ void content_convert(struct content *c)
void content_set_ready(struct content *c)
{
- /* The content must be locked at this point, as it can only
+ /* The content must be locked at this point, as it can only
* become READY after conversion. */
assert(c->locked);
c->locked = false;
@@ -549,21 +549,21 @@ void content__request_redraw(struct content *c,
bool content_exec(struct hlcache_handle *h, const char *src, size_t srclen)
{
struct content *c = hlcache_handle_get_content(h);
-
+
assert(c != NULL);
-
+
if (c->locked) {
/* Not safe to do stuff */
NSLOG(netsurf, DEEPDEBUG, "Unable to exec, content locked");
return false;
}
-
+
if (c->handler->exec == NULL) {
/* Can't exec something on this content */
NSLOG(netsurf, DEEPDEBUG, "Unable to exec, no exec function");
return false;
}
-
+
return c->handler->exec(c, src, srclen);
}
@@ -748,7 +748,7 @@ uint32_t content_count_users(struct content *c)
uint32_t counter = 0;
assert(c != NULL);
-
+
for (user = c->user_list; user != NULL; user = user->next)
counter += 1;
@@ -826,22 +826,32 @@ void content_broadcast_errorcode(struct content *c,
nserror errorcode)
*
* \param h handle to content that has been opened
* \param bw browser window containing the content
- * \param page content of type CONTENT_HTML containing h, or 0 if not an
+ * \param page content of type CONTENT_HTML containing h, or NULL if not an
* object within a page
- * \param params object parameters, or 0 if not an object
+ * \param params object parameters, or NULL if not an object
*
* Calls the open function for the content.
*/
-void content_open(hlcache_handle *h, struct browser_window *bw,
- struct content *page, struct object_params *params)
+nserror
+content_open(hlcache_handle *h,
+ struct browser_window *bw,
+ struct content *page,
+ struct object_params *params)
{
- struct content *c = hlcache_handle_get_content(h);
+ struct content *c;
+ nserror res;
+
+ c = hlcache_handle_get_content(h);
assert(c != 0);
NSLOG(netsurf, INFO, "content %p %s", c,
nsurl_access_log(llcache_handle_get_url(c->llcache)));
- if (c->handler->open != NULL)
- c->handler->open(c, bw, page, params);
+ if (c->handler->open != NULL) {
+ res = c->handler->open(c, bw, page, params);
+ } else {
+ res = NSERROR_OK;
+ }
+ return res;
}
@@ -851,14 +861,30 @@ void content_open(hlcache_handle *h, struct
browser_window *bw,
* Calls the close function for the content.
*/
-void content_close(hlcache_handle *h)
+nserror content_close(hlcache_handle *h)
{
- struct content *c = hlcache_handle_get_content(h);
- assert(c != 0);
+ struct content *c;
+ nserror res;
+
+ c = hlcache_handle_get_content(h);
+ if (c == NULL) {
+ return NSERROR_BAD_PARAMETER;
+ }
+
+ if ((c->status != CONTENT_STATUS_READY) &&
+ (c->status != CONTENT_STATUS_DONE)) {
+ /* status is not read or done so nothing to do */
+ return NSERROR_INVALID;
+ }
+
NSLOG(netsurf, INFO, "content %p %s", c,
nsurl_access_log(llcache_handle_get_url(c->llcache)));
- if (c->handler->close != NULL)
- c->handler->close(c);
+ if (c->handler->close != NULL) {
+ res = c->handler->close(c);
+ } else {
+ res = NSERROR_OK;
+ }
+ return res;
}
@@ -1012,7 +1038,7 @@ content_find_rfc5988_link(hlcache_handle *h, lwc_string
*rel)
}
struct content_rfc5988_link *
-content__free_rfc5988_link(struct content_rfc5988_link *link)
+content__free_rfc5988_link(struct content_rfc5988_link *link)
{
struct content_rfc5988_link *next;
@@ -1037,10 +1063,10 @@ content__free_rfc5988_link(struct content_rfc5988_link
*link)
return next;
}
-bool content__add_rfc5988_link(struct content *c,
+bool content__add_rfc5988_link(struct content *c,
const struct content_rfc5988_link *link)
{
- struct content_rfc5988_link *newlink;
+ struct content_rfc5988_link *newlink;
union content_msg_data msg_data;
/* a link relation must be present for it to be a link */
@@ -1055,7 +1081,7 @@ bool content__add_rfc5988_link(struct content *c,
newlink = calloc(1, sizeof(struct content_rfc5988_link));
if (newlink == NULL) {
- return false;
+ return false;
}
/* copy values */
@@ -1300,9 +1326,9 @@ struct bitmap *content__get_bitmap(struct content *c)
{
struct bitmap *bitmap = NULL;
- if ((c != NULL) &&
- (c->handler != NULL) &&
- (c->handler->type != NULL) &&
+ if ((c != NULL) &&
+ (c->handler != NULL) &&
+ (c->handler->type != NULL) &&
(c->handler->type() == CONTENT_IMAGE) &&
(c->handler->get_internal != NULL) ) {
bitmap = c->handler->get_internal(c, NULL);
@@ -1324,14 +1350,14 @@ bool content__get_opaque(struct content *c)
{
bool opaque = false;
- if ((c != NULL) &&
- (c->handler != NULL) &&
- (c->handler->type != NULL) &&
+ if ((c != NULL) &&
+ (c->handler != NULL) &&
+ (c->handler->type != NULL) &&
(c->handler->type() == CONTENT_IMAGE) &&
(c->handler->get_internal != NULL) ) {
struct bitmap *bitmap = NULL;
bitmap = c->handler->get_internal(c, NULL);
- if (bitmap != NULL) {
+ if (bitmap != NULL) {
opaque = guit->bitmap->get_opaque(bitmap);
}
}
@@ -1486,7 +1512,7 @@ nserror content__clone(const struct content *c, struct
content *nc)
nc->locked = c->locked;
nc->total_size = c->total_size;
nc->http_code = c->http_code;
-
+
return NSERROR_OK;
}
@@ -1499,11 +1525,10 @@ nserror content__clone(const struct content *c, struct
content *nc)
nserror content_abort(struct content *c)
{
NSLOG(netsurf, INFO, "Aborting %p", c);
-
+
if (c->handler->stop != NULL)
c->handler->stop(c);
-
+
/* And for now, abort our llcache object */
return llcache_handle_abort(c->llcache);
}
-
diff --git a/content/content.h b/content/content.h
index 2cbc9e3..2d0646d 100644
--- a/content/content.h
+++ b/content/content.h
@@ -278,10 +278,10 @@ void content_mouse_action(struct hlcache_handle *h,
struct browser_window *bw,
bool content_keypress(struct hlcache_handle *h, uint32_t key);
-void content_open(struct hlcache_handle *h, struct browser_window *bw,
+nserror content_open(struct hlcache_handle *h, struct browser_window *bw,
struct content *page, struct object_params *params);
-void content_close(struct hlcache_handle *h);
+nserror content_close(struct hlcache_handle *h);
void content_clear_selection(struct hlcache_handle *h);
diff --git a/content/content_factory.c b/content/content_factory.c
index 935354a..44fc333 100644
--- a/content/content_factory.c
+++ b/content/content_factory.c
@@ -16,8 +16,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/** \file
- * Content factory (implementation)
+/**
+ * \file
+ * Content factory implementation
*/
#include <assert.h>
diff --git a/content/content_protected.h b/content/content_protected.h
index 0101790..0358269 100644
--- a/content/content_protected.h
+++ b/content/content_protected.h
@@ -60,9 +60,9 @@ struct content_handler {
bool (*redraw)(struct content *c, struct content_redraw_data *data,
const struct rect *clip,
const struct redraw_context *ctx);
- void (*open)(struct content *c, struct browser_window *bw,
+ nserror (*open)(struct content *c, struct browser_window *bw,
struct content *page, struct object_params *params);
- void (*close)(struct content *c);
+ nserror (*close)(struct content *c);
void (*clear_selection)(struct content *c);
char * (*get_selection)(struct content *c);
nserror (*get_contextual_content)(struct content *c, int x, int y,
diff --git a/content/handlers/html/html.c b/content/handlers/html/html.c
index 57f2e42..a27ebd7 100644
--- a/content/handlers/html/html.c
+++ b/content/handlers/html/html.c
@@ -1774,7 +1774,7 @@ static nserror html_clone(const struct content *old,
struct content **newc)
* Handle a window containing a CONTENT_HTML being opened.
*/
-static void
+static nserror
html_open(struct content *c,
struct browser_window *bw,
struct content *page,
@@ -1794,6 +1794,8 @@ html_open(struct content *c,
html->selection_owner.none = true;
html_object_open_objects(html, bw);
+
+ return NSERROR_OK;
}
@@ -1801,7 +1803,7 @@ html_open(struct content *c,
* Handle a window containing a CONTENT_HTML being closed.
*/
-static void html_close(struct content *c)
+static nserror html_close(struct content *c)
{
html_content *htmlc = (html_content *) c;
@@ -1822,6 +1824,8 @@ static void html_close(struct content *c)
/* remove all object references from the html content */
html_object_close_objects(htmlc);
+
+ return NSERROR_OK;
}
diff --git a/content/handlers/javascript/content.c
b/content/handlers/javascript/content.c
index ef56140..2cb5ecd 100644
--- a/content/handlers/javascript/content.c
+++ b/content/handlers/javascript/content.c
@@ -16,8 +16,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/** \file
- * Content for javascript (implementation)
+/**
+ * \file
+ * javascript content implementation
*/
#include <assert.h>
diff --git a/content/handlers/text/textplain.c
b/content/handlers/text/textplain.c
index 9e9e3e9..546301f 100644
--- a/content/handlers/text/textplain.c
+++ b/content/handlers/text/textplain.c
@@ -1204,7 +1204,7 @@ textplain_redraw(struct content *c,
/**
* Handle a window containing a CONTENT_TEXTPLAIN being opened.
*/
-static void
+static nserror
textplain_open(struct content *c,
struct browser_window *bw,
struct content *page,
@@ -1216,13 +1216,15 @@ textplain_open(struct content *c,
/* text selection */
selection_init(&text->sel, NULL, NULL);
+
+ return NSERROR_OK;
}
/**
* Handle a window containing a CONTENT_TEXTPLAIN being closed.
*/
-static void textplain_close(struct content *c)
+static nserror textplain_close(struct content *c)
{
textplain_content *text = (textplain_content *) c;
@@ -1231,6 +1233,8 @@ static void textplain_close(struct content *c)
}
text->bw = NULL;
+
+ return NSERROR_OK;
}
diff --git a/content/hlcache.h b/content/hlcache.h
index 3d9f41c..986bdd3 100644
--- a/content/hlcache.h
+++ b/content/hlcache.h
@@ -16,8 +16,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/** \file
- * High-level resource cache (interface)
+/**
+ * \file
+ * High-level resource cache interface
*/
#ifndef NETSURF_CONTENT_HLCACHE_H_
-----------------------------------------------------------------------
Summary of changes:
content/content.c | 103 +++++++-----
content/content.h | 4 +-
content/content_factory.c | 5 +-
content/content_protected.h | 4 +-
content/handlers/html/html.c | 8 +-
content/handlers/javascript/content.c | 5 +-
content/handlers/text/textplain.c | 8 +-
content/hlcache.h | 5 +-
desktop/browser.c | 291 +++++++++++++++++----------------
9 files changed, 237 insertions(+), 196 deletions(-)
diff --git a/content/content.c b/content/content.c
index 3a56280..f530340 100644
--- a/content/content.c
+++ b/content/content.c
@@ -67,12 +67,12 @@ static void content_convert(struct content *c);
nserror content__init(struct content *c, const content_handler *handler,
lwc_string *imime_type, const struct http_parameter *params,
- llcache_handle *llcache, const char *fallback_charset,
+ llcache_handle *llcache, const char *fallback_charset,
bool quirks)
{
struct content_user *user_sentinel;
nserror error;
-
+
NSLOG(netsurf, INFO, "url "URL_FMT_SPC" -> %p",
nsurl_access_log(llcache_handle_get_url(llcache)), c);
@@ -116,7 +116,7 @@ nserror content__init(struct content *c, const
content_handler *handler,
content_set_status(c, messages_get("Loading"));
/* Finally, claim low-level cache events */
- error = llcache_handle_change_callback(llcache,
+ error = llcache_handle_change_callback(llcache,
content_llcache_callback, c);
if (error != NSERROR_OK) {
lwc_string_unref(c->mime_type);
@@ -147,8 +147,8 @@ nserror content_llcache_callback(llcache_handle *llcache,
break;
case LLCACHE_EVENT_HAD_DATA:
if (c->handler->process_data != NULL) {
- if (c->handler->process_data(c,
- (const char *) event->data.data.buf,
+ if (c->handler->process_data(c,
+ (const char *) event->data.data.buf,
event->data.data.len) == false) {
llcache_handle_abort(c->llcache);
c->status = CONTENT_STATUS_ERROR;
@@ -273,7 +273,7 @@ void content_convert(struct content *c)
if (c->locked == true)
return;
-
+
NSLOG(netsurf, INFO, "content "URL_FMT_SPC" (%p)",
nsurl_access_log(llcache_handle_get_url(c->llcache)), c);
@@ -295,7 +295,7 @@ void content_convert(struct content *c)
void content_set_ready(struct content *c)
{
- /* The content must be locked at this point, as it can only
+ /* The content must be locked at this point, as it can only
* become READY after conversion. */
assert(c->locked);
c->locked = false;
@@ -549,21 +549,21 @@ void content__request_redraw(struct content *c,
bool content_exec(struct hlcache_handle *h, const char *src, size_t srclen)
{
struct content *c = hlcache_handle_get_content(h);
-
+
assert(c != NULL);
-
+
if (c->locked) {
/* Not safe to do stuff */
NSLOG(netsurf, DEEPDEBUG, "Unable to exec, content locked");
return false;
}
-
+
if (c->handler->exec == NULL) {
/* Can't exec something on this content */
NSLOG(netsurf, DEEPDEBUG, "Unable to exec, no exec function");
return false;
}
-
+
return c->handler->exec(c, src, srclen);
}
@@ -748,7 +748,7 @@ uint32_t content_count_users(struct content *c)
uint32_t counter = 0;
assert(c != NULL);
-
+
for (user = c->user_list; user != NULL; user = user->next)
counter += 1;
@@ -826,22 +826,32 @@ void content_broadcast_errorcode(struct content *c,
nserror errorcode)
*
* \param h handle to content that has been opened
* \param bw browser window containing the content
- * \param page content of type CONTENT_HTML containing h, or 0 if not an
+ * \param page content of type CONTENT_HTML containing h, or NULL if not an
* object within a page
- * \param params object parameters, or 0 if not an object
+ * \param params object parameters, or NULL if not an object
*
* Calls the open function for the content.
*/
-void content_open(hlcache_handle *h, struct browser_window *bw,
- struct content *page, struct object_params *params)
+nserror
+content_open(hlcache_handle *h,
+ struct browser_window *bw,
+ struct content *page,
+ struct object_params *params)
{
- struct content *c = hlcache_handle_get_content(h);
+ struct content *c;
+ nserror res;
+
+ c = hlcache_handle_get_content(h);
assert(c != 0);
NSLOG(netsurf, INFO, "content %p %s", c,
nsurl_access_log(llcache_handle_get_url(c->llcache)));
- if (c->handler->open != NULL)
- c->handler->open(c, bw, page, params);
+ if (c->handler->open != NULL) {
+ res = c->handler->open(c, bw, page, params);
+ } else {
+ res = NSERROR_OK;
+ }
+ return res;
}
@@ -851,14 +861,30 @@ void content_open(hlcache_handle *h, struct
browser_window *bw,
* Calls the close function for the content.
*/
-void content_close(hlcache_handle *h)
+nserror content_close(hlcache_handle *h)
{
- struct content *c = hlcache_handle_get_content(h);
- assert(c != 0);
+ struct content *c;
+ nserror res;
+
+ c = hlcache_handle_get_content(h);
+ if (c == NULL) {
+ return NSERROR_BAD_PARAMETER;
+ }
+
+ if ((c->status != CONTENT_STATUS_READY) &&
+ (c->status != CONTENT_STATUS_DONE)) {
+ /* status is not read or done so nothing to do */
+ return NSERROR_INVALID;
+ }
+
NSLOG(netsurf, INFO, "content %p %s", c,
nsurl_access_log(llcache_handle_get_url(c->llcache)));
- if (c->handler->close != NULL)
- c->handler->close(c);
+ if (c->handler->close != NULL) {
+ res = c->handler->close(c);
+ } else {
+ res = NSERROR_OK;
+ }
+ return res;
}
@@ -1012,7 +1038,7 @@ content_find_rfc5988_link(hlcache_handle *h, lwc_string
*rel)
}
struct content_rfc5988_link *
-content__free_rfc5988_link(struct content_rfc5988_link *link)
+content__free_rfc5988_link(struct content_rfc5988_link *link)
{
struct content_rfc5988_link *next;
@@ -1037,10 +1063,10 @@ content__free_rfc5988_link(struct content_rfc5988_link
*link)
return next;
}
-bool content__add_rfc5988_link(struct content *c,
+bool content__add_rfc5988_link(struct content *c,
const struct content_rfc5988_link *link)
{
- struct content_rfc5988_link *newlink;
+ struct content_rfc5988_link *newlink;
union content_msg_data msg_data;
/* a link relation must be present for it to be a link */
@@ -1055,7 +1081,7 @@ bool content__add_rfc5988_link(struct content *c,
newlink = calloc(1, sizeof(struct content_rfc5988_link));
if (newlink == NULL) {
- return false;
+ return false;
}
/* copy values */
@@ -1300,9 +1326,9 @@ struct bitmap *content__get_bitmap(struct content *c)
{
struct bitmap *bitmap = NULL;
- if ((c != NULL) &&
- (c->handler != NULL) &&
- (c->handler->type != NULL) &&
+ if ((c != NULL) &&
+ (c->handler != NULL) &&
+ (c->handler->type != NULL) &&
(c->handler->type() == CONTENT_IMAGE) &&
(c->handler->get_internal != NULL) ) {
bitmap = c->handler->get_internal(c, NULL);
@@ -1324,14 +1350,14 @@ bool content__get_opaque(struct content *c)
{
bool opaque = false;
- if ((c != NULL) &&
- (c->handler != NULL) &&
- (c->handler->type != NULL) &&
+ if ((c != NULL) &&
+ (c->handler != NULL) &&
+ (c->handler->type != NULL) &&
(c->handler->type() == CONTENT_IMAGE) &&
(c->handler->get_internal != NULL) ) {
struct bitmap *bitmap = NULL;
bitmap = c->handler->get_internal(c, NULL);
- if (bitmap != NULL) {
+ if (bitmap != NULL) {
opaque = guit->bitmap->get_opaque(bitmap);
}
}
@@ -1486,7 +1512,7 @@ nserror content__clone(const struct content *c, struct
content *nc)
nc->locked = c->locked;
nc->total_size = c->total_size;
nc->http_code = c->http_code;
-
+
return NSERROR_OK;
}
@@ -1499,11 +1525,10 @@ nserror content__clone(const struct content *c, struct
content *nc)
nserror content_abort(struct content *c)
{
NSLOG(netsurf, INFO, "Aborting %p", c);
-
+
if (c->handler->stop != NULL)
c->handler->stop(c);
-
+
/* And for now, abort our llcache object */
return llcache_handle_abort(c->llcache);
}
-
diff --git a/content/content.h b/content/content.h
index 2cbc9e3..2d0646d 100644
--- a/content/content.h
+++ b/content/content.h
@@ -278,10 +278,10 @@ void content_mouse_action(struct hlcache_handle *h,
struct browser_window *bw,
bool content_keypress(struct hlcache_handle *h, uint32_t key);
-void content_open(struct hlcache_handle *h, struct browser_window *bw,
+nserror content_open(struct hlcache_handle *h, struct browser_window *bw,
struct content *page, struct object_params *params);
-void content_close(struct hlcache_handle *h);
+nserror content_close(struct hlcache_handle *h);
void content_clear_selection(struct hlcache_handle *h);
diff --git a/content/content_factory.c b/content/content_factory.c
index 935354a..44fc333 100644
--- a/content/content_factory.c
+++ b/content/content_factory.c
@@ -16,8 +16,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/** \file
- * Content factory (implementation)
+/**
+ * \file
+ * Content factory implementation
*/
#include <assert.h>
diff --git a/content/content_protected.h b/content/content_protected.h
index 0101790..0358269 100644
--- a/content/content_protected.h
+++ b/content/content_protected.h
@@ -60,9 +60,9 @@ struct content_handler {
bool (*redraw)(struct content *c, struct content_redraw_data *data,
const struct rect *clip,
const struct redraw_context *ctx);
- void (*open)(struct content *c, struct browser_window *bw,
+ nserror (*open)(struct content *c, struct browser_window *bw,
struct content *page, struct object_params *params);
- void (*close)(struct content *c);
+ nserror (*close)(struct content *c);
void (*clear_selection)(struct content *c);
char * (*get_selection)(struct content *c);
nserror (*get_contextual_content)(struct content *c, int x, int y,
diff --git a/content/handlers/html/html.c b/content/handlers/html/html.c
index 57f2e42..a27ebd7 100644
--- a/content/handlers/html/html.c
+++ b/content/handlers/html/html.c
@@ -1774,7 +1774,7 @@ static nserror html_clone(const struct content *old,
struct content **newc)
* Handle a window containing a CONTENT_HTML being opened.
*/
-static void
+static nserror
html_open(struct content *c,
struct browser_window *bw,
struct content *page,
@@ -1794,6 +1794,8 @@ html_open(struct content *c,
html->selection_owner.none = true;
html_object_open_objects(html, bw);
+
+ return NSERROR_OK;
}
@@ -1801,7 +1803,7 @@ html_open(struct content *c,
* Handle a window containing a CONTENT_HTML being closed.
*/
-static void html_close(struct content *c)
+static nserror html_close(struct content *c)
{
html_content *htmlc = (html_content *) c;
@@ -1822,6 +1824,8 @@ static void html_close(struct content *c)
/* remove all object references from the html content */
html_object_close_objects(htmlc);
+
+ return NSERROR_OK;
}
diff --git a/content/handlers/javascript/content.c
b/content/handlers/javascript/content.c
index ef56140..2cb5ecd 100644
--- a/content/handlers/javascript/content.c
+++ b/content/handlers/javascript/content.c
@@ -16,8 +16,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/** \file
- * Content for javascript (implementation)
+/**
+ * \file
+ * javascript content implementation
*/
#include <assert.h>
diff --git a/content/handlers/text/textplain.c
b/content/handlers/text/textplain.c
index 9e9e3e9..546301f 100644
--- a/content/handlers/text/textplain.c
+++ b/content/handlers/text/textplain.c
@@ -1204,7 +1204,7 @@ textplain_redraw(struct content *c,
/**
* Handle a window containing a CONTENT_TEXTPLAIN being opened.
*/
-static void
+static nserror
textplain_open(struct content *c,
struct browser_window *bw,
struct content *page,
@@ -1216,13 +1216,15 @@ textplain_open(struct content *c,
/* text selection */
selection_init(&text->sel, NULL, NULL);
+
+ return NSERROR_OK;
}
/**
* Handle a window containing a CONTENT_TEXTPLAIN being closed.
*/
-static void textplain_close(struct content *c)
+static nserror textplain_close(struct content *c)
{
textplain_content *text = (textplain_content *) c;
@@ -1231,6 +1233,8 @@ static void textplain_close(struct content *c)
}
text->bw = NULL;
+
+ return NSERROR_OK;
}
diff --git a/content/hlcache.h b/content/hlcache.h
index 3d9f41c..986bdd3 100644
--- a/content/hlcache.h
+++ b/content/hlcache.h
@@ -16,8 +16,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/** \file
- * High-level resource cache (interface)
+/**
+ * \file
+ * High-level resource cache interface
*/
#ifndef NETSURF_CONTENT_HLCACHE_H_
diff --git a/desktop/browser.c b/desktop/browser.c
index a3664ac..663bfd0 100644
--- a/desktop/browser.c
+++ b/desktop/browser.c
@@ -130,7 +130,7 @@ browser_window_get_name(struct browser_window *bw, const
char **out_name)
/* exported interface, documented in browser.h */
-nserror
+nserror
browser_window_set_name(struct browser_window *bw, const char *name)
{
char *nname = NULL;
@@ -143,7 +143,7 @@ browser_window_set_name(struct browser_window *bw, const
char *name)
return NSERROR_NOMEM;
}
}
-
+
if (bw->name != NULL) {
free(bw->name);
}
@@ -1076,13 +1076,7 @@ browser_window_favicon_callback(hlcache_handle *c,
switch (event->type) {
case CONTENT_MSG_DONE:
if (bw->favicon.current != NULL) {
- content_status status =
- content_get_status(bw->favicon.current);
-
- if ((status == CONTENT_STATUS_READY) ||
- (status == CONTENT_STATUS_DONE))
- content_close(bw->favicon.current);
-
+ content_close(bw->favicon.current);
hlcache_handle_release(bw->favicon.current);
}
@@ -1344,6 +1338,143 @@ static void browser_window_convert_to_download(struct
browser_window *bw,
browser_window_stop_throbber(bw);
}
+/**
+ * handle message for content ready on browser window
+ */
+static nserror
+browser_window_content_ready(struct browser_window *bw)
+{
+ int width, height;
+ nserror res = NSERROR_OK;
+
+ /* close and release the current window content */
+ if (bw->current_content != NULL) {
+ content_close(bw->current_content);
+ hlcache_handle_release(bw->current_content);
+ }
+
+ bw->current_content = bw->loading_content;
+ bw->loading_content = NULL;
+
+ /* Format the new content to the correct dimensions */
+ browser_window_get_dimensions(bw, &width, &height, true);
+ content_reformat(bw->current_content, false, width, height);
+
+ /* history */
+ if (bw->history_add && bw->history) {
+ nsurl *url = hlcache_handle_get_url(bw->current_content);
+
+ if (urldb_add_url(url)) {
+ urldb_set_url_title(url,
content_get_title(bw->current_content));
+ urldb_update_url_visit_data(url);
+ urldb_set_url_content_type(url,
+
content_get_type(bw->current_content));
+
+ /* This is safe as we've just added the URL */
+ global_history_add(urldb_get_url(url));
+ }
+ /**
+ * \todo Urldb / Thumbnails / Local history brokenness
+ *
+ * We add to local history after calling urldb_add_url rather
+ * than in the block above. If urldb_add_url fails (as it
+ * will for urls like "about:about", "about:config" etc),
+ * there would be no local history node, and later calls to
+ * history_update will either explode or overwrite the node
+ * for the previous URL.
+ *
+ * We call it after, rather than before urldb_add_url because
+ * history_add calls bitmap render, which tries to register
+ * the thumbnail with urldb. That thumbnail registration
+ * fails if the url doesn't exist in urldb already, and only
+ * urldb-registered thumbnails get freed. So if we called
+ * history_add before urldb_add_url we would leak thumbnails
+ * for all newly visited URLs. With the history_add call
+ * after, we only leak the thumbnails when urldb does not add
+ * the URL.
+ *
+ * Also, since browser_window_history_add can create a
+ * thumbnail (content_redraw), we need to do it after
+ * content_reformat.
+ */
+ browser_window_history_add(bw, bw->current_content,
bw->frag_id);
+ }
+
+ browser_window_remove_caret(bw, false);
+
+ if (bw->window != NULL) {
+ guit->window->new_content(bw->window);
+
+ browser_window_refresh_url_bar(bw);
+ }
+
+ /* new content; set scroll_to_top */
+ browser_window_update(bw, true);
+ content_open(bw->current_content, bw, 0, 0);
+ browser_window_set_status(bw,
content_get_status_message(bw->current_content));
+
+ /* frames */
+ if ((content_get_type(bw->current_content) == CONTENT_HTML) &&
+ (html_get_frameset(bw->current_content) != NULL)) {
+ res = browser_window_create_frameset(bw,
html_get_frameset(bw->current_content));
+ }
+
+ if (content_get_type(bw->current_content) == CONTENT_HTML &&
+ html_get_iframe(bw->current_content) != NULL) {
+ browser_window_create_iframes(bw,
html_get_iframe(bw->current_content));
+ }
+
+ return res;
+}
+
+
+/**
+ * handle message for content done on browser window
+ */
+static nserror
+browser_window_content_done(struct browser_window *bw)
+{
+ float sx, sy;
+ struct rect rect;
+ int scrollx;
+ int scrolly;
+
+ if (bw->window == NULL) {
+ /* Updated browser window's scrollbars. */
+ /**
+ * \todo update browser window scrollbars before
CONTENT_MSG_DONE
+ */
+ browser_window_reformat(bw, true, bw->width, bw->height);
+ browser_window_handle_scrollbars(bw);
+ }
+
+ browser_window_update(bw, false);
+ browser_window_set_status(bw,
content_get_status_message(bw->current_content));
+ browser_window_stop_throbber(bw);
+ browser_window_update_favicon(bw->current_content, bw, NULL);
+
+ if (browser_window_history_get_scroll(bw, &sx, &sy) == NSERROR_OK) {
+ scrollx = (int)((float)content_get_width(bw->current_content) *
sx);
+ scrolly = (int)((float)content_get_height(bw->current_content)
* sy);
+ rect.x0 = rect.x1 = scrollx;
+ rect.y0 = rect.y1 = scrolly;
+ if (browser_window_set_scroll(bw, &rect) != NSERROR_OK) {
+ NSLOG(netsurf, WARNING,
+ "Unable to set browser scroll offsets to %d by
%d",
+ scrollx, scrolly);
+ }
+ }
+
+ browser_window_history_update(bw, bw->current_content);
+ hotlist_update_url(hlcache_handle_get_url(bw->current_content));
+
+ if (bw->refresh_interval != -1) {
+ guit->misc->schedule(bw->refresh_interval * 10,
+ browser_window_refresh, bw);
+ }
+
+ return NSERROR_OK;
+}
/**
* Browser window content event callback handler.
@@ -1355,7 +1486,6 @@ browser_window_callback(hlcache_handle *c,
{
struct browser_window *bw = pw;
nserror res = NSERROR_OK;
- float sx, sy;
switch (event->type) {
case CONTENT_MSG_LOG:
@@ -1393,130 +1523,15 @@ browser_window_callback(hlcache_handle *c,
break;
case CONTENT_MSG_READY:
- {
- int width, height;
-
assert(bw->loading_content == c);
- if (bw->current_content != NULL) {
- content_status status =
- content_get_status(bw->current_content);
-
- if (status == CONTENT_STATUS_READY ||
- status == CONTENT_STATUS_DONE)
- content_close(bw->current_content);
-
- hlcache_handle_release(bw->current_content);
- }
-
- bw->current_content = c;
- bw->loading_content = NULL;
-
- /* Format the new content to the correct dimensions */
- browser_window_get_dimensions(bw, &width, &height, true);
- content_reformat(c, false, width, height);
-
- /* history */
- if (bw->history_add && bw->history) {
- nsurl *url = hlcache_handle_get_url(c);
-
- if (urldb_add_url(url)) {
- urldb_set_url_title(url, content_get_title(c));
- urldb_update_url_visit_data(url);
- urldb_set_url_content_type(url,
- content_get_type(c));
-
- /* This is safe as we've just added the URL */
- global_history_add(urldb_get_url(url));
- }
- /** \todo Urldb / Thumbnails / Local history brokenness
- *
- * We add to local history after calling urldb_add_url
- * rather than in the block above. If urldb_add_url
- * fails (as it will for urls like "about:about",
- * "about:config" etc), there would be no local history
- * node, and later calls to history_update will either
- * explode or overwrite the node for the previous URL.
- *
- * We call it after, rather than before urldb_add_url
- * because history_add calls bitmap render, which
- * tries to register the thumbnail with urldb. That
- * thumbnail registration fails if the url doesn't
- * exist in urldb already, and only urldb-registered
- * thumbnails get freed. So if we called history_add
- * before urldb_add_url we would leak thumbnails for
- * all newly visited URLs. With the history_add call
- * after, we only leak the thumbnails when urldb does
- * not add the URL.
- *
- * Also, since browser_window_history_add can create
- * a thumbnail (content_redraw), we need to do it after
- * content_reformat.
- */
- browser_window_history_add(bw, c, bw->frag_id);
- }
-
- browser_window_remove_caret(bw, false);
-
- if (bw->window != NULL) {
- guit->window->new_content(bw->window);
-
- browser_window_refresh_url_bar(bw);
- }
-
- /* new content; set scroll_to_top */
- browser_window_update(bw, true);
- content_open(c, bw, 0, 0);
- browser_window_set_status(bw, content_get_status_message(c));
-
- /* frames */
- 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));
- }
+ res = browser_window_content_ready(bw);
break;
case CONTENT_MSG_DONE:
assert(bw->current_content == c);
- if (bw->window == NULL) {
- /* Updated browser window's scrollbars.
- * TODO: do this before CONTENT_MSG_DONE */
- browser_window_reformat(bw, true,
- bw->width, bw->height);
- browser_window_handle_scrollbars(bw);
- }
-
- browser_window_update(bw, false);
- browser_window_set_status(bw, content_get_status_message(c));
- browser_window_stop_throbber(bw);
- browser_window_update_favicon(c, bw, NULL);
-
- if (browser_window_history_get_scroll(bw, &sx, &sy) ==
NSERROR_OK) {
- int scrollx =
(int)((float)content_get_width(bw->current_content) * sx);
- int scrolly =
(int)((float)content_get_height(bw->current_content) * sy);
- struct rect rect;
- rect.x0 = rect.x1 = scrollx;
- rect.y0 = rect.y1 = scrolly;
- if (browser_window_set_scroll(bw, &rect) != NSERROR_OK)
{
- NSLOG(netsurf, WARNING,
- "Unable to set browser scroll offsets to
%d by %d",
- scrollx, scrolly);
- }
- }
-
- browser_window_history_update(bw, c);
- hotlist_update_url(hlcache_handle_get_url(c));
-
- if (bw->refresh_interval != -1) {
- guit->misc->schedule(bw->refresh_interval * 10,
- browser_window_refresh, bw);
- }
+ res = browser_window_content_done(bw);
break;
case CONTENT_MSG_ERRORCODE:
@@ -1531,9 +1546,9 @@ browser_window_callback(hlcache_handle *c,
guit->misc->warning(event->data.error, NULL);
}
- if (c == bw->loading_content)
+ if (c == bw->loading_content) {
bw->loading_content = NULL;
- else if (c == bw->current_content) {
+ } else if (c == bw->current_content) {
bw->current_content = NULL;
browser_window_remove_caret(bw, false);
}
@@ -1908,11 +1923,7 @@ static void browser_window_destroy_internal(struct
browser_window *bw)
}
if (bw->current_content != NULL) {
- content_status status = content_get_status(bw->current_content);
- if (status == CONTENT_STATUS_READY ||
- status == CONTENT_STATUS_DONE)
- content_close(bw->current_content);
-
+ content_close(bw->current_content);
hlcache_handle_release(bw->current_content);
bw->current_content = NULL;
}
@@ -1924,13 +1935,7 @@ static void browser_window_destroy_internal(struct
browser_window *bw)
}
if (bw->favicon.current != NULL) {
- content_status status = content_get_status(bw->favicon.current);
-
- if (status == CONTENT_STATUS_READY ||
- status == CONTENT_STATUS_DONE) {
- content_close(bw->favicon.current);
- }
-
+ content_close(bw->favicon.current);
hlcache_handle_release(bw->favicon.current);
bw->favicon.current = NULL;
}
@@ -1965,7 +1970,7 @@ static void browser_window_destroy_internal(struct
browser_window *bw)
* \param bw Browser window to update URL bar for.
* \param url URL for content displayed by bw including any fragment.
*/
-static inline nserror
+static inline nserror
browser_window_refresh_url_bar_internal(struct browser_window *bw, nsurl *url)
{
assert(bw);
@@ -2326,7 +2331,7 @@ const char* browser_window_get_title(struct
browser_window *bw)
}
/* no content so return about:blank */
- return nsurl_access(corestring_nsurl_about_blank);
+ return nsurl_access(corestring_nsurl_about_blank);
}
/* Exported interface, documented in browser.h */
--
NetSurf Browser
_______________________________________________
netsurf-commits mailing list
[email protected]
http://listmaster.pepperfish.net/cgi-bin/mailman/listinfo/netsurf-commits-netsurf-browser.org