WebKit: test di integrazione

Mi è stato commissionato un nuovo totem per scommesse online basato sulla PlayOn Technology (cioè prendo tutta la tecnologia che fa girare la PlayOn, e la adatto alle necessità del totem). Il totem è per conto di una nota compagnia italiana di scommesse online, che finora aveva dei totem basati su WindowsXP Embedded. Noi gliene forniamo di nuovi, basati su Linux Slackware. E scusate se è poco 😉

Il primo requisito da implementare sul nuovo totem è un browser serio, che debba girare a fullscreen, senza mostrare alcun bottone, alcun menu, nessuna toolbar et similia. In pratica l’utente non deve fare i cavoli propri col browser del totem. In parole povere, ci vuole un browser embedded, controllato solo ed esclusivamente dalla macchina, tramite il quale l’utente possa interagire esclusivamente con l’applicazione web del gestore.

Sperimentazioni

Mozilla – Gecko Runtime Environment (GRE)

Beh, devo dire che la prima cosa che ho fatto, è stata quella di andare su google e cercare “embed mozilla” e “embed gecko”, perchè pensavo furbescamente, che con quattro botte di codice sarei riuscito ad integrare il motore di runtime di firefox (gecko, appunto) nella mia applicazione. Macchè… il GRE è un progetto e-n-o-r-m-e (il sourcetree è 415,5 MB!!!), c’è pochissima documentazione pubblica, e per poterci iniziare a fare qualcosa di rudimentale andrebbe studiato con calma e passione per almeno un mese…

insomma… ho lasciato perdere.

WebKit

Poi mi sono ricordato di WebKit (che avevo inizialmente scartato perche credevo non avesse il supporto per i plugin, e quindi di conseguenza il supporto agli oggetti flash – requisito essenziale nel mio caso). Ebbene, il supporto per i plugin c’è e funziona benissimo! Praticamente in WebKit hanno implementato il caricamento dei netscape plugin, ovvero gli stessi plugin che vengono caricati da Firefox. Una pacchia.

In pratica WebKit deriva dal componente KHTML, che sarebbe l’html di Konqueror, il web browser del KDE. Tale componente è stato furbescamente preso in considerazione dalla Apple, la quale ne ha fatto un fork (WebKit, appunto) per migliorarlo, e utilizzarlo come rendering engine per il suo browser Safari e molti altri software come Dashboard, Mail, ed altre applicazioni Mac OS X. Per la fortuna di noi tutti, il codice è stato rilasciato sotto licenza pubblica LGPL e BSD-style. WebKit è anche alla base di Chrome, il nuovo browser di Google. C’è da dire, inoltre, che WebKit è il primo browser ad aver passato il test di compatibilità Acid3, e ad implementare le estensioni HTML5.

Insomma… decisamente approvato.

WebKit: compilazione e test

Al primo impatto, niente di complicato. Si scarica il tarball da http://webkit.org/ (al momento, per la build 36882, solo 9,1 MB), lo si scompatta, e lo si compila come consueto da riga di comando. Solo il sistema di build non è proprio il solito ./configure && make, bensì richiede la lettura (o meglio, la ricerca) di un paio di pagine di documentazione, per venirne a capo. Comunque, una volta scovata la parolina “magica” per avviare il processo di build (./autogen.sh e poi make…), la libreria si compila senza problemi, producendo alla fine, tra le tante cose, un bellissimo shared object libwebkit-1.0.so e un simpatico eseguibile GtkLauncher il quale lancia un semplice browser, con solo i widget essenziali, basato su GTK+ (ehhh… unico neo… per ora l’unico port decente di WebKit si basa su GTK+. Sinceramente una libreria che io schifo a morte, compresa tutta la filosofia di programmazione GLib e Gnome. Pazienza).

Step 2: integrazione

Qui, a dire la verità, ci ho perso almeno tre giorni a studiare e sperimentare. Sinceramente volevo fare direttamente il “botto”. In pratica a tempo perso mi sto sviluppando EOS, ovvero quello che sarà l’evoluzione di ELF: sarà più o meno simile, solo che permetterà a più tecnologie grafiche di condividere la stessa finestra OpenGL, tipo una specie di XGL (o tipo Clutter, o anche Pigment), scriptato in Lua. In pratica, il botto consisteva nel disegnare direttamente la canvas di WebKit in una surface OpenGL, e farla fluttuare e ruotare in 3D incantando gli occhi dei presenti. (CBDD: Citazione Baglioniana Dovuta e Devota). Poi oggi i miei colleghi mi hanno chiamato da ENADA chiedendomi conferma sui tempi di sviluppo previsti per il totem: lì sono tornato alla realtà, coi piedi sulla terra: per il momento mi limito ad usare WebKit come normale finestra GTK+, 2D e basta.

Quindi, riprovo a farmi il MIO piccolo eseguibile che mi wrappa WebKit, partendo da un subset ristrettissimo dell’applicazione GtkLauncher fornita con il sourcetree di WebKit, ma come ieri e l’altro ieri, mi esce con il famigerato segmentation fault e con errori assurdi dovuti alla GLib. Quindi decido di documentarmi meglio (è la prima volta che sono costretto ad usare le GTK… ma c’è sempre una prima volta…), e, come avevo dedotto dagli errori strani in console, ovviamente avevo dimenticato di linkare qualche libreria. Dico ovviamente, perchè per compilare un hello world in GTK bisogna linkare una quindicina di librerie…. ( http://www.gtk.org/api/2.6/gtk/gtk-compiling.html ). Comunque, alla fine tutto risolto, come dimostrano gli shots qui di seguito 😉

test con google maps
test con google maps
funziona tranquillamente anche il plugin flash!
youtube: funziona tranquillamente anche il plugin flash!

Step successivo: embedding di WebKit in un modulo EOS

Lo step successivo consiste nel rendere fruibile “la finestra browser” da parte dell’ambiente di runtime Lua di EOS. Ci sto lavorando. Riediterò il post appena avrò qualcosa di funzionante da mostrare 😉

Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...