static bool accept_related_part(MimeMultipartRelated* relobj, MimeObject* part_obj) { if (!relobj || !part_obj) return false; /* before accepting it as a valid related part, make sure we are able to display it inline as an embedded object. Else just ignore it, that will prevent any bad surprise... */ MimeObjectClass *clazz = mime_find_class (part_obj->content_type, part_obj->headers, part_obj->options, false); if (clazz ? clazz->displayable_inline_p(clazz, part_obj->headers) : false) return true; /* ...but we always accept it if it's referenced by an anchor */ return (relobj->curtag && relobj->curtag_length >= 3 && (relobj->curtag[1] == 'A' || relobj->curtag[1] == 'a') && IS_SPACE(relobj->curtag[2])); }
static bool MimeMultipartAlternative_display_part_p(MimeObject *self, MimeHeaders *sub_hdrs) { char *ct = MimeHeaders_get (sub_hdrs, HEADER_CONTENT_TYPE, true, false); if (!ct) return false; /* RFC 1521 says: Receiving user agents should pick and display the last format they are capable of displaying. In the case where one of the alternatives is itself of type "multipart" and contains unrecognized sub-parts, the user agent may choose either to show that alternative, an earlier alternative, or both. Ugh. If there is a multipart subtype of alternative, we simply show that, without descending into it to determine if any of its sub-parts are themselves unknown. */ // prefer_plaintext pref nsIPrefBranch *prefBranch = GetPrefBranch(self->options); bool prefer_plaintext = false; if (prefBranch) prefBranch->GetBoolPref("mailnews.display.prefer_plaintext", &prefer_plaintext); if (prefer_plaintext && self->options->format_out != nsMimeOutput::nsMimeMessageSaveAs && (!PL_strncasecmp(ct, "text/html", 9) || !PL_strncasecmp(ct, "text/enriched", 13) || !PL_strncasecmp(ct, "text/richtext", 13)) ) // if the user prefers plaintext and this is the "rich" (e.g. HTML) part... { return false; } MimeObjectClass *clazz = mime_find_class (ct, sub_hdrs, self->options, true); bool result = (clazz ? clazz->displayable_inline_p(clazz, sub_hdrs) : false); PR_FREEIF(ct); return result; }