From 9317e33d0bb597543239ced2e100ece042cf416f Mon Sep 17 00:00:00 2001 From: James Bursa Date: Wed, 9 Jul 2003 21:33:01 +0000 Subject: [project @ 2003-07-09 21:33:01 by bursa] More work on and plugins. svn path=/import/netsurf/; revision=213 --- content/content.c | 39 ++++++++++++++++++++++++--------------- content/content.h | 4 ++-- content/fetchcache.c | 7 ++++--- content/fetchcache.h | 5 ++++- 4 files changed, 34 insertions(+), 21 deletions(-) (limited to 'content') diff --git a/content/content.c b/content/content.c index 9b15a3b83..056fabdaa 100644 --- a/content/content.c +++ b/content/content.c @@ -28,10 +28,6 @@ struct mime_entry { }; static const struct mime_entry mime_map[] = { #ifdef riscos - {"application/java-vm", CONTENT_PLUGIN}, - {"application/x-shockwave-flash", CONTENT_PLUGIN}, - {"audio/midi", CONTENT_PLUGIN}, - {"audio/x-midi", CONTENT_PLUGIN}, {"image/gif", CONTENT_GIF}, {"image/jpeg", CONTENT_JPEG}, {"image/png", CONTENT_PNG}, @@ -52,27 +48,31 @@ struct handler_entry { void (*destroy)(struct content *c); void (*redraw)(struct content *c, long x, long y, unsigned long width, unsigned long height); + void (*add_user)(struct content *c, struct object_params *params); + void (*remove_user)(struct content *c, struct object_params *params); }; static const struct handler_entry handler_map[] = { {html_create, html_process_data, html_convert, html_revive, - html_reformat, html_destroy, 0}, + html_reformat, html_destroy, 0, 0, 0}, {textplain_create, textplain_process_data, textplain_convert, - textplain_revive, textplain_reformat, textplain_destroy, 0}, + textplain_revive, textplain_reformat, textplain_destroy, 0, 0, 0}, #ifdef riscos {jpeg_create, jpeg_process_data, jpeg_convert, jpeg_revive, - jpeg_reformat, jpeg_destroy, jpeg_redraw}, + jpeg_reformat, jpeg_destroy, jpeg_redraw, 0, 0}, #endif - {css_create, css_process_data, css_convert, css_revive, css_reformat, css_destroy, 0}, + {css_create, css_process_data, css_convert, css_revive, + css_reformat, css_destroy, 0, 0, 0}, #ifdef riscos {nspng_create, nspng_process_data, nspng_convert, nspng_revive, - nspng_reformat, nspng_destroy, nspng_redraw}, + nspng_reformat, nspng_destroy, nspng_redraw, 0, 0}, {nsgif_create, nsgif_process_data, nsgif_convert, nsgif_revive, - nsgif_reformat, nsgif_destroy, nsgif_redraw}, + nsgif_reformat, nsgif_destroy, nsgif_redraw, 0, 0}, {plugin_create, plugin_process_data, plugin_convert, plugin_revive, - plugin_reformat, plugin_destroy, plugin_redraw}, + plugin_reformat, plugin_destroy, plugin_redraw, + plugin_add_user, plugin_remove_user}, #endif {other_create, other_process_data, other_convert, other_revive, - other_reformat, other_destroy, 0} + other_reformat, other_destroy, 0, 0, 0} }; #define HANDLER_MAP_COUNT (sizeof(handler_map) / sizeof(handler_map[0])) @@ -86,8 +86,11 @@ content_type content_lookup(const char *mime_type) struct mime_entry *m; m = bsearch(mime_type, mime_map, MIME_MAP_COUNT, sizeof(mime_map[0]), (int (*)(const void *, const void *)) strcmp); - if (m == 0) + if (m == 0) { + if (plugin_handleable(mime_type)) + return CONTENT_PLUGIN; return CONTENT_OTHER; + } return m->type; } @@ -126,6 +129,7 @@ void content_set_type(struct content *c, content_type type, char* mime_type) assert(c->status == CONTENT_STATUS_TYPE_UNKNOWN); assert(type < CONTENT_UNKNOWN); LOG(("content %s, type %i", c->url, type)); + /* TODO: call add_user on each existing user */ c->type = type; c->mime_type = mime_type; c->status = CONTENT_STATUS_LOADING; @@ -241,7 +245,7 @@ void content_redraw(struct content *c, long x, long y, void content_add_user(struct content *c, void (*callback)(content_msg msg, struct content *c, void *p1, void *p2, const char *error), - void *p1, void *p2) + void *p1, void *p2, struct object_params *params) { struct content_user *user; LOG(("content %s, user %p %p %p", c->url, callback, p1, p2)); @@ -251,6 +255,8 @@ void content_add_user(struct content *c, user->p2 = p2; user->next = c->user_list->next; c->user_list->next = user; + if (c->type != CONTENT_UNKNOWN && handler_map[c->type].add_user != 0) + handler_map[c->type].add_user(c, params); } @@ -261,11 +267,14 @@ void content_add_user(struct content *c, void content_remove_user(struct content *c, void (*callback)(content_msg msg, struct content *c, void *p1, void *p2, const char *error), - void *p1, void *p2) + void *p1, void *p2, struct object_params *params) { struct content_user *user, *next; LOG(("content %s, user %p %p %p", c->url, callback, p1, p2)); + if (c->type != CONTENT_UNKNOWN && handler_map[c->type].remove_user != 0) + handler_map[c->type].remove_user(c, params); + /* user_list starts with a sentinel */ for (user = c->user_list; user->next != 0 && !(user->next->callback == callback && diff --git a/content/content.h b/content/content.h index dd9b50592..1c033f8bc 100644 --- a/content/content.h +++ b/content/content.h @@ -201,11 +201,11 @@ void content_redraw(struct content *c, long x, long y, void content_add_user(struct content *c, void (*callback)(content_msg msg, struct content *c, void *p1, void *p2, const char *error), - void *p1, void *p2); + void *p1, void *p2, struct object_params *params); void content_remove_user(struct content *c, void (*callback)(content_msg msg, struct content *c, void *p1, void *p2, const char *error), - void *p1, void *p2); + void *p1, void *p2, struct object_params *params); void content_broadcast(struct content *c, content_msg msg, char *error); #endif diff --git a/content/fetchcache.c b/content/fetchcache.c index 844111376..23316b1b6 100644 --- a/content/fetchcache.c +++ b/content/fetchcache.c @@ -21,7 +21,8 @@ static void fetchcache_callback(fetch_msg msg, void *p, char *data, unsigned lon struct content * fetchcache(const char *url0, char *referer, void (*callback)(content_msg msg, struct content *c, void *p1, void *p2, const char *error), - void *p1, void *p2, unsigned long width, unsigned long height) + void *p1, void *p2, unsigned long width, unsigned long height, + struct object_params *object_params) { struct content *c; char *url = xstrdup(url0); @@ -35,12 +36,12 @@ struct content * fetchcache(const char *url0, char *referer, c = cache_get(url); if (c != 0) { - content_add_user(c, callback, p1, p2); + content_add_user(c, callback, p1, p2, object_params); return c; } c = content_create(url); - content_add_user(c, callback, p1, p2); + content_add_user(c, callback, p1, p2, object_params); cache_put(c); c->fetch_size = 0; c->width = width; diff --git a/content/fetchcache.h b/content/fetchcache.h index ddfc2fa76..1353f682d 100644 --- a/content/fetchcache.h +++ b/content/fetchcache.h @@ -10,9 +10,12 @@ #include "netsurf/content/content.h" +struct object_params; + struct content * fetchcache(const char *url, char *referer, void (*callback)(content_msg msg, struct content *c, void *p1, void *p2, const char *error), - void *p1, void *p2, unsigned long width, unsigned long height); + void *p1, void *p2, unsigned long width, unsigned long height, + struct object_params *object_params); #endif -- cgit v1.2.3