summaryrefslogtreecommitdiff
path: root/render/html.c
diff options
context:
space:
mode:
authorJohn-Mark Bell <jmb@netsurf-browser.org>2014-01-05 14:34:04 +0000
committerJohn-Mark Bell <jmb@netsurf-browser.org>2014-01-05 14:34:49 +0000
commit32468516e31ee16f6d63923aeb2af8714dfe1a1a (patch)
treee229e7d4a103fced9cd0f501316c2b3f4ff6ead6 /render/html.c
parentb80da8bf0b6662062881214bc19bbe8cbe1ec2f4 (diff)
downloadnetsurf-32468516e31ee16f6d63923aeb2af8714dfe1a1a.tar.gz
netsurf-32468516e31ee16f6d63923aeb2af8714dfe1a1a.tar.bz2
Speculatively start image fetches as we parse the document.
Diffstat (limited to 'render/html.c')
-rw-r--r--render/html.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/render/html.c b/render/html.c
index 49bb019dd..04b2fda18 100644
--- a/render/html.c
+++ b/render/html.c
@@ -507,6 +507,37 @@ static nserror html_meta_refresh_process_element(html_content *c, dom_node *n)
return error;
}
+static bool html_process_img(html_content *c, dom_node *node)
+{
+ dom_string *src;
+ nsurl *url;
+ nserror err;
+ dom_exception exc;
+ bool success;
+
+ /* Do nothing if foreground images are disabled */
+ if (nsoption_bool(foreground_images) == false) {
+ return true;
+ }
+
+ exc = dom_element_get_attribute(node, corestring_dom_src, &src);
+ if (exc != DOM_NO_ERR || src == NULL) {
+ return true;
+ }
+
+ err = nsurl_join(c->base_url, dom_string_data(src), &url);
+ if (err != NSERROR_OK) {
+ dom_string_unref(src);
+ return false;
+ }
+ dom_string_unref(src);
+
+ /* Speculatively fetch the image */
+ success = html_fetch_object(c, url, NULL, CONTENT_IMAGE, 0, 0, false);
+ nsurl_unref(url);
+
+ return success;
+}
/**
* Complete conversion of an HTML document
@@ -608,6 +639,10 @@ dom_default_action_DOMNodeInserted_cb(struct dom_event *evt, void *pw)
name, corestring_lwc_title) &&
htmlc->title == NULL) {
htmlc->title = dom_node_ref(node);
+ } else if (dom_string_caseless_lwc_isequal(
+ name, corestring_lwc_img)) {
+ html_process_img(htmlc,
+ (dom_node *) node);
}
dom_string_unref(name);