diff options
author | John-Mark Bell <jmb@netsurf-browser.org> | 2014-01-05 14:34:04 +0000 |
---|---|---|
committer | John-Mark Bell <jmb@netsurf-browser.org> | 2014-01-05 14:34:49 +0000 |
commit | 32468516e31ee16f6d63923aeb2af8714dfe1a1a (patch) | |
tree | e229e7d4a103fced9cd0f501316c2b3f4ff6ead6 /render/html.c | |
parent | b80da8bf0b6662062881214bc19bbe8cbe1ec2f4 (diff) | |
download | netsurf-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.c | 35 |
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); |