XP_NotifyObservers(image_req->obs_list, IL_FRAME_COMPLETE, &message_data);
il_cache_return_notify(IL_ImageReq *image_req){    IL_MessageData message_data;    il_container *ic = image_req->ic;    nsCRT::zero(&message_data, sizeof(IL_MessageData));    message_data.image_instance = image_req;    /* This function should only be called if the dimensions are known. */    PR_ASSERT(ic->state >= IC_SIZED);    /* First notify observers of the image dimensions. */    message_data.width = (unsigned short) ic->dest_width;   /* Note: these are stored as */    message_data.height = (unsigned short) ic->dest_height; /* PRUint16s. */    XP_NotifyObservers(image_req->obs_list, IL_DIMENSIONS, &message_data);    message_data.width = message_data.height = 0;    /* Fabricate a title for the image and notify observers.  Image Plugins       will need to supply information on the image type. */    il_description_notify(ic);    /* If the image is transparent and has a mask, notify observers       accordingly. */    if (ic->mask)        XP_NotifyObservers(image_req->obs_list, IL_IS_TRANSPARENT,                           &message_data);    /* Now send observers a pixmap update notification for the displayable       area of the image. */    nsCRT::memmove(&message_data.update_rect, &ic->displayable_rect,              sizeof(IL_Rect));    XP_NotifyObservers(image_req->obs_list, IL_PIXMAP_UPDATE, &message_data);    nsCRT::zero(&message_data.update_rect, sizeof(IL_Rect));    if (ic->state == IC_COMPLETE) {        /* Send the observers a frame complete message. */        XP_NotifyObservers(image_req->obs_list, IL_FRAME_COMPLETE,                           &message_data);        /* Finally send the observers a complete message. */        XP_NotifyObservers(image_req->obs_list, IL_IMAGE_COMPLETE,                           &message_data);    }}