diff options
author | Vincent Sanders <vince@netsurf-browser.org> | 2014-02-07 15:04:11 +0000 |
---|---|---|
committer | Vincent Sanders <vince@netsurf-browser.org> | 2014-02-07 15:04:11 +0000 |
commit | b351e3146b8a2700e0ca511d7c75a02ab9189912 (patch) | |
tree | 2dedfea8cb6ab1d63672e84a288a4ae77919eea3 | |
parent | bb9f91caf9c16db960456efd843013236d02cbc7 (diff) | |
download | netsurf-b351e3146b8a2700e0ca511d7c75a02ab9189912.tar.gz |
add llcache operation table
-rw-r--r-- | content/llcache.c | 18 | ||||
-rw-r--r-- | desktop/gui.h | 12 | ||||
-rw-r--r-- | desktop/gui_factory.c | 44 |
3 files changed, 70 insertions, 4 deletions
diff --git a/content/llcache.c b/content/llcache.c index a97d3ccd2..3fbe5ec0b 100644 --- a/content/llcache.c +++ b/content/llcache.c @@ -1638,7 +1638,10 @@ static nserror llcache_fetch_ssl_error(llcache_object *object) #define LLCACHE_MIN_DISC_LIFETIME 3600 #define LLCACHE_MAX_DISC_BANDWIDTH (512*1024) -nserror write_llcache_file(nsurl *url, const uint8_t *data, size_t datalen) +static nserror write_llcache_file(nsurl *url, + int remaining, + const uint8_t *data, + size_t datalen) { LOG(("Writing cache file for url:%s", nsurl_access(url))); return NSERROR_OK; @@ -1670,12 +1673,19 @@ static void llcache_discwrite(void *p) (remaining_lifetime > LLCACHE_MIN_DISC_LIFETIME)) { /* ok found an object to write */ ret = write_llcache_file(object->url, + remaining_lifetime, object->source_data, object->source_len); - if (ret == NSERROR_OK) { - object->store_state = LLCACHE_STORE_DISC; - size_written += object->source_len; + if (ret != NSERROR_OK) { + /* as there has been a serialisation + * error, give up on making any more + * objects persistant for now. + */ + return; } + object->store_state = LLCACHE_STORE_DISC; + size_written += object->source_len; + if (size_written > LLCACHE_MAX_DISC_BANDWIDTH) { break; } diff --git a/desktop/gui.h b/desktop/gui.h index 162b51cd3..42a1ae588 100644 --- a/desktop/gui.h +++ b/desktop/gui.h @@ -446,6 +446,10 @@ struct gui_browser_table { }; +struct gui_llcache_table { + nserror (*persist)(struct nsurl *url, int remaining, const uint8_t *data, size_t datalen); + nserror (*retrieve)(struct nsurl *url, int *remaining_out, const uint8_t **data_out, size_t *datalen_out); +}; /** Graphical user interface function table * @@ -479,6 +483,14 @@ struct gui_table { * implies the local encoding is utf8. */ struct gui_utf8_table *utf8; + + /** Low level cache table + * + * Used by the low level cache to push objects to persistant + * storage. The table is optional and may be NULL which + * disables persistant caching of objects + */ + struct gui_llcache_table *llcache; }; diff --git a/desktop/gui_factory.c b/desktop/gui_factory.c index 8996ab5d6..f8be89aad 100644 --- a/desktop/gui_factory.c +++ b/desktop/gui_factory.c @@ -343,6 +343,40 @@ static nserror verify_utf8_register(struct gui_utf8_table *gut) return NSERROR_OK; } +static nserror gui_default_persist(nsurl *url, int remaining, const uint8_t *data, size_t datalen) +{ + return NSERROR_SAVE_FAILED; +} + +static nserror gui_default_retrieve(nsurl *url, int *remaining_out, const uint8_t **data_out, size_t *datalen_out) +{ + return NSERROR_NOT_FOUND; +} + +static struct gui_llcache_table default_llcache_table = { + .persist = gui_default_persist, + .retrieve = gui_default_retrieve, +}; + +/** verify clipboard table is valid */ +static nserror verify_llcache_register(struct gui_llcache_table *glt) +{ + /* check table is present */ + if (glt == NULL) { + return NSERROR_BAD_PARAMETER; + } + + /* mandantory operations */ + if (glt->persist == NULL) { + return NSERROR_BAD_PARAMETER; + } + if (glt->retrieve == NULL) { + return NSERROR_BAD_PARAMETER; + } + return NSERROR_OK; +} + + static nsurl *gui_default_get_resource_url(const char *path) { return NULL; @@ -529,6 +563,16 @@ nserror gui_factory_register(struct gui_table *gt) return err; } + /* llcache table */ + if (gt->llcache == NULL) { + /* set default clipboard table */ + gt->llcache = &default_llcache_table; + } + err = verify_llcache_register(gt->llcache); + if (err != NSERROR_OK) { + return err; + } + guit = gt; return NSERROR_OK; |