In questi giorni sono stato preso da questioni un po' delicate...
Allora... ho appena fatto un piccolo test con l'ultima versione, e ho notato un comportamento un po' strano: a parte il ritardo nell'intervento (come prima), passando un po' rapidamente da un messaggio all'altro si è stranamente attivata su un messaggio cifrato, ricaricandolo e presentandolo come un messaggio vuoto con un allegato... successivamente (chiudendo e riaprendo tb) non si è ripresentato, ma resta comunque strano... e si è ripetuto dopo l'aggiornamento a tb 2.0.0.14. Ho il sospetto che, trattandosi di un meccanismo asincrono, possano verificarsi chiamate non volute alla funzione di switch che alterano il comportamento voluto (potrebbe intervenire, a complicare le cose, anche il meccanismo di caching dei messaggi già letti). Forse sarebbe opportuno modificare la funzione onStopRequest per verificare, dal context o dallo status code, se è il caso di continuare o meno con l'operazione; inoltre, potrebbe essere utile anche creare una sola volta lo stream listener e usare la funzione onStartRequest per sospendere le operazioni in corso nel caso in cui venga chiamata prima della onStopRequest (ma dubito che succeda, però non si sa mai).
Quanto alla lentezza: faccio le mie prove su un account con email.it, e noto lentezze solo nel caso in cui il primo messaggio aperto dopo il collegamento è quello cifrato: in realtà, a questo punto non ci sono lentezze, perchè tb mi chiede di inserire la password del dispositivo di sicurezza, quindi durante la digitazione avviene l'intera elaborazione dell'estensione (azz, la rima...) e la richiesta di reload del messaggio, quando passo ad uno con allegato deve invece eseguire la disabilitazione del supporto interno e il reload, e qui noto il cambiamento. Se invece, all'apertura di tb, seleziono subito un messaggio con allegato p7m, allora la visualizzazione è immediatamente corretta, perchè la tua estensione viene eseguita al caricamento di tb (per via dell'istruzione: "window.addEventListener("load", pkcs7SupportLoad, true);"), quindi il supporto interno risulta immediatamente disabilitato; però ho notato anche che dopo qualche secondo il messaggio viene ricaricato (vedo apparire per un istante la progress bar). Potresti provare a guardare un messaggio con allegato per una decina di secondi per vedere se si presenta il "sintomo" del reload, se non succede magari è perchè il tuo processore è più veloce del mio (un vecchio "thorello" - xp 2400+ - ma nelle PA mi aspetto di trovare macchine anche più vecchie)
Per il discorso su dike, provo a spiegare un po' meglio cos'è successo. Quando ho disinstallato dike il sistema operativo continuava a riconoscere i .p7m come dei "pkcs #7", e questo mi sembra coerente con il supporto parziale di windows a smime e ai certificati, legato a IE, ma non forniva un'applicazione associata al file e lo presentava con un'icona generica. In questa "fase" tb riconosceva i file come dei generici octet-stream, e addirittura cambiando l'estensione a un pdf in .p7m, questo veniva presentato proprio come un pdf; scaricando le mail in locale e modificando il content-type si manifestava il bug (il tutto senza la tua estensione). A questo punto ho reinstallato dike: file riconosciuti dal s.o. come prima, ma con l'icona di dike e associati a dike; faccio delle prove d'invio, ed ecco che il file viene allegato come un "application/pkcs7", e trattato da tb praticamente come un octet-stream, quindi reso disponibile per il download, senza però più riconoscere i pdf con estensione fittizia. Francamente non so dare una spiegazione certa al "problema", non so dire con esattezza cosa possa essere successo, però ho riscontrato la possibilità che venga creato un mime-type errato per un certo tipo di file, e tanto mi basta a pensare che si dovrebbe prendere in considerazione per rendere il programma più robusto (dato che, oltretutto, dovrebbe bastare registrare il mime-type con il gestore corretto dei pkcs7-mime).
Un ultima nota sulla licenza: se non ricordo male c'erano dei problemi di compatibilità tra la MPL e la GPL, per cui potrebbe non essere troppo "ortodosso" porre sotto gpl del codice verrà usato da altro codice sotto mpl. Magari la LGPL risolverebbe il problema alla radice (oppure, al limite, aggiungere delle eccezioni alla gpl per renderla compatibile con la mpl, o, meglio, introdurre la doppia licenza, mpl e gpl).