From e74e2526bafc9d64496be5f5301727750d3aa1ac Mon Sep 17 00:00:00 2001 From: dllud Date: Tue, 24 Dec 2019 01:17:55 +0000 Subject: GeckoView shim --- full-description.md | 2 +- img/geckoview.png | Bin 0 -> 11436 bytes slides.tex | 165 ++++++++++++++++++++++++++++++++++++---------------- 3 files changed, 115 insertions(+), 52 deletions(-) create mode 100644 img/geckoview.png diff --git a/full-description.md b/full-description.md index 76ce747..ac1730f 100644 --- a/full-description.md +++ b/full-description.md @@ -33,7 +33,7 @@ replacing WebView by a shim built around GeckoView[12]. At first, we reviewed the several ongoing projects that strive to clean the Chromium mess: -- ungoogle-chromium seemed to be aligned with both privacy and software +- ungoogled-chromium seemed to be aligned with both privacy and software freedom[4]. - Bromite is quite interesting for the fact that the codebase is used to build WebView[13]. However it is only focused on privacy and ad blocking, not on diff --git a/img/geckoview.png b/img/geckoview.png new file mode 100644 index 0000000..ec9ae47 Binary files /dev/null and b/img/geckoview.png differ diff --git a/slides.tex b/slides.tex index bf80af1..bb6237f 100644 --- a/slides.tex +++ b/slides.tex @@ -12,7 +12,6 @@ \usepackage{listings} \usepackage{graphicx} \usepackage[font=tiny,skip=0pt]{caption} -\usepackage{array} \usepackage{verbatim} \graphicspath{{img/}} @@ -265,6 +264,63 @@ public class MainActivity extends Activity { \end{frame} \section{GeckoView shim} +\begin{frame} + \frametitle{WebView API compatibility shim for GeckoView} + Chromium fork requires constant maintenance burden.\\\smallskip + Google's interests do not align with ours. Check Mozilla.\\ + \vspace{2\baselineskip} + \begin{columns} + \begin{column}{0.1\textwidth} + \includegraphics[width=\textwidth]{geckoview} + \end{column} + \begin{column}{0.9\textwidth} + GeckoView: + \begin{itemize} + \item Java wrapper for Gecko browser engine. + \item Used in Android apps as replacement for WebView. + \item API is incompatible with WebView: not meant to be a drop-in. + \end{itemize} + \end{column} + \end{columns} +\end{frame} + +\subsection{Mapping WebView to GeckoView} +\begin{frame}[fragile] + \frametitle{Mapping WebView to GeckoView} + \begin{itemize} + \setlength\itemsep{1em} + \item<1-> Some functions have a 1:1 mapping.\\\smallskip + {\small + \begin{tabular}{l | l} + WebView & GeckoView \\ + \hline + \verb|goBack()|, \verb|goForward()| & \verb|GeckoSession.NavigationDelegate|\\ + \verb|loadUrl()| & \verb|GeckoSession.loadUri()|\\ + \verb|stopLoading()| & \verb|GeckoSession.stop()| + \end{tabular} + } + \item<2-> Others require emulation.\\\smallskip + {\small + \begin{tabular}{l | l} + WebView & GeckoView \\ + \hline + \verb|getTitle()| & \verb|GeckoSession.HistoryDelegate.HistoryItem.getTitle()|\\ + \verb|pageDown()| & \verb|PanZoomController.scrollBy(width,height)| + \end{tabular} + } + \item<3-> Others require more features from Gecko to be exposed via GeckoView, + e.g. \verb|zoomIn()|. + \item<4-> Others still, added on latest Android APIs (26-29), seem too tied to Chromium, + e.g. \verb|getWebViewLooper()|, \verb|getWebChromeClient()|, \verb|getWebViewClient()|. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Mapping WebView to GeckoView} + Requires a considerable effort.\\\bigskip + Can pay off in the long-term: no need to constantly scout for proprietary dependencies and privacy issues.\\\bigskip + Burden may be lessened by collaborations, e.g., qt5-webengine replacement with Gecko underneath. +\end{frame} \section{GeckoView on apps} @@ -282,64 +338,71 @@ public class MainActivity extends Activity { \begin{frame} \frametitle{Licenses (I)} - \begin{tabular}{>{\scriptsize}l | >{\scriptsize}l | >{\scriptsize}l} - item & source & license \\ - \hline - K-9 Mail logo & \url{https://github.com/k9mail/k-9} & Apache-2.0 \\ - OsmAnd logo & \url{https://github.com/osmandapp/Osmand} & CC-BY-NC-ND 4.0 \\ - Nextcloud logo & \url{https://github.com/nextcloud/android} & AGPLv3 \\ - Tiny Tiny RSS logo & \url{https://gitlab.com/derSchabi/tttrsss} & GPLv3 \\ - I2P logo & \url{https://github.com/i2p/i2p.android.base} & Apache-2.0 \\ - Orbot logo & \url{https://gitweb.torproject.org/orbot.git} & BSD \\ - F-Droid logo & \url{https://gitlab.com/fdroid/fdroidclient} & GPLv3 \\ - andOTP logo & \url{https://github.com/andOTP/andOTP} & MIT \\ - Shaarlier logo & \url{https://github.com/dimtion/Shaarlier} & GPLv3 \\ - wallabag logo & \url{https://github.com/wallabag/android-app} & GPLv3 \\ - OpenKeychain logo & \url{https://github.com/open-keychain/open-keychain} & GPLv3 \\ - EteSync logo & \url{https://github.com/etesync/android} & GPLv3 \\ - Syncthing logo & \url{https://github.com/syncthing/syncthing-android} & MPLv2 \\ - Briar logo & \url{https://code.briarproject.org/briar/briar} & GPLv3 \\ - \end{tabular} + {\scriptsize + \begin{tabular}{l | l | l} + item & source & license \\ + \hline + K-9 Mail logo & \url{https://github.com/k9mail/k-9} & Apache-2.0 \\ + OsmAnd logo & \url{https://github.com/osmandapp/Osmand} & CC-BY-NC-ND 4.0 \\ + Nextcloud logo & \url{https://github.com/nextcloud/android} & AGPLv3 \\ + Tiny Tiny RSS logo & \url{https://gitlab.com/derSchabi/tttrsss} & GPLv3 \\ + I2P logo & \url{https://github.com/i2p/i2p.android.base} & Apache-2.0 \\ + Orbot logo & \url{https://gitweb.torproject.org/orbot.git} & BSD \\ + F-Droid logo & \url{https://gitlab.com/fdroid/fdroidclient} & GPLv3 \\ + andOTP logo & \url{https://github.com/andOTP/andOTP} & MIT \\ + Shaarlier logo & \url{https://github.com/dimtion/Shaarlier} & GPLv3 \\ + wallabag logo & \url{https://github.com/wallabag/android-app} & GPLv3 \\ + OpenKeychain logo & \url{https://github.com/open-keychain/open-keychain} & GPLv3 \\ + EteSync logo & \url{https://github.com/etesync/android} & GPLv3 \\ + Syncthing logo & \url{https://github.com/syncthing/syncthing-android} & MPLv2 \\ + Briar logo & \url{https://code.briarproject.org/briar/briar} & GPLv3 \\ + \end{tabular} + } \end{frame} \begin{frame} \frametitle{Licenses (II)} - \begin{tabular}{>{\scriptsize}l | >{\scriptsize}l | >{\scriptsize}l} - item & source & license \\ - \hline - Conversations logo & \url{https://github.com/siacs/Conversations} & GPLv3 \\ - Signal logo & \url{https://github.com/signalapp/Signal-Android} & GPLv3 \\ - Silence logo & \url{https://git.silence.dev/Silence/Silence-Android} & GPLv3 \\ - Tinc App logo & \url{https://github.com/pacien/tincapp} & GPLv3 \\ - KeePass DX logo & \url{https://github.com/Kunzisoft/KeePassDX} & GPLv3 \\ - dandelion* logo & \url{https://github.com/gsantner/dandelion} & GPLv3 \\ - Nomad logo & \url{https://framagit.org/disroot/AndHub} & GPLv3 \\ - Tusky logo & \url{https://github.com/tuskyapp/Tusky} & GPLv3 \\ - Movim logo & \url{https://github.com/movim/movim_android} & AGPLv3 \\ - Jami logo & \url{https://git.jami.net/savoirfairelinux/ring-client-android} & GPLv3 \\ - Bitmask logo & \url{https://0xacab.org/leap/bitmask_android} & GPLv3 \\ - WireGuard logo & \url{https://git.zx2c4.com/wireguard-android} & Apache-2.0 \\ - Fennec F-Droid logo & \url{https://hg.mozilla.org/releases/mozilla-esr68} & MPL-2.0 \\ - Tor Browser logo & \url{https://gitweb.torproject.org/tor-browser.git} & MPL-2.0 \\ - \end{tabular} + {\scriptsize + \begin{tabular}{l | l | l} + item & source & license \\ + \hline + Conversations logo & \url{https://github.com/siacs/Conversations} & GPLv3 \\ + Signal logo & \url{https://github.com/signalapp/Signal-Android} & GPLv3 \\ + Silence logo & \url{https://git.silence.dev/Silence/Silence-Android} & GPLv3 \\ + Tinc App logo & \url{https://github.com/pacien/tincapp} & GPLv3 \\ + KeePass DX logo & \url{https://github.com/Kunzisoft/KeePassDX} & GPLv3 \\ + dandelion* logo & \url{https://github.com/gsantner/dandelion} & GPLv3 \\ + Nomad logo & \url{https://framagit.org/disroot/AndHub} & GPLv3 \\ + Tusky logo & \url{https://github.com/tuskyapp/Tusky} & GPLv3 \\ + Movim logo & \url{https://github.com/movim/movim_android} & AGPLv3 \\ + Jami logo & \url{https://git.jami.net/savoirfairelinux/ring-client-android} & GPLv3 \\ + Bitmask logo & \url{https://0xacab.org/leap/bitmask_android} & GPLv3 \\ + WireGuard logo & \url{https://git.zx2c4.com/wireguard-android} & Apache-2.0 \\ + Fennec F-Droid logo & \url{https://hg.mozilla.org/releases/mozilla-esr68} & MPL-2.0 \\ + Tor Browser logo & \url{https://gitweb.torproject.org/tor-browser.git} & MPL-2.0 \\ + \end{tabular} + } \end{frame} \begin{frame} \frametitle{Licenses (II)} - \begin{tabular}{>{\scriptsize}l | >{\scriptsize}l | >{\scriptsize}l} - item & source & license \\ - \hline - Thorium logo & \url{https://github.com/sschueller/peertube-android} & AGPLv3 \\ - WebKit logo & \url{https://en.wikipedia.org/wiki/File:WebKit_logo_(2015).svg} & non-free \\ - Chromium logo & \url{https://commons.wikimedia.org/wiki/File:Chromium_11_Logo.svg} & CC-BY 2.5 \\ - Replicant logo & \url{https://ftp.osuosl.org/pub/replicant/artwork/replicant_artwork.tar.gz} & CC-BY-SA 3.0 \\ - Guix logo & \url{https://git.savannah.gnu.org/cgit/guix/guix-artwork.git/} & CC-BY-SA 4.0 \\ - Bromite logo & \url{https://github.com/bromite/bromite.github.io} & GPLv3 \\ - Iridium logo & \url{https://github.com/iridium-browser/artwork} & non-free \\ - Debian logo & \url{https://www.debian.org/logos/} & CC-BY-SA 3.0 \\ - Unobtainium logo & \url{https://gitlab.com/thermatk/Unobtainium} & BSD \\ - everything else & this slideshow & CC BY-SA 4.0 - \end{tabular} + {\scriptsize + \begin{tabular}{l | l | l} + item & source & license \\ + \hline + Thorium logo & \url{https://github.com/sschueller/peertube-android} & AGPLv3 \\ + WebKit logo & \url{https://en.wikipedia.org/wiki/File:WebKit_logo_(2015).svg} & non-free \\ + Chromium logo & \url{https://commons.wikimedia.org/wiki/File:Chromium_11_Logo.svg} & CC-BY 2.5 \\ + Replicant logo & \url{https://redmine.replicant.us/projects/replicant/wiki/Artwork} & CC-BY-SA 3.0 \\ + Guix logo & \url{https://git.savannah.gnu.org/cgit/guix/guix-artwork.git/} & CC-BY-SA 4.0 \\ + Bromite logo & \url{https://github.com/bromite/bromite.github.io} & GPLv3 \\ + Iridium logo & \url{https://github.com/iridium-browser/artwork} & non-free \\ + Debian logo & \url{https://www.debian.org/logos/} & CC-BY-SA 3.0 \\ + Unobtainium logo & \url{https://gitlab.com/thermatk/Unobtainium} & BSD \\ + GeckoView logo & \url{https://github.com/mozilla/geckoview} & non-free \\ + everything else & this slideshow & CC BY-SA 4.0 + \end{tabular} + } \end{frame} \end{document} -- cgit v1.2.3